带有骨骼动画(搅拌机导出)的模型在三个.js 中动画不正确

Posted

技术标签:

【中文标题】带有骨骼动画(搅拌机导出)的模型在三个.js 中动画不正确【英文标题】:Model with bones animation (blender export) animating incorrectly in three.js 【发布时间】:2012-11-11 05:09:33 【问题描述】:

我目前正在three.js 中进行骨骼动画测试。我有一个简单的模型,可以在搅拌机中很好地制作动画。基本上它由三个堆叠的弯曲立方体组成。

当我使用 Blender V2.64 的 blender 导出插件将 blender 文件导出到 three.js 时,webGl 上下文中的动画看起来不同,就好像皮肤权重错误一样。

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

搅拌机文件: http://rainbowrangers.de/threejs/animation_test01/model/animation_test01.blend

要在three.js 中获得正确的结果,我必须做些什么?

【问题讨论】:

【参考方案1】:

我是你在 github 讨论中引用的那个人。我最近一直在试验这个管道,(即 Blender 骨骼动画到threejs,)并且发现找到一个每次都能工作的可靠过程非常困难。

在我的博客上,我整理了一份让我在某些情况下取得成功的“技巧”列表:

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

总而言之,我发现的最重要的事情是:

导出前删除Armature Modifier,否则动画会乱七八糟。

检查您的顶点组是否正确分配给骨骼。 (在 Blender 中,您可以使用自动骨骼权重。)

在动画的第一帧和最后一帧中键入所有骨骼。 (正如您所发现的,如果您只拥有已更改骨骼的键,ThreeJS 不会推断出其他骨骼的任何内容,并且事情会被破坏。)

即使遵循这些准则,我也无法让事情始终如一地工作,并且一直在考虑使用变形目标,直到库更加成熟为止。变形目标的文件大小要大得多,但根据我的经验,目前它们似乎是一个更可靠的选择。

【讨论】:

谢谢!我的骨头从错误的支点旋转,它似乎不服从养育。 “在导出之前删除骨架修改器” 对我来说是关键。好文章!【参考方案2】:

经过大量挖掘,我终于在三个.js github讨论之一中找到了答案:

“在动画的开始和结束处为所有骨骼插入一个完整的关键帧。我发现如果没有第一个关键帧,动画会轻微变形,如果没有最后一个关键帧,我会丢失部分动画到最后。”

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

这正是我们的渲染发生的事情。我们只为正在变化的骨骼设置关键帧,而不为静态骨骼设置关键帧。

【讨论】:

我真的很想分享有关 Blender / ThreeJS 管道的信息。如果您想交换指点,或者您在如何使其可靠运行方面有任何重大突破,请随时与我们联系。 我刚刚给您发送了一封电子邮件以取得联系。我很想交流一些知识。【参考方案3】:

我还发现,要让导出的模型正常工作,导出应该在 Blender 的第 0 帧完成。

解决我遇到的问题的另一件事是在导出模型后不缩放模型。这意味着模型无法在 JSON 文件中缩放,可能直接在代码中。

使用three.js r56

【讨论】:

以上是关于带有骨骼动画(搅拌机导出)的模型在三个.js 中动画不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何对从搅拌机导出的动画 js 模型进行纹理处理? [三.js]

如何将 ms3d 模型转换为 three.js?

如何将搅拌机中的所有动作(动画)导出到文件。 FBX?

不正确的骨骼旋转,基于编辑模式下的骨骼结构

将角色从搅拌机导出到 Unity 后裁剪的对象

THREE.JS 从搅拌机中导出 JSON 模型(包括纹理)