Time+Sine. Анимируем в материале. UE

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

В основе RadialGradientExponential.

Круговые маски, что может быть веселее? Анимированные маски!
Круговые маски, что может быть веселее? Анимированные маски!

К нашему кружочку добавим не хитрую конструкцию из Time и Frac.
Time дает отсчет времени от нуля, до конца игры. Frac - выделяет дробную часть. То есть мы получаем на выходе значения от 0.000, до 0.999. После чего возвращаемся на круг с 0.000.

Уже красивое!

Кстати, если вам нужно посмотреть какие значения принимает тот или иной пин, вы можете использовать DebugScalarValues. Вместо Scalar может быть например Vector.

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

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

Ну уже что-то близкое.

Есть не очевидная проблема. (или не проблема, кому как нравится)
Дело в том, что значение синуса принимает [-1;1]. В моем случае, это было не совсем то, что мне нужно. А значит нужно запихнуть наш синус в положительные значения. Для этого нужно добавить 1 и умножить на 0.5.

Вот! Теперь это выглядит лучше)
Вот! Теперь это выглядит лучше)

Практически готово! Осталось прикрутить управление, чтобы можно было настраивать наш материал. Умножим Time на какой-то параметр, чтобы управлять скоростью.
Добавим еще одно умножение на скаляр после синуса, чтобы управлять количеством волн. По желанию еще можно добавить Power чтобы управлять шириной волн и градиентом на границе.

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

Time+Sine. Анимируем в материале. UE

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

Отрисовывает наш кружочек по указанным в Position координатам. Координаты мы можем передавать из БП. Тогда кружочек еще и двигаться будет.
Отрисовывает наш кружочек по указанным в Position координатам. Координаты мы можем передавать из БП. Тогда кружочек еще и двигаться будет.

Спасибо за внимание! Если вы считаете, что материал был интересным или полезным, то в качестве благодарности вы можете добавить мою игру в список желаемого:) Это милый симулятор кухни на колесах. В следующей статье я расскажу чуть подробнее об этой игре.

11
1 комментарий