Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 1
Пару месяцев делаю систему синхронизации анимаций а-ля motion matching от юбисофта. И тут появилась проблема с архитектурой анимационной системы в движке.

Суть проблемы:
У каждой анимации есть своя уникальная кривая, равная единице на протяжении всей анимации, таким образом я получаю веса всех анимаций в анимационной системе, т.к. сами значения кривых умножаются на коэффициент веса анимации в системе, что очень удобно. Если вес анимации равен нулю, то для такой анимации ненужно рассчитывать искомый кадр синхронизации, а алгоритмы там довольно ресурсоёмкие. Но проблема в том что при всех тик ивентах в Анимационном блупринте кроме тика PostEvaluateAnimation даются значения кривых с последнего состояния анимационной системы. Таким образом если хоть какая-то анимация в кадре обретает не нулевой вес, то расчет синхронизации анимации будет только в следующем кадре, потому что значение анимационной кривой будет всё еще равна нулю! Из-за этого присутствует подергивания скелета когда хоть какая-то анимация обретает не нулевой вес. PostEvaluateAnimation использовать нет смысла, т.к. этот тик идёт уже после обновления animGraph.
Та же проблема и с получением transform любой кости. Из-за этого лага присутствует подёргивания в системе компенсации проскальзывания ног.

Что мне нужно: Получать значения animation curves и socket transform, с нового состояния анимаГрафа, но еще до того сам сам анимГраф и финальная поза окончательно обновятся. Как бы заглядываю в будущее состояние анимационный системы, и использую новые данные в своих целях. В итоге "истинное" финальное состояние анимационной системы будет уже другим, т.к. эти данные я применю к анимГрафу.
Нашел полезную инфу по последовательности обновления анимаций тут https://gist.github.com/ikrima/a900a50c1d4b7293d44b
Внизу видно что кривые обновляются как раз перед poseEvaluateAnimation, саму функцию переопределить нельзя. Из animinstance были перепробованы все тик ивенты которые нашел в API, ни один не подходит. Сразу скажу что в программировании я ноль, мне помогал программист, но решить траблу так и не смог.
Вообщем надеюсь на вашу помощь.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница