Геймдев
#статьи

Уроки по Unreal Engine 5: работа с материалами

Разбираем структуру Material Editor и учимся создавать материалы с нуля.

Иллюстрация: Colowgee для Skillbox Media

Редакция «Геймдев» Skillbox Media продолжает цикл уроков по Unreal Engine 5. Предыдущие материалы были посвящены особенностям установки редактора UE, а также обновлённому интерфейсу программы и работе с ассетами в Content Browser. В новом туториале мы разберём одну из самых важных основ Unreal Engine — работу с материалами.

Руководство составлено на основе версии 5.0.3.

Материалы отвечают за внешний вид и свойства поверхности всех объектов сцены, таких как Static Mesh (стандартные объекты со статическим типом геометрии), Skeletal Mesh (объекты со скелетной анимацией), ландшафт, пользовательский интерфейс и визуальные эффекты.

Для начала рассмотрим структуру внутреннего редактора, в котором создаются материалы. Запускаем Content Browser, разворачиваем папку Starter Content (с базовым контентом для проектов в Unreal Engine) — и в подкатегории Materials открываем какой-нибудь материал. Двойной клик ЛКМ по значку материала откроет отдельное окно редактора для создания и изменения материалов — Material Editor. При необходимости его можно интегрировать в интерфейс основного редактора.

Встраивание Material Editor в структуру Unreal Editor
Анимация: программа Unreal Editor

Интерфейс редактора материалов

Material Editor — редактор на основе системы нодов, связки которых формируют окончательный вид материала и шейдеров.

Раздел Material Editor и его элементы в редакторе Unreal Engine
Скриншот: Unreal Engine / Epic Games

Верхняя панель (№1) содержит базовый функционал, частично дублирующий опции из основного интерфейса Unreal Editor и Content Browser, который мы рассматривали в одном из предыдущих материалов.

На панели (на изначальном скриншоте — №2) расположены кнопки, связанные с основными операциями в Material Editor.

  • Save — сохранение текущего ассета.
  • Browse — поиск и выделение текущего ассета в Content Browser.
  • Apply — компиляция шейдеров: сохранение всех изменений, внесённых в структуру материала. Акторы в сцене с преобразованным материалом также изменятся.
  • Search — поиск нодов материала по названию.
  • Home — переключение на основной нод материала. Удобно при создании сложных схем.
  • Hierarchy — отображение списка всех дочерних по отношению к выделенному нодов
  • Live Update — настройки отображения материалов в реальном времени.
  • Clean Graph — удаление нодов, не связанных со структурой материала.
  • Preview State — настройки отображения 3D-вьюпорта.
  • Hide Unrelated — сокрытие всех невыделенных нодов.
  • Stats — вывод или сокрытие статистики по данным материала. Отображается в виде дополнительной вкладки в нижней части Material Editor.
  • Platform Stats — вывод информации о компиляции и ошибках, если они присутствуют в структуре материала.

Окно вьюпорта (на первом скриншоте — №3) отображает материал в трёхмерном окружении. В верхней части находится несколько вкладок с дополнительными настройками. Первая вкладка — меню с базовыми настройками вьюпорта: включение/отключение изменений в реальном времени (Realtime), дубликат кнопки отображения статистики (Stats) и счётчик FPS (Show FPS). Также здесь расположены ползунки для настройки угла обзора.

Вкладки Perspective и Lit схожи с аналогичными опциями основного интерфейса Unreal Editor.

Show содержит дополнительную функциональность: отображение статистики (Stats), сетки в окне графа (Grid) и фон окружения.

В правом нижнем углу 3D-вьюпорта расположены кнопки с изображением цилиндра, сферы, плоскости и куба. Их используют для «примерки» материала на том или ином типе геометрии. Последний значок с изображением кирпича накладывает материал на объект, относящийся к типу Static Mesh, который до этого пользователь выбрал в Content Browser. Если просто нажать на эту кнопку, редактор напомнит, что сначала необходимо выбрать объект, на который нужно спроецировать материал.

Опции предпросмотра материала на разных типах геометрии. При нажатии на значок кирпича во вьюпорте отображается меш пирамиды, так как этот Static Mesh заранее был выделен в Content Browser
Анимация: программа Unreal Editor

Панель отображения свойств, или Details Panel (на изначальном скриншоте — №4), показывает значения всех выбранных нодов в текущий момент. Если на графе ничего не выделено, панель отобразит основные параметры редактируемого материала.

Большинство операций в Material Editor происходит в окне графа материалов — Material Graph (на изначальном скриншоте — №5). Это пространство для сборки нодов-компонентов. По умолчанию в Material Graph есть только один главный нод с большим количеством слотов-свойств, к которым пользователь «подключает» дополнительные ноды и формирует поверхность материала.

На схеме видно, как большие группы нодов связаны с основным нодом материала
Скриншот: Unreal Engine / Epic Games

Справа от окна графа расположена панель Palette (на изначальном скриншоте — №6). В ней содержатся все типы нодов (Expressions). По умолчанию этот раздел скрыт. Клик по значку с пином зафиксирует окно во время работы. Чтобы необходимый компонент появился в окне Material Graph, достаточно перетащить его из списка Palette, удерживая ЛКМ.

Перемещение Expressions в Material Graph
Анимация: программа Unreal Editor

Примечание

Помимо поисковой строки, подходящие ноды можно искать в категориях из выпадающего списка Category, расположенного в верхней части Palette. Также список с компонентами вызывается нажатием ПКМ по пустой области графа.

Вызов списка Expressions правым кликом в Material Graph
Анимация: программа Unreal Editor

Основы навигации в Material Editor

Навигация в 3D-вьюпорте осуществляется с помощью мыши:

  • ЛКМ с удержанием — вращение вокруг меша;
  • ПКМ с удержанием и колёсико мыши — приближение/отдаление;
  • СКМ с удержанием — перемещение в пространстве сцены.
Анимация: программа Unreal Editor

Навигация в окне Material Graph интуитивно понятна, и её принципы похожи на редакторы нодов в других программах, например в Blender:

  • ЛКМ с удержанием и перемещением курсора в сторону — выделение области;
  • ПКМ с удержанием — перемещение по области;
  • колёсико мыши — приближение/отдаление.
Анимация: программа Unreal Editor

Создание материалов

Теперь попробуем сделать материал с нуля. Создаём отдельную папку в Content Browser (ПКМ — Add Folder +) и даём ей название. Кликом ПКМ по области открытой папки вызываем меню ассетов и выбираем Material. После этого появится новый ассет материала, ему также нужно дать имя.

Созданный ассет материала в Content Browser
Скриншот: Unreal Engine / Epic Games

Двойной клик ЛКМ по ассету откроет Material Editor. Для начала попробуем создать цветной материал. В Unreal Engine за цвет отвечает нод Constant3Vector. Находим его в Pallete и переносим в область графа.

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

Изменение значения Value и установка цвета в Material Editor
Анимация: программа Unreal Editor

После того как цвет выбран, его нужно связать с основой, а точнее — со слотом Base Color главного нода.

Примечание

Чтобы разорвать связь между нодами, достаточно кликнуть ПКМ по ячейке и во всплывающем меню выбрать пункт Break All Pin Link (s). При сложной связке узлов выбираем опцию ниже Break Link To… и затем указываем нод, который необходимо отвязать.

После этого материал станет цветным. Но задействовать его в сцене пока нельзя, так как шейдеры ещё не скомпилированы. Нажимаем уже знакомую нам кнопку Apply. После этого можно «примерить» материал на любой объект сцены.

Цвет материала можно изменить сразу на панели Details в разделе Constant. После каждого изменения не забывайте о компиляции (Apply). Если по каким-то причинам необходимо вернуться к предыдущему цвету, достаточно нажать Ctrl + Z, а затем Apply и Save.

Изменение цвета материала в Material Editor
Скриншот: Unreal Engine / Epic Games

Усложним задачу и добавим материалу свойство, которое будет влиять на отображение поверхности, — например, шероховатость (Roughness). Этот параметр зависит от цифрового значения, за которое отвечает нод Constant. Находим его в списке Palette и перемещаем в окно графов. При выделении нода Constant на панели Details слева появится вкладка Material Expression Constant и чуть ниже — опция Value, где можно ввести желаемое значение.

Вносим любое число на своё усмотрение в диапазоне от 0 до 1. Так, 1 — матовая, бархатистая поверхность, 0,5 — мягкий блик, 0 — зеркальная поверхность (значения по умолчанию). После этого подключаем слот Constant к Roughness и смотрим результат.

Материал с подключённым параметром Roughness (значение 0,3)
Скриншот: Unreal Engine / Epic Games

Также можно придать материалу эффект «металлик», подключив значение к слоту Metallic. Для этого потребуется ещё один нод Constant (его можно также переместить из Palette или продублировать предыдущий: выделить первый нод Constant и нажать Ctrl + С и Ctrl + V). Выставляем новое значение на своё усмотрение, соединяем ноды и смотрим результат.

Схема нодов, в результате которой получился материал с перламутровым покрытием
Скриншот: Unreal Engine / Epic Games

Примечание

Unreal Engine использует физически корректный рендеринг (PBR — Physically Based Rendering), который напрямую влияет на освещение и достоверное отображение объектов с параметрами Metallic и Roughness. Благодаря сочетанию их значений можно добиваться различных фактур при сборке отдельных объектов: зеркальная поверхность (Metallic 1 и Roughness 0), глянцевая (Metallic 0 и Roughness 0), перламутровая (Metallic 0,5 и Roughness 0,3) и так далее.

Загрузка материала на объект в сцене
Анимация: программа Unreal Editor

Теперь добавим материалу эффект потёртости. Для этого потребуется чёрно-белая текстура с эффектом шума или пятен. Её можно загрузить как из набора Starter Content, так и из собственных коллекций на жёстком диске. Для примера в этом туториале использован ассет текстуры T_Perlin_Noise_M из набора Starter Content. Вызываем Content Drawer / Content Browser (Ctrl + Space) и перемещаем нужную текстуру в область графа. Это можно сделать без переключения окон: во время перемещения файлов окно Material Editor откроется автоматически.

Перемещение текстуры из Content Browser в Material Editor
Анимация: программа Unreal Editor

В окне графов появился нод Texture Sample. Если текстура чёрно-белая, как в нашем случае, её свойство RGB можно связать с Roughness и тем самым изменить поверхность меша. Чёрные пятна на монохромной текстуре дают блики, а светлые — матовый эффект. Это сделает поверхность более реалистичной за счёт неравномерного отражения. Объекты из таких материалов часто ассоциируются с воздействием внешней среды.

Результат от применения бесцветной текстуры в слот Roughness
Скриншот: Unreal Engine / Epic Games

Теперь попробуем «испачкать» материал. В качестве примера в уроке использована текстура T_Metal_Rust_D из Starter Content.

Переносим её в окно графа. Если напрямую связать слот RGB нового нода с нодом Base Color, текстура займёт всю поверхность материала. Но в этом случае она должна отображаться частично и в определённых местах.

Создаём нод LinearInterpolate. Связываем цветовой нод со слотом А, а нод с новой текстурой подключаем к слоту B. В качестве альфа-слоя подойдёт чёрно-белая текстура шума, которая использовалась ранее. Связываем её выход RGB с каналом Alpha у нода LinearInterpolate, а его, в свою очередь, с Base Color и смотрим на результат.

Наглядная схема подключения и отображение обновлённого материала в сцене
Скриншот: Unreal Engine / Epic Games

Модификация материалов на основе текстур

Теперь попробуем создать новый материал на основе трёх текстур: основа (слот Base Color), карта нормалей для подчёркивания фактуры (слот Normal) и чёрно-белый вариант для реалистичных бликов и потёртостей (слот Roughness). В качестве примера можно воспользоваться текстурами из Starter Content, но можно взять и собственные, предварительно создав для них отдельную папку.

Перед работой убедитесь, что в текстуре для нормали не подключён параметр sRGB: движок должен распознать текстуру как дополнительную маску, а не как цветное изображение.

Окно текстуры (вызывается двойным кликом ЛКМ). Красным выделен пункт, который не должен быть отмечен галочкой, если это карта нормалей
Скриншот: Unreal Engine / Epic Games

В качестве примера мы выбрали три текстуры T_Wood_Floor_Walnut из набора Starter Content. Перетаскиваем их в Material Editor и соединяем. Также можно экспериментировать с сочетаниями текстур и слотов и получать различные эффекты без подключения дополнительных нодов.

Пример схемы сборки текстуры с различными свойствами
Скриншот: Unreal Engine / Epic Games

Примечание

Если возникла потребность заменить текстуру материала, достаточно кликнуть по названию напротив превью изображения в панели Details. После этого откроется список со всеми текстурами проекта.

На скриншоте выше ноды связаны по самой простой схеме. Скомпилируем материал (Apply) и перенесём его на объект в сцене. Так как для этого урока выбрана текстура паркета, то она установлена на условный пол сцены.

Скриншот: Unreal Engine / Epic Games

На скриншоте видно, что узор материала слишком крупный для поверхности пола в данной сцене. За масштабирование текстур отвечает нод Texture Coordinate. Создаём данный нод. Теперь его действие необходимо применить на все три текстуры. Чтобы избежать лишних дубликатов, создаём дополнительный нод Multiply, а затем вектор Constant, так как операция с масштабированием основана на значении. В настройках Constant указываем желаемое значение (по умолчанию стоит 1,0, всё, что выше единицы, — мельчит изображение, ниже — делает крупнее) и связываем ноды так, как показано на скриншоте ниже.

Настройка схемы нодов для изменения размера узора текстуры
Скриншот: Unreal Engine / Epic Games

При просмотре обновлённого материала во вьюпорте кажется, что узор текстуры стал слишком мелким. Нажимаем Apply, заходим в сцену и видим, что видоизменённый материал смотрится вполне гармонично в контексте напольного покрытия в сцене шаблона Third Person.

Скриншот: Unreal Engine / Epic Games

Попробуем придать паркету в сцене другой оттенок с помощью уже знакомого нам нода Constant3Vector. Процесс настройки аналогичен тому, что был описан ранее для первого материала: с помощью Multiply связываем обычную текстуру и новый нод Constant3Vector. Компилируем и смотрим результат в сцене.

Пример схемы для изменения оттенка текстуры и отображение новой текстуры на уровне
Скриншот: Unreal Engine / Epic Games

Примечание

Комплексные связки можно выстраивать на ходу. Когда «нить» вытягивают из слота нода, достаточно отпустить ЛКМ — и на этом месте откроется список Expressions.

Быстрое создание нодов
Анимация: программа Unreal Editor

Зная эти базовые приёмы, можно создавать уникальные комбинации нодов с различными характеристиками: добавить эффект грязи/ржавчины (как в предыдущем материале) или подключить дополнительные слоты, например свечение (Emission).

Пример настройки светящегося контура для материала
Скриншот: Unreal Engine / Epic Games

Стоит помнить, что любые внесённые изменения потребуют компиляции (Apply). Чем сложнее структура материала — тем больше времени займёт этот процесс.

Настройка материалов в реальном времени

Напоследок рассмотрим сегмент материалов, которые можно настраивать в реальном времени без постоянных компиляций. Под этим сегментом подразумевают зависимые копии материалов, или инстанс‑материалы (Material Instance). Их использование упрощает процесс разработки и улучшает производительность в целом.

В Content Browser находим последний материал, над которым мы работали. Вызываем всплывающее меню нажатием ПКМ по значку ассета и выбираем самый верхний пункт — Create Material Instance.

Создание инстанс-материала
Скриншот: Unreal Engine / Epic Games

В папке появилась копия ассета с припиской _Inst. Переместим его на поверхность любого меша, в рамках туториала это по-прежнему будет пол.

Текущая задача заключается в том, чтобы задать параметр регулировки масштаба текстуры в режиме реального времени. Возвращаемся в граф оригинального материала, находим нод Constant, связанный с размером текстур, кликаем по нему ПКМ и выбираем Convert to Parameter.

Выбор опции Convert to Parameter
Скриншот: Unreal Engine / Epic Games

После конвертации редактор предложит переименовать нод. Назовём его Size. Нажимаем Apply и заходим в Material Instance Editor (двойной клик ЛКМ по значку созданного инстанс-материала). В панели Details во вкладке Global Scalar Parameter Values появился параметр Size со значением выставленных ранее текстурных координат. Отметим его галочкой. Для наглядности перетащим окно в сторону, чтобы видеть сцену, и выкрутим ползунок Size. Узор текстуры материала начнёт меняться в реальном времени.

Установка параметра для регулировки масштаба текстуры и его изменение в реальном времени
Анимация: программа Unreal Editor

Аналогичным способом можно конвертировать и другие свойства (цвет, отражение, нормали и так далее), без дополнительных манипуляций в Material Graph и постоянных компиляций после каждого изменения.

Регулировка оттенка материала в реальном времени. В данном случае опция Convert to Parameter применена на нод Constant3Vector
Анимация: программа Unreal Editor

Итоги

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

Анимация: программа Unreal Editor

Для создания более комплексных схем нодов рекомендуется изучить структуру материалов из контента Starter Pack и ознакомиться с функциональностью компонентов в официальной документации.

Нейросети для работы и творчества!
Хотите разобраться, как их использовать? Смотрите конференцию: четыре топ-эксперта, кейсы и практика. Онлайн, бесплатно. Кликните для подробностей.
Смотреть программу
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована