
Глава 2 раскрывает базовые понятия и основной инструментарий создания динамических материалов в UE 5.
Несмотря на существование множества подходов к созданию динамики в проекте, данное исследование фокусируется на ключевых, наиболее универсальных методах.
В рамках этой главы также подробно рассматривается принцип работы основных нод, которые составят основу для разработки широкого спектра анимированных шейдеров в дальнейшем.
Для начала нужно определить — что из себя представляет текстура в CGI. Текстура — это 2D-изображение, спроецированное на поверхность 3D-объекта через UV-координаты; оно может задавать цвет, нормаль, прозрачность, свечение и т. д.
Анимированная текстура — любой подобный ресурс, который изменяется во времени: это может быть сдвиг UV, проигрывание покадрового flipbook-а, наложение движущегося шума, или даже более сложная схема, где текстура управляет деформацией меша [Vertex Animation Texture — VAT].
В UE5 любая из составляющих материала [Albedo, Normal, Emissive, Roughness/Metallic, Opacity, World Position Offset etc] может быть привязана ко времени или иным параметрам, и, следовательно, анимирована как в связке, так и по отдельности.

Перед тем как приступить к разбору первой ноды стоит обратить внимание на то, что UV координаты представляют собой то же самое, что и XY, только в пространстве текстур. Так, XYZ присутствуют в 3D пространстве, RGB в цветовом и UVW в пространстве текстур.
В своей основе нода Texture Coordinate позволяет изменять отображение текстуры, используя UV координаты модели, а именно выводить координаты текстуры в форме двухканального вектора (U, V), который впоследствии может переключаться между UV сетами и управлять тайлингом в настройках материала.
Ее можно вызвать, нажав в графе по пустому пространству ПКМ и вписав TextureCoordinate / TextureCoord, либо одновременно нажав «U» + ЛКМ.

Добавление ноды Texture Coordinate.
Текстура с UV-checker-ом на base mesh-ах.

Изначально подключенная в Texture Sample [основная нода для добавления различных текстур] нода Texture Coordinate ничего не меняет, полностью повторяя загруженную текстуру.
Рассмотрим поле Material Expression и настройки, которые в нем представлены.
— Coordinate Index отвечает за то, на какой UV канал будут влиять последующие манипуляции с нодой. Так, например, у встроенных в UE базовых мешей [Static Mesh] есть 2 UV-сета: для текстур [в основном это UV channel 0] и для запекания света [light map — UV channel 1]. Обычно в данном поле остается базовое значение — 0.


1 — UV-сет 0 [для текстур]; 2 — UV-сет 1 [для запечки света].
— Далее идут UTiling и VTiling, отвечающие за то, сколько раз текстура будет укладываться в площадь 3D-модели, то есть «тайлиться».
— Если текстура отражена [mirrored], то при нажатии un Mirror U|V [true] зеркальность убирается.
Визуализация применения разных настроек тайлинга.
Визуализация применения разных настроек тайлинга.
World Position выводит положение текущего пикселя в мировом пространстве.
Чтобы понять и разобраться, как именно работает данная функция, рассмотрим на примере визуализации через Base Color.
Absolute World Position.
Если подвинуть куб — текстура не будет двигаться вместе с мешем, так как она проецируется относительно мировых координат и не привязана к UV развёртке объекта.
Это позволяет привязать анимацию текстуры к абсолютному положению в мире, что полезно для создания эффектов, которые не должны двигаться вместе с объектом.
Изменение позиции static mesh-a с текстурой Absolute World Position.

Теперь попробуем привязать Absolute World Position к Texture Sample, а затем к самому материалу.
Так как здесь используются абсолютные мировые координаты, изначально каждый тайл данной текстуры будет равен 1 мере измерения UE5, то есть 1 сантиметру.
Тайлящуюся текстуру можно увидеть, только если очень близко подлететь к мешу.
1 — нода AWP, напрямую подключенная к текстуре и затем к материалу; 2 — AWP, поделенная на 10; 3 — AWP, поделенная на 100 — 1 метр в UE;


1 — второй куб, приближение х10; 2 — третий куб, приближение х100 — 1 метр в системе координат UE.


Gizmo color — surface colors.

Нода Time возвращает прошедшее с момента начала симуляции время [например, если нажать Play во вьюпорте [viewport] UE5 отсчет сбрасывается; в Material Editor время отсчитывается с момента открытия Unreal Editor; в Level-e будет показываться время с момента открытия того или иного уровня].
Time является одним из ключевых аспектов для создания динамически изменяющихся материалов, к примеру, совместно с нодами Panner, Sine или другими, зависящими от времени, операторами.
1 — нода Time, подключенная в DebugScalarValues; 2 — нода Time, подключенная в Emissive Color материала.
При True счетчик времени продолжит работать даже если остановить симуляцию. Например, это может быть полезно при внесении правок в те или иные элементы UI, чтобы видеть изменения в реальном времени.
При True позволят создать цикл, который будет проигрываться и сбрасываться по достижении указанного числа.
Примеры: 1 — Time в связке с Sine; 2 — Time в связке с Panner и Noise Texture.
Примеры: 1 — Time в связке с Panner и Noise Texture; 2 — Time в связке с Sine.
Нода Time прекрасно сочетается с тригонометрическими функциями Sine и Cosine для создания зацикленных эффектов. Эти две ноды выводят колеблющееся между -1 и 1 значения, что помогает создать «пульсирующие» эффекты.
Единственное значимое различие между Sine и Cosine это стартовая точка: (0,0) для синуса и (0,1) для косинуса.
LinearGradient, подключенный в Sine и Cosine, а затем в Base Color.
Стоит отметить, что Base Color может выводить значения в диапазоне от 0 до 1. Это означает, что нам не имеет смысла иметь значения ниже 0, а потому целесообразным будет переместить колебания в область [0,1] вместо [-1,1].
Способы переместить колебания в область [0,1]
Визуализация полученных графиков.
LinearGradient, подключенный в Sine и Cosine, перемещенный в область [0,1], а затем подключенный в Base Color.
Можно заметить, что градиент стал равномерным, что дает более плавные колебания для последующего анимирования материалов.
На данном этапе также становится заметно второе различие между нодой Sine и Cosine. После всех проведенных манипуляций над выходными значениями можно заметить, что точка старта у косинуса — (0,1), в то время как у синуса — (0,0.5), что может быть не самым удобным решением для стартовой точки проигрывания той или иной анимации.
1 — колебания Emissive Color; 2 — World Position Offset, управляемый Sine и Cosine + колебания Emissive Color; 3 — World Position Offset.
1 — колебания Emissive Color; 2 — World Position Offset, управляемый Sine и Cosine + колебания Emissive Color; 3 — World Position Offset.

Panner предназначен для создания эффекта движущихся текстур. Нода берет координаты UV модели и постоянно добавляет к ним некоторое значение на основе времени, создавая иллюзию скольжения текстуры по поверхности.
Скорость выражается в условных единицах на секунду. Значение 1 означает, что текстура полностью смещается за одну секунду. Отрицательные значения скоростей инвертируют направление движения.
Time — принимает значение, используемое для определения текущего положения. Зачастую это нода Time, обеспечивающая постоянное смещение, но также может использоваться константа или скалярная величина.
Speed — тоже самое, что и Speed X, Speed Y, но выведено во входные данные ноды на случай, если нужно будет сделать параметр, о чем подробнее будет сказано позже в данной главе.
1 куб — speed 1.0; 2 куб — speed 0.05.

Speed X — определяет скорость для смещения координат в направлении U.
Speed Y — определяет скорость для смещения координат в направлении Y.
Const Coordinate — работает как в ноде TextureCoordinate и позволяет выбрать UV-сет, на который будет воздействовать нода Panner. Если поставить спонтанное число, под которое не будет существовать UV-сета, то выйдет ошибка.
Fractional part — используется для вывода более точных расчетов и результата [0, 1), но зачастую разница не настолько заметна.
Const Coordinate 0, 1 и 2.

Rotator выводит координаты UV-текстуры в виде двухканального векторного значения, которое можно использовать для создания вращающихся текстур
По своим входным данным данная нода похожа на Panner, но также есть и небольшие различия.
Speed — определяет скорость вращения. Отрицательные числа будут инвертировать движение в обратную сторону.
Center X — определяет координату X, используемую в качестве центра поворота (0.5 — центр текстуры).
Center Y — определяет координату Y, используемую в качестве центра поворота.
Time и Coordinate работают по тому же принципу, что и в Panner-e.
1 куб — speed 1; 2 куб — speed 0.25.
Пример шейдера, собранного с помощью сложных методов деформации.

Сейчас речь пойдет не про Noise, который можно добавить в ноду Texture Sample как текстуру, а про отдельную самостоятельную единицу, которая создает случайный бесконечный неповторяющийся процедурный шум, генерацию которого можно контролировать.
Scale — изменяет общий размер паттерна. Чем меньше число, тем больше размер шума.
Quality — настройка производительности. Меньшие значения отрабатывают быстрее, но отстают в качестве, в то время как более высокие значения работают медленнее, но выглядят лучше.
Анимированный Scale у Noise.

Function — техническая настройка, позволяющая выбрать метод генерации шума. Наиболее распространенный из всех — Fast Gradient 3D Texture, так как он использует более оптимизированный алгоритм генерации и является более дешевым относительно остальных.
Наглядно это можно увидеть, если навести курсором на каждый из вариантов и прочитать всплывающие подсказки, обращая внимание на количество «instructions per level». В данном случае это — 16.
Fast Gradient 3D Texture Noise также позволяет сделать объемный, «волюметрический» шум.
Различные Function в ноде Noise.
Turbulence — при включенной «турбулентности» на выходе будут генерироваться паттерны, созданные засчет вывода абсолютных значений [таким образом можно получить более четкие, оформленные линии, позволяющие сделать, например, карту высот для холмистой местности или карту, по которой должны располагаться определенные объекты].
Levels — позволяет выставить значение детализации паттерна. Чем больше число — тем более подробный и, вместе с этим, более дорогой будет результат.
Отключенный и включенный Turbulence у Noise.
Output Min/Max — определяет наименьшее и наибольшее значение вывода. Зачастую в min вбивается 0 для того, чтобы избавиться от отрицательных значений [черных пятен], но в некоторых ситуациях они также могут пригодиться.
Level Scale — определяет, насколько сильно меняется масштаб для каждого нового подуровня.
Tiling — для функций шума, поддерживающих тайлинг, позволяет зацикливать нойз.
Repeat Size — при включенном тайлинге позволяет определить как часто должен повторяться паттерн.
Noise, подключенный к Absolute World Position.

Gradient позволяет создавать плавные переходы, которые можно использовать, например, как маски для контроля проявления эффектов в определённых местах, для смешивания материалов, чтобы процедурно разнообразить схожие ассеты на уровне, даже для создания паттернов для спецэффектов.
В UE5 существует довольно много нод и подходов для создания различных градиентов, но в данном исследовании будет рассмотрено 3 основных — LinearGradient, RadialGradientExponential, а также градиенты, создаваемые на основе World Position.
Куб слева — LinearGradient; куб справа — RadialGradientExponential.
Функция LinearGradient создает линейный градиент от черного к белому в направлении U и V, в зависимости о того, какой выход используется.
Linear Gradient, использованный как маска Opacity.
Linear Gradient, использованный как маска Opacity — нодовая система.
Функция RadialGradientExponential создает радиальный градиент с широкими возможностями кастомизации: радиус паттерна, его центр, резкость границ.
CenterPosition — позволяет задать смещение центра градиента [по умолчанию 0.5 по X и Y].
Radius — размер градиента от центра [при значении по умолчанию — 0.5 — границы градиента располагаются примерно на границе текстурного пространства].
Dencity — регулирует резкость градиента: чем больше число, тем резче градиент.
Invert Density — буквально инвертирует градиент: преобразует белое в черное, а черное в белое [принимает на вход bool значение].


Radial Gradient, использованный как маска Opacity.
Также для создания градиента, привязанного к определенным координатам, а не к UV объекта, можно маскировать World Position или, например World Position вместе с Object Position [для того, чтобы градиент начинался и распространялся относительно объекта, а не относительно мировых координат].
1 — Линейный градиент на основе Absolute World Position; 2 — Линейный градиент, привязанный к Object Position.
Нодовая система для создания линейного градиента на основе Absolute World Position.

Sprite sheet — это единая png текстура, содержащая в себе последовательность кадров [спрайтов] анимации, расположенных в виде сетки. Это могут быть как различные анимации для персонажей, так и спецэффекты по типу взрывов, водопадов и партиклов и прочего.
Flipbook — это механизм, который превращает статичное изображение, содержащее несколько кадров анимации [sprite sheet], в динамичную поверхность.
Он автоматически последовательно «показывает» движку только один маленький фрагмент большой текстуры за раз, сменяя картинки с заданной скоростью.
Для начала нужно загрузить изображения в проект. Стоит отметить, что иногда спрайты изначально уже разделены покадрово, что в отдельных случаях немного упрощает процесс создания анимации.
Если все же все анимации персонажа находятся на 1 спрайт-листе, тогда нужно нажать на текстуру ПКМ и выбрать Sprite Actions — Extract Sprites. Далее откроется окно с настройками разделения.
Способ создания flipbook-анимации № 1 — подготовка.

Справа, в Settings — Sprite Extract Mode, нужно выбрать grid, чтобы вручную настроить сетку и ровно порезать покадровую анимацию. Ниже, в появившейся вкладке Grid, располагается большое количество различных настроек.
Основное, что понадобится, — Cell Width и Cell Height. Нужно поделить вписанное в ячейку значение на количество столбцов/строк в данном спрайт-листе, чтобы получить размер одной картинки.
Остальные настройки необходимы для создания более точной сетки, если спрайты расположены неровно [что в свою очередь может помешать сборке гладкой анимации без дерганий и иных дефектов], но зачастую можно ограничиться и простыми настройками высоты-ширины.
Способ создания flipbook-анимации № 1 — Paper Flipbook.
Когда все настроено — нужно нажать Extract и получить все изображения в формате Sprite [не Texture].
Далее выбираются все кадры, относящиеся к одной полноценной анимации [например, idle, run, jump], затем нужно нажать ПКМ — Create Flipbook.
Последнее, что осталось сделать — выбрать в открывшемся окне Frames Per Second [FPS] и покадровая анимация готова.
В случае, если изображения изначально разделены и загружаются в движок как Texture, необходимо выбрать все картинки — ПКМ — Sprite Actions — Create Sprite. Далее действия те же.
Paper Flipbooks.

Вновь возвращаемся к Material Graph, так как в нем существует непосредственно нода FlipBook.
Animation Phase — определяет скорость воспроизведения анимации. [Зачастую задается нодой Time умноженной на определенный коэффициент].
Number of Rows — задает количество строк [рядов] в sprite sheet.
Number of Columns — задает количество столбцов в sprite sheet.
Texture — позволяет подключить текстуру в FlipBook. Результат выводится из Result сразу в Base Color. Чаще всего этот инпут остается пустым и работа ведется через UVs.
UVs — принимает UV координаты для текстуры [TextureCoordinate].
Анимация с помощью ноды FlipBook.
MipBias/Level — настройка, связанная с качеством отображения текстур.
[В Unreal Engine для оптимизации автоматически создаются уменьшенные, более размытые копии каждой текстуры, они называются Mipmap. Когда объект далеко от камеры, движок показывает более размытую версию, чтобы сэкономить ресурсы].
Use Mip Bias (T) Level (F) — при True позволяет движку автоматически настраивать Mipmap — детальность текстуры на разном расстоянии.
Clamp Anim — определяет, что произойдет, когда анимация дойдет до конца: при True анимация, дойдя до последнего кадра, на нем и остановится [т. е. проиграется 1 раз].


1 — эффект взрыва в сцене; 2 — настройки материала.
Нодовая система для FlipBook анимации.


1 — граница Paper Flipbook четко по форме png картинки; 2 — спецэффект с нодой FlipBook, натянутый на плейн [plane, плоскость].
Основновные отличия первого способа от второго заключаются в том, что Paper Flipbook — это отдельный тип ассета в UE, предназначенный в первую очередь для 2D-графики и спрайтов, в то время как FlipBook в MaterialGraph — это нода внутри материала, которая использует одну текстуру-атлас для анимации поверхностей 3D-объектов.
Второй вариант широко используется в задачах, где нужно создать анимированные материалы для 3D объектов: визуальные эффекты, динамически изменяющиеся поверхности меша и прочее. Такую покадровую анимацию также можно использовать для работы со спецэффектами непосредственно в Niagara.
Media Texture — это специальный тип текстуры в Unreal Engine, который позволяет воспроизводить видеофайлы непосредственно на поверхностях 3D-объектов.
Media Source — здесь будет храниться видеофайл, который загружается в проект.
Media Player — «проигрыватель», который управляет воспроизведением.
Media Texture — «экран», который отображает видео.
Material — материал, который автоматически создается при перетягивании Media Texture на объект, куда подключается текстура
Процесс добавления Media Texture.
Для правильной работы с медиа текстурами в проекте в папке Content необходимо создать папку Movies [иначе могут возникнуть незначительные ошибки при добавлении видео в проект и упаковке файлов].
Далее, для того, чтобы создать MediaTexture, для начала нужно нажать в Content Browser ПКМ — Media — File Media Source [для работы с видео] или Img Media Source [для работы с серией изображений, где каждая картинка представляет собой один фрейм секвенции].
В качестве примера будет рассматриваться работа с видеоматериалами, однако для секвенций алгоритм действий такой же.
Следующим шагом будет нажать правой кнопкой мыши на папку Media — Show in Explorer. Нужно добавить видео, которое необходимо воспроизвести внутри движка, в папку проекта. Далее следует открыть File Media Source и в окне File Path указать путь до видео.
Процесс добавления Media Texture.
Затем вновь нуно нажать в контенте ПКМ, чтобы добавить Media — Media Player. Во всплывшем окне включаем «Video output Media Texture asset». [Это создаст медиа-текстуру и автоматически назначит ее медиа плееру].
Нужно открыть плеер и выбрать Media Source с видеороликом. Стоит обратить внимание на вкладку Playback и активировать «Play on Open», чтобы текстура автоматически проигрывалась, если она не была активирована.
Все, что осталось сделать — добавить нужный 3d объект на сцену и перенести на него Media Texture. После этого в Content Browser автоматически появится Material, в котором в base color будет подключена медиа текстура.
Также это означает, что в дальнейшем можно будет добавлять различные модификаторы и параметры, управляющие отображением текстуры.
Media Texture, наложенная на плейн.
На основе разобранных нод для анимации текстур можно сделать вывод, что для достижения желаемого результата зачастую приходится использовать не только рассмотренный инструментарий, но также и математические выражения помимо Sine и Cosine, такие как add, multiply, divide, subtract и другие.
Важным элементом является использование скалярных параметров [Scalar Parameter], которые позволяют задавать числовые значения, изменяемые в реальном времени.
Помимо скалярных параметров, константы используются для задания фиксированных значений в шейдере, обеспечивая контроль и стабильность в вычислениях.
В следующей подглаве будет подробнее рассмотрен набор наиболее часто используемых математических нод и их применение.
Некоторые математические ноды, которые будут рассматриваться в следующей подглаве.
Component Mask — это нода в Material Editor, которая позволяет выбирать и изолировать конкретные каналы цвета из текстур или других данных.
Эти каналы несут в себе разную информацию, что наглядно может использоваться, например, когда необходимо подключить текстуру, содержащую ORM [Ambient Occlusion, Roughness, Metallic] информацию к материалу.
Так, в канале R зачастую хранится информация об Ambient Occlusion, в G — Roughness, а в B — Metallic.


Демонстрация карты, содержащей ORM информацию в RGB каналах.
Если обратить внимание на Color, можно заметить, что цвет записан с помощью трехканального вектора (0.4, 0.1, 0,6). Если применять маску к R каналу, выводится значение 0.4, что равноценно тому, если бы была добавлена константа со значением 0.4.
Так, с помощью маски можно изолировать нужный канал и проводить над ним операции отдельно от остальной информации. Например, принимая во внимание то, что B — это Z в системе 3-d координат, можно деформировать «высоту» тех или иных объектов.
Демонстрация работы ноды Component Mask.
Add — это одна из самых фундаментальных математических нод в Material Editor, которая выполняет сложение входных значений.
Она буквально складывает два числа [или два цвета/канала] и выдает результат. Здесь, как и при любом сложении, работает правило: от перестановки мест слагаемых значение суммы не меняется.
Ноду можно вызвать, написав «Add» или «+» в поиске, а также нажав A+ЛКМ.
Демонстрация работы ноды Add.
В случае смешивания цветов, значения векторов поочередно складываются для R, G и B каналов. Если добавить константное значение к трехканальному вектору — все каналы повысятся на это значение.
Демонстрация работы ноды Add.
Subtract — это математическая нода, которая выполняет вычитание одного значения из другого. Результатом является вычитание второго инпута [B] из первого [A].
Для добавления ноды можно вписать как «Subtract», так и просто «-».
Демонстрация работы ноды Subtract.
Multiply выполняет умножение входных значений. Как и со сложением порядок ввода инпутов на результат не влияет.
Ноду можно вызвать, написав «Multiply» или «*» в поиске, а также нажав M+ЛКМ.
Демонстрация работы ноды Multiply.
При смешивании цветного изображения с черно-белым эффект будет похож на результат использования наложения «Multiply» в редакторах по типу Photoshop, CSP, Krita и других.
Демонстрация работы ноды Multiply.
Divide — это математическая нода, результатом которой является деление первого инпута [A] на второй [B]. Как и в математике обязательно нужно следить затем, чтобы не возникало деления на 0. В таком случае движок выдаст ошибку.
Ноду можно вызвать, написав «Divide» или «/» в поиске, а также нажав D+ЛКМ.
Демонстрация работы ноды Divide.
Стоит немного прояснить, как вышеперечисленные ноды работают с Luminosity [яркостью] материала.
Luminosity показывает, насколько цвет «светлый» или «темный», если представить его в оттенках серого.
В данном случае это может быть полезным в понимании того, как математические выражения влияют на Linear/Radial Gradient, Sine/Cosine и другие ноды, выдающие черно белую картинку.
Демонстрация влияния математических выражений на Luminosity.
Add и Subtract смещают диапазон яркости на заданное значение, прибавляя или вычитая его у всех коэффициентов инпута. Зачастую в результате может появиться множество значений выше 1 или ниже 0, которые приравниваются 1 и 0 соответственно.
Multiply и Divide растягивают или сжимают значение инпута в х раз, делая градиент мягче или резче. Эти ноды дают результат, не превышающий 1 и не меньший 0.
Power — это нода, которая возводит значение в степень. Инпут Base обязательно должно быть больше нуля, так как отрицательные числа срезаются. Данное математическое выражение может работать как настройка контрастности вместе с текстурами.
Ноду можно вызвать, нажав E+ЛКМ [от Exponent] или написав в поиске «Power».
One minus — нода, которая выполняет операцию «1 — x» для входного значения и в результате инвертирует выходное значение.
Ноду можно вызвать, написав «OneMinus» или «1-» в поиске.
Демонстрация работы ноды OneMinus.
Append — нода, которая объединяет несколько значений в один вектор. Она часто используется вместе с Component Mask — одна нода разбирает векторы, другая собирает их обратно.
Наглядный принцип работы ноды Append.
Вывод данной ноды зависит от порядка подключения компонентов, поэтому стоит четко понимать, что и за чем нужно подключать для того или иного эффекта.
Первый инпут Append задает канал R, второй G, подключение результата к следующей ноде Append и добавление еще одного значения задает B канал.
Работа нод Append и AppendMany.
Lerp — позволяет плавно смешивать два значения на основе маски. Стоит помнить, что смешивать можно только инпуты с одинаковым количеством каналов [RBG и RGB; B и B и т. д.]. Единственное исключение — смешивание с константой или простым скалярным параметром.
Ноду можно вызвать, написав в поиске «Lerp», «Linear Interpolate» или нажав Л+ЛКМ.
Наглядный принцип работы ноды Lerp.
Clamp — это нода, которая ограничивает значение заданным диапазоном:
— если значение меньше Min → становится равным Min [по умолчанию 0.0]; — если значение больше Max → становится равным Max [по умолчанию 1.0]; — если значение между Min и Max → остается без изменений.
Наглядный принцип работы ноды Clamp.
Saturate — специфическая разновидность ноды Clamp, которая ограничивает значение между 0 и 1.
Основным различием и преимуществом Saturate-a является то, что использование этой ноды положительно сказывается на производительности и оптимизации, так как она имеет меньше инструкций и проще просчитывается движком.
Стоит отметить, что постоянно открывать материал и менять в нем настройки, чтобы добиться желаемого результата на сцене, очень неудобно и занимает довольно много времени.
Однако есть способ оптимизировать этот процесс и настроить материал так, чтобы его можно было впоследствии гибко изменять и отслеживать результат до/после в реальном времени.
В следующей подглаве речь пойдет о том, как работать со Scalar Parameter, об основах создания Master Material [впоследствии MM], настройке параметров, которые позволят не только слегка изменить существующий материал, но и настроить нечто абсолютно новое без лишних затрат, а также о том, как динамически изменять те или иные параметры с помощью Sequencer.

Ключевой принцип параметризации заключается в выделении наиболее часто изменяемых свойств материала в отдельные управляемые переменные. В контексте Unreal Engine это достигается через использование нод-параметров: ScalarParameter [для числовых значений], VectorParameter [для цветов и текстурных координат], TextureParameter [для подключаемых текстур] и StaticSwitchParameter [для переключения целых блоков логики].
Для того, чтобы сделать параметр, нужно выделить ноду, которую необходимо динамически изменять, [например, Constant, Constant3Vector, Texture Sample], затем нажать ПКМ — Convert to Parameter. Это работает и в обратную сторону, чтобы сделать константу.
Процесс создания параметра из константы и наоборот.

Master Material [MM] — это базовый шаблон, в котором определены все ключевые параметры и логика материала.
Создавая на его основе экземпляры — Material Instances [MI], можно быстро и эффективно создавать вариации материалов, изменяя лишь необходимые параметры. Это существенно ускоряет процесс настройки и работы с шейдерами, снижает риски ошибок и предоставляет гибкие возможности по настройке визуальных эффектов.


1 — Master Material; 2 — Material Instance.
Динамическое изменение параметров в Material Instance.
Начав с простой параметризации [базовый MM для physically based rendering/ PBR материалов], можно постепенно добавлять более сложную логику. Одним из ключевых инструментов здесь становится StaticSwitchParameter. Он позволяет включать и выключать целые блоки логики внутри материала, меняя метод работы той или иной составляющей шейдера.
Например, добавив в MM переключатель «UseSubNoise», мы получаем возможность управлять сложностью паттерна. Когда переключатель выключен, часть шейдера, отвечающая за настройку дополнительного нойза, полностью исключается из финального кода, если же переключатель активирован, в Material Instance автоматически появляются параметры для его редактирования. Это создает гибкую и одновременно производительную систему.
Включение и выключение StaticSwitchParameter.
Процесс добавления параметра для анимации в Sequencer.
Для того, чтобы анимировать параметр в Sequencer необходимо выбрать нужный объект в сцене и перенести его в секвенсор.
Далее нужно найти в настройках объекта + — components — static mesh component, добавить Material Parameters — Slot: WorldGridMaterial, а затем выбрать параметр, который надо анимировать. Более того, в группе Material Switchers можно выбрать Overlay Material Switcher и перезаписать материал любым другим.
Далее в рабочей области автоматически появится keyframe [ключевой кадр]. Все, что осталось сделать — настроить ключи, между которыми плавно будут сменяться значения, под нужный шот.
Анимация параметра в Sequencer-e.
Таким образом, глава 2 подытоживает базу для понимания и практического применения динамических материалов в Unreal Engine 5, раскрывая ключевые методы деформации, математические операции и принципы параметризации.
Прежде всего, рассмотрены важнейшие ноды — от пространственных координат и временных осцилляторов до шумовых текстур и покадровой анимации, что создаёт многообразие способов анимировать текстуры и создавать органичные эффекты.
Особое внимание уделено возможностям параметризации, что позволяет динамически менять визуальные характеристики материалов, повышая гибкость и интерактивность.
Анимация параметров в Sequencer-e.