March 29, 2024, 02:22
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Экспорт-импорт аддитивной анимации  (Read 592 times)
Noterstone
Newbie
*
Posts: 25


View Profile
« on: October 27, 2022, 15:53 »

Gildor, привет! Читал одну из тем, где вы писали о том, что в максе как-то смешивали аддитивную анимацию. Я уже долго ищу решение проблемы, как смешать позу с аддитивной анимацией для получения её нормального вида. Кто-то написал скрипт для смешивания с базовой позой для 3ds Max (mesh space и local space https://github.com/PeterZhenhh/PSA_ImportHelper), скрипт работает, однако он конвертирует (почему-то) кости в Dummy и при попытке экспорта fbx из 3ds Max в Blender - все начинает искажаться и в целом все настройки которые можно было поменять - не помогают. Я попробовал экспортировать именно модель персонажа с костями а не с Dummy вместо "настоящих: костей и импортировать в Blender через тот же fbx - и все адекватно в этом случае экспортируется. Я в целом сам программист, но заглянув в код скрипта - какой-то тихий ужас охватил. Логика там в целом видимо такая, что к позициям и поворотам костей аддитивной анимации суммируются позиции и повороты от базовой позы с которой смешиваем. Я не знаю что в нём нужно подправить, чтобы он сохранял именно кости, а не ставил вместо них Dummy как объект кости. Есть ли какой-либо ещё способ смешать аддитивную с базовой анимацией? Или если править скрипт - куда копать? В скрипте нашел место где прописывается Dummy, но опять же, не известно, в этом ли проблема. https://i.ibb.co/SRz0TfT/2022-10-27-165308310.png

P.S. описал саму проблему, как она проявляется со скриншотами в репозитории плагина: https://github.com/PeterZhenhh/PSA_ImportHelper/issues/1#issue-1424742587
« Last Edit: October 27, 2022, 19:39 by Noterstone » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #1 on: October 27, 2022, 22:44 »

Привет.

Аддитивная анимация добавляется к позе, которая получается использованием других, не аддитивных анимаций. Формата данных для неё нет - она существует только в движке. Ни fbx, ни gltf не умеют работать с аддитивной анимацией. Если я не ошибаюсь, при импорте из fbx в Unreal, ему передаётся самая обычная анимация. Движок берёт первый keyframe, и использует его как "базу" - он вычитается из всех остальных поз.

Вроде всё просто - добавить первый frame к остальным, и сохраняй. Но - первый keyframe Unreal не хранит, он теряется при импорте, то есть остаётся только сама разница. Поэтому umodel не может её никак отобразить. В редакторе Unreal всё окей - потому что в editor asset базовая поза сохранена, там также хранится имя базового трека, который используется для preview. Но вся эта информация удаляется во время cooking. Использовать bind pose (T-pose и так далее) в umodel - не особо правильно, потому что аддитивная анимация может быть рассчитана скажем на анимацию ходьбы или бега, а не когда персонаж стоит - ноги вместе, руки в стороны. В общем, универсального решения просто нет.

Ну а насчёт скрипта - я в него не смотрел. Судя по английской ветке по additive animation, этот скрипт заточен под какую-то одну игру, под определённый скелет, и с остальными работать без адаптации не будет. В общем, это просто хак.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #2 on: October 28, 2022, 01:08 »

Спасибо! Попробую написать скрипт для блендера. Только один вопрос остался, чем отличается additiveType для MeshSpace от LocalSpace? В первом случае просто добавление первого фрейма а во втором случае какие-то другие операции?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #3 on: October 28, 2022, 01:24 »

Не знаю. Это надо лезть в исходники движка, чтобы разобраться.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #4 on: October 28, 2022, 02:17 »

Надо будет завтра поковырять сорцы, спасибо!)
Logged
freemanpro
Full Member
***
Posts: 114


View Profile
« Reply #5 on: October 28, 2022, 14:06 »

Насколько я понял из переписке, что бы подключить адаптивную анимация скажем на анимацию ходьбы или бег, нужно добавлять уже каждый кадр additive animation к каждому кадру нужной анимации ( например просто ходьба ) к базовой анимации которой он относиться.

Как я вижу действия скрипта в максе :

1. Сначала подгружает additive animation - запоминаем матрицу трансформации костей
2. Затем подгружает базовую анимацию  - пересчитываем с additive animation каждый кадр
3. Выгружаем финальную анимацию.

Кстати в скрипте все основные функции для этого есть.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #6 on: October 28, 2022, 22:43 »

Это вы про плагин из репозитория или про ActorX?
Если из репозитория, то я знаю, правда там не кадры используются, а лишь первый кадр примешивается к аддитивной. И оно вроде как работает. Проблема немного в другом.
Опишу.
Если импортировать fbx с анимацией (экспортировал посредством ActorX) скриптом, который смешивание делает для аддитивной и даже не добавлять аддитивную анимацию - ломается иерархия у костей. После экспорта в fbx и последующем импорте в блендер видно, что некоторые кости уже не кости, т.е. пустышки как и в самом максе.
В максе это выглядит так:

В блендере это уже выглядит так, некоторые кости как кости принимаются, другие же - пустышки:


Теперь, если взять ActorX и им импортировать персонажа + анимацию, экспортировать в fbx и импортировать в Blender, то такая картина получается, т.е. как и нужно.
В максе. Кости тут являются костями, т.е. что и ожидается:
В блендере. Видно, что иерархия правильная. В целом все также (на развернутые кости не обращать внимания, это я изменил их направление, но импортируется все правильно):


И мне хотелось бы как-то подправить этот скрипт так, чтобы он работал именно с костями и сохранял иерархию, чтобы после экспорта и дальнейших импортов в другие программы структура сохранялась именно как при работе с ActorX, ибо при его работе ничего не меняется/ломается и работает как нужно. И я озадачен тем, в чем именно проблема этого скрипта и что в нем надо исправить, в MaxScript я полный ноль и посмотрев код, я лично ничего не понял, слишком много неизвестных как по мне, т.е. интуитивно код не могу понять. Хотя я знаю в некоторой части плюсы и вполне хорошо шарп, знаком с OGL и пишу шейдеры под свои нужны. Я бы попытался сам написать тулзу для этого, но тут времени уйдет в моем случае не мало. Потому решил написать тут, т.к. тут есть люди, которые этим занимались/занимаются и, быть может, проблему можно решить парой правок, если вдруг это окажется не большой проблемой. Тем более, решение проблемы, возможно, будет полезно и другим людям, а не только для меня, за что я был бы признателен.
« Last Edit: October 28, 2022, 23:27 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #7 on: October 29, 2022, 03:01 »

Я скорее всего попробую свою тулзу накалякать если поправить скрипт не получится. Тем более в гите есть сорцы движка. Надеюсь они не юзают для фортнайта свою отдельную закрытую ветку движка.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #8 on: October 29, 2022, 03:05 »

Надеюсь они не юзают для фортнайта свою отдельную закрытую ветку движка.
Они юзают) Но все изменения мержат в основную ветку. У них же основная разработка движка идёт под Fortnite, эпики больше ничего и не делаю из игр.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #9 on: October 29, 2022, 03:56 »

А, ну хотя бы мержат, значит не все так плохо) Кстати, для основной массы анимаций они юзают 24 кадра в секунду или 30,3? А то мне показалось 30.3, или так и есть.
« Last Edit: October 29, 2022, 03:58 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #10 on: October 31, 2022, 10:55 »

В общем, разобрался, надо было после каждой операции просто сбрасывать скейлы и применять объекты пустышек через AnimationTools как кость, и там ещё тыкнуть на сброс скейла, перед этим выбрав все кости. Теперь всё нормально, за исключением лица, но мне лицо не нужно, тут я думаю кто-то сам разберётся, экспортировал в fbx и все как нужно. Правда, меня немного смущает правое плечо, приподнято что-ли сильно, видимо так задумано аниматорами было (немного сомневаюсь), корректно или нет, если нет - дайте знать. Я бы подсмотрел в фортнайте, но я пытался консоль включить и godMode активировать, чтобы полетать вокруг персонажа, посмотреть на него, но не получилось как-то, чтобы подсмотреть корректность результатов.

« Last Edit: October 31, 2022, 11:05 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #11 on: November 01, 2022, 12:12 »

А, ну хотя бы мержат, значит не все так плохо) Кстати, для основной массы анимаций они юзают 24 кадра в секунду или 30,3? А то мне показалось 30.3, или так и есть.
Ровно 30 кадров в секунду. Для некоторых 120 (хз зачем)
« Last Edit: November 01, 2022, 12:29 by Noterstone » Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #12 on: November 02, 2022, 12:17 »

А где содержится инфа о том, из какой анимации берется первый кадр для аддитивной?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #13 on: November 02, 2022, 12:20 »

Есть там какие-то editoronly properties. В общем, они в cooked build отсутствуют.
Logged
Noterstone
Newbie
*
Posts: 25


View Profile
« Reply #14 on: November 02, 2022, 12:35 »

Есть там какие-то editoronly properties. В общем, они в cooked build отсутствуют.
Ниче не понял) Т.е. двиг из этих проперти вытягивает инфу что является базовым? Ну это для редактора, понятно.
Как тогда сама игра определяет как и с чем смешивать... фигово, что данная инфа не записывается и не распаковывается наподобие бленд спейсов. Во всяком случае, все они смешиваются, судя по всему, только с анимациями из папки poses, иначе другого их смысла в их сохранении не понимаю, тем более, они все из одного кадра и состоят. Кроме AO, они все по три кадра.
« Last Edit: November 02, 2022, 13:10 by Noterstone » Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS