translatedTitles.Article
Ly

Unreal Engine. Урок 4. Левел арт близко и базовый UI

Привет!

Меня зовут Евгений, я веду занятия по разработке на Unreal Engine и являюсь вашим ментором на интенсиве.

Рад, что вы разрабатываете прототипа шутера на интенсиве Практик•ON.

При возникновении вопросов по Unreal Engin, пишите в чате в ветке Unreal Engine с тегом @lyam_eugene.

Вступайте в чат Практик•ON для прохождения интенсива


В этой статье мы ознакомимся с базовыми понятиями в левел-дизайне и лайтинге сцен на Unreal Engine.

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


примечание: работаем с версией Unreal Engine 5.6.1


Сегодня у нас чего-то сложно не планируется, так что завариваем чашечку кофе или чаю с печенькой и читаем.


Так как ЛД базовый мы с вами посмотрели, давайте сегодня приступим к некоторым доработкам и подготовке к работе с технологиями UE5: Nanite, Lumen, VSM и так далее.


Правила работы с Nanite, Lumen

Далее мы кратко пройдемся по основным аспектам при работе с этими технологиями.


Lumen

1. Не использовать односторонние мешки. Чаще всего когда говориться такой аспект, имеется ввиду старый метод создания лвлов для UE4. Тогда часто использовали обычный Plane для создания стен, пола, потолков, проёмов окон и дверей и тому подобных штук. С Lumen такие методы лучше не использовать

2. Мешки должны быть по толщине больше 10 см

3. Не быть полыми, то есть одна сторона у них не закрыта полигоном или в мешке есть какая либо дырка


Unrealeditor Kzoqwjdwbv.mp4


На видео показано примерно как влияет толщина, отсутствие дыр и то что стены не односторонние. Находясь в коробке из таких стен у меня действительно ничего не протекает из внешнего света внутри. Это очень частая проблема когда ты вроде всё поставил правильно, но не поймешь откуда у тебя внутри так светло. Всё стоит, стенки есть, потолок тоже и при это всего одна лампа..но странные засветы есть в углах стен. Так что следите за этими основными параметрами если не хотите непонятного поведения вашего освещения.

Nanite

1. Не использовать длинные треугольники. Это может у вас влиять на такую вещь как "плохой кулинг". Кулинг это когда одна из частей мешки или сама мешка убирается из просчетов сцены и никак не влияет на её производительность. Так как нанит сам строит сетку после того как вы нажали Enable Nanite, то первоначально неверно сделанная сетка на мешке может влиять на то как её обработает алгоритм Nanite.


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


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


2. Даже если учитывать то что мы используем Нанит и он "может пережевать любое количество полигонов" - это не значит что нужно загружать в проект модели с большим количеством полигонов. Вам нужно это будет гонять на видеокарту и по итогу можно вылететь по количеству всё равно. Так что, даже используя нанит, старайтесь не злоупотреблять с плотностью сетки

3. Не используйте в материалах Blend Mode_Masked - это просто утяжелит ваши вычисления. Blend Mode_Translucent нельзя использовать так как он не поддерживается Nanite.

4. Нанит не любит материалы с процедурным изменением UV или нойз который генерируется на хожу (не из текстурки)

5. Старайтесь не допускать случаев когда один объект слишком близко лежит к другому. По итогу может привести к плохому кулингу (отрезанию или скрыванию объектов) и по итогу к падению к производительности. Если можно, то лучше сшить эти ассеты в один меш - это позволит избавиться от так называемого Overdraw


Unrealeditor Gek9sc2n4y.mp4


Остальное

В целом это основные моменты рассмотрены, нюансы можем рассмотреть уже потом на неделе оптимизации проекта.


Менюшка

Давайте ка создадим какое-то меню для нашей игры. Хотя бы "Начать игру. Выход". Поехали.


По итогу данного урока у вас должно быть получить что-то похожее на вот это:
Unrealeditor 5Pzdhlgbny.mp4



1. Создадим новый лвл и назовем его L_MainMenu (приставка L_ обычно говорит о том что этот ассет типа Level

Unrealeditor Qpdxozfmdr.mp4


2. Включите плагин Common UI (мы его будем использовать для создания меню). Откройте Edit > Project Settings > Engine > General Settings и измените вот такой параметр Game Viewport Client Class на CommonGameViewportClient.

Unrealeditor Jxjmkdtxqn.mp4


3. Создадим файл который будет у нас отвечать за UI нашего меню.

Unrealeditor 5Mbaottr1b.mp4


4. Следующий шаг нам надо бы как-то и куда-то его прицепить. А то лежит не работает никак :)

Для этого мы создадим гейммод который будет выводить наш UI на экран.

Unrealeditor Isfpewlynh.mp4


5. Продолжим работу над нашим меню. Теперь давайте добавим текст с названием нашей игры и сделаем кнопки Новая игра и Выйти и немного подготовим почву для других действий (добавим пресеты кнопок, стили для них и стили текста).

Unrealeditor Pjtk25qrgg.mp4


6. Дорабатываем наши кнопки чтобы была возможность задавать текст и некоторые другие параметры когда она будет использоваться в других виджетах. Добавляем кнопки в UI и добавляем им логику поведения.

  • Новая игры - открывает наш уровень который мы создали на этапе ЛД
  • Выйти - закрывает игру

Unrealeditor Qot8wvmybg.mp4


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


Немного подправим отступы и визуал кнопок :)

Unrealeditor Ulcasiftvw.mp4


7. Пришла пора подготовить всё для создания меню Паузы. Создадим ради обучения новый Widget Blueprint с элементами которые нам в дальнейшем понадобятся, а так же само меню Паузы. Помните мы в прошлых шагах создавали кнопки которые можно переиспользовать в других местах? Так вот настал момент их ещё раз использовать. Теперь понятно зачем мы так себя истязали и не сделали просто текстом и ещё какими простыми вещами?

Unrealeditor 0Cmz0ixfsh.mp4


8. Перенесем все заготовки которые мы добавили в прошлом этапе в основной геймплей UI, создадим Input экшн и добавим его в наш маппинг (не забудьте назначить клавишу в маппинге, на видео этого не было показано). Добавить в контроллер персонажа (BP_ShooterPlayerController) и добавление UI Паузы в игровое меню при нажатии кнопки Esc

Unrealeditor Lqcndgz1sm.mp4


9. Чтобы при нажатии Esc не закрывалась игра, а открывалось меню сделайте вот такую манипуляцию. Только после смены не забудьте что у вас Play теперь будет закрываться по Shift+Esc

Unrealeditor R40zqarwcb.mp4


10. В целом у нас всё, но давайте ещё для красоты уберём точку прицельную когда мы нажимаем Esc

PracticON_HideDot.mp4


Всё! Спасибо всем за внимание.

Теперь ваша задача всё это повторить в своем проекте. Это и есть ваше домашнее задание.


Для тех кому это легко
Можете попробовать добавить меню изменения настроек графики. Добавить UI отображение того что у нас есть или нет Ключ карта для работы лифтов.


hub.comments