我正在为我当前的项目开发一个骨架动画系统。我想在理解了大量阅读之后它是如何工作的但是在查看一些不同项目的来源时,我想知道为什么每个骨骼的比例,旋转和平移值都是单独存储的。你可以将所有这些存储在一个矩阵中吗?这不会更有效率,或者你需要更多的数学来获得单独的值,使其效率降低吗?
同样在我看来,显然存在两种常用的存储值的方法,即通过矩阵,或使用向量和四元数。后者更频繁地用于避免万向节锁定。但是我的项目只有2个自由度。存储我的值的最有效方法是什么?
答案 0 :(得分:1)
不,矩阵不会更有效,因为你必须使用4x4矩阵,所以16个浮点数。这主要是因为旋转+平移存储在矩阵中的方式。
如果以SRT形式存储值,最终会有9个浮点数,因为可以在加载时从其他组件重新计算旋转四元数的w组件。
此外,许多游戏引擎不支持非均匀缩放,因此您可以缩小到1个浮点数,最终每个骨骼有8个浮点数!
那是在压缩之前:因为你知道骨骼不会移动超过某个点(它们是体积限制的)然后没有点将精度分配给它永远不会达到的那些范围,所以你可以对那些浮点数进行编码说16位,所以你最终每个骨头有4个浮点数。
现在公平地说,我从来没有用压缩实现最后一部分;对我来说似乎有点极端,我没有时间。
但是从每个骨骼64个字节到每个骨骼32个字节可节省50%!