Разбор PCG в UE5 на примере Electric dreams env

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Автор статьи: Ростислав Мусиенко

Senior Unreal Engine Developer в District Zero

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

  • Зарегистрироваться на бесплатный вебинар

Источник: https://habr.com/ru/companies/otus/articles/762276/


Интересные статьи

Интересные статьи

Ещё в августе 2022 года исследователи по всему миру зафиксировали резкий всплеск заражений с помощью дроппера TrueBot. В статье разберёмся, откуда взялся этот вирусный загрузчик, как он работает и что...
15 июня 2022 года издание App2Top.ru сообщило, что разработчик и издатель мобильных игр Game Insight уходит из РФ, закрывает офисы и увольняет разработчиков. Сообщается, что «у компании нет средств на...
О себеРазработчик-фрилансер, с опытом работы 2 года, а так же с большим количеством разного api (paypal, vk, moysklad и т. д.). В этой статье, я не претендую на экспертность, а просто хочу рассказат...
RoughJS это маленькая (<9 КБ) графическая библиотека JavaScript, позволяющая рисовать в эскизном, рукописном стиле. Она позволяет рисовать на <canvas> и с помощью SVG. В этом посте я хоч...
Привет! Меня зовут Саша, я iOS-разработчик в команде, которая делает ленту ВКонтакте. Сейчас расскажу, как мы оптимизируем отображение интерфейса и обходим связанные с этим проблемы. Думаю, вы п...