Автор статьи: Ростислав Мусиенко

Senior Unreal Engine Developer в District Zero

В UE5.2 появилась интересная технология процедурной генерации, которая заинтересовала многих. Я решил погрузится в эту тему и рассказать вам об этом.

При открытии тестовой карты, мне сразу на глаза попался интересный объект, который я ранее не встречал. Он отображался как игровая сцена. Но мы уже находились на сцене. В деталях объекта есть возможность его редактирования и создания. На данный момент напоминает очень удобные группы объектов которые легко редактировать.

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

Проверив легкость создания, я на пустой сцене собрал импровизированного снеговика и смог выставить его на сцену просто переместив как обычный объект.

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

На примере данного блюпринта и его генерации можно увидеть как быстро можно создавать типизированные объекты разного контролируемого размера.

Следующим мне на глаза попал блюпринт, который отвечал за постройку леса.

Выставив его на сцену и нажав кнопку для генерации я наблюдал необычно крутое зрелище.

Безжизненная стартовая карта за доли секунд обросла всевозможными объектами и стала лесом.

Данная генерация заняла менее минуты.

Вблизи виды не менее хороши если не обращать внимание на стандартный ландшафт

К этому лесу мы еще вернемся в конце, а сейчас постараемся сделать что-то свое по аналогии с ним.

Для начала вызовем PCGVolume на сцену, в нем происходят основные действия с генерацией.

Заходим в компонент для генерации, там требуется открыть вкладку граф для того чтобы создать новый скрипт генерации.

Выбираем создание нового ассета.

Первое, что стоит сделать в нем - это выставить самплер который будет выбирать координаты для будущих деревьев.

Выбрать в его деталях галочку дебаг, для того чтобы хоть что то увидеть.

И на самой сцене в нашем объекте нажать генерацию.

Начало положено, у нас лес боксов.

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

В деталях этой ноды можно выбирать несколько мешей и их характеристики, у меня вышел мертвый лес.

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

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


Все стало выглядеть так:

А код был не сильно больше.

Почему же это было последним?

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

Перед завершением я обещал вернутся к лесу, который был в предоставленных асетах. Вот так выглядит его логика для генерации леса.

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

На сколько же полезна эта технология?

Она помогает сократить время на финальных этапах разработки и, если не для генерации и создания основного контента, то точно для фонового.

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


Стоит ли ее изучать? 

Точно да, а если вам тяжело разобраться самостоятельно то приглашаем вас на курс Unreal Engine Game Developer. Professional. Для знакомства со мной и с форматом обучения вы можете зарегистрироваться на бесплатный вебинар, где погрузимся в мир Unreal Engine и научимся создавать эффект взрыва с использованием Niagara System. Разберем основы работы в Niagara и пройдем через процесс создания собственного эффекта взрыва, включая добавление собственных эмиттеров.

Комментарии (0)