Глава 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

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

Добавление ноды Texture Coordinate.
Для того, чтобы наглядно визуализировать работу ноды, в проект была добавлена текстура UV checker-a.
Текстура с UV-checker-ом на base mesh-ах.

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] зеркальность убирается.
Визуализация применения разных настроек тайлинга.
Визуализация применения разных настроек тайлинга.
World Position
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.
Если присмотреться к материалу, который дает базовый AWP без текстур, то можно заметить, что гизмо использует те же цвета, что и каналы RGB|XYZ, для каждого направления в соответствующем порядке.


Gizmo color — surface colors.
2.1.2. Время и осцилляторы
Time, Sine, Cosine

Time
Нода Time возвращает прошедшее с момента начала симуляции время [например, если нажать Play во вьюпорте [viewport] UE5 отсчет сбрасывается; в Material Editor время отсчитывается с момента открытия Unreal Editor; в Level-e будет показываться время с момента открытия того или иного уровня].
Time является одним из ключевых аспектов для создания динамически изменяющихся материалов, к примеру, совместно с нодами Panner, Sine или другими, зависящими от времени, операторами.
1 — нода Time, подключенная в DebugScalarValues; 2 — нода Time, подключенная в Emissive Color материала.
Ignore Pause
При True счетчик времени продолжит работать даже если остановить симуляцию. Например, это может быть полезно при внесении правок в те или иные элементы UI, чтобы видеть изменения в реальном времени.
Period
При True позволят создать цикл, который будет проигрываться и сбрасываться по достижении указанного числа.
Примеры: 1 — Time в связке с Sine; 2 — Time в связке с Panner и Noise Texture.
Примеры: 1 — Time в связке с Panner и Noise Texture; 2 — Time в связке с Sine.
Sine и Cosine
Нода Time прекрасно сочетается с тригонометрическими функциями Sine и Cosine для создания зацикленных эффектов. Эти две ноды выводят колеблющееся между -1 и 1 значения, что помогает создать "пульсирующие" эффекты.
Единственное значимое различие между Sine и Cosine это стартовая точка: (0,0) для синуса и (0,1) для косинуса.












