【问题标题】:three.js animation: Skeleton/Skinning vs Morphthree.js 动画:骨架/蒙皮 vs 变形
【发布时间】:2014-12-13 09:31:45
【问题描述】:
所以在对变形和骨骼动画(从 Blender 导出)进行了一些试验后,我发现骨骼文件比变形文件小了近 10 倍。看起来显然骨骼是更好的选择,但我想知道使用它是否有缺点。
具体来说,我怀疑为骨骼设置动画而不是变形需要更多的处理。什么时候比另一个更好?如果我为 100 个模型制作动画而不是一个模型,这有关系吗?如果 skeletal 确实需要更多处理,并且我在线托管应用程序,那么带宽的减少(由于文件较小)是否值得在运行时进行额外的处理?
感谢您的任何意见。
【问题讨论】:
标签:
animation
three.js
blender
morphing
skeletal-animation
【解决方案1】:
确实,骨骼动画需要稍微多一些处理,因为骨骼的矩阵必须在每一帧中计算(在 JS 中)并上传到 GPU。使用变形动画时,所有插值都可以在 GPU 端完成。所以这确实是一种内存性能交易。
当您确实同时播放多个动画时,处理确实会产生一些成本。然而,与此同时,几个不同的变形动画会有很大的文件大小。
正如你所说。
所以这取决于大小写。有几点需要注意:
- 如果动画不是太快或太复杂,可以以减少每秒帧数的方式存储变形动画,这样您的文件就会更小。
- 骨骼动画具有骨骼信息,您可以使用这些信息将物体附加到模型上,例如你有一个士兵模型,你想把不同的枪附加到它上面。使用变形动画,您无法做到这一点,因此您必须同时为士兵和每一把枪制作动画。
- 实际上,您可以在同一个应用程序中使用这两种类型的动画,为每种用途选择最合适的。
- SkinnedMesh-es 与 MorphAnimMesh-es 不同,目前不支持光线投射。如果您需要光线投射,例如对于选择对象,您暂时需要使用变形动画。