Как процедурная генерация окружения спасает художников во время разработки

На связи Александр, технический художник студии WATT. Сегодня расскажу о том, как мы делаем процедурную генерацию домов в игре GRIMPS.

Как процедурная генерация окружения спасает художников во время разработки

Одной из самых трудозатратных частей разработки является создание окружения. Отрисовка и сборка контента занимает огромное количество времени, поэтому мы решили активно использовать процедурную генерацию, чтобы ускорить производство и снизить нагрузку на арт-отдел.

В GRIMPS мы применяем систему PCG (Procedural Content Generation) в Unreal Engine. Как это работает? С помощью нодовой системы мы создаём алгоритм, который размещает точки в пространстве. К этим точкам затем привязываются различные модули — стены, окна, двери, а также детали вроде кондиционеров или водосточных труб.

Как процедурная генерация окружения спасает художников во время разработки

Такой подход позволяет не только быстро собирать здания, но и оптимизировать сцену. Движок объединяет одинаковые элементы и рендерит их как единый объект, что экономит память и ресурсы. В итоге дом, который вручную собирался бы несколько дней, мы создаем буквально за пару минут, просто меняя параметры в панели генератора: размеры, цвет, декор и другие настройки.

При этом каждое здание выглядит по-разному: художник ставит генератор на сцену, настраивает параметры — и получает дом нужного размера и стиля.

А теперь немного технической информации

В основе генератора лежит сетка точек, задающая структуру здания. Сначала создаётся базовая сетка с заданным расстоянием между точками. Затем алгоритм удаляет внутренние точки, оставляя только точки по периметру — именно они используются для построения стен.

Как процедурная генерация окружения спасает художников во время разработки

После этого начинается фильтрация точек:

  • выделяются углы, для которых используются отдельные меши
  • распределяются точки для стен, окон и дверей
  • добавляются уникальные элементы вроде окон лестничной клетки

Например, у хрущёвок мы используем простой паттерн: каждый пятый модуль по горизонтали становится дверью. Это позволяет быстро создать узнаваемую структуру здания.Для разных сторон здания используются отдельные правила:

Передняя сторона здания

  • используется основной паттерн с дверями
  • вокруг дверей формируются дополнительные модули стен
Как процедурная генерация окружения спасает художников во время разработки

Задняя сторона

  • двери не используются
  • на их месте размещаются окна лестничной клетки
Как процедурная генерация окружения спасает художников во время разработки

Боковые стены

  • крайние точки становятся глухими стенами
  • остальные точки заполняются окнами
Как процедурная генерация окружения спасает художников во время разработки

Далее сетка дублируется по высоте, формируя этажи. Алгоритм отдельно обрабатывает:

  • первый этаж
  • средние этажи
  • верхний этаж

На основе атрибутов точки превращаются в конкретные элементы — окна, стены, двери или карнизы крыши. Дополнительно создаются точки для мелких деталей: водосточных труб, кондиционеров и других элементов.

Для разных типов зданий алгоритм немного отличается. Например, у строительных площадок добавляются внутренние стены, а также отдельные настройки для размещения окон и заборов.

Как процедурная генерация окружения спасает художников во время разработки

В следующих девлогах расскажем ещё больше о том, как создаётся мир игры.

Добавляйте GRIMPS в вишлист:
https://store.steampowered.com/app/3297800/GRIMPS/

Присоединяйтесь к нашему дискорд серверу и можете обсудить игру лично с разработчиками:https://discord.gg/DazDMWa8mm

3
3 комментария