Автор статьи: Ростислав Мусиенко
Senior Unreal Engine Developer в District Zero
В UE5.2 появилась интересная технология процедурной генерации, которая заинтересовала многих. Я решил погрузится в эту тему и рассказать вам об этом.
При открытии тестовой карты, мне сразу на глаза попался интересный объект, который я ранее не встречал. Он отображался как игровая сцена. Но мы уже находились на сцене. В деталях объекта есть возможность его редактирования и создания. На данный момент напоминает очень удобные группы объектов которые легко редактировать.
Открыв его я убедился, что это действительно сцена, в ней отсутствовали все лишние элементы, оставалась лишь сборная модель, которая в некоторых случаях тоже включала в себя другие сцены. Очень интригующе, получается есть возможность создавать многоуровневую вложенность и с этим способом конструировать сложные конструкции и даже легко генерировать уровни и подземелья.
Проверив легкость создания, я на пустой сцене собрал импровизированного снеговика и смог выставить его на сцену просто переместив как обычный объект.
Покорившись в легкости, не поверил тому, что раньше этого не было реализовано и заглянул в 4.27, там действительно такого нет и единственный способ вложенностей в старых версиях это саблевелы.
На примере данного блюпринта и его генерации можно увидеть как быстро можно создавать типизированные объекты разного контролируемого размера.
Следующим мне на глаза попал блюпринт, который отвечал за постройку леса.
Выставив его на сцену и нажав кнопку для генерации я наблюдал необычно крутое зрелище.
Безжизненная стартовая карта за доли секунд обросла всевозможными объектами и стала лесом.
Данная генерация заняла менее минуты.
Вблизи виды не менее хороши если не обращать внимание на стандартный ландшафт
К этому лесу мы еще вернемся в конце, а сейчас постараемся сделать что-то свое по аналогии с ним.
Для начала вызовем PCGVolume
на сцену, в нем происходят основные действия с генерацией.
Заходим в компонент для генерации, там требуется открыть вкладку граф для того чтобы создать новый скрипт генерации.
Выбираем создание нового ассета.
Первое, что стоит сделать в нем - это выставить самплер который будет выбирать координаты для будущих деревьев.
Выбрать в его деталях галочку дебаг, для того чтобы хоть что то увидеть.
И на самой сцене в нашем объекте нажать генерацию.
Начало положено, у нас лес боксов.
Чтобы превратить их в что-то значимое, добавляем следующую ноду для спавна статик мешей в этих точках.
В деталях этой ноды можно выбирать несколько мешей и их характеристики, у меня вышел мертвый лес.
Последующие эксперименты добавили камни и траву, а так же разобрался как настроить условия для того, чтобы деревья не росли из камней и не пересекались. Да, предусмотрена даже такая механика и она достаточно проста для своей полезности.
В своем итоговом варианте я увеличил количество травы, добавил возможность рандомной ротации деревьев и камней при генерации и добавил шум на координаты для того чтобы не читалась ровная сеточка из мешей.
Все стало выглядеть так:
А код был не сильно больше.
Почему же это было последним?
В своих экспериментах я попытался масштабировать исполнение на весь ландшафт и тут столкнулся со знакомым мне окном, когда я копаюсь в чем то новом:
Перед завершением я обещал вернутся к лесу, который был в предоставленных асетах. Вот так выглядит его логика для генерации леса.
Это просто для сравнения, по факту хоть она и страшна на первый взгляд, основные паттерны скриптов там повторяются и самостоятельно сделать подобную генерацию не невозможно.
На сколько же полезна эта технология?
Она помогает сократить время на финальных этапах разработки и, если не для генерации и создания основного контента, то точно для фонового.
Да, создать подобный скрипт в разы сложнее, чем быстро накидать уровень и растительность с помощью foliage
, но написанный однажды, он может реализовываться на множестве сцен, ускоряя разработку потоковых карт и ускоряя итерации обновлений в сетевых шутерах.
Стоит ли ее изучать?
Точно да, а если вам тяжело разобраться самостоятельно то приглашаем вас на курс Unreal Engine Game Developer. Professional. Для знакомства со мной и с форматом обучения вы можете зарегистрироваться на бесплатный вебинар, где погрузимся в мир Unreal Engine и научимся создавать эффект взрыва с использованием Niagara System. Разберем основы работы в Niagara и пройдем через процесс создания собственного эффекта взрыва, включая добавление собственных эмиттеров.