我正在开发一个小型的多人游戏,其中有一个带有单个皮肤的播放器模型,许多玩家都在使用它。 一些背景信息: 我尝试了通过maya和blender导出collada格式加载模型。两者似乎都引用了某种形式的动画数据,但我无法让它们正常工作。我尝试了maya JSON导出器,但它只生成了非常小的1k文件,只包含材质行。最后,blender JSON导出器起到了作用。对于那些也在尝试加载蒙皮网格的人,我发现这个链接非常有用:Model with bones animation (blender export) animating incorrectly in three.js
现在我有了从JSON加载器中得到的geometry
对象和materials
数组。
我可以在材料上设置skinning=true
,创建一个THREE.SkinnedMesh
,将其添加到场景中,通过THREE.AnimationHandler.add
添加动画(我对AnimationHandler
实际上是做什么的还不太清楚),创建一个THREE.Animation
,调用play()
和update(dt)
。最终,在我的场景中有一个单个的网格和一个正在播放的动画。
现在我想要的是这些...
许多实例 - 我希望我的场景中有多个运行的播放器模型。
- 我不想加载多次相同的网格和动画数据。
- 动画时间应该是每个实例独立的(所以它们不会全部同步播放)。
我应该为同一个模型创建多个
THREE.SkinnedMesh
和THREE.Animation
吗?THREE.AnimationHandler
是用来做什么的?许多动画 - 我想要分别播放空闲/奔跑循环的能力。
据我所知,动画关键帧只有一个时间轴。Three.js如何为我分配它,还是我必须手动完成?
动画混合 - 当角色停止奔跑并静止不动时,我不想从一个动画立即切换到另一个。我想暂停奔跑动画并将该状态混合回空闲动画。
目前在蒙皮网格(而不是变形目标)中是否可以实现此功能?是否有相关的示例或文档?
任何信息都将不胜感激,即使只是指出正确的方向。我不需要完整的教程,我想要一些关于这些功能的高级信息。
我很乐意实现2和3,但我想了解一些关于threejs皮肤和动画框架的信息/描述性文档以帮助我入门。例如,这个没有太多参考价值。
[编辑]
谢谢@NishchitDhanani,这个页面非常好,但没有提到多个动画或混合骨骼动画:http://chimera.labs.oreilly.com/books/1234000000802/ch05.html#animating_characters_with_skinning
这个页面说多个动画仍然是一个当前的问题,但没有更多的信息(在评论中简要讨论): http://devmatrix.wordpress.com/2013/02/27/creating-skeletal-animation-in-blender-and-exporting-it-to-three-js/
目前的答案是...
- 使用许多
THREE.SkinnedMesh
,但仍不确定如何使用THREE.AnimationHandler
。 - 不知道。也许有一种方法可以在
THREE.Animation
中手动修改起始/结束关键帧。 - 据我所知尚未实现。我可能会尝试创建一个自定义着色器,可以接受两个
THREE.Animation
并在它们之间进行插值。
.scene
的对象。你可以添加整个场景或从其子元素中进行选择。 - jozxyqk