Unreal Engine 4 http://uengine.ru/forum/ |
|
Реализация "препроцессинга" анимационной системы. http://uengine.ru/forum/viewtopic.php?f=19&t=13684 |
Страница 1 из 1 |
Автор: | gonard [ 16 май 2018, 00:11 ] |
Заголовок сообщения: | Реализация "препроцессинга" анимационной системы. |
Пару месяцев делаю систему синхронизации анимаций а-ля motion matching от юбисофта. И тут появилась проблема с архитектурой анимационной системы в движке. Суть проблемы: У каждой анимации есть своя уникальная кривая, равная единице на протяжении всей анимации, таким образом я получаю веса всех анимаций в анимационной системе, т.к. сами значения кривых умножаются на коэффициент веса анимации в системе, что очень удобно. Если вес анимации равен нулю, то для такой анимации ненужно рассчитывать искомый кадр синхронизации, а алгоритмы там довольно ресурсоёмкие. Но проблема в том что при всех тик ивентах в Анимационном блупринте кроме тика PostEvaluateAnimation даются значения кривых с последнего состояния анимационной системы. Таким образом если хоть какая-то анимация в кадре обретает не нулевой вес, то расчет синхронизации анимации будет только в следующем кадре, потому что значение анимационной кривой будет всё еще равна нулю! Из-за этого присутствует подергивания скелета когда хоть какая-то анимация обретает не нулевой вес. PostEvaluateAnimation использовать нет смысла, т.к. этот тик идёт уже после обновления animGraph. Та же проблема и с получением transform любой кости. Из-за этого лага присутствует подёргивания в системе компенсации проскальзывания ног. Что мне нужно: Получать значения animation curves и socket transform, с нового состояния анимаГрафа, но еще до того сам сам анимГраф и финальная поза окончательно обновятся. Как бы заглядываю в будущее состояние анимационный системы, и использую новые данные в своих целях. В итоге "истинное" финальное состояние анимационной системы будет уже другим, т.к. эти данные я применю к анимГрафу. Нашел полезную инфу по последовательности обновления анимаций тут https://gist.github.com/ikrima/a900a50c1d4b7293d44b Внизу видно что кривые обновляются как раз перед poseEvaluateAnimation, саму функцию переопределить нельзя. Из animinstance были перепробованы все тик ивенты которые нашел в API, ни один не подходит. Сразу скажу что в программировании я ноль, мне помогал программист, но решить траблу так и не смог. Вообщем надеюсь на вашу помощь. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |