translatedTitles.Article
Ly

Unreal Engine. Урок 5. Пора наводить красоту. Добавляем арт в ваш прототип

Привет!

Меня зовут Евгений, я веду занятия по разработке на 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


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


Так то там ещё много разных нюансов по типу:

  • Сбор данных физически корректных значений материалов. Каждый материал в жизни имеет определенные значения. Если их правильно подобрать, то ваша игра не будет похожа на пёстрого попугая где каждый цвет пытается перебить другого и это превращается в кашу (разве что у вас такой худ стиль у игры, тогда это другой вопрос)
  • Сбор левелов которые иногда называются Asset Zoo. Своего рода зоопарк с объектами что будут расставляться на лвлы. Эти объекты часто группируются по сочетанию с друг другом или исходя из ваших рефов. Делается это чтобы не было диссонанса у игрока по типу: стоит мусорка и возле неё идёт вечеринка с стиле диско с детским утренником (странное сочетание, тут вот основной смысл сборки в группы)
  • И много ещё разных моментов которые я пока что пропускаю специально чтобы вы не загрузились сильно


Рассматриваем PCG (процедурная генерация)

Требования к началу урок: вы должны подготовить ассеты для травы, деревьев и камней. Хотя бы по одному ассету для каждой группы


Ссылка на видео-урок

Всё начинается с создания ассета который будет генерить процедурку

ПКМ(в 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

hub.comments