Что мне делать, если файл FBX не имеет позы связывания? - PullRequest
0 голосов
/ 01 июля 2019

Короткая версия: см. Заголовок.

Длинная версия:

Я пишу свой собственный движок (на C ++), и мне удалось заставить скелетную анимацию работать должным образом, используя бесплатную модель персонажа, которую я забрал из хранилища ресурсов Unity. В моем коде он прекрасно анимируется, но когда я переключился на другого персонажа, я получил полный беспорядок Немного поиграв, я обнаружил, что без применения анимации сетка персонажа находится в T-позе, но по умолчанию скелетная поза (которую я использовал как позу связывания) на самом деле является первым кадром неактивной анимации персонажа.

Углубившись в файлы FBX с помощью FBX SDK, я обнаружил, что первая модель персонажа, которую я использовал, имела 16 разных поз, многие из которых (включая позу № 0) были объявлены FB SDK как действительная позиция связывания. , Новая модель персонажа, которую я использую, имеет только 1 позу, которая НЕ считается действительной позой связывания.

Когда я загружаю оба символа в Unity, кажется, что они оба работают; позой по умолчанию для первого символа является T-поза, в то время как позой по умолчанию для второго символа является первый кадр неактивной анимации; то, что я видел в своем собственном двигателе, который не деформировался должным образом. Это заставляет меня подозревать, что Unity преобразует вершины модели в соответствии с тем, какую позу она находит.

В FBX SDK я получаю обратную глобальную позу связывания кости, вызывая node->EvaluateGlobalTransform().Inverse();, и получаю ее локальное преобразование, вызывая node->EvaluateLocalTransform();.

Я думаю, что мне нужно либо создать связывающую позу (которая может быть просто невозможна?), Либо преобразовать вершины модели в позу по умолчанию, которую мне дают. Я верю, что именно так Unity и управляет, но я понятия не имею, как на самом деле это сделать.

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

...