Материалы и узловой 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 меняет параметры мгновенно, без перекомпиляции шейдера.