为啥在导出为 GLTF 时,blender rigged 动画会变形?

Posted

技术标签:

【中文标题】为啥在导出为 GLTF 时,blender rigged 动画会变形?【英文标题】:Why is blender rigged animation distorted when exported as GLTF?为什么在导出为 GLTF 时,blender rigged 动画会变形? 【发布时间】:2018-12-31 15:57:18 【问题描述】:

我在 Blender 中创建了一个带有骨架绑定的动画。当我在 Blender 中按 Alt-A 对其进行测试时,它工作得非常好。但是,当我使用 KhronosGroup GLTF 导出器将其导出为 .glb 时,生成的动画会失真(例如,四肢断开连接并以一种奇怪的方式移动)。

为什么会发生这种情况(我该如何解决)?

在过去的两天里,我一直在尝试类似问题的解决方案(例如使用 Ctrl-A 应用位置/旋转/缩放,或删除网格上的骨架修改器),但没有一个对我有用。

链接:

这里是动画应该是什么样子的屏幕记录的链接(这是我在 Blender 中播放的): https://github.com/kylejlin/hosting-for-my-***-questions/blob/master/correct-animation.mov

这里是动画实际外观的屏幕录制链接(这是我在浏览器中使用 Three.js 测试导出的 .glb): https://github.com/kylejlin/hosting-for-my-***-questions/blob/master/distorted-animation.mov

这是.blend 文件: https://github.com/kylejlin/hosting-for-my-***-questions/blob/master/soldier.blend

这是导出的.glb 文件: https://github.com/kylejlin/hosting-for-my-***-questions/blob/master/soldier.glb

【问题讨论】:

您使用什么版本的 Blender 导出?我只是尝试通过 2.79 导出,但遇到一些错误,看起来它们与自定义属性或其他东西有关。但 2.79 不一定是最新的……对我来说唯一突出的另一个危险信号是你的网格是使用镜像修改器来镜像网格的一半...有时在导出期间应用该修改器的行为不起作用。除此之外,我看不到任何非常明显的东西,但我建议耐心等待,因为动画可能是一场噩梦:D 另外,在右边的“相关问题”中......我看到了这个:***.com/questions/13518856/… 这建议在动画开始时为骨架插入一个完整的关键帧。不确定这是否意味着关键帧应该是绑定帖子,但也许那里有一些有用的提示。它还建议在导出之前删除骨架修改器。但是我真的不明白加载器如何知道如何再次绑定它,所以ymmv 【参考方案1】:

我进一步查看了您的设置。我看到您有一些 IK 骨骼部分驱动动画。这些将无法正确翻译,并且必须将 IK 烘焙到动画中。我还研究了镜像修改器并意识到那里的问题..要导出镜像对象,您必须单击“应用修改器”复选框,但也应用了骨架修改器,它会扭曲网格,因此您得到错误的网格出去。要解决此问题,您必须在搅拌机中手动应用镜像修改器,然后在未选中“应用修改器”的情况下导出。一旦你这样做了,一旦你将 IK 烘焙到动画中,你就可以让它工作。

我过去做过 IK 烘焙,但忘记了它是如何工作的,但这是一个起点:https://blenderartists.org/t/bake-ik-to-fk/587226

fwiw 这是我预先应用镜像修改器时的 .glb。注意现在手臂动画正确,但由于 IK,腿/脚仍然很扭曲。我还没想好怎么烤……

https://drive.google.com/open?id=1zeA-mMirOWYZHlzdURqNnykgh_g10kbr

【讨论】:

非常感谢!手动应用 Mirror 并取消选中 Apply Modifiers 框来修复它(我已经选中了 Bake Skinning Constraints 框,所以导出器为我处理了所有烘焙)。 您不需要在搅拌机 2.8 + 中烘烤,只需在检查蒙皮和采样选项的情况下将其导出。所有 IK 动画都将很好地导出。 (我不完全知道采样率的作用,但我保持在 8)【参考方案2】:

Rig之前设置Object的变换values:0

【讨论】:

以上是关于为啥在导出为 GLTF 时,blender rigged 动画会变形?的主要内容,如果未能解决你的问题,请参考以下文章

Blender 2.79 材料导出到 gltf 失去光泽

使用Blender导出多个动画的GLTF模型

ThreeJS模型展示为黑色,模型出不来

有没有办法将 gltf 转换为 dae?

使用具有 0 粗糙度的 GLTF 导出的立方体 原则 BSDF 材料在 Three.js 中无法正确显示

ThreeJS GLTF Blender Exporter 的法线贴图值