Как процедурная генерация окружения спасает художников во время разработки
На связи Александр, технический художник студии WATT. Сегодня расскажу о том, как мы делаем процедурную генерацию домов в игре GRIMPS.
Одной из самых трудозатратных частей разработки является создание окружения. Отрисовка и сборка контента занимает огромное количество времени, поэтому мы решили активно использовать процедурную генерацию, чтобы ускорить производство и снизить нагрузку на арт-отдел.
В GRIMPS мы применяем систему PCG (Procedural Content Generation) в Unreal Engine. Как это работает? С помощью нодовой системы мы создаём алгоритм, который размещает точки в пространстве. К этим точкам затем привязываются различные модули — стены, окна, двери, а также детали вроде кондиционеров или водосточных труб.
Такой подход позволяет не только быстро собирать здания, но и оптимизировать сцену. Движок объединяет одинаковые элементы и рендерит их как единый объект, что экономит память и ресурсы. В итоге дом, который вручную собирался бы несколько дней, мы создаем буквально за пару минут, просто меняя параметры в панели генератора: размеры, цвет, декор и другие настройки.
При этом каждое здание выглядит по-разному: художник ставит генератор на сцену, настраивает параметры — и получает дом нужного размера и стиля.
А теперь немного технической информации
В основе генератора лежит сетка точек, задающая структуру здания. Сначала создаётся базовая сетка с заданным расстоянием между точками. Затем алгоритм удаляет внутренние точки, оставляя только точки по периметру — именно они используются для построения стен.
После этого начинается фильтрация точек:
- выделяются углы, для которых используются отдельные меши
- распределяются точки для стен, окон и дверей
- добавляются уникальные элементы вроде окон лестничной клетки
Например, у хрущёвок мы используем простой паттерн: каждый пятый модуль по горизонтали становится дверью. Это позволяет быстро создать узнаваемую структуру здания.Для разных сторон здания используются отдельные правила:
Передняя сторона здания
- используется основной паттерн с дверями
- вокруг дверей формируются дополнительные модули стен
Задняя сторона
- двери не используются
- на их месте размещаются окна лестничной клетки
Боковые стены
- крайние точки становятся глухими стенами
- остальные точки заполняются окнами
Далее сетка дублируется по высоте, формируя этажи. Алгоритм отдельно обрабатывает:
- первый этаж
- средние этажи
- верхний этаж
На основе атрибутов точки превращаются в конкретные элементы — окна, стены, двери или карнизы крыши. Дополнительно создаются точки для мелких деталей: водосточных труб, кондиционеров и других элементов.
Для разных типов зданий алгоритм немного отличается. Например, у строительных площадок добавляются внутренние стены, а также отдельные настройки для размещения окон и заборов.
В следующих девлогах расскажем ещё больше о том, как создаётся мир игры.
Добавляйте GRIMPS в вишлист:
https://store.steampowered.com/app/3297800/GRIMPS/
Присоединяйтесь к нашему дискорд серверу и можете обсудить игру лично с разработчиками:https://discord.gg/DazDMWa8mm