Texture Animation Pipeline with Substance Designer and Unreal Engine 4: Chapter 2 — Piedra del Sol

Texture Animation Pipeline with Substance Designer and Unreal Engine 4: Chapter 2 — Piedra del Sol

Всем привет!

Продолжаю рассказывать про кастомный пайплайн анимированных текстур. Эта 2-ая часть в серии. Если не читали начало, прошу сюда.

В этой статьей речь пойдет о подготовке графа к анимации в Substance Designer. Я покажу вам некоторые подводные камни, с которыми мне пришлось столкнуться.

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

С этого момента я начал разбираться с тем, как мне можно использовать эту функцию в своём графе. И отлично подошёл внешний круг, на котором изображены разные животные (по мнению Ацтеков), который можно вращать вокруг центра:

Texture Animation Pipeline with Substance Designer and Unreal Engine 4: Chapter 2 — Piedra del Sol

Прикрутив функцию $time к параметру Rotation, который находится в ноде Non-Square Transform, у меня получился следующий результат:

Test animation

Проиграть анимацию пришлось в substance player’е, т.к. именно в нем есть таймлайн, в котором можно запустить анимацию и увидеть, что происходит с графом.

Сделал тоже самое и для внутреннего круга. Только для разнообразия вращал уже в обратном направлении:

Test animation

Хочу немного забежать вперед и сказать, что это плохая идея использовать на практике функцию ($time) внутри своего графа и потом выводить её в движок (в нашем случае в UE4). Позже вы узнаете почему.

После мне захотелось пойти ещё дальше и сделать из этого не просто анимированую текстуру, а полноценный ассет, который бы выполнял вполне ясную функцию на сцене. Мой объект очень похож на что-то, что можно было бы заставить… открыться. Ворота! Дальше в голове мысли выстроились сами собой.

Ворота должны открываться по какому-то событию, которое потом можно будет задать в движке. На логику того, как должны будут открываться ворота на уровне текстур у меня ушло довольно много времени, потому как проверял разные версии. И я смог прийти к тому результату, который меня устроил. Он оказался довольно простым, так как я прорабатывал лишь принцип работы. На практике вы можете сделать довольно сложную структуру. Всё зависит от вашей задачи и опыта в SD.

Для промежуточного этапа мне пришлось создать подграф (Animation_element), внутри которого будет выполняться логика воспроизведения анимации. От того, какая информация к нему поступает, можно получить цветную карту или черно-белую. Это нужно для того, чтобы на выходе получить анимацию для каждого канала, будь то Base color или normal, и так же roughtness, AO и др.

Можно увидеть, что в ноде еще имеется input value вход (зеленый круг). Он нужен мне для того, чтобы задавать скорость воспроизведения анимации в основном графе (т.к. именно значение input value я умножаю на $time).

Логика работы ноды проста: я сделал так, что каждая половинка равномерно смещается в свою сторону (левая половина уходит налево, правая — направо).

Также думал, как облегчить логику тем, чтобы можно было влиять на параметр Color mode как, например, в ноде Blend, когда входной input сам переключается в зависимости от того, какая информация к нему приходит. Но, как я понял, разработчики специально не дают к нему доступ. Поэтому пришлось создавать велосипед заново. Однако, если я ошибаюсь и вы знаете про решение этого вопроса, буду рад, если поделитесь в комментариях =)

В подграфе Аnimation_element во всех нодах Transformation 2D в параметре Offset я создал функцию, которая описывает это смещение.

Так же я добавил на вход к этому подграфу ещё один input — Mask. Сюда можно подключить разного рода шум. Он нужен для того, чтобы создать разрыв между двумя половинками и сделать его нелинейным. В результате возникает трещина:

Crack

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

На этом этапе я решил, что работа с графом закончена и можно экспортировать *.sbsar в движок.

Такой результат получаем в substance player’е.

Убедившись в том, что все работает, переходим в ue4. Но разговор об этом уже в следующей части.

Всем спасибо!

3232
2 комментария