Привет!
Меня зовут Евгений, я веду занятия по разработке на Unreal Engine и являюсь вашим ментором на интенсиве.
Рад, что вы разрабатываете прототипа шутера на интенсиве Практик•ON.
При возникновении вопросов по Unreal Engine, пишите в чате в ветке Unreal Engine с тегом @lyam_eugene.
Вступайте в чат Практик•ON для прохождения интенсива
В этой статье мы ознакомимся с базовыми понятиями в разработке Арта процедурным и ручным способом в играх на Unreal Engine.
Статья рассчитана на новичков и позволяет получить первый опыт в работе с движком.
Всё начинается с того что вы подбираете рефы ваших будущих локаций или генерите их в нейронке.
Собираем и каталогизируем понравившиеся нам локации своей атмосферой и как отправная точка для нашей локации. Всё это дело обычно раскладывают в PureRef или чём-то похожем на Miro с её доской.
Ищём в Fab и подбираем подходящие к нашему визуалу материалы
Lesson5_1.mp4
После того как скачали понравившиеся ассеты не забудьте проставить Enable Nanite Support в них
(ставим галочку и нажимаем Apply Changes, иначе ничего не применится)
Нанит проверяем специальным визуализатором
Зелёное - Nanite, красное - мешка у которой не включен Nanite.
Не обязательно сразу стараться сделать всё идеально, пока вы найдете нужный вам визуал может произойти множество итераций. Так что спокойно пробуем находим свою атмосферу.
И всегда проверяйся в геймплее то что вы расставили. Просто могут быть ситуации: вы расставили всё, а там оказывается какая-то проблема с коллизией и игрок по итогу не может пройти по коридору.
Включаем режим визуализации Player Collision и смотрим
Для примера раскидал ассеты по некоторым зонам в лвле который делался на уроке по Level Design и создадим ландшафт актор.
Lesson5_Landscape.mp4
Для ландшафта я взял с Fab вот такой материал MTL_MWAM_Landscape_IslandExample из пака MW Landscape Auto Material
Не забудьте отключить вот этот параметр в материале, иначе у вас начнет двоиться трава которую мы проставим в следующей части этого урока
Так то там ещё много разных нюансов по типу:
Требования к началу урок: вы должны подготовить ассеты для травы, деревьев и камней. Хотя бы по одному ассету для каждой группы
Ссылка на видео-урок
Всё начинается с создания ассета который будет генерить процедурку
ПКМ(в Content Browser)>PCG>PCG Graph
Далее выбираем граф который нам нужен. В нашем случае - TPL_Sowcase_SimpleForest
Открываем его. В графе вы увидите три блока подписанные как Grass, Rocks и Trees.
Камни:
Деревья:
Трава:
World Ray Hit Query - если кратко, то выпускается луч (в нашем случае вниз) который определяет с какой поверхности мы будем читать точки.
Surface Sample отвечает за чтение точек с поверхности которая была подана на вход слева.
Transform Points - позволяет нам добавить рандомность расположению/вращению/скейлу что назначаться на точку и потом будут скопированы на мешку прописанную в ноде Static Mesh Spawner.
Self Pruning - просто прореживание точек которые мы считали с поверхности.
Difference - по сути действует как булевый оператор в моделинге (что-то исключается из чего-то и остаются точки которых нет ни в том ни в том списке точек). Например, чтоб точки на которых будет спавнится дерево не входили в список точек для травы.
Static mesh Spawner - место где мы проставляем статические мешки которые будем процедурно расставлять на сцене
Давайте выставим наш генератор на уровень и растянем (изменим Scale) чтобы он покрывал нужную нам область
vlc_mV6J785qfC.mp4
Если после того как вы растянули волюм генератора с волюмом у вас растянулись и мешки, нажмите выделив волюм вот такие кнопки: Cleanup и затем сразу Generate.
Давайте проставим траву которую вы заблаговременно подготовили скачав с Fab
vlc_JK28nZNsMB.mp4
То же самое проделайте с деревьями и камнями
Поменяем World Ray Hit Query на Get Landscape Data, пока что нам ничего не нужно ничего кроме ландшафта. Так что сделаем вот так
UnrealEditor_izIttZ5sBs.mp4
В процедурной генерации можно настроить там чтобы объекты спавнились посекционно, а не все сразу. Для этого нужно на акторе PCGWorldActor (найти в Outliner) включить SerializeMode: Always Serialize (хотя эту опцию стоит включить в любом случае) и Treat Editor Viewport as Generation Source
Добавим вот такие ноды в наш траф чтобы стриминг блоками работал
И включим Use Hierarchical Generation
UnrealEditor_iFNsNx0Ipb.mp4
Так же не забываем про вот эту настройку на PCGVolume
UnrealEditor_G8DFi2NWFj.mp4
Я не использовал дробление леса на части чтобы облегчить его подгрузку, потому что это привнесет другие проблемы решение которых мы пока что не будем рассматривать
UnrealEditor_al45ubLmMz.mp4
Если вдруг такое происходит что растительность пропадает, то снимите вот эту галочку с компонентов ландшафта
UnrealEditor_5wgFviafWu.mp4