3.1. Общие принципы и методологии
Целью применения анимированных шейдеров для изменения внешнего вида персонажа является визуализация изменения внутреннего состояния того или иного героя, магических эффектов, повреждений и взаимодействия с окружением.
Анимированные материалы предоставляют инструменты для выражения этих состояний в реальном времени без создания множественных вариантов моделей или сложных спецэффектов.
Глава 3 раскрывает основные техники и методы создания динамических шейдеров для персонажей в проекте, основываясь на наиболее распространенных и эффективных подходах: UV-анимации, вертексной анимации, динамических масках, анимации многослойных материалов.
3.1.1. UV-анимация
UV-анимация представляет собой один из наиболее гибких и производительных методов создания движущихся или циклических эффектов на поверхности персонажей.
В отличие от методов, требующих деформации самой геометрии, UV-анимация манипулирует координатами, по которым текстура проецируется на модель, создавая иллюзию движения или трансформации без изменения исходной геометрии меша.
Рассмотрим UV-анимацию на примере создания эффекта движущихся энергетических потоков или же узоров по телу персонажа.
Узоры по телу | хаотичное движение

Демонстрация работы собранного шейдера.
Для создания хаотичных узоров можно использовать генерируемые в UE5 шумы, например, ноду Noise в Material Graph, или же добавить иную текстуру нойза через Texture Sample, чтобы немного облегчить ресурсоемкость эффекта.
Оба варианта имеют как свои плюсы, так и минусы, а именно, в первом случае удобно подключить генерируемый шум к Absolute World Position и избавиться от необходимости подгонять текстуру под UV модели так, чтобы она хорошо проигрывалась на швах объекта [поскольку создается волюметрический 3d нойз].
Однако нода Noise практически не имеет внешних параметров для контроля, что несколько ограничивает возможность создания разнообразных паттернов без внутренней настройки материала.
При использовании текстуры шума исчезает вопрос о многообразии форм создаваемых эффектов, поскольку Texture Sample можно преобразовать в параметр и менять карты нойза в реальном времени. Однако в данном случае нужно будет задуматься о том, как именно проецировать текстуру на 3д объект так, чтобы не получать никаких артефактов.
Демонстрация работы собранного шейдера.
Разберем, из чего состоит данный шейдер:
Нодовая система шейдера — детали.
Глобально данная магическая аура состоит из трех основных блоков: генерация шума [блок нод Generated Noise], создание блесток [Glitter], управление цветом шума [Height Gradient], и дополнительные модификаторы.
Нодовая система шейдера — детали.

Главные ноды, вокруг которой строится работа данного эффекта, - Noise, к которому подключен Panner.
В данном случае ко внутренним настройкам шума можно подойти с художественной точки зрения и выставить их в соответствии с личными эстетическими предпочтениями.
Для того, чтобы Noise распространялся по объектам вне зависимости от их UV развертки, но был привязан к модели, в инпут World Position приходит результат вычитания Object Position из Absolute World Position
Далее в примере идет связка нод, регулирующая некоторые визуальные характеристики полученного паттерна. Помимо использования математического выражения Power для контролирования контраста можно применить функцию CheapContrast.
CheapContrast — это оптимизированная функция контрастности, которая использует интерполяцию для усиления или ослабления контраста с минимальными вычислительными затратами.
Нодовая система шейдера — детали.
Данная цепочка нод создает динамическую маску для «блестящих частиц», которая следует за движением камеры и как бы «прилипает» к экрану.
В первой половине кода создается маска, по которой впоследствии будет двигаться текстура блесток.
ScreenPosition - это нода, которая выводит UV-координаты для каждого пикселя в пространстве экрана в текущем кадре. Если применить ее к текстуре и накинуть получившийся материал на объект, то он будет проецироваться на экран, оставаясь таким же с любой точки обзора.
ScreenResolution задает разрешение видимой области окна просмотра. Если окно имеет размер 1920×1080 пикселей, нода вернет вектор (1920, 1080).
В связке с математическим выражением Divide и перемножением на Screen Position это позволяет контролировать и масштабировать размер “экранных координат” текстуры-маски, которая добавляется позже.
Panner в данном случае задает небольшое движение текстуры, чтобы эффект был заметен даже в тех случаях, когда камера не двигается.
Во второй половине кода задается текстура блесток, к которой подключены контролирующие тайлинг параметры.
При перемножении результатов на выходе получается анимированный узор, который с помощью параметризации можно кастомизировать под собственные нужды.
Нодовая система шейдера — детали.
Данная часть нодовой системы позволяет добавить градиент относительно объекта вдоль оси Z, что осуществляется благодаря вычитанию Object Position из Absolute World Position.
Multiply устанавливает плавность перехода цвета, в то время как add задает смещение по оси Z [точка старта градиента].
Нодовая система шейдера — детали.
Далее все части шейдера собираются вместе. Выход Noise-a становится маской, по которой с помощью ноды Lerp смешивается базовый цвет / текстура модели и цвет анимированных узоров.
Результат работы по созданию блесток подключается к Emissive Color. Также по необходимости добавляются дополнительные модификаторы цвета, яркости, контрастности.
Демонстрация работы собранного шейдера.
Узоры по телу | контролируемое движение
Для создания контролируемого движения различных узоров и паттернов зачастую используются заранее нарисованные маски или даже покадровые секвенции, подчеркивающие те места на UV 3d объекта, над которыми должны происходить дальнейшие изменения.
Демонстрация работы собранного шейдера.
Пример 1
Для первого эксперимента в программе Substance Painter была заранее отрисована маска Opacity, которая хранилась в Alpha канале текстуры Base Color.
Также стоит отметить, что в данном эксперименте разберется работа с Overlay Material как одним из вариантов добавления различных эффектов объекту.


Созданный в Substance Painter-е паттерн для последующей анимации.








