Поменяйте местами два полупрозрачных слоя — итоговый цвет изменится
Возьмите любой редактор со слоями: два цветных слоя, обоим опустите непрозрачность до половины, наложите один на другой. Теперь поменяйте их местами. Перекрытие сменило цвет. Слои те же, прозрачность та же. С непрозрачными слоями так и должно быть: кто сверху, того и видно. Но полупрозрачные обещают симметрию — смешали же пополам? Вот пополам и не получилось.
Дело в том, что смешивание — не усреднение, а делёж пикселя по очереди. Прозрачность слоя — на самом деле его доля: какая часть пикселя им накрыта. Верхний слой забирает свою долю целиком, нижнему достаётся его доля от остатка: оба просили половину, но верхнему ушла половина пикселя, а нижнему — половина оставшегося, четверть. Несимметрично по построению, какие доли ни выставляй. Эту арифметику формализовали Томас Портер и Том Дафф в 1984-м: оператор over, и он прячется за словом «прозрачность» почти везде — слои редактора, плашки интерфейсов, стекло и дым в играх.
Собственно, вывод: у прозрачности есть и важен порядок наложения. В редакторе порядок задаёт панель слоёв. В игре панели нет: «сверху» оказывается тот, кто нарисован позже, — и порядок отрисовки начинает менять картинку. Что движок делает, чтобы очередь совпала с глубиной сцены, и что видно в кадре, когда они разошлись, — разберём в пятницу.
Присмотритесь к спрайту дыма или кусту на светлом небе: по краю часто идёт тонкая тёмная кайма — цвет, которого нет ни в текстуре, ни в сцене, и чем дальше объект от камеры, тем она заметнее. Откуда при смешивании двух цветов берётся третий?
#devmath #графика #математика #рендер #прозрачность #gamedev
Возьмите любой редактор со слоями: два цветных слоя, обоим опустите непрозрачность до половины, наложите один на другой. Теперь поменяйте их местами. Перекрытие сменило цвет. Слои те же, прозрачность та же. С непрозрачными слоями так и должно быть: кто сверху, того и видно. Но полупрозрачные обещают симметрию — смешали же пополам? Вот пополам и не получилось.
Дело в том, что смешивание — не усреднение, а делёж пикселя по очереди. Прозрачность слоя — на самом деле его доля: какая часть пикселя им накрыта. Верхний слой забирает свою долю целиком, нижнему достаётся его доля от остатка: оба просили половину, но верхнему ушла половина пикселя, а нижнему — половина оставшегося, четверть. Несимметрично по построению, какие доли ни выставляй. Эту арифметику формализовали Томас Портер и Том Дафф в 1984-м: оператор over, и он прячется за словом «прозрачность» почти везде — слои редактора, плашки интерфейсов, стекло и дым в играх.
Собственно, вывод: у прозрачности есть и важен порядок наложения. В редакторе порядок задаёт панель слоёв. В игре панели нет: «сверху» оказывается тот, кто нарисован позже, — и порядок отрисовки начинает менять картинку. Что движок делает, чтобы очередь совпала с глубиной сцены, и что видно в кадре, когда они разошлись, — разберём в пятницу.
Присмотритесь к спрайту дыма или кусту на светлом небе: по краю часто идёт тонкая тёмная кайма — цвет, которого нет ни в текстуре, ни в сцене, и чем дальше объект от камеры, тем она заметнее. Откуда при смешивании двух цветов берётся третий?
#devmath #графика #математика #рендер #прозрачность #gamedev
🔥7👀3
Что такое DrawCall
https://youtube.com/shorts/pnscoCR3lYY?si=BW8UFeLrGyWo4T6J
Так как каждую статью читать минимум час — решил нарезать тезисы и интересные факты статей на отдельные видосы с инфографиками. Чтобы те же темы можно было изучить в более простом формате с инфографиками. И вот первая проба пера.
Видеокарта в вашем кадре может вообще ничего не делать — а в игре слайдшоу.
По сути draw call — это команда «нарисуй вот этот меш вот этим материалом». Рисует видеокарта, а выписывает её процессор: собрать состояние, отдать драйверу на проверку и перевод, положить в очередь.
#геймдев #рендеринг #оптимизация #drawcall #devmath
https://youtube.com/shorts/pnscoCR3lYY?si=BW8UFeLrGyWo4T6J
Так как каждую статью читать минимум час — решил нарезать тезисы и интересные факты статей на отдельные видосы с инфографиками. Чтобы те же темы можно было изучить в более простом формате с инфографиками. И вот первая проба пера.
Видеокарта в вашем кадре может вообще ничего не делать — а в игре слайдшоу.
По сути draw call — это команда «нарисуй вот этот меш вот этим материалом». Рисует видеокарта, а выписывает её процессор: собрать состояние, отдать драйверу на проверку и перевод, положить в очередь.
#геймдев #рендеринг #оптимизация #drawcall #devmath
🔥8
Куда исчезают листья
Отъедьте камерой от дерева в игре, где листва нарисована через alpha test: вблизи крона плотная, к горизонту от неё остаются ветки и десяток листьев. Похоже на LOD? LOD тут может быть ни при чём.
Alpha test — это порог: альфа ниже 0.5 — фрагмента не существует, выше — он непрозрачный. Возьмите на кромке листа четвёрку текселей: один плотный с альфой 0.95 и три почти пустых по 0.05. Порог проходит один из четырёх, покрытие 25%. Мип — это усреднение: следующий уровень свернёт четвёрку в тексель с альфой 0.275, и тест он уже не проходит. Покрытие — ноль. Лист исчез не потому, что стал мелким: усреднение утащило его альфу под порог.
Лечится на импорте: каждому мипу подбирают свой множитель альфы, возвращающий исходное покрытие. В Unity это галочка Preserve Coverage, по умолчанию выключенная, и поле Alpha Cutoff рядом — оно обязано совпадать с порогом в вашем материале.
#геймдев #графика #математика #рендер #прозрачность #gamedev
Отъедьте камерой от дерева в игре, где листва нарисована через alpha test: вблизи крона плотная, к горизонту от неё остаются ветки и десяток листьев. Похоже на LOD? LOD тут может быть ни при чём.
Alpha test — это порог: альфа ниже 0.5 — фрагмента не существует, выше — он непрозрачный. Возьмите на кромке листа четвёрку текселей: один плотный с альфой 0.95 и три почти пустых по 0.05. Порог проходит один из четырёх, покрытие 25%. Мип — это усреднение: следующий уровень свернёт четвёрку в тексель с альфой 0.275, и тест он уже не проходит. Покрытие — ноль. Лист исчез не потому, что стал мелким: усреднение утащило его альфу под порог.
Лечится на импорте: каждому мипу подбирают свой множитель альфы, возвращающий исходное покрытие. В Unity это галочка Preserve Coverage, по умолчанию выключенная, и поле Alpha Cutoff рядом — оно обязано совпадать с порогом в вашем материале.
#геймдев #графика #математика #рендер #прозрачность #gamedev
🔥7
Стекло против z-буфера: alpha, порядок и блендинг
https://dev-math.ru/articles/alpha/
Мы постепенно подбираемся к финальным темам серии статей про рендер. Сегодня самая противная вещь во всей реалтайм графике — прозрачность.
Без неё все сильно проще, но как же мы будем жить без стекол?
В общем в статье разобраны:
- что такое альфа на самом деле;
- оператор over;
- что происходит с z-буффером;
- что делает premultiplied alpha;
И так далее.
Читайте, делитесь с друзьями и ставьте 🔥 — это мотивирует таки добить мой бесплатный учебник по рендеру до конца :)
#devmath #renderpipeline #alpha
https://dev-math.ru/articles/alpha/
Мы постепенно подбираемся к финальным темам серии статей про рендер. Сегодня самая противная вещь во всей реалтайм графике — прозрачность.
Без неё все сильно проще, но как же мы будем жить без стекол?
В общем в статье разобраны:
- что такое альфа на самом деле;
- оператор over;
- что происходит с z-буффером;
- что делает premultiplied alpha;
И так далее.
Читайте, делитесь с друзьями и ставьте 🔥 — это мотивирует таки добить мой бесплатный учебник по рендеру до конца :)
#devmath #renderpipeline #alpha
🔥6
Шина видеокарты и fps
https://youtube.com/shorts/39vq_Y3LPEs?si=kHte0rGuj7kpavSu
Продолжаю экспериментировать с форматом коротких видео.
Видеокарта считает тысячами потоков разом — а байты к этим ядрам ещё надо провезти по шине через кэши.
Разбор целиком — в статье про путь одного draw call.
#компьютернаяграфика #оптимизация #gpu #геймдев #devmath
https://youtube.com/shorts/39vq_Y3LPEs?si=kHte0rGuj7kpavSu
Продолжаю экспериментировать с форматом коротких видео.
Видеокарта считает тысячами потоков разом — а байты к этим ядрам ещё надо провезти по шине через кэши.
Разбор целиком — в статье про путь одного draw call.
#компьютернаяграфика #оптимизация #gpu #геймдев #devmath
YouTube
Шина видеокарты и fps
Видеокарта считает тысячами потоков разом — а байты к этим ядрам ещё надо провезти по шине через кэши.
Разбор целиком — в статье про путь одного draw call, ссылка в профиле.
#компьютернаяграфика #оптимизация #gpu #геймдев #devmath
Разбор целиком — в статье про путь одного draw call, ссылка в профиле.
#компьютернаяграфика #оптимизация #gpu #геймдев #devmath
🔥3❤1👎1
Постобработка не знает, что у вас в сцене
Осталось две темы цикла про рендеру в 12 недель. Тема этой недели — постобработка. И следующей GI. Можно ещё конечно трассировку пути добавить, как финал. Но пока думаю, так как после можно будет перейти уже к циклу по математике в геймдизайне. Итак, начнем с базы пост обработки.
Выкиньте с уровня всё: пустая комната, одна стена в кадре. Боке, размытие в движении и тонмаппинг будут стоить столько же, сколько стоили в лесу.
Дело в том, что после последнего нарисованного объекта кадр становится обычной текстурой: движок рисует прямоугольник во весь экран, и шейдер отрабатывает попиксельно. Что под ним было — стена, куст, небо — шейдер не знает.
Хорхе Хименес показывал на SIGGRAPH 2014 замеры Advanced Warfare на Xbox One: боке — 1.27 мс. При 60 fps на кадр отпущено 16.7 мс — под восемь процентов бюджета за один эффект, хоть в стену упритесь, хоть на панораму смотрите.
#геймдев #графика #математика #рендер #постобработка #gamedev
Осталось две темы цикла про рендеру в 12 недель. Тема этой недели — постобработка. И следующей GI. Можно ещё конечно трассировку пути добавить, как финал. Но пока думаю, так как после можно будет перейти уже к циклу по математике в геймдизайне. Итак, начнем с базы пост обработки.
Выкиньте с уровня всё: пустая комната, одна стена в кадре. Боке, размытие в движении и тонмаппинг будут стоить столько же, сколько стоили в лесу.
Дело в том, что после последнего нарисованного объекта кадр становится обычной текстурой: движок рисует прямоугольник во весь экран, и шейдер отрабатывает попиксельно. Что под ним было — стена, куст, небо — шейдер не знает.
Хорхе Хименес показывал на SIGGRAPH 2014 замеры Advanced Warfare на Xbox One: боке — 1.27 мс. При 60 fps на кадр отпущено 16.7 мс — под восемь процентов бюджета за один эффект, хоть в стену упритесь, хоть на панораму смотрите.
#геймдев #графика #математика #рендер #постобработка #gamedev
🔥4
Media is too big
VIEW IN TELEGRAM
Решил изменить стиль роликов и голос диктора
Попробовал свой голос — не то. А в таком формате будет думаю сильно лучше и познавательнее. Собственно в первых роликах на этой неделе начну рассказывать про математику в геймдизайне.
#новости
Попробовал свой голос — не то. А в таком формате будет думаю сильно лучше и познавательнее. Собственно в первых роликах на этой неделе начну рассказывать про математику в геймдизайне.
#новости
🔥6
Разные сорта алиасинга
Вы наверняка слышали про алиасинг (а скорее даже про анти-алиасинг), но он бывает разный и правится по-разному.
Алиасинг на контуре объекта
Первый тип. Это классическая лесенка на диагональных линиях. Возникает он на внешних границах объекта где он перекрывает фон. Контур объекта — это резкий перепад цвета или яркости между объектом и фоном. При дискретизации на пиксельной сетке этот резкий переход часто попадает внутрь пикселя, и алгоритм вынужден выбирать что-то одно: цвет объекта или цвет фона. В результате линия границы получается негладкой, а "рваной".
Для сглаживания границ используются методы, вроде MSAA, чтобы вычислить правильный промежуточный цвет на границе.
Алиасинг на линиях поверхности
Второй тип. Здесь речь идет не о границе объекта, а о линиях, которые лежат на его поверхности. Алиасинг проявляется не на краю объекта, а на самой линии, которая нарисована поверх текстуры или цвета поверхности. Эти линии могут "дергаться", мерцать или иметь рваные края, даже если сама поверхность выглядит гладкой.
Тут для сглаживания техники посложнее. Сузить динамический диапазон перед усреднением (в Advanced Warfare отдельным пунктом гасили «светлячков»); не пускать roughness к нулю — Frostbite подпирает её снизу именно ради этого (Filament).
Алиасинг на альфа тесте
Третий тип. Который часто путают с первым. Кромка листвы накладывается на фон проступая через альфа тест.
Полутонов там нет по построению, MSAA их не придумает, пока не включён alpha-to-coverage. Про это было в предыдущей статье.
Что и как чинится подробнее разберем в пятницу.
#msaa #aliasing #devmath
Вы наверняка слышали про алиасинг (а скорее даже про анти-алиасинг), но он бывает разный и правится по-разному.
Алиасинг на контуре объекта
Первый тип. Это классическая лесенка на диагональных линиях. Возникает он на внешних границах объекта где он перекрывает фон. Контур объекта — это резкий перепад цвета или яркости между объектом и фоном. При дискретизации на пиксельной сетке этот резкий переход часто попадает внутрь пикселя, и алгоритм вынужден выбирать что-то одно: цвет объекта или цвет фона. В результате линия границы получается негладкой, а "рваной".
Для сглаживания границ используются методы, вроде MSAA, чтобы вычислить правильный промежуточный цвет на границе.
Алиасинг на линиях поверхности
Второй тип. Здесь речь идет не о границе объекта, а о линиях, которые лежат на его поверхности. Алиасинг проявляется не на краю объекта, а на самой линии, которая нарисована поверх текстуры или цвета поверхности. Эти линии могут "дергаться", мерцать или иметь рваные края, даже если сама поверхность выглядит гладкой.
Тут для сглаживания техники посложнее. Сузить динамический диапазон перед усреднением (в Advanced Warfare отдельным пунктом гасили «светлячков»); не пускать roughness к нулю — Frostbite подпирает её снизу именно ради этого (Filament).
Алиасинг на альфа тесте
Третий тип. Который часто путают с первым. Кромка листвы накладывается на фон проступая через альфа тест.
Полутонов там нет по построению, MSAA их не придумает, пока не включён alpha-to-coverage. Про это было в предыдущей статье.
Что и как чинится подробнее разберем в пятницу.
#msaa #aliasing #devmath
🔥3
Экспонента в шкале опыта
https://youtube.com/shorts/tp4TONz0wok?si=1B9zEIZ7qFnK7y8S
Почему шкала опыта в играх экспоненциальная? Всё в новом ролике. В новом формате. Думаю так и воспринимается лучше и выглядит интереснее.
#devmath #геймдев #геймдизайн #математика #прогрессия
https://youtube.com/shorts/tp4TONz0wok?si=1B9zEIZ7qFnK7y8S
Почему шкала опыта в играх экспоненциальная? Всё в новом ролике. В новом формате. Думаю так и воспринимается лучше и выглядит интереснее.
#devmath #геймдев #геймдизайн #математика #прогрессия
YouTube
Экспонента в шкале опыта #devmath #геймдев #геймдизайн #математика #прогрессия
Почему шкала опыта в играх экспоненциальная? Потому что линейная ломается с двух концов сразу: либо начальные уровни набираются слишком медленно, либо поздние слишком быстро.
Экспонента чинит и то, и другое. В начале уровень падает каждые пять минут — быстрый…
Экспонента чинит и то, и другое. В начале уровень падает каждые пять минут — быстрый…
🔥4👍1👏1
Целых две статьи по геймдизайну
Для начинающих. Это не отменяет доработку цикла рендера, но с тем как интересен всем геймдизайн захотелось ускорится и начать добавлять на сайт и геймдизайн. А начинать лучше всегда с самых основ.
Что такое геймдизайн? — вводная для тех, кто только начинает делать игры: что проектирует геймдизайнер и из чего состоит ремесло — core loop, механики, экономика и числа, обучение игрока, левелдизайн.
Что почитать начинающему геймдизайнеру? — разбор книг по геймдизайну для тех, кто начинает: с каких двух начинать, что брать под конкретную задачу — ощущение управления, левелдизайн, баланс.
Я что-то начал со сложного в начале, в геймдизайне тоже много интересной математики, которую можно разобрать. Так что на этой неделе постараюсь добить статьи по рендеру и к новой теме :)
Ну и не выкладывал чтобы не спамить, ну и новый шортс про Броню и убывающую отдачу.
#devmath #геймдизайн
Для начинающих. Это не отменяет доработку цикла рендера, но с тем как интересен всем геймдизайн захотелось ускорится и начать добавлять на сайт и геймдизайн. А начинать лучше всегда с самых основ.
Что такое геймдизайн? — вводная для тех, кто только начинает делать игры: что проектирует геймдизайнер и из чего состоит ремесло — core loop, механики, экономика и числа, обучение игрока, левелдизайн.
Что почитать начинающему геймдизайнеру? — разбор книг по геймдизайну для тех, кто начинает: с каких двух начинать, что брать под конкретную задачу — ощущение управления, левелдизайн, баланс.
Я что-то начал со сложного в начале, в геймдизайне тоже много интересной математики, которую можно разобрать. Так что на этой неделе постараюсь добить статьи по рендеру и к новой теме :)
Ну и не выкладывал чтобы не спамить, ну и новый шортс про Броню и убывающую отдачу.
#devmath #геймдизайн
🔥5👍1
Почему в Overwatch броня вычитает фиксированное значение урона?
https://youtube.com/shorts/QQiAwGy6wF0?si=T41m9A-OubXqXo7u
Геймдизайн — это мастерство создания интересных правил. Процентное снижение урона ощущается абстрактно: цель «стала не такой пробиваемой», но убивать её вы будете той же ротацией скиллов — как в большинстве RPG.
Flat Damage Reduction работает иначе: она вынуждает менять оружие. Против брони эффективно только то, что наносит максимум урона за один выстрел — так появляется тактический слой, и Overwatch поощряет смену героев по ходу матча, а не игру одним персонажем.
Это же убивает bunker composition — связку вроде Orisa + Bastion + Baptiste, где щит Orisa на низком кулдауне прикрывал высокий урон Bastion, а команда «окапывалась» на точке, выкашивая всех в зоне поражения. После изменения брони и лимита «один танк на команду» тактика перестала работать.
Заодно фиксированная броня обесценивает спам-тактики: быстрое оружие с низким уроном за выстрел становится против неё бесполезным — стрелять очередью в щит Райнхардта бессмысленно. Чтобы убить танка, нужно целиться в голову медленными, точными, скилл-ориентированными выстрелами.
#overwatch #devmath #геймдизайн #gamedesign #игры
https://youtube.com/shorts/QQiAwGy6wF0?si=T41m9A-OubXqXo7u
Геймдизайн — это мастерство создания интересных правил. Процентное снижение урона ощущается абстрактно: цель «стала не такой пробиваемой», но убивать её вы будете той же ротацией скиллов — как в большинстве RPG.
Flat Damage Reduction работает иначе: она вынуждает менять оружие. Против брони эффективно только то, что наносит максимум урона за один выстрел — так появляется тактический слой, и Overwatch поощряет смену героев по ходу матча, а не игру одним персонажем.
Это же убивает bunker composition — связку вроде Orisa + Bastion + Baptiste, где щит Orisa на низком кулдауне прикрывал высокий урон Bastion, а команда «окапывалась» на точке, выкашивая всех в зоне поражения. После изменения брони и лимита «один танк на команду» тактика перестала работать.
Заодно фиксированная броня обесценивает спам-тактики: быстрое оружие с низким уроном за выстрел становится против неё бесполезным — стрелять очередью в щит Райнхардта бессмысленно. Чтобы убить танка, нужно целиться в голову медленными, точными, скилл-ориентированными выстрелами.
#overwatch #devmath #геймдизайн #gamedesign #игры
🔥3
Путь кадра — Финал
Я решил больше писать про геймдизайн со следующей недели. Но нужно же добить серию статей про рендер, чтобы не бросать на пол пути. Поэтому сегодня целых 3 статьи.
https://dev-math.ru/articles/postfx/ — Постобработка
https://dev-math.ru/articles/gi/ — Глобальное Освещение
https://dev-math.ru/articles/raytracing/ — Трассировка Лучей
И это уже выглядит как завершенная история, где я охватил все ключевые темы. Материал получился сложным, на одну статью нужно минут сорок, а всего их 13. И ещё там много прикольных дополнительных ссылок. Но для меня цель материал закрыл. Это последовательная история о том, как работает современный реалтайм рендер. Со ссылками на все нужные дополнительные материалы. И, пусть и с усилиями, они позволяют погрузится в тему рендеринга и +- понять, как оно вообще работает.
Материалы по геймдизайну попробую структурировать по проще, кусками поменьше, чтобы информация лучше и проще воспринималась. Там у меня много идей, в общем на следующей неделе будет много новинок.
#devmath #render
Я решил больше писать про геймдизайн со следующей недели. Но нужно же добить серию статей про рендер, чтобы не бросать на пол пути. Поэтому сегодня целых 3 статьи.
https://dev-math.ru/articles/postfx/ — Постобработка
https://dev-math.ru/articles/gi/ — Глобальное Освещение
https://dev-math.ru/articles/raytracing/ — Трассировка Лучей
И это уже выглядит как завершенная история, где я охватил все ключевые темы. Материал получился сложным, на одну статью нужно минут сорок, а всего их 13. И ещё там много прикольных дополнительных ссылок. Но для меня цель материал закрыл. Это последовательная история о том, как работает современный реалтайм рендер. Со ссылками на все нужные дополнительные материалы. И, пусть и с усилиями, они позволяют погрузится в тему рендеринга и +- понять, как оно вообще работает.
Материалы по геймдизайну попробую структурировать по проще, кусками поменьше, чтобы информация лучше и проще воспринималась. Там у меня много идей, в общем на следующей неделе будет много новинок.
#devmath #render
🔥9❤2
Подарите игроку первые уровни
https://youtube.com/shorts/hpCVembRSS4?si=0sSkQc-7dWArahXz
Новый ролик уже на канале. Про Эффект Подаренного Прогресса и почему в начале игры лучше дарить игроку уровни.
#devmath #gamedesign #progression
https://youtube.com/shorts/hpCVembRSS4?si=0sSkQc-7dWArahXz
Новый ролик уже на канале. Про Эффект Подаренного Прогресса и почему в начале игры лучше дарить игроку уровни.
#devmath #gamedesign #progression
YouTube
Уровни для игроков в подарок #devmath #gamedesign #прогрессия
Уровни со 2 по 5 ничего не значат в балансе — их лучше подарить игр...
🔥3
А начнём мы с Roguelike
Не хочется назначать временные рамки этой теме. Типа "разберем рогалики за неделю". Там есть о чём поболтать и много. Поэтому — как пойдет.
Лично я обожаю рогалики. Monster Train, Balatro и многие другие. А сколько всего я прошел в дороге куда-то. По сути у меня два любимых жанра стелс экшены и рогалики. И хочется начать именно со второго, так как я хочу разбирать вещи, которые сможет сделать человек в одиночку. "Как сделать интересный ААА?" — это отличный вопрос, но толку его разбирать, если в среднем ни у кого нет бюджетов делать ААА. А даже автор одиночка с современными инструментами может сделать действительно крутой рогалик (или более простые жанры до которых мы ещё доберемся).
Театр начинается с вешалки, а разговор о любом жанре будто бы хочется начать с истории.
Что любопытно до Rogue уже существовал данжен-краулер с похожими идеями — Beneath Apple Manor, которую Дон Уорт написал для Apple II и выпустил в 1978 году, на два года раньше Rogue. Но она была не такой известной, поэтому начало своё официально жанр берет с легендарной Rogue. Отсюда и название.
Игру создали Майкл Той и Гленн Уичман в Калифорнийском университете в Санта-Крузе, напрямую вдохновляясь Dungeons & Dragons и текстовым квестом Adventure. К проекту подключился Кен Арнольд, который незадолго до этого в Беркли написал библиотеку curses — набор инструментов для управления курсором на экране терминала, что и позволило рисовать подобие графики символами. Четвёртым в титрах значится Джон Лейн.
Rogue сразу задал формулу: процедурно генерируемые подземелья, необратимая смерть, пошаговый бой и всё это — псевдографикой ASCII, а целью было спуститься в подземелье за Амулетом Йендора, двигаясь по клетчатой сетке. Игру бесплатно раздавали вместе с университетским Unix-дистрибутивом BSD, и она мгновенно расползлась по компьютерным классам — по подсчётам самих авторов, суммарно на неё потратили около полутора миллиардов долларов машинного времени. С 1984 года те же Той, Уичман и Лейн через собственную компанию A.I. Design и при поддержке издателя Epyx выпустили и коммерческие версии — для Amiga, Atari ST, Macintosh, DOS и других систем.
В общем Roguelike (рогалик) — жанр игр с процедурно генерируемым миром и необратимой смертью персонажа: погиб — начинаешь новый забег с нуля в заново собранном мире, без возможности загрузить сохранение. А как эта формула становится интересной мы разберем дальше.
#devmath #история #gamedesign
Не хочется назначать временные рамки этой теме. Типа "разберем рогалики за неделю". Там есть о чём поболтать и много. Поэтому — как пойдет.
Лично я обожаю рогалики. Monster Train, Balatro и многие другие. А сколько всего я прошел в дороге куда-то. По сути у меня два любимых жанра стелс экшены и рогалики. И хочется начать именно со второго, так как я хочу разбирать вещи, которые сможет сделать человек в одиночку. "Как сделать интересный ААА?" — это отличный вопрос, но толку его разбирать, если в среднем ни у кого нет бюджетов делать ААА. А даже автор одиночка с современными инструментами может сделать действительно крутой рогалик (или более простые жанры до которых мы ещё доберемся).
Театр начинается с вешалки, а разговор о любом жанре будто бы хочется начать с истории.
Что любопытно до Rogue уже существовал данжен-краулер с похожими идеями — Beneath Apple Manor, которую Дон Уорт написал для Apple II и выпустил в 1978 году, на два года раньше Rogue. Но она была не такой известной, поэтому начало своё официально жанр берет с легендарной Rogue. Отсюда и название.
Игру создали Майкл Той и Гленн Уичман в Калифорнийском университете в Санта-Крузе, напрямую вдохновляясь Dungeons & Dragons и текстовым квестом Adventure. К проекту подключился Кен Арнольд, который незадолго до этого в Беркли написал библиотеку curses — набор инструментов для управления курсором на экране терминала, что и позволило рисовать подобие графики символами. Четвёртым в титрах значится Джон Лейн.
Rogue сразу задал формулу: процедурно генерируемые подземелья, необратимая смерть, пошаговый бой и всё это — псевдографикой ASCII, а целью было спуститься в подземелье за Амулетом Йендора, двигаясь по клетчатой сетке. Игру бесплатно раздавали вместе с университетским Unix-дистрибутивом BSD, и она мгновенно расползлась по компьютерным классам — по подсчётам самих авторов, суммарно на неё потратили около полутора миллиардов долларов машинного времени. С 1984 года те же Той, Уичман и Лейн через собственную компанию A.I. Design и при поддержке издателя Epyx выпустили и коммерческие версии — для Amiga, Atari ST, Macintosh, DOS и других систем.
В общем Roguelike (рогалик) — жанр игр с процедурно генерируемым миром и необратимой смертью персонажа: погиб — начинаешь новый забег с нуля в заново собранном мире, без возможности загрузить сохранение. А как эта формула становится интересной мы разберем дальше.
#devmath #история #gamedesign
🔥6❤1
Мой топ-5 рогаликов
Чтобы делать игры, нужно играть в игры — особенно геймдизайнерам. Это вырабатывает насмотренность, как и с артом: вдохновляешься механиками из других игр и заранее понимаешь, какие решения работают, а какие нет.
Геймдизайнер в первую очередь должен чувствовать темп, баланс и само ощущение игры — понимать, что интересно и почему, ведь не всё решается технически. Да, есть техники и рабочие формулы, но даже в них полно ручной настройки параметров, чтобы в итоге было весело.
Что ж, вот какие рогалики понравились мне больше всего:
Hades (I и II) — мой любимый экшн-рогалик. Перки, комнаты, прокачка оружия — в общем, всё, что я люблю. Зависал в нём неделями и на Switch, и на PlayStation. Формально главная фишка — сюжет, который раскрывается от забега к забегу. Но для меня первична механика, и в Hades она сделана блестяще: играется невероятно кайфово.
Balatro — карточный рогалик на механике декбилдинга: собираешь покерные комбинации и набираешь очки, а карты дают самые разные перки. Кайфовая игрушка с необычной механикой и идеальный компаньон для перелётов, когда хочется просто телепортироваться в другую точку. Ну а декбилдинг-механики я люблю в принципе.
Monster Train — тоже декбилдер, но со своим твистом: защищаешь этажи поезда, выбирая тактику под конкретный забег. Самобытный и увлекательный представитель жанра.
The Binding of Isaac: Rebirth — легендарная игра, каноничный пример жанра. Тут во главе угла сюжет, но и вариативность геймплея сделана очень круто.
Crypt of the NecroDancer — рогалик с ритм-механикой. Прикольно и необычно. А так как самая первая игра, которую я пытался делать, тоже была ритм-геймом, к этому жанру у меня тоже тёплые чувства.
Если приглядеться, все пять объединяет одно — предельно отточенное игровое ядро, ради которого хочется возвращаться снова и снова.
А какие рогалики добавили бы в топ вы? Возможно есть какие-то совсем нишевые, кто так сказать не вошел в этот список. Пишите в комментариях.
#devmath #roguelike #top
Чтобы делать игры, нужно играть в игры — особенно геймдизайнерам. Это вырабатывает насмотренность, как и с артом: вдохновляешься механиками из других игр и заранее понимаешь, какие решения работают, а какие нет.
Геймдизайнер в первую очередь должен чувствовать темп, баланс и само ощущение игры — понимать, что интересно и почему, ведь не всё решается технически. Да, есть техники и рабочие формулы, но даже в них полно ручной настройки параметров, чтобы в итоге было весело.
Что ж, вот какие рогалики понравились мне больше всего:
Hades (I и II) — мой любимый экшн-рогалик. Перки, комнаты, прокачка оружия — в общем, всё, что я люблю. Зависал в нём неделями и на Switch, и на PlayStation. Формально главная фишка — сюжет, который раскрывается от забега к забегу. Но для меня первична механика, и в Hades она сделана блестяще: играется невероятно кайфово.
Balatro — карточный рогалик на механике декбилдинга: собираешь покерные комбинации и набираешь очки, а карты дают самые разные перки. Кайфовая игрушка с необычной механикой и идеальный компаньон для перелётов, когда хочется просто телепортироваться в другую точку. Ну а декбилдинг-механики я люблю в принципе.
Monster Train — тоже декбилдер, но со своим твистом: защищаешь этажи поезда, выбирая тактику под конкретный забег. Самобытный и увлекательный представитель жанра.
The Binding of Isaac: Rebirth — легендарная игра, каноничный пример жанра. Тут во главе угла сюжет, но и вариативность геймплея сделана очень круто.
Crypt of the NecroDancer — рогалик с ритм-механикой. Прикольно и необычно. А так как самая первая игра, которую я пытался делать, тоже была ритм-геймом, к этому жанру у меня тоже тёплые чувства.
Если приглядеться, все пять объединяет одно — предельно отточенное игровое ядро, ради которого хочется возвращаться снова и снова.
А какие рогалики добавили бы в топ вы? Возможно есть какие-то совсем нишевые, кто так сказать не вошел в этот список. Пишите в комментариях.
#devmath #roguelike #top
🔥5
Что лучше: сила или выбор?
https://youtube.com/shorts/WZj18eg6kLw?si=B7nygNEzPc2Y_cqq
Благодаря необратимой смерти и отсутствия прямой прокачки персонажа рогалики как жанр обладают часто тремя прикольными свойствами для игроков. Точнее во многом проще выстраиваются из-за специфики жанра.
Атрибуция результата — прогресс в рогаликах организован таким образом, что он сильно смягчает ощущение гринда. У вас нет уровня, нет статов которые вы постоянно прокачиваете. Вы открываете больше перков, но в основном любая победа ощущается как заработанная собственным скиллом, а не тем что вы нагриндили прокачку. Если это выстроить правильно. Такая победа кажется более ценной.
Градиент Цели — во многих роуглайк играх вам видно что открыто и что осталось открыть. Чем больше вы открываете, тем больше накопленный прогресс, что влияет не удержание игрока. Но помимо этого интересный эффект это градиент цели. Чем ближе конец игры, тем активнее начинает играть игрок. Но для этого надо показывать сколько надо всего открыть.
Конкретность цели — вы замечали что в Balatro на новой колоде написано, что надо сделать чтобы её открыть. Это тоже важный крючок мотивации, причем не только в этом жанре. Но фишка рогаликов, что они держат цель предельно чёткой, а путь до неё непредсказуемым. Он позволяет достигать игроку конкретного и понятного результата каждый раз новым путём.
Поэтому ответ на вопрос «Что лучше: сила или выбор?» в рогаликах однозначно выбор. Это свойство жанра. Он обладает большой реиграбельностью так как у игрока не просто растут статы и он становится линейно сильнее. А так как появляется множество комбинаций выборов как дойти до финальной цели и с прогрессией разнообразие выборов становится больше.
А как сделать интересным путь, интересным выборы и вариативность тактик разберёмся дальше в будущих постах.
#devmath #roguelike
https://youtube.com/shorts/WZj18eg6kLw?si=B7nygNEzPc2Y_cqq
Благодаря необратимой смерти и отсутствия прямой прокачки персонажа рогалики как жанр обладают часто тремя прикольными свойствами для игроков. Точнее во многом проще выстраиваются из-за специфики жанра.
Атрибуция результата — прогресс в рогаликах организован таким образом, что он сильно смягчает ощущение гринда. У вас нет уровня, нет статов которые вы постоянно прокачиваете. Вы открываете больше перков, но в основном любая победа ощущается как заработанная собственным скиллом, а не тем что вы нагриндили прокачку. Если это выстроить правильно. Такая победа кажется более ценной.
Градиент Цели — во многих роуглайк играх вам видно что открыто и что осталось открыть. Чем больше вы открываете, тем больше накопленный прогресс, что влияет не удержание игрока. Но помимо этого интересный эффект это градиент цели. Чем ближе конец игры, тем активнее начинает играть игрок. Но для этого надо показывать сколько надо всего открыть.
Конкретность цели — вы замечали что в Balatro на новой колоде написано, что надо сделать чтобы её открыть. Это тоже важный крючок мотивации, причем не только в этом жанре. Но фишка рогаликов, что они держат цель предельно чёткой, а путь до неё непредсказуемым. Он позволяет достигать игроку конкретного и понятного результата каждый раз новым путём.
Поэтому ответ на вопрос «Что лучше: сила или выбор?» в рогаликах однозначно выбор. Это свойство жанра. Он обладает большой реиграбельностью так как у игрока не просто растут статы и он становится линейно сильнее. А так как появляется множество комбинаций выборов как дойти до финальной цели и с прогрессией разнообразие выборов становится больше.
А как сделать интересным путь, интересным выборы и вариативность тактик разберёмся дальше в будущих постах.
#devmath #roguelike
YouTube
Что лучше: сила или выбор? #devmath #meta #roguelike #isaac #gamefeel
Что бы вы хотели получить: силу или выбор? Для фанатов определенного жанра игр ответ очевиден.
В The Binding of Isaac: Rebirth за победу игрок получает не прокачку, а новые награды в комнатах. И работает в играх это интересным образом.
Называется это …
В The Binding of Isaac: Rebirth за победу игрок получает не прокачку, а новые награды в комнатах. И работает в играх это интересным образом.
Называется это …
🔥4
Что делает рогалик интересным
Я люблю себе собирать и распечатывать подобные картинки. Они позволяют держать фокус и помнить какие-то базовые тезисы о том что и зачем я делаю. Не только по разработке игр, а в целом. Или вешать их или ставить на обои рабочего стола.
В общем вот вам небольшой чек лист о том что можно проверять делая рогалик. Чтобы эта информация всегда могла бы быть перед глазами. На что обращать внимание и про что стоит не забыть.
Не забываем ставить🔥 если подобные инфографики интересны :)
Автор работает за классы.
#devmath #checklist #roguelike
Я люблю себе собирать и распечатывать подобные картинки. Они позволяют держать фокус и помнить какие-то базовые тезисы о том что и зачем я делаю. Не только по разработке игр, а в целом. Или вешать их или ставить на обои рабочего стола.
В общем вот вам небольшой чек лист о том что можно проверять делая рогалик. Чтобы эта информация всегда могла бы быть перед глазами. На что обращать внимание и про что стоит не забыть.
Не забываем ставить
Автор работает за классы.
#devmath #checklist #roguelike
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
Угадай патч
https://dev-math.ru/patch/
Сделал небольшой интерактивчик. Угадай патч. Можно угадать игру из которой патчноут и дату. Хочу со временем чуть усложнить и сделать повеселее, а пока можно просто попробовать угадать. Там каждый день будет меняться то, о какой игре и каком патче речь. Сможете угадать?
*Картинка сгенерирована не по сегодняшнему патчу и подсказкой не является :)*
#devmath #интерактив
https://dev-math.ru/patch/
Сделал небольшой интерактивчик. Угадай патч. Можно угадать игру из которой патчноут и дату. Хочу со временем чуть усложнить и сделать повеселее, а пока можно просто попробовать угадать. Там каждый день будет меняться то, о какой игре и каком патче речь. Сможете угадать?
*Картинка сгенерирована не по сегодняшнему патчу и подсказкой не является :)*
#devmath #интерактив
🔥4
А нужна ли математика?
Есть по сути два способа сделать игру. "На глаз" и "с крутыми инструментами". Строго говоря, игру можно сделать без математических инструментов. После релиза можно править косяки по аналитике и вносить правки патчами (кстати тоже не всегда, так как вы можете неправильно посмотреть и понерфить предмет, а он был оверпавер только в связке с другим из-за мультипликатора и сломать другие сборки персонажей, скажем).
Математика заранее помогает отслеживать:
1. Редкие события. Ломает игру не медианный ран, а один процент сборок. Чтобы встретить событие с вероятностью 1/500 руками, нужны месяцы; симулятору нужны минуты.
2. Позволяет смоделировать некоторые процессы и логику геймплея без аудитории.
3. Поиск аномалий. В роуглайках, скажем, какая пара предметов и синергии дают на порядок выше остальных. И это не всегда плохо, игроку может "везти", и это тоже часто используется, но для того чтобы знать, что аномалии есть и где они, — проще смоделировать, нежели бегать 10к забегов самому.
4. Можно ломать бесплатно. Меняя коэффициенты в модели, она не пожалуется, что "вы сломали игру". А выпуская патч с изменением баланса на живую аудиторию вслепую — вы узнаете о себе часто много нового.
Кстати говоря, в сингл-плеере это не так критично. Сломанный баланс не ухудшает опыт игрока, так как какая-то оверпавернутая комба не обидит компьютер, против которого мы играем. А когда компьютер почему-то слишком силен, может восприниматься просто хардкорной сложностью игры. Но в пвп дела обстоят иначе. Любой сильный дисбаланс вызывает много негатива и ломает игру. Поэтому в пвп чаще пользуются инструментами математического баланса.
Но математическое моделирование не серебряная пуля. Симулятор моделирует не игру, а ваше представление о ней. Слабое звено — модель игрока: он либо жадный по локальной эвристике, либо случайный, и оба не похожи на человека. Баланс, настроенный под бота, ломается о людей, которые ищут не то, что ищет бот. Win rate 25% может быть выстраданной победой, а может — скукой. Ну и, конечно, математические модели не находят того, чего нет в правилах. Эксплойты живут на стыке механики и реализации: неожиданный порядок выполнения, баг, взаимодействие, которое никто не закладывал.
У игр нет формальных доказанных теорем, как сделать что-то интересным. А при этом главный критерий оценки качества игры — в неё интересно играть. Математика предоставляет инструменты, чтобы построить это ощущение и не сломать его ненароком + улучшать там, где надо. А ощущение от игры вы подстраиваете всегда под свой геймплей самостоятельно. И если интуиция вырабатывается насмотренностью — надо просто играть в хорошие игры, то математика — это инструмент, изучив который, многое вы начинаете делать быстрее и проще.
P.S. Математика всё равно есть в любой вашей игре, потому что это не что-то, что надо "вносить". Сама по себе она всего лишь описывает и моделирует различные процессы. Поэтому крутую игру можно сделать и без неё, но с ней проще. Это по своей сути язык, на котором окружающий мир говорит с теми, кто этот язык понимает.
#devmath #gamefeel #math
Есть по сути два способа сделать игру. "На глаз" и "с крутыми инструментами". Строго говоря, игру можно сделать без математических инструментов. После релиза можно править косяки по аналитике и вносить правки патчами (кстати тоже не всегда, так как вы можете неправильно посмотреть и понерфить предмет, а он был оверпавер только в связке с другим из-за мультипликатора и сломать другие сборки персонажей, скажем).
Математика заранее помогает отслеживать:
1. Редкие события. Ломает игру не медианный ран, а один процент сборок. Чтобы встретить событие с вероятностью 1/500 руками, нужны месяцы; симулятору нужны минуты.
2. Позволяет смоделировать некоторые процессы и логику геймплея без аудитории.
3. Поиск аномалий. В роуглайках, скажем, какая пара предметов и синергии дают на порядок выше остальных. И это не всегда плохо, игроку может "везти", и это тоже часто используется, но для того чтобы знать, что аномалии есть и где они, — проще смоделировать, нежели бегать 10к забегов самому.
4. Можно ломать бесплатно. Меняя коэффициенты в модели, она не пожалуется, что "вы сломали игру". А выпуская патч с изменением баланса на живую аудиторию вслепую — вы узнаете о себе часто много нового.
Кстати говоря, в сингл-плеере это не так критично. Сломанный баланс не ухудшает опыт игрока, так как какая-то оверпавернутая комба не обидит компьютер, против которого мы играем. А когда компьютер почему-то слишком силен, может восприниматься просто хардкорной сложностью игры. Но в пвп дела обстоят иначе. Любой сильный дисбаланс вызывает много негатива и ломает игру. Поэтому в пвп чаще пользуются инструментами математического баланса.
Но математическое моделирование не серебряная пуля. Симулятор моделирует не игру, а ваше представление о ней. Слабое звено — модель игрока: он либо жадный по локальной эвристике, либо случайный, и оба не похожи на человека. Баланс, настроенный под бота, ломается о людей, которые ищут не то, что ищет бот. Win rate 25% может быть выстраданной победой, а может — скукой. Ну и, конечно, математические модели не находят того, чего нет в правилах. Эксплойты живут на стыке механики и реализации: неожиданный порядок выполнения, баг, взаимодействие, которое никто не закладывал.
У игр нет формальных доказанных теорем, как сделать что-то интересным. А при этом главный критерий оценки качества игры — в неё интересно играть. Математика предоставляет инструменты, чтобы построить это ощущение и не сломать его ненароком + улучшать там, где надо. А ощущение от игры вы подстраиваете всегда под свой геймплей самостоятельно. И если интуиция вырабатывается насмотренностью — надо просто играть в хорошие игры, то математика — это инструмент, изучив который, многое вы начинаете делать быстрее и проще.
P.S. Математика всё равно есть в любой вашей игре, потому что это не что-то, что надо "вносить". Сама по себе она всего лишь описывает и моделирует различные процессы. Поэтому крутую игру можно сделать и без неё, но с ней проще. Это по своей сути язык, на котором окружающий мир говорит с теми, кто этот язык понимает.
#devmath #gamefeel #math
🔥6😁2
Математика Balatro
https://www.mattgreer.dev/blog/balatro-score-growth/
Любопытный разбор: Matt Greer раскладывает рост счёта в Balatro на функции. Всё считается на одной двойке, сыгранной старшей картой: (5 + 2) × 1 = 7 очков, дальше r — номер раунда.
Wee Joker прибавляет по 8 фишек за раунд — это 8r + 7. Swashbuckler с Egg прибавляют по 3 множителя — 21r + 7. Цифры разные, класс один: прямая. А нужный счёт растёт каждый раунд, и колода на прямой за ним не поспевает — автор так и пишет, что линейный рост (или его отсутствие) это ранний сигнал спасать забег.
Качаем обе половины сразу — получается парабола. Pluto даёт старшей карте +10 фишек и +1 множителя, счёт становится 10r² + 17r + 7. Почти весь Balatro живёт здесь.
И тут собственно главное — про умножающих джокеров. Сколько растит Cavendish сам по себе? Нисколько. Он превращает 7 в 21 и на этом останавливается, а Hologram в одиночку растит счёт всего лишь линейно. Умножающие работают на чужом накоплении: Swashbuckler с Cavendish — это как три Swashbuckler'а, добавьте Card Sharp — как девять.
Экспонента начинается там, где номер раунда уезжает в показатель степени. Baseball Card даёт ×1.5 каждому необычному джокеру: берём по такому за раунд — и счёт растёт как 7 × 1.5ʳ. Разгоняется он медленно, связку Wee/Swashbuckler/Egg обходит только к 19-му раунду. Triboulet удваивает множитель за каждого сыгранного короля или даму, и каждый ретриггер удваивает ещё раз. Основание 2 вместо 1.5 выглядит мелочью — а на 24-м раунде это 7 340 039 очков против 23 283 у Baseball Card. В реальной руке автора множитель вырос в 2⁴⁰ раз, то есть больше чем в триллион. На взломанной колоде счёт дошёл до NaN: число стало настолько большим, что игра перестала его считать :)
Из практического — фишки и множитель надо держать поближе друг к другу: 1 × 100 это всего 100, а 50 × 50 — уже 2500.
В общем, джокер в магазине покупается не за числа на нём, а за класс роста, который он даёт колоде.
#devmath #balance #math #gamedesign #balatro
https://www.mattgreer.dev/blog/balatro-score-growth/
Любопытный разбор: Matt Greer раскладывает рост счёта в Balatro на функции. Всё считается на одной двойке, сыгранной старшей картой: (5 + 2) × 1 = 7 очков, дальше r — номер раунда.
Wee Joker прибавляет по 8 фишек за раунд — это 8r + 7. Swashbuckler с Egg прибавляют по 3 множителя — 21r + 7. Цифры разные, класс один: прямая. А нужный счёт растёт каждый раунд, и колода на прямой за ним не поспевает — автор так и пишет, что линейный рост (или его отсутствие) это ранний сигнал спасать забег.
Качаем обе половины сразу — получается парабола. Pluto даёт старшей карте +10 фишек и +1 множителя, счёт становится 10r² + 17r + 7. Почти весь Balatro живёт здесь.
И тут собственно главное — про умножающих джокеров. Сколько растит Cavendish сам по себе? Нисколько. Он превращает 7 в 21 и на этом останавливается, а Hologram в одиночку растит счёт всего лишь линейно. Умножающие работают на чужом накоплении: Swashbuckler с Cavendish — это как три Swashbuckler'а, добавьте Card Sharp — как девять.
Экспонента начинается там, где номер раунда уезжает в показатель степени. Baseball Card даёт ×1.5 каждому необычному джокеру: берём по такому за раунд — и счёт растёт как 7 × 1.5ʳ. Разгоняется он медленно, связку Wee/Swashbuckler/Egg обходит только к 19-му раунду. Triboulet удваивает множитель за каждого сыгранного короля или даму, и каждый ретриггер удваивает ещё раз. Основание 2 вместо 1.5 выглядит мелочью — а на 24-м раунде это 7 340 039 очков против 23 283 у Baseball Card. В реальной руке автора множитель вырос в 2⁴⁰ раз, то есть больше чем в триллион. На взломанной колоде счёт дошёл до NaN: число стало настолько большим, что игра перестала его считать :)
Из практического — фишки и множитель надо держать поближе друг к другу: 1 × 100 это всего 100, а 50 × 50 — уже 2500.
В общем, джокер в магазине покупается не за числа на нём, а за класс роста, который он даёт колоде.
#devmath #balance #math #gamedesign #balatro
🔥4❤🔥2✍2