简短版本:请参见标题。
长版:
我正在编写自己的引擎(使用C ++),并且通过使用我从Unity资产商店中获取的免费角色模型,我设法使骨骼动画正常工作。它在我的代码中可以制作动画,但是当我切换到另一个字符时,我完全陷入了混乱。经过一番游戏后,我发现没有应用动画,角色的网格处于T姿势,但是默认的骨架姿势(我一直用作绑定姿势)实际上是角色空闲动画的第一帧。
使用FBX SDK深入研究FBX文件时,我发现我使用的第一个字符模型具有16个不同的姿势,其中许多(包括姿势#0)被FBX SDK报告为有效的绑定姿势。 。我正在使用的新角色模型只有1个姿势,这不是有效的绑定姿势。
当我将两个字符加载到Unity中时,它们似乎都可以工作;第一个角色的默认姿势是T姿势,而第二个角色的默认姿势是空闲动画的第一帧;我在自己的引擎中看到的变形不正常。这使我怀疑Unity会根据发现的姿势来变换模型的顶点。
在FBX SDK中,我通过调用node->EvaluateGlobalTransform().Inverse();
获得骨骼的逆全局绑定姿势,并通过调用node->EvaluateLocalTransform();
获得骨骼的局部变换。
我认为我需要创建一个绑定姿势(可能只是不可能?),或者将模型的顶点转换为我给定的默认姿势。我相信后者是Unity处理事情的方式,但我不知道该如何实际做。
我不能使用第二个自由角色模型,而是要求引擎加载的角色模型必须具有有效的绑定姿势,但是我宁愿拥有一个更强大的加载程序并进一步了解我所遇到的问题拥有。