Модульные материалы(Material Layers) в Unreal Engine

Привет друзья. И я хочу рассказать и поделиться с вами гибким альтернативным подходом к созданию сложных и смешенных материалов в Unreal Engine. Данный подход упрощает работу со сложными материалами и повышает читаемость шейдера.

Модульные материалы(Material Layers) в Unreal Engine

Но почему то в интернете очень мало материалов по данному подходу.

Что такое Material Layers?

Данный подход является иным подходом к созданию шейдеров материалов в UE в противовес классическому подходу - который заключается в создании единого мастер материала, что зачастую приводит к восхвалении Макаронного монстра.

Пример лапши от самих Эпиков
Пример лапши от самих Эпиков

Новый подход означает что материалы теперь изначально разделяются на Material Layers, и фунции смешивания Layers Blend - аосновная работа по созданию итогового результата будет проиходить в Material Instances во вкладке Layer Parametrs,

снова пример от Эпиков
снова пример от Эпиков

Где мы по итогу сможем жонглировать целыми модулями.

Как его включить?

Данный метод давно не новый, впервые появился в 4.19 и начиная с версии 4.26 он доступен в движке по умолчанию.

Впрочем если вы используете более старую версию и лень ставить что то новое - то вы сможете включить его через настройки:

<b>И не забудьте пеерезагрузить</b>
И не забудьте пеерезагрузить

И вот у нас в списке материалов появились две новые штуки:

Модульные материалы(Material Layers) в Unreal Engine

Через которые мы собственно и будем работать с нашими новыми модульными материалами.

Начало Работы:

Но перед этим сделаем основу для нашего нового мастер материала:

Модульные материалы(Material Layers) в Unreal Engine

Да на этом пока все. (я серьезно!)

И теперь у нас в материал Инстансах повляется такая вкладка:

Через которую мы и будем работать с Material Layer и Layer Blend

Которыми сможем свободно жонглировать.

Модульные материалы(Material Layers) в Unreal Engine

Если вкладка случайно закроется - не бойтесь ее вновь можно будет открыть тут:

Модульные материалы(Material Layers) в Unreal Engine

Material Layer - это наш новый аналог "Material Function" (можно подлючать ранее созданные функции с выходом на Material Atribute) выполняющий роль нашего нового Модуля Мастер материала.

Внутри него мы должны прописать самую обычную логику нашего материала.

Заметьте что Вход Функции - должен остаться. Что критично для слоев ландашафта.

минималка. 
минималка. 

Layer Blend - Это тоже функция. Функция для смешивания слоев.
Внутри нее мы должны прописать способ как слои будут соседних уровней будут влиять друг на друга.

Модульные материалы(Material Layers) в Unreal Engine

В динамике это будет выглядеть вот так:

Простейшее смешивание по параметру.

Что бы было еще понятнее, можно представить нашу систему слоев в виде вот такого вот бутерброда из функций:

Модульные материалы(Material Layers) в Unreal Engine

Важно отметить что ПОРЯДОК выполнения слоев идет снизу вверх(!) .
Но при этом первым мы будем видеть ВЕРХНИЙ СЛОЙ если он перекроет все остальное

Модульные материалы(Material Layers) в Unreal Engine

Первым идет нулевой слой с задником. Потом тот что над ним и так далее. И на выходе получаем бутерброд:

Модульные материалы(Material Layers) в Unreal Engine

Впрочем мы cможем в любой момент менять местами, добавлять и заменять все во вкладке layer parametrs:

А еще мы можем делать инстансы и от слоев и смешиваний.

Модульные материалы(Material Layers) в Unreal Engine

В которых можно заранее сделать нужные настройки (ТОЛЬКО в UE5)

Польза от Material Layer

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

Мы получаем невероятную гибкость по смешиванию созданию нужного шейдера из наших модулей. Удобство возможной настройки артдизайна. Так как можно будет работать со всеми модулями(функциям/слоями) одновременно.

<b>Набор стандартных MLB в движке</b>
Набор стандартных MLB в движке

Данный подход идеален для создания эффектов воздействия эффектов окружающей среды на персонажа и окружение.

Например общих слоев мха, пыли снега поверх ассетов окружения, или же системы повреждений для персонажа /объектов:

На которых разные эффекты накладываются в зависимости от координат ассета.

***

Landscape Material

Так же данный кажется идеально подходит и для создания материала ландшафта .. кажется.

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

Модульные материалы(Material Layers) в Unreal Engine

(!)ЕСЛИ ВЫ ЗНАЕТЕ КАК ИСПОЛЬЗОВАТЬ В ЛАНДШАФТАХ MATERIAL LAYERS ПО ДРУГОМУ ДАЙТЕ ЗНАТЬ!(!)

Впрочем если мы собираемся сделать АВТОЛАНДШАФТ - то костыли не обязательны. Будь то ландшафт на масках из генератора, или на регуляции углов склонов.

Итак Нюансы, они же костыли:

Нюанс 1: Black ground Layer

Для ландшафта нам нужен ОСОБЫЙ слой задника с абсолютно не отражающим материалом.

<b>Background Layer</b>
Background Layer

Почему то не выйдет поместить нейтральный слой с условной грязью или землей. А спекуляр по умолчанию будет равен 0.5 из за чего в результате наложений и сложений Материальных атрибутов спекулярные отражения дают засветки

Нюанс 2: Мастер материала Ландшафта

Если мы собираемся рисовать на ландшафте через систему покраски материала - то наш материал должен будет иметь следующий вид;

Landscape Material
Landscape Material

Где мы должны задать Cutomized UV №__ на которых мы сможем хранить данные о слоях ландшафта. На каждом UV можно хранить по 2 Landscape Layer Sample - образца слоя ландшафта. (через make float 2)

Обратите внимание в данном мастер материале название ОБРАЗЦА СЛОЯ и НАЗВАНИЕ в layer parameters должны совпадать. Это потребует внимательности и Cntl+С Cntrl+V

Модульные материалы(Material Layers) в Unreal Engine

Увы максимальное число customizedUV - 7 (минус 1 на UV0), а следовательно максимальное число ландшафтных слоев на которых сможем рисовать - 12

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

<b>UV0 задействовано под текстуры и непонятно почему его вообще можно выбрать? </b>
UV0 задействовано под текстуры и непонятно почему его вообще можно выбрать?

Нюанс 3: Материал Смешивания

К сожалению костыль с UV приводит и к тому что нам нужно будет и подключить СМЕШИВАНИЕ через задействованный атрибут customizedUV. Причем для каждого слоя ландшафта индивидуально обратно к нужному каналу.

Модульные материалы(Material Layers) в Unreal Engine

Обратите внимание, Что в НОДЕ:
X =R и Y = G.

<b>Одно и то же</b>
Одно и то же

Можно конечно чуть чуть упростить себе задачу и сразу сделать ОБЩУЮ функцию для подключения:

<b>8 выходов на 8 слоев ландшафта. </b>
8 выходов на 8 слоев ландшафта. 

После чего скопировать функцию смешивание нужное количество раз . И ручками сделать нужно 8 соединений. В каждой отдельной MLB, (мне до сих пор кажется что это костыль без которого можно было бы обойтись)

<b>и подаем на альфу</b>
и подаем на альфу

И раз уж тут тут речь идет про костыли, не могу не поделится костылем из свитчей что бы выбрать нужный Х(R) или Y(G) канал я мог бы сразу в в материал инстансе, без захода в мастер материал с попытками вспомнить на каком ЮВ какой слой лежит:

<b>True - то что слева, False - идет по ветке что справа. </b>
True - то что слева, False - идет по ветке что справа. 

Ну и что что это костыль, главное он красивый и работает.

Тим Свинни нам реально нужен свитч на большее число элементов
Тим Свинни нам реально нужен свитч на большее число элементов

Но что если мы захотим сделать смешивание материалов как по другому? Например по карте высот высот?

---

Чисто для справки в UE 5.3 Карты Дисплейсмента пока отключены. Так как не работает Тесселяция. Но они имеются в Material attribute

Но их планируют вернуть на постоянке в 5.4, или можно включить через конфиг для 5.3:

Модульные материалы(Material Layers) в Unreal Engine

Но пока ничто не может нам помешать хранить в этом канале нужные нам данные Карты Высот. Тем более что Карты Высот и Дисплейсмент это буквально одна и та же информация - просто расчет на разнаю реализацию .
Карта высот предполагает наличие уже готового меша, А дисплейсмент включение тесселяции объекта.

---

Тогда мой Layer Blend будет выглядеть как то так:

Модульные материалы(Material Layers) в Unreal Engine

В случае же Автоматериала ландшафта связываться с UV нам даже не прийдется.

Модульные материалы(Material Layers) в Unreal Engine

***

Вывод:

Вызывает удивление что среди обучающих материалов данный подход представлен чуть менее чем никак.

Даже несмотря на то данный подход дефакто давно одобрен в качестве стандарта UNREAL ENGINE - даже в обучающих материалах в Conten Example по прежнему во всю наворчивают лапшу из запутанных нодов - вместо того бы пользоваться этим модульным подходом. Такое ощущение что многие спецы стараются усложнить восприятие работы с шейдерами намеренно, окончательно запутав всех нас во славу бога макаронного бога.

А попытка искать по словосочетанию Material Layers скорее выкинет вас на совершенно левые ролики про старый подход с покраской ландшафта через landscape blendlayers.
Вот поэтому я и использую слово "МОДУЛИ", а данный подход разбивает Шейдер Материала на удобные для понимания функции Слоя, Материал на конкретных слоях и Функции смешивания. Которые больше не нужно ручками соединять нодами внутри мастер материала.

Читаемость каждой конкретной части вырастает. Упрощается процесс создания новых инстансов. Упрощается модификация существующих. Проще будет донести информацию до коллег, да и вести документацию. Левел Дизайнерам будет проще делать ландшафты создавая материал инстансы самим, а не бегая каждые 5 минут к техарту с просьбой поменять что то в том или ином мастер материале.

Оптимизация?

Нужно отметить что данный подход не является способом Оптимизации шейдера.

Каждый новый слой/layer точно так же делает вызов Drawсall, и как итог материал на 100 тектурных объектов внутри уже не будет отливать зеленью на экране вида оптимизации. А если еще и накрутить что то сложное с паралаксом, WPO - то все совсем становится печальным.

слегка коричневый шейдер - для ландшафта это еще не самое тяжелое.
слегка коричневый шейдер - для ландшафта это еще не самое тяжелое.

Впрочем точно такая ситуация будет и при классическом переусложнении шейдеров.

Но в отличие от типичных Макарроных запутанных Нод- такой модульный материал легче поддается оптимизации и виздоизменению

2424
40 комментариев

https://www.artstation.com/artwork/dyJxvx
ОП, глянь вот это. Тут решены все проблемы с customizedUVs и т.д.

1

Вечером ознакомлюсь , спасбо

Точнее уже ближе к ночи ^-^

по сути слои это тоже самое что использовать материальные функции?

Да - material layer это функция
Более того ее даже можно использовать как обычную функцию в обычном материале

НО НЮАНС заключается в том что в классическом материале что бы заменить одну функцию на другую мы должны будем создавать отдельный мастер материал и внутри него менять фунекции местами, то в случае material layered материал - число функций и их порядок мы можем менять сразу из материал инстанса не заходя в ММ и не плодя лишние шейдеры о которых мы банально можем забыть

1

Комментарий недоступен