Материалы и узловой Material Editor

Урок про материалы Unreal и узловой редактор, который по сути является визуальным шейдером.

Материал — это описание того, как поверхность отражает свет: её цвет, шероховатость, металличность и рельеф, собранное в узловом графе.

Материал — это шейдер

Если вы проходили курс про шейдеры, материал Unreal вам понятен сразу: это визуальный шейдер. Вместо написания кода на HLSL вы соединяете ноды, а Unreal компилирует граф в шейдерный код для видеокарты. Узловой подход делает шейдеры доступными художникам.

Главные входы материала

У базового материала есть финальная нода с входами. Подключая к ним значения и текстуры, вы описываете поверхность.

ВходЧто задаёт
Base ColorБазовый цвет поверхности
MetallicНасколько поверхность металлическая (0 или 1)
RoughnessШероховатость: 0 — зеркало, 1 — матовая
NormalКарта нормалей — рельеф без лишней геометрии
EmissiveСамосвечение поверхности

Узловой граф

[Texture: BrickColor]  --> Base Color
[Texture: BrickNormal] --> Normal
[Constant 0.8]         --> Roughness
[Constant 0.0]         --> Metallic
                  ====> [Material Result]

Физически корректное освещение

Unreal использует модель PBR (Physically Based Rendering). Это значит, что параметры материала имеют физический смысл: металл и диэлектрик ведут себя по-разному, шероховатость влияет на размытие отражений. Благодаря PBR один и тот же материал выглядит правдоподобно при любом освещении.

Material Instance — параметры без пересборки

Менять сам материал каждый раз дорого: правка графа требует перекомпиляции шейдера. Поэтому в графе выделяют параметры (Parameter-ноды), а затем создают Material Instance — «экземпляр» материала, где эти параметры можно крутить мгновенно, без рекомпиляции. Так из одного материала кирпича делают десяток оттенков.

Как работает под капотом

При сохранении материала Unreal превращает граф нод в HLSL-код и компилирует его в шейдер под целевые платформы. Это объясняет, почему первая загрузка проекта долгая — компилируются тысячи шейдеров. Material Instance не порождает новый шейдер: он лишь подставляет другие значения параметров в уже скомпилированный, поэтому работает мгновенно.

Частые ошибки

  • Менять базовый материал ради цвета. Для вариаций используйте Material Instance и параметры.
  • Игнорировать Roughness. Без неё всё выглядит либо зеркальным, либо неестественно матовым.
  • Цветная карта нормалей в Base Color. Normal map подаётся только во вход Normal.

Типы материалов и прозрачность

У материала есть свойство Blend Mode, определяющее, как он смешивается с фоном. Opaque — непрозрачный, самый дешёвый и частый. Masked — с дырками по маске: так делают листву и сетку-рабицу, где пиксель либо есть, либо нет. Translucent — полупрозрачный: стекло, вода, дым; он дороже, потому что движку приходится смешивать цвет поверхности с тем, что за ней. Выбор режима влияет и на вид, и на производительность.

Отдельно стоит Material Function — переиспользуемый кусок графа, как функция в коде. Если одна и та же цепочка нод нужна в десятке материалов (скажем, эффект мокрой поверхности), её выносят в Material Function и подключают одной нодой. Это тот же принцип борьбы с дублированием, что и в программировании, только в мире шейдеров, и он экономит массу времени при поддержке библиотеки материалов.

Итоги

  • Материал — это узловой шейдер; граф компилируется в код для видеокарты.
  • Главные входы: Base Color, Metallic, Roughness, Normal, Emissive.
  • Unreal использует физически корректную модель PBR.
  • Material Instance меняет параметры мгновенно, без перекомпиляции шейдера.
Проверьте себя
1. Чем по сути является материал в Unreal?
AТекстурой
BУзловым шейдером, компилируемым в код для видеокарты
CМоделью
DЗвуком
2. Зачем нужен Material Instance?
AЧтобы создать новый шейдер
BЧтобы менять параметры мгновенно без перекомпиляции шейдера
CЧтобы удалить материал
DЧтобы импортировать модель
3. Что задаёт вход Roughness?
AЦвет поверхности
BШероховатость: от зеркальной до матовой
CПрозрачность
DСамосвечение