Модульные материалы(Material Layers) в Unreal Engine
Привет друзья. И я хочу рассказать и поделиться с вами гибким альтернативным подходом к созданию сложных и смешенных материалов в Unreal Engine. Данный подход упрощает работу со сложными материалами и повышает читаемость шейдера.
Но почему то в интернете очень мало материалов по данному подходу.
Что такое Material Layers?
Данный подход является иным подходом к созданию шейдеров материалов в UE в противовес классическому подходу - который заключается в создании единого мастер материала, что зачастую приводит к восхвалении Макаронного монстра.
Новый подход означает что материалы теперь изначально разделяются на Material Layers, и фунции смешивания Layers Blend - аосновная работа по созданию итогового результата будет проиходить в Material Instances во вкладке Layer Parametrs,
Где мы по итогу сможем жонглировать целыми модулями.
Как его включить?
Данный метод давно не новый, впервые появился в 4.19 и начиная с версии 4.26 он доступен в движке по умолчанию.
Впрочем если вы используете более старую версию и лень ставить что то новое - то вы сможете включить его через настройки:
И вот у нас в списке материалов появились две новые штуки:
Через которые мы собственно и будем работать с нашими новыми модульными материалами.
Начало Работы:
Но перед этим сделаем основу для нашего нового мастер материала:
Да на этом пока все. (я серьезно!)
И теперь у нас в материал Инстансах повляется такая вкладка:
Через которую мы и будем работать с Material Layer и Layer Blend
Которыми сможем свободно жонглировать.
Если вкладка случайно закроется - не бойтесь ее вновь можно будет открыть тут:
Material Layer - это наш новый аналог "Material Function" (можно подлючать ранее созданные функции с выходом на Material Atribute) выполняющий роль нашего нового Модуля Мастер материала.
Внутри него мы должны прописать самую обычную логику нашего материала.
Заметьте что Вход Функции - должен остаться. Что критично для слоев ландашафта.
Layer Blend - Это тоже функция. Функция для смешивания слоев.
Внутри нее мы должны прописать способ как слои будут соседних уровней будут влиять друг на друга.
В динамике это будет выглядеть вот так:
Что бы было еще понятнее, можно представить нашу систему слоев в виде вот такого вот бутерброда из функций:
Важно отметить что ПОРЯДОК выполнения слоев идет снизу вверх(!) .
Но при этом первым мы будем видеть ВЕРХНИЙ СЛОЙ если он перекроет все остальное
Первым идет нулевой слой с задником. Потом тот что над ним и так далее. И на выходе получаем бутерброд:
Впрочем мы cможем в любой момент менять местами, добавлять и заменять все во вкладке layer parametrs:
А еще мы можем делать инстансы и от слоев и смешиваний.
В которых можно заранее сделать нужные настройки (ТОЛЬКО в UE5)
Польза от Material Layer
Больше нет нужды лезть в матерматериал при каждом чихе . Можно менять и заменять функции слоев, функций смешиваний .
Мы получаем невероятную гибкость по смешиванию созданию нужного шейдера из наших модулей. Удобство возможной настройки артдизайна. Так как можно будет работать со всеми модулями(функциям/слоями) одновременно.
Данный подход идеален для создания эффектов воздействия эффектов окружающей среды на персонажа и окружение.
Например общих слоев мха, пыли снега поверх ассетов окружения, или же системы повреждений для персонажа /объектов:
На которых разные эффекты накладываются в зависимости от координат ассета.
***
Landscape Material
Так же данный кажется идеально подходит и для создания материала ландшафта .. кажется.
Увы слои материалов с ландшафтом не то, что бы не дружат - скорее обладают некоторыми нюансами или точнее будет даже сказать костылями, которые мы вынуждены будем использовать что бы ландшафт заработал.
(!)ЕСЛИ ВЫ ЗНАЕТЕ КАК ИСПОЛЬЗОВАТЬ В ЛАНДШАФТАХ MATERIAL LAYERS ПО ДРУГОМУ ДАЙТЕ ЗНАТЬ!(!)
Впрочем если мы собираемся сделать АВТОЛАНДШАФТ - то костыли не обязательны. Будь то ландшафт на масках из генератора, или на регуляции углов склонов.
Итак Нюансы, они же костыли:
Нюанс 1: Black ground Layer
Для ландшафта нам нужен ОСОБЫЙ слой задника с абсолютно не отражающим материалом.
Почему то не выйдет поместить нейтральный слой с условной грязью или землей. А спекуляр по умолчанию будет равен 0.5 из за чего в результате наложений и сложений Материальных атрибутов спекулярные отражения дают засветки
Нюанс 2: Мастер материала Ландшафта
Если мы собираемся рисовать на ландшафте через систему покраски материала - то наш материал должен будет иметь следующий вид;
Где мы должны задать Cutomized UV №__ на которых мы сможем хранить данные о слоях ландшафта. На каждом UV можно хранить по 2 Landscape Layer Sample - образца слоя ландшафта. (через make float 2)
Обратите внимание в данном мастер материале название ОБРАЗЦА СЛОЯ и НАЗВАНИЕ в layer parameters должны совпадать. Это потребует внимательности и Cntl+С Cntrl+V
Увы максимальное число customizedUV - 7 (минус 1 на UV0), а следовательно максимальное число ландшафтных слоев на которых сможем рисовать - 12
Если захотим большее число ручных слоев, то придется идти и рисовать лайндшафт старым способом. Либо же сделать итоговый материал смешенным способом, или сразу в качестве модуля материала использовать автоматериал на несколько текстурок который будет рисовать склоны, верхушки и низины.
Нюанс 3: Материал Смешивания
К сожалению костыль с UV приводит и к тому что нам нужно будет и подключить СМЕШИВАНИЕ через задействованный атрибут customizedUV. Причем для каждого слоя ландшафта индивидуально обратно к нужному каналу.
Обратите внимание, Что в НОДЕ:
X =R и Y = G.
Можно конечно чуть чуть упростить себе задачу и сразу сделать ОБЩУЮ функцию для подключения:
После чего скопировать функцию смешивание нужное количество раз . И ручками сделать нужно 8 соединений. В каждой отдельной MLB, (мне до сих пор кажется что это костыль без которого можно было бы обойтись)
И раз уж тут тут речь идет про костыли, не могу не поделится костылем из свитчей что бы выбрать нужный Х(R) или Y(G) канал я мог бы сразу в в материал инстансе, без захода в мастер материал с попытками вспомнить на каком ЮВ какой слой лежит:
Ну и что что это костыль, главное он красивый и работает.
Но что если мы захотим сделать смешивание материалов как по другому? Например по карте высот высот?
---
Чисто для справки в UE 5.3 Карты Дисплейсмента пока отключены. Так как не работает Тесселяция. Но они имеются в Material attribute
Но их планируют вернуть на постоянке в 5.4, или можно включить через конфиг для 5.3:
Но пока ничто не может нам помешать хранить в этом канале нужные нам данные Карты Высот. Тем более что Карты Высот и Дисплейсмент это буквально одна и та же информация - просто расчет на разнаю реализацию .
Карта высот предполагает наличие уже готового меша, А дисплейсмент включение тесселяции объекта.
---
Тогда мой Layer Blend будет выглядеть как то так:
В случае же Автоматериала ландшафта связываться с UV нам даже не прийдется.
***
Вывод:
Вызывает удивление что среди обучающих материалов данный подход представлен чуть менее чем никак.
Даже несмотря на то данный подход дефакто давно одобрен в качестве стандарта UNREAL ENGINE - даже в обучающих материалах в Conten Example по прежнему во всю наворчивают лапшу из запутанных нодов - вместо того бы пользоваться этим модульным подходом. Такое ощущение что многие спецы стараются усложнить восприятие работы с шейдерами намеренно, окончательно запутав всех нас во славу бога макаронного бога.
А попытка искать по словосочетанию Material Layers скорее выкинет вас на совершенно левые ролики про старый подход с покраской ландшафта через landscape blendlayers.
Вот поэтому я и использую слово "МОДУЛИ", а данный подход разбивает Шейдер Материала на удобные для понимания функции Слоя, Материал на конкретных слоях и Функции смешивания. Которые больше не нужно ручками соединять нодами внутри мастер материала.
Читаемость каждой конкретной части вырастает. Упрощается процесс создания новых инстансов. Упрощается модификация существующих. Проще будет донести информацию до коллег, да и вести документацию. Левел Дизайнерам будет проще делать ландшафты создавая материал инстансы самим, а не бегая каждые 5 минут к техарту с просьбой поменять что то в том или ином мастер материале.
Оптимизация?
Нужно отметить что данный подход не является способом Оптимизации шейдера.
Каждый новый слой/layer точно так же делает вызов Drawсall, и как итог материал на 100 тектурных объектов внутри уже не будет отливать зеленью на экране вида оптимизации. А если еще и накрутить что то сложное с паралаксом, WPO - то все совсем становится печальным.
Впрочем точно такая ситуация будет и при классическом переусложнении шейдеров.
Но в отличие от типичных Макарроных запутанных Нод- такой модульный материал легче поддается оптимизации и виздоизменению
по сути слои это тоже самое что использовать материальные функции?
Да - material layer это функция
Более того ее даже можно использовать как обычную функцию в обычном материале
НО НЮАНС заключается в том что в классическом материале что бы заменить одну функцию на другую мы должны будем создавать отдельный мастер материал и внутри него менять фунекции местами, то в случае material layered материал - число функций и их порядок мы можем менять сразу из материал инстанса не заходя в ММ и не плодя лишние шейдеры о которых мы банально можем забыть
Комментарий недоступен
Ты не описал что в мастер материале нужно включить галочку Use Material Attributes.
Если чел этого не знает) То вероятно ему еще рано пробовать этот способ)
Но да этоо делается путем выбора выхода для материала)
Нужно писать как есть - Слои Материалов.А по смыслу это модули)
С которыми можно играться
еще раз поптыка найти инфу по этому способу как раз будет в 90% случаях вести как раз на старый способ который СЮРПРИЗ тоже лайеред материалы)
О чем в статье рассказано и даже дана ссылка на покрас ландшафта по старинке
Для простых материалов ландшафта это сработает, для сложных врагу не пожелаю, хотя нет пожелаю.
Почему?
На самом деле тут по большей части разница только в том что при работе со слоями- можно быстрее выбирать конкретную функцию материала сразу в Материал Инстансе
А вот при классической работе с ландшафтом - придется лезть в мастер материал
По сути способ работы облегчается
Хотя к данному подходу нужно привыкнуть.
Хотя конечно у "модульного подхода" через слои пока главное огранение что я вижу - это что количество слоев можно жестко задать лишь числом в 14 (по 2 штуки на одну customized UV)
Впрочем я планирую сделать большую статью по анрилу и шейдера ландшафта на этой или следующей недели
Где подробно распишу как делать и как усложнять. И как работать)