Глава 2. Теоретические основы создания динамических материалов в UE5
Original size 2480x3500

Глава 2. Теоретические основы создания динамических материалов в UE5

PROTECT STATUS: not protected
This project is a student project at the School of Design or a research project at the School of Design. This project is not commercial and serves educational purposes

Глава 2 раскрывает базовые понятия и основной инструментарий создания динамических материалов в UE 5.

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

В рамках этой главы также подробно рассматривается принцип работы основных нод, которые составят основу для разработки широкого спектра анимированных шейдеров в дальнейшем.

2.1. Основные ноды для анимации

Для начала нужно определить — что из себя представляет текстура в CGI. Текстура — это 2D-изображение, спроецированное на поверхность 3D-объекта через UV-координаты; оно может задавать цвет, нормаль, прозрачность, свечение и т. д.

Анимированная текстура — любой подобный ресурс, который изменяется во времени: это может быть сдвиг UV, проигрывание покадрового flipbook-а, наложение движущегося шума, или даже более сложная схема, где текстура управляет деформацией меша [Vertex Animation Texture — VAT].

В UE5 любая из составляющих материала [Albedo, Normal, Emissive, Roughness/Metallic, Opacity, World Position Offset etc] может быть привязана ко времени или иным параметрам, и, следовательно, анимирована как в связке, так и по отдельности.

2.1.1. Пространственные координаты

Texture Coordinate, World Position
post

Перед тем как приступить к разбору первой ноды стоит обратить внимание на то, что UV координаты представляют собой то же самое, что и XY, только в пространстве текстур. Так, XYZ присутствуют в 3D пространстве, RGB в цветовом и UVW в пространстве текстур.

В своей основе нода Texture Coordinate позволяет изменять отображение текстуры, используя UV координаты модели, а именно выводить координаты текстуры в форме двухканального вектора (U, V), который впоследствии может переключаться между UV сетами и управлять тайлингом в настройках материала.

Ее можно вызвать, нажав в графе по пустому пространству ПКМ и вписав TextureCoordinate / TextureCoord, либо одновременно нажав «U» + ЛКМ.

big
Original size 1911x1105

Добавление ноды Texture Coordinate.

Для того, чтобы наглядно визуализировать работу ноды, в проект была добавлена текстура UV checker-a.
Original size 2392x793

Текстура с UV-checker-ом на base mesh-ах.

post

Texture Coordinate

Изначально подключенная в 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] зеркальность убирается.

Original size 800x417

Визуализация применения разных настроек тайлинга.

Original size 2522x876

Визуализация применения разных настроек тайлинга.

World Position

World Position выводит положение текущего пикселя в мировом пространстве.

Чтобы понять и разобраться, как именно работает данная функция, рассмотрим на примере визуализации через Base Color.

0

Absolute World Position.

Если подвинуть куб — текстура не будет двигаться вместе с мешем, так как она проецируется относительно мировых координат и не привязана к UV развёртке объекта.

Это позволяет привязать анимацию текстуры к абсолютному положению в мире, что полезно для создания эффектов, которые не должны двигаться вместе с объектом.

Original size 800x417

Изменение позиции static mesh-a с текстурой Absolute World Position.

post

Теперь попробуем привязать Absolute World Position к Texture Sample, а затем к самому материалу.

Так как здесь используются абсолютные мировые координаты, изначально каждый тайл данной текстуры будет равен 1 мере измерения UE5, то есть 1 сантиметру.

Тайлящуюся текстуру можно увидеть, только если очень близко подлететь к мешу.

0

1 — нода AWP, напрямую подключенная к текстуре и затем к материалу; 2 — AWP, поделенная на 10; 3 — AWP, поделенная на 100 — 1 метр в UE;

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

0
Если присмотреться к материалу, который дает базовый AWP без текстур, то можно заметить, что гизмо использует те же цвета, что и каналы RGB|XYZ, для каждого направления в соответствующем порядке.

Gizmo color — surface colors.

2.1.2. Время и осцилляторы

Time, Sine, Cosine
post

Time

Нода Time возвращает прошедшее с момента начала симуляции время [например, если нажать Play во вьюпорте [viewport] UE5 отсчет сбрасывается; в Material Editor время отсчитывается с момента открытия Unreal Editor; в Level-e будет показываться время с момента открытия того или иного уровня].

Time является одним из ключевых аспектов для создания динамически изменяющихся материалов, к примеру, совместно с нодами Panner, Sine или другими, зависящими от времени, операторами.

Original size 800x325

1 — нода Time, подключенная в DebugScalarValues; 2 — нода Time, подключенная в Emissive Color материала.

Ignore Pause

При True счетчик времени продолжит работать даже если остановить симуляцию. Например, это может быть полезно при внесении правок в те или иные элементы UI, чтобы видеть изменения в реальном времени.

Period

При True позволят создать цикл, который будет проигрываться и сбрасываться по достижении указанного числа.

Original size 800x325

Примеры: 1 — Time в связке с Sine; 2 — Time в связке с Panner и Noise Texture.

0

Примеры: 1 — Time в связке с Panner и Noise Texture; 2 — Time в связке с Sine.

Sine и Cosine

Нода Time прекрасно сочетается с тригонометрическими функциями Sine и Cosine для создания зацикленных эффектов. Эти две ноды выводят колеблющееся между -1 и 1 значения, что помогает создать «пульсирующие» эффекты.

Единственное значимое различие между Sine и Cosine это стартовая точка: (0,0) для синуса и (0,1) для косинуса.

Original size 2560x1084

LinearGradient, подключенный в Sine и Cosine, а затем в Base Color.

Стоит отметить, что Base Color может выводить значения в диапазоне от 0 до 1. Это означает, что нам не имеет смысла иметь значения ниже 0, а потому целесообразным будет переместить колебания в область [0,1] вместо [-1,1].

0

Способы переместить колебания в область [0,1]

Original size 2328x395

Визуализация полученных графиков.

Original size 2560x1084

LinearGradient, подключенный в Sine и Cosine, перемещенный в область [0,1], а затем подключенный в Base Color.

Можно заметить, что градиент стал равномерным, что дает более плавные колебания для последующего анимирования материалов.

На данном этапе также становится заметно второе различие между нодой Sine и Cosine. После всех проведенных манипуляций над выходными значениями можно заметить, что точка старта у косинуса — (0,1), в то время как у синуса — (0,0.5), что может быть не самым удобным решением для стартовой точки проигрывания той или иной анимации.

Original size 800x325

1 — колебания Emissive Color; 2 — World Position Offset, управляемый Sine и Cosine + колебания Emissive Color; 3 — World Position Offset.

0

1 — колебания Emissive Color; 2 — World Position Offset, управляемый Sine и Cosine + колебания Emissive Color; 3 — World Position Offset.

2.1.3. Движение и трансформация

Panner, Rotator
post

Panner

Panner предназначен для создания эффекта движущихся текстур. Нода берет координаты UV модели и постоянно добавляет к ним некоторое значение на основе времени, создавая иллюзию скольжения текстуры по поверхности.

Скорость выражается в условных единицах на секунду. Значение 1 означает, что текстура полностью смещается за одну секунду. Отрицательные значения скоростей инвертируют направление движения.

Time — принимает значение, используемое для определения текущего положения. Зачастую это нода Time, обеспечивающая постоянное смещение, но также может использоваться константа или скалярная величина.

Speed — тоже самое, что и Speed X, Speed Y, но выведено во входные данные ноды на случай, если нужно будет сделать параметр, о чем подробнее будет сказано позже в данной главе.

Original size 800x325

1 куб — speed 1.0; 2 куб — speed 0.05.

post

Material Expression

Speed X — определяет скорость для смещения координат в направлении U.

Speed Y — определяет скорость для смещения координат в направлении Y.

Const Coordinate — работает как в ноде TextureCoordinate и позволяет выбрать UV-сет, на который будет воздействовать нода Panner. Если поставить спонтанное число, под которое не будет существовать UV-сета, то выйдет ошибка.

Fractional part — используется для вывода более точных расчетов и результата [0, 1), но зачастую разница не настолько заметна.

Original size 1163x516

Const Coordinate 0, 1 и 2.

post

Rotator

Rotator выводит координаты UV-текстуры в виде двухканального векторного значения, которое можно использовать для создания вращающихся текстур

По своим входным данным данная нода похожа на Panner, но также есть и небольшие различия.

Speed — определяет скорость вращения. Отрицательные числа будут инвертировать движение в обратную сторону.

Center X — определяет координату X, используемую в качестве центра поворота (0.5 — центр текстуры).

Center Y — определяет координату Y, используемую в качестве центра поворота.

Time и Coordinate работают по тому же принципу, что и в Panner-e.

Original size 800x325

1 куб — speed 1; 2 куб — speed 0.25.

2.2. Сложные методы деформации

Original size 2000x600

Пример шейдера, собранного с помощью сложных методов деформации.

2.2.1. Шумовые текстуры и градиенты

Noise, Linear Gradient, RadialGradientExponential
post

Noise

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


Material Expression

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

Original size 800x325

Анимированный Scale у Noise.

post

Function — техническая настройка, позволяющая выбрать метод генерации шума. Наиболее распространенный из всех — Fast Gradient 3D Texture, так как он использует более оптимизированный алгоритм генерации и является более дешевым относительно остальных.

Наглядно это можно увидеть, если навести курсором на каждый из вариантов и прочитать всплывающие подсказки, обращая внимание на количество «instructions per level». В данном случае это — 16.

Fast Gradient 3D Texture Noise также позволяет сделать объемный, «волюметрический» шум.

Original size 2536x1088

Различные Function в ноде Noise.

Turbulence — при включенной «турбулентности» на выходе будут генерироваться паттерны, созданные засчет вывода абсолютных значений [таким образом можно получить более четкие, оформленные линии, позволяющие сделать, например, карту высот для холмистой местности или карту, по которой должны располагаться определенные объекты].

Levels — позволяет выставить значение детализации паттерна. Чем больше число — тем более подробный и, вместе с этим, более дорогой будет результат.

0

Отключенный и включенный Turbulence у Noise.

Output Min/Max — определяет наименьшее и наибольшее значение вывода. Зачастую в min вбивается 0 для того, чтобы избавиться от отрицательных значений [черных пятен], но в некоторых ситуациях они также могут пригодиться.

Level Scale — определяет, насколько сильно меняется масштаб для каждого нового подуровня.

Tiling — для функций шума, поддерживающих тайлинг, позволяет зацикливать нойз.

Repeat Size — при включенном тайлинге позволяет определить как часто должен повторяться паттерн.

0

Noise, подключенный к Absolute World Position.

post

Gradient

Gradient позволяет создавать плавные переходы, которые можно использовать, например, как маски для контроля проявления эффектов в определённых местах, для смешивания материалов, чтобы процедурно разнообразить схожие ассеты на уровне, даже для создания паттернов для спецэффектов.

В UE5 существует довольно много нод и подходов для создания различных градиентов, но в данном исследовании будет рассмотрено 3 основных — LinearGradient, RadialGradientExponential, а также градиенты, создаваемые на основе World Position.

Original size 2560x984

Куб слева — LinearGradient; куб справа — RadialGradientExponential.

LinearGradient

Функция LinearGradient создает линейный градиент от черного к белому в направлении U и V, в зависимости о того, какой выход используется.

Original size 1290x603

Linear Gradient, использованный как маска Opacity.

Original size 1223x492

Linear Gradient, использованный как маска Opacity — нодовая система.

RadialGradientExponential

Функция RadialGradientExponential создает радиальный градиент с широкими возможностями кастомизации: радиус паттерна, его центр, резкость границ.

CenterPosition — позволяет задать смещение центра градиента [по умолчанию 0.5 по X и Y].

Radius — размер градиента от центра [при значении по умолчанию — 0.5 — границы градиента располагаются примерно на границе текстурного пространства].

Dencity — регулирует резкость градиента: чем больше число, тем резче градиент.

Invert Density — буквально инвертирует градиент: преобразует белое в черное, а черное в белое [принимает на вход bool значение].

Radial Gradient, использованный как маска Opacity.

Также для создания градиента, привязанного к определенным координатам, а не к UV объекта, можно маскировать World Position или, например World Position вместе с Object Position [для того, чтобы градиент начинался и распространялся относительно объекта, а не относительно мировых координат].

Original size 1400x574

1 — Линейный градиент на основе Absolute World Position; 2 — Линейный градиент, привязанный к Object Position.

Original size 2072x417

Нодовая система для создания линейного градиента на основе Absolute World Position.

2.2.2. Покадровая анимация

Sprite Sheets, Flipbooks
post

Sprite Sheets

Sprite sheet — это единая png текстура, содержащая в себе последовательность кадров [спрайтов] анимации, расположенных в виде сетки. Это могут быть как различные анимации для персонажей, так и спецэффекты по типу взрывов, водопадов и партиклов и прочего.

Flipbook

Flipbook — это механизм, который превращает статичное изображение, содержащее несколько кадров анимации [sprite sheet], в динамичную поверхность.

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

В качестве следующего примера будут использованы готовые бесплатные спрайты для персонажа, скачанные на itch io.

Способ создания flipbook-анимации № 1

Для начала нужно загрузить изображения в проект. Стоит отметить, что иногда спрайты изначально уже разделены покадрово, что в отдельных случаях немного упрощает процесс создания анимации.

Если все же все анимации персонажа находятся на 1 спрайт-листе, тогда нужно нажать на текстуру ПКМ и выбрать Sprite Actions — Extract Sprites. Далее откроется окно с настройками разделения.

Original size 1920x1080

Способ создания flipbook-анимации № 1 — подготовка.

post

Справа, в Settings — Sprite Extract Mode, нужно выбрать grid, чтобы вручную настроить сетку и ровно порезать покадровую анимацию. Ниже, в появившейся вкладке Grid, располагается большое количество различных настроек.

Основное, что понадобится, — Cell Width и Cell Height. Нужно поделить вписанное в ячейку значение на количество столбцов/строк в данном спрайт-листе, чтобы получить размер одной картинки.

Остальные настройки необходимы для создания более точной сетки, если спрайты расположены неровно [что в свою очередь может помешать сборке гладкой анимации без дерганий и иных дефектов], но зачастую можно ограничиться и простыми настройками высоты-ширины.

Original size 1920x1080

Способ создания flipbook-анимации № 1 — Paper Flipbook.

Когда все настроено — нужно нажать Extract и получить все изображения в формате Sprite [не Texture].

Далее выбираются все кадры, относящиеся к одной полноценной анимации [например, idle, run, jump], затем нужно нажать ПКМ — Create Flipbook.

Последнее, что осталось сделать — выбрать в открывшемся окне Frames Per Second [FPS] и покадровая анимация готова.

В случае, если изображения изначально разделены и загружаются в движок как Texture, необходимо выбрать все картинки — ПКМ — Sprite Actions — Create Sprite. Далее действия те же.

Original size 2293x738

Paper Flipbooks.

post

Способ создания flipbook-анимации № 2

Вновь возвращаемся к Material Graph, так как в нем существует непосредственно нода FlipBook.

Inputs

Animation Phase — определяет скорость воспроизведения анимации. [Зачастую задается нодой Time умноженной на определенный коэффициент].

Number of Rows — задает количество строк [рядов] в sprite sheet.

Number of Columns — задает количество столбцов в sprite sheet.

Texture — позволяет подключить текстуру в FlipBook. Результат выводится из Result сразу в Base Color. Чаще всего этот инпут остается пустым и работа ведется через UVs.

UVs — принимает UV координаты для текстуры [TextureCoordinate].

Original size 2434x300

Анимация с помощью ноды FlipBook.

Дополнительные настройки [чаще всего их можно не трогать]:

MipBias/Level — настройка, связанная с качеством отображения текстур.

[В Unreal Engine для оптимизации автоматически создаются уменьшенные, более размытые копии каждой текстуры, они называются Mipmap. Когда объект далеко от камеры, движок показывает более размытую версию, чтобы сэкономить ресурсы].

Use Mip Bias (T) Level (F) — при True позволяет движку автоматически настраивать Mipmap — детальность текстуры на разном расстоянии.

Clamp Anim — определяет, что произойдет, когда анимация дойдет до конца: при True анимация, дойдя до последнего кадра, на нем и остановится [т. е. проиграется 1 раз].

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

Original size 2473x988

Нодовая система для FlipBook анимации.

1 — граница Paper Flipbook четко по форме png картинки; 2 — спецэффект с нодой FlipBook, натянутый на плейн [plane, плоскость].

Основновные отличия первого способа от второго заключаются в том, что Paper Flipbook — это отдельный тип ассета в UE, предназначенный в первую очередь для 2D-графики и спрайтов, в то время как FlipBook в MaterialGraph — это нода внутри материала, которая использует одну текстуру-атлас для анимации поверхностей 3D-объектов.

Второй вариант широко используется в задачах, где нужно создать анимированные материалы для 3D объектов: визуальные эффекты, динамически изменяющиеся поверхности меша и прочее. Такую покадровую анимацию также можно использовать для работы со спецэффектами непосредственно в Niagara.

2.2.3. Видеотекстуры

Media Texture

Media Texture

Media Texture — это специальный тип текстуры в Unreal Engine, который позволяет воспроизводить видеофайлы непосредственно на поверхностях 3D-объектов.

Ключевые компоненты работы с Media Texture:

Media Source — здесь будет храниться видеофайл, который загружается в проект.

Media Player — «проигрыватель», который управляет воспроизведением.

Media Texture — «экран», который отображает видео.

Material — материал, который автоматически создается при перетягивании Media Texture на объект, куда подключается текстура

Original size 2632x990

Процесс добавления Media Texture.

Для правильной работы с медиа текстурами в проекте в папке Content необходимо создать папку Movies [иначе могут возникнуть незначительные ошибки при добавлении видео в проект и упаковке файлов].

Далее, для того, чтобы создать MediaTexture, для начала нужно нажать в Content Browser ПКМ — Media — File Media Source [для работы с видео] или Img Media Source [для работы с серией изображений, где каждая картинка представляет собой один фрейм секвенции].

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

Следующим шагом будет нажать правой кнопкой мыши на папку Media — Show in Explorer. Нужно добавить видео, которое необходимо воспроизвести внутри движка, в папку проекта. Далее следует открыть File Media Source и в окне File Path указать путь до видео.

'In order to package and deploy your content with your project, your media must reside in the Content/Movies folder of your project.' 3
«Для включения медиафайлов в сборку проекта и их последующего распространения, файлы должны располагаться в папке Content/Movies вашего проекта.»

3 — Play a Video File // Epic Games Developers URL: https://dev.epicgames.com/documentation/en-us/unreal-engine/play-a-video-file-in-unreal-engine (дата обращения: 16.11.2025).

Original size 2632x944

Процесс добавления Media Texture.

Затем вновь нуно нажать в контенте ПКМ, чтобы добавить Media — Media Player. Во всплывшем окне включаем «Video output Media Texture asset». [Это создаст медиа-текстуру и автоматически назначит ее медиа плееру].

Нужно открыть плеер и выбрать Media Source с видеороликом. Стоит обратить внимание на вкладку Playback и активировать «Play on Open», чтобы текстура автоматически проигрывалась, если она не была активирована.

Все, что осталось сделать — добавить нужный 3d объект на сцену и перенести на него Media Texture. После этого в Content Browser автоматически появится Material, в котором в base color будет подключена медиа текстура.

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

Original size 2419x954

Media Texture, наложенная на плейн.

2.3. Математические выражения

На основе разобранных нод для анимации текстур можно сделать вывод, что для достижения желаемого результата зачастую приходится использовать не только рассмотренный инструментарий, но также и математические выражения помимо Sine и Cosine, такие как add, multiply, divide, subtract и другие.

Важным элементом является использование скалярных параметров [Scalar Parameter], которые позволяют задавать числовые значения, изменяемые в реальном времени.

Скалярный параметр особенно полезен благодаря возможности анимации через Sequencer, что даёт гибкость в управлении эффектами и позволяет динамически менять свойства материалов без необходимости модифицировать сам материал.

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

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

Original size 1744x262

Некоторые математические ноды, которые будут рассматриваться в следующей подглаве.

2.3.1. Введение в работу с математическими выражениями

Component Mask

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 координат, можно деформировать «высоту» тех или иных объектов.

0

Демонстрация работы ноды Component Mask.

Add

Add — это одна из самых фундаментальных математических нод в Material Editor, которая выполняет сложение входных значений.

Она буквально складывает два числа [или два цвета/канала] и выдает результат. Здесь, как и при любом сложении, работает правило: от перестановки мест слагаемых значение суммы не меняется.

Ноду можно вызвать, написав «Add» или «+» в поиске, а также нажав A+ЛКМ.

0

Демонстрация работы ноды Add.

В случае смешивания цветов, значения векторов поочередно складываются для R, G и B каналов. Если добавить константное значение к трехканальному вектору — все каналы повысятся на это значение.

Original size 2122x693

Демонстрация работы ноды Add.

Subtract

Subtract — это математическая нода, которая выполняет вычитание одного значения из другого. Результатом является вычитание второго инпута [B] из первого [A].

Для добавления ноды можно вписать как «Subtract», так и просто «-».

Original size 2152x639

Демонстрация работы ноды Subtract.

Multiply

Multiply выполняет умножение входных значений. Как и со сложением порядок ввода инпутов на результат не влияет.

Ноду можно вызвать, написав «Multiply» или «*» в поиске, а также нажав M+ЛКМ.

Original size 2230x756

Демонстрация работы ноды Multiply.

При смешивании цветного изображения с черно-белым эффект будет похож на результат использования наложения «Multiply» в редакторах по типу Photoshop, CSP, Krita и других.

0

Демонстрация работы ноды Multiply.

Divide

Divide — это математическая нода, результатом которой является деление первого инпута [A] на второй [B]. Как и в математике обязательно нужно следить затем, чтобы не возникало деления на 0. В таком случае движок выдаст ошибку.

Ноду можно вызвать, написав «Divide» или «/» в поиске, а также нажав D+ЛКМ.

Original size 2050x620

Демонстрация работы ноды Divide.

Luminosity

Стоит немного прояснить, как вышеперечисленные ноды работают с Luminosity [яркостью] материала.

Luminosity показывает, насколько цвет «светлый» или «темный», если представить его в оттенках серого.

В данном случае это может быть полезным в понимании того, как математические выражения влияют на Linear/Radial Gradient, Sine/Cosine и другие ноды, выдающие черно белую картинку.

Original size 2000x550

Демонстрация влияния математических выражений на Luminosity.

Add и Subtract смещают диапазон яркости на заданное значение, прибавляя или вычитая его у всех коэффициентов инпута. Зачастую в результате может появиться множество значений выше 1 или ниже 0, которые приравниваются 1 и 0 соответственно.

Multiply и Divide растягивают или сжимают значение инпута в х раз, делая градиент мягче или резче. Эти ноды дают результат, не превышающий 1 и не меньший 0.

Все числа, равные x<0 U x>1 приравниваются 0 и 1 соответственно. То есть невозможно сделать результат ярче, чем 1 и темнее, чем 0, поэтому эти значения срезаются.

Power

Power — это нода, которая возводит значение в степень. Инпут Base обязательно должно быть больше нуля, так как отрицательные числа срезаются. Данное математическое выражение может работать как настройка контрастности вместе с текстурами.

Ноду можно вызвать, нажав E+ЛКМ [от Exponent] или написав в поиске «Power».

Original size 1242x503
Значения экспоненты х > 1 будут повышать контрастность, а 0 < x < 1 уменьшать.
Original size 1600x469

One Minus

One minus — нода, которая выполняет операцию «1 — x» для входного значения и в результате инвертирует выходное значение.

Ноду можно вызвать, написав «OneMinus» или «1-» в поиске.

Original size 2143x723

Демонстрация работы ноды OneMinus.

Append

Append — нода, которая объединяет несколько значений в один вектор. Она часто используется вместе с Component Mask — одна нода разбирает векторы, другая собирает их обратно.

Original size 1612x497

Наглядный принцип работы ноды Append.

Вывод данной ноды зависит от порядка подключения компонентов, поэтому стоит четко понимать, что и за чем нужно подключать для того или иного эффекта.

Первый инпут Append задает канал R, второй G, подключение результата к следующей ноде Append и добавление еще одного значения задает B канал.

Помимо Append существует также функция Append Many, позволяющая сразу соединить несколько каналов и вывести RG/RGB/RGBA результат.
0

Работа нод Append и AppendMany.

Lerp

Lerp — позволяет плавно смешивать два значения на основе маски. Стоит помнить, что смешивать можно только инпуты с одинаковым количеством каналов [RBG и RGB; B и B и т. д.]. Единственное исключение — смешивание с константой или простым скалярным параметром.

Ноду можно вызвать, написав в поиске «Lerp», «Linear Interpolate» или нажав Л+ЛКМ.

Original size 1000x364

Наглядный принцип работы ноды Lerp.

Clamp

Clamp — это нода, которая ограничивает значение заданным диапазоном:

— если значение меньше Min → становится равным Min [по умолчанию 0.0]; — если значение больше Max → становится равным Max [по умолчанию 1.0]; — если значение между Min и Max → остается без изменений.

Original size 2227x429

Наглядный принцип работы ноды Clamp.

Saturate

Saturate — специфическая разновидность ноды Clamp, которая ограничивает значение между 0 и 1.

Основным различием и преимуществом Saturate-a является то, что использование этой ноды положительно сказывается на производительности и оптимизации, так как она имеет меньше инструкций и проще просчитывается движком.

2.4. Принципы динамического управления параметрами

Стоит отметить, что постоянно открывать материал и менять в нем настройки, чтобы добиться желаемого результата на сцене, очень неудобно и занимает довольно много времени.

Однако есть способ оптимизировать этот процесс и настроить материал так, чтобы его можно было впоследствии гибко изменять и отслеживать результат до/после в реальном времени.

В следующей подглаве речь пойдет о том, как работать со Scalar Parameter, об основах создания Master Material [впоследствии MM], настройке параметров, которые позволят не только слегка изменить существующий материал, но и настроить нечто абсолютно новое без лишних затрат, а также о том, как динамически изменять те или иные параметры с помощью Sequencer.

2.4.1. Параметризация материалов для внешнего контроля

post

Ключевой принцип параметризации заключается в выделении наиболее часто изменяемых свойств материала в отдельные управляемые переменные. В контексте Unreal Engine это достигается через использование нод-параметров: ScalarParameter [для числовых значений], VectorParameter [для цветов и текстурных координат], TextureParameter [для подключаемых текстур] и StaticSwitchParameter [для переключения целых блоков логики].

Для того, чтобы сделать параметр, нужно выделить ноду, которую необходимо динамически изменять, [например, Constant, Constant3Vector, Texture Sample], затем нажать ПКМ — Convert to Parameter. Это работает и в обратную сторону, чтобы сделать константу.

Original size 1384x548

Процесс создания параметра из константы и наоборот.

post

Master Material [MM] — это базовый шаблон, в котором определены все ключевые параметры и логика материала.

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

1 — Master Material; 2 — Material Instance.

Ключевым преимуществом динамических параметров является возможность анимировать их значения через систему Sequencer. Это позволяет настраивать изменения материала в реальном времени, управлять интенсивностью эффектов, цветами, степенью деформаций и другими визуальными характеристиками без глубокого вмешательства в структуру материала.
Original size 1000x420

Динамическое изменение параметров в Material Instance.

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

Начав с простой параметризации [базовый MM для physically based rendering/ PBR материалов], можно постепенно добавлять более сложную логику. Одним из ключевых инструментов здесь становится StaticSwitchParameter. Он позволяет включать и выключать целые блоки логики внутри материала, меняя метод работы той или иной составляющей шейдера.

Например, добавив в MM переключатель «UseSubNoise», мы получаем возможность управлять сложностью паттерна. Когда переключатель выключен, часть шейдера, отвечающая за настройку дополнительного нойза, полностью исключается из финального кода, если же переключатель активирован, в Material Instance автоматически появляются параметры для его редактирования. Это создает гибкую и одновременно производительную систему.

Original size 1500x660

Включение и выключение StaticSwitchParameter.

Original size 2079x676

Процесс добавления параметра для анимации в Sequencer.

Для того, чтобы анимировать параметр в Sequencer необходимо выбрать нужный объект в сцене и перенести его в секвенсор.

Далее нужно найти в настройках объекта + — components — static mesh component, добавить Material Parameters — Slot: WorldGridMaterial, а затем выбрать параметр, который надо анимировать. Более того, в группе Material Switchers можно выбрать Overlay Material Switcher и перезаписать материал любым другим.

Далее в рабочей области автоматически появится keyframe [ключевой кадр]. Все, что осталось сделать — настроить ключи, между которыми плавно будут сменяться значения, под нужный шот.

Original size 1500x643

Анимация параметра в Sequencer-e.

Таким образом, глава 2 подытоживает базу для понимания и практического применения динамических материалов в Unreal Engine 5, раскрывая ключевые методы деформации, математические операции и принципы параметризации.

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

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

Original size 1000x465

Анимация параметров в Sequencer-e.

Как итог, вторая глава формирует теоретический и практический фундамент, необходимый для создания более сложных и интерактивных анимированных материалов в будущем.
Глава 2. Теоретические основы создания динамических материалов в UE5
Chapter:
1
2
3
4
5
6
We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more