使用骨骼动画建模(blender导出)在three.js中动画不正确

9
我目前正在进行three.js中的骨骼动画测试。我有一个简单的模型,在blender中可以很好地进行动画。基本上,它由三个堆叠的弯曲立方体组成。
当我使用Blender V2.64的blender导出插件将blender文件导出到three.js时,WebGL上下文中的动画似乎不同,就像皮肤权重有误一样。

WebGL演示: http://rainbowrangers.de/threejs/animation_test01/

Blender文件: http://rainbowrangers.de/threejs/animation_test01/model/animation_test01.blend

我需要做什么才能在three.js中获得正确的结果?

3个回答

10

我是你在github讨论中引用的人。我最近一直在尝试这个流程(即从Blender骨骼动画到Threejs),但发现很难找到一个可靠的过程来确保每次都能成功。

在我的博客中,我整理了一些“技巧”,有时候可以帮我取得成功:

http://dev.mothteeth.com/2012/10/threejs-blender-exporting-skeletal-animations/

总结一下,我发现最重要的事情是:

在导出之前删除Armature Modifier,否则动画会出现问题。

检查你的Vertex Groups是否正确分配给骨骼。(在Blender中,你可以使用自动骨骼权重)

在动画的第一帧和最后一帧关键帧所有骨骼。(正如你发现的那样,如果你只为你改变的骨骼设置关键帧,ThreeJS将不会推断出任何有关其他骨骼的信息,结果就会出问题。)

即使遵循这些指南,我也无法始终让它们正常工作,并且一直在考虑使用morph targets,直到该库更成熟一些。morph targets的文件大小要大得多,但在我看来它们是目前更可靠的选择。


1
谢谢!我的骨骼旋转中心不正确,似乎无法遵循父子关系。对我来说,“在导出之前删除骨架修改器”是关键。好文章! - jozxyqk

3

经过大量的挖掘,我最终在three.js的GitHub讨论中找到了答案:

“在动画的开始和结束处为所有骨骼插入完整的关键帧。我发现如果没有第一帧关键帧,则动画会有微妙的扭曲,而如果没有最后一帧,则我将失去朝向结尾的部分动画。”

来源:https://github.com/mrdoob/three.js/issues/2106

这正是我们渲染出现问题的原因。我们只设置了正在变化的骨骼的关键帧,而没有为静态骨骼设置。


我非常热衷于分享关于Blender / ThreeJS管道的信息。如果您想交流指针或者有任何关于如何可靠地使其工作的突破性进展,请随时联系我。 - null
我刚刚发送了一封电子邮件给你,希望和你联系。我很愿意交流一些知识。 - Patrick

2
我也发现,在Blender中导出模型时,要让导出的模型正常工作,应该在第0帧进行导出。另一个解决我遇到问题的方法是不要在导出后对模型进行缩放。这意味着模型不能在JSON文件和代码中直接缩放。使用three.js r56。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接