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












