Three.js导入Blender场景,包括动画

时间:2014-04-24 09:15:21

标签: animation three.js blender

我有一个包含一堆对象的Blender场景。这些对象中的一些具有骨骼动画但是大部分都没有。我试图将场景导入Three.js,包括正确对象上的动画。以下是我遇到的问题的细分:

  • Three.js中的骨骼动画仅在使用THREE.SkinnedMesh。
  • 时有效
  • 由于动画数据存在于所有对象上,因此确定动画链接到哪个对象很困难(如果不是不可能),因此无法将这些网格加载为THREE.SkinnedMesh。
  • 即使可以确定动画所属的对象,THREE.SceneLoader也不会将这些对象变为skinnedmeshes,导致必须删除SceneLoader所做的那些对象并使用蒙皮网格再次手动创建它们

我试图通过从Blender单独手动导出动画网格来做到这一点,因此骨骼动画数据仅在这些对象上,但这会引起这些对象的定位问题,因为这些对象的位置和旋转动画对象仅在Blender的scene.js导出文件中可用。

  • 有没有办法将Blender中的动画对象导出为 SkinnedMeshes立即保持场景的其余部分完好无损?
  • 是否可以在Three.js中确定某个对象是否有动画?

更新

我意识到,因为无论如何我都会分别用动画获取对象,我可以遍历场景几何体以检查对象上是否有可用的动画,并为它创建一个SkinnedMesh(如果有的话)案子。定位问题仍然存在:Three.js中的(0,0,0)位置和旋转将对象定位在场景的中心,而不是围绕其他点。我不确定这是什么意思,它可能是Blender场景中心,但我认为这两个是相同的。

1 个答案:

答案 0 :(得分:0)

我在搅拌机中创建了一个在场景中心创建并设置动画的测试对象。当将它导入Three.js时,位置似乎移动了一点(对于我而言,在每个轴上介于-1.5和1.5之间),但是可以在三个中手动修复。这种方法效果很好,但有一些缺点:

  • 位置偏移可能会迫使您手动重新定位动画对象。这只适用于您的定位需求需要精确的情况。
  • 您需要通过将对象放置在所需位置来手动从混合器获取位置,旋转和缩放。 (你可以在Three中做到这一点,但我认为那会更有效。

它并不完美,但它现在有效。我确信有可能让Blender到Three导出器用动画导出对象,好像它在场景的中心,然后提供正确的位置,旋转和缩放到Three.js,以便能够立即加载动画在正确的位置上的对象,如果我有时间,我会尝试实现它。

我希望这可以帮助其他人解决这个问题,即使这只是一个临时修复。