Фейковая анимация в материалах UE. Absolute World Position -> WPO

Привет DTF! Сегодня расскажу про хитрый лайфхак для простой и дешевой анимации в UE.

Базовых знаний должно хватить, чтобы разобраться, что происходит)

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

Какие варианты решения у нас есть? Ну проще всего собрать какуе-то конструкцию с time, что ни будь вращать имитируя движения. Какие есть сложности? Нам необходимо будет регулировать скорость анимации, в зависимости от скорости движения. Если мы используем time - то скорость придется предавать в материал. Ну как-то не очень мне бы хотелось это делать. Даже если писать из ниагары, все равно лишняя нагрузка. Тем более я знаю интересный прием)

Анимировать я буду рыбок.

Я создал вот такую модель рыба.

Согласитесь, она прекрасна!
Согласитесь, она прекрасна!

Переходим к созданию материала.

Берем координаты нашего объекта. Складываем позицию X и позицию Y.
Берем координаты нашего объекта. Складываем позицию X и позицию Y.

Так как у меня анимируется рыба, то мне необходимо задать ей какое-то волнообразное движение. Естественно сделаем это через синус.

Переменная Lenght как не сложно догадаться задает длину волны.
Переменная Lenght как не сложно догадаться задает длину волны.
Умножаем на вектор, который задает оси, по которым происходит наша "анимация".
Умножаем на вектор, который задает оси, по которым происходит наша "анимация".

Осталось все это умножить на какое-то скалярное значение, которое будет задавать силу смещения вершин. И подать это в пин WPO.

Итоговый материал.
Итоговый материал.

Что у нас по итогу получилось? При смещении объекта происходит смещение вершин относительно своего первоначального положения. Так как у нас исходные значения позиции складываются и подаются в синус, то на выходе мы будем иметь [-1;1]. Значение будет менять тем быстрее, чем быстрее движется наш объект. Вы конечно можете добавить туда коэффициент, который будет регулировать скорость, но для моего случая хватило и вот такой конструкции.

Ниагара с моими рыбами.

Движение конечно не идеально. Но таким способом можно анимировать очень приличное количество частиц, при этом не нагружая особо систему. А если рыба у вас это просто фоновое движение - то это идеально решение)

Заключение

Спасибо, что дочитал до конца. Если считаешь, что статья была полезной, то ты можешь меня отблагодарить) Я разрабатываю проект про кухню на колесах. Чтобы поддержать меня - просто добавь вишлист в стим. Есть возможность подать заявку на плейтест, чтобы раньше всех потрогать руками игру.

44
1
7 комментариев