![](https://habrastorage.org/getpro/habr/upload_files/d96/008/28b/d9600828bf35fff1ca597316a405f24c.jpg)
Автор статьи: Ростислав Мусиенко
Senior Unreal Engine Developer в District Zero
В UE5.2 появилась интересная технология процедурной генерации, которая заинтересовала многих. Я решил погрузится в эту тему и рассказать вам об этом.
При открытии тестовой карты, мне сразу на глаза попался интересный объект, который я ранее не встречал. Он отображался как игровая сцена. Но мы уже находились на сцене. В деталях объекта есть возможность его редактирования и создания. На данный момент напоминает очень удобные группы объектов которые легко редактировать.
![](https://habrastorage.org/getpro/habr/upload_files/d6e/f9b/e0e/d6ef9be0e792abda59fc0a4198fe17af.png)
Открыв его я убедился, что это действительно сцена, в ней отсутствовали все лишние элементы, оставалась лишь сборная модель, которая в некоторых случаях тоже включала в себя другие сцены. Очень интригующе, получается есть возможность создавать многоуровневую вложенность и с этим способом конструировать сложные конструкции и даже легко генерировать уровни и подземелья.
![](https://habrastorage.org/getpro/habr/upload_files/3a0/c42/305/3a0c423058b466fb00f4e05f21ff5932.png)
Проверив легкость создания, я на пустой сцене собрал импровизированного снеговика и смог выставить его на сцену просто переместив как обычный объект.
![](https://habrastorage.org/getpro/habr/upload_files/029/f0b/b2b/029f0bb2b8ccc89275d7231c9e51dd36.png)
Покорившись в легкости, не поверил тому, что раньше этого не было реализовано и заглянул в 4.27, там действительно такого нет и единственный способ вложенностей в старых версиях это саблевелы.
![](https://habrastorage.org/getpro/habr/upload_files/cb2/e72/328/cb2e72328fb65926c480b13a42602aea.png)
На примере данного блюпринта и его генерации можно увидеть как быстро можно создавать типизированные объекты разного контролируемого размера.
![](https://habrastorage.org/getpro/habr/upload_files/1b2/aad/d25/1b2aadd25fbec6ae62f6f18f2c69ea28.png)
![](https://habrastorage.org/getpro/habr/upload_files/8a8/018/f3e/8a8018f3e628ccb29854c49fd58b9d8e.png)
Следующим мне на глаза попал блюпринт, который отвечал за постройку леса.
![](https://habrastorage.org/getpro/habr/upload_files/e89/40b/510/e8940b510d01c708646500036daa3187.png)
Выставив его на сцену и нажав кнопку для генерации я наблюдал необычно крутое зрелище.
![](https://habrastorage.org/getpro/habr/upload_files/b8f/13a/a00/b8f13aa002679377655d9e1ec889e00a.png)
Безжизненная стартовая карта за доли секунд обросла всевозможными объектами и стала лесом.
![](https://habrastorage.org/getpro/habr/upload_files/63b/73e/0b6/63b73e0b6f90b80d9098d1a4ea78896f.png)
Данная генерация заняла менее минуты.
![](https://habrastorage.org/getpro/habr/upload_files/806/fb4/494/806fb4494d3d5d3189fdcddd49a7659c.png)
Вблизи виды не менее хороши если не обращать внимание на стандартный ландшафт
![](https://habrastorage.org/getpro/habr/upload_files/17e/9e8/6b9/17e9e86b98e8f45dd727800983c2ec59.png)
К этому лесу мы еще вернемся в конце, а сейчас постараемся сделать что-то свое по аналогии с ним.
Для начала вызовем PCGVolume
на сцену, в нем происходят основные действия с генерацией.
![](https://habrastorage.org/getpro/habr/upload_files/faa/e97/e2c/faae97e2ce413488dbd2d2e6bd6cba92.png)
Заходим в компонент для генерации, там требуется открыть вкладку граф для того чтобы создать новый скрипт генерации.
![](https://habrastorage.org/getpro/habr/upload_files/3bf/353/6ea/3bf3536eabf840588852ea8eea6c2b77.png)
Выбираем создание нового ассета.
![](https://habrastorage.org/getpro/habr/upload_files/905/eb0/bcb/905eb0bcbc556f283477e7a48c5cfdcf.png)
Первое, что стоит сделать в нем - это выставить самплер который будет выбирать координаты для будущих деревьев.
![](https://habrastorage.org/getpro/habr/upload_files/2c9/02e/d70/2c902ed7065dcfaf3d2db725a3d5f860.png)
Выбрать в его деталях галочку дебаг, для того чтобы хоть что то увидеть.
![](https://habrastorage.org/getpro/habr/upload_files/7a4/d76/9ba/7a4d769ba3b5d1298d37718f58d9303b.png)
И на самой сцене в нашем объекте нажать генерацию.
![](https://habrastorage.org/getpro/habr/upload_files/e46/261/d5f/e46261d5f8a6a922cbf08c8332df9868.png)
Начало положено, у нас лес боксов.
![](https://habrastorage.org/getpro/habr/upload_files/ee1/694/2e6/ee16942e653cc6a6f6e5e0371b371179.png)
Чтобы превратить их в что-то значимое, добавляем следующую ноду для спавна статик мешей в этих точках.
![](https://habrastorage.org/getpro/habr/upload_files/48b/b60/c01/48bb60c015a0a889f2b7f4ea3d5db34b.png)
В деталях этой ноды можно выбирать несколько мешей и их характеристики, у меня вышел мертвый лес.
![](https://habrastorage.org/getpro/habr/upload_files/95b/da1/2cd/95bda12cdd1ba1389d9d073f7a5f3b87.png)
Последующие эксперименты добавили камни и траву, а так же разобрался как настроить условия для того, чтобы деревья не росли из камней и не пересекались. Да, предусмотрена даже такая механика и она достаточно проста для своей полезности.
![](https://habrastorage.org/getpro/habr/upload_files/2c0/12d/711/2c012d711c0c0f22b6671cd7ed8131ca.png)
В своем итоговом варианте я увеличил количество травы, добавил возможность рандомной ротации деревьев и камней при генерации и добавил шум на координаты для того чтобы не читалась ровная сеточка из мешей.
Все стало выглядеть так:
![](https://habrastorage.org/getpro/habr/upload_files/6b2/a01/f2a/6b2a01f2ae414acffe5612cb02934abd.png)
А код был не сильно больше.
![](https://habrastorage.org/getpro/habr/upload_files/08c/270/0c6/08c2700c65a14a7f0330e65aec71408c.png)
Почему же это было последним?
В своих экспериментах я попытался масштабировать исполнение на весь ландшафт и тут столкнулся со знакомым мне окном, когда я копаюсь в чем то новом:
![](https://habrastorage.org/getpro/habr/upload_files/5c9/b24/de3/5c9b24de3f13efa7eae79280e97f02c9.png)
Перед завершением я обещал вернутся к лесу, который был в предоставленных асетах. Вот так выглядит его логика для генерации леса.
Это просто для сравнения, по факту хоть она и страшна на первый взгляд, основные паттерны скриптов там повторяются и самостоятельно сделать подобную генерацию не невозможно.
![](https://habrastorage.org/getpro/habr/upload_files/ead/130/bf2/ead130bf2ece77c63b50d51ac91280ce.png)
На сколько же полезна эта технология?
Она помогает сократить время на финальных этапах разработки и, если не для генерации и создания основного контента, то точно для фонового.
Да, создать подобный скрипт в разы сложнее, чем быстро накидать уровень и растительность с помощью foliage
, но написанный однажды, он может реализовываться на множестве сцен, ускоряя разработку потоковых карт и ускоряя итерации обновлений в сетевых шутерах.
Стоит ли ее изучать?
Точно да, а если вам тяжело разобраться самостоятельно то приглашаем вас на курс Unreal Engine Game Developer. Professional. Для знакомства со мной и с форматом обучения вы можете зарегистрироваться на бесплатный вебинар, где погрузимся в мир Unreal Engine и научимся создавать эффект взрыва с использованием Niagara System. Разберем основы работы в Niagara и пройдем через процесс создания собственного эффекта взрыва, включая добавление собственных эмиттеров.