Animation 存储骨骼动画的SRT值

Animation 存储骨骼动画的SRT值,animation,matrix,Animation,Matrix,我目前正在为我当前的项目开发一个骨骼动画系统。我想我在读了很多书之后理解了它是如何工作的,但是在查看一些不同项目的源代码时,我想知道为什么每个骨骼的缩放、旋转和平移值是分开存储的。你可以把它们都存储在一个矩阵中,对吗?这不是更有效吗,或者你需要更多的数学来得到不同的值,从而降低效率 另外,当我在做这件事的时候,显然有两种常用的存储值的方法,一种是通过矩阵,另一种是使用向量和四元数。后者被更频繁地使用,以避免万向节锁。然而,我的项目只有2个自由度。存储我的值最有效的方法是什么?不,矩阵不会更有效,

我目前正在为我当前的项目开发一个骨骼动画系统。我想我在读了很多书之后理解了它是如何工作的,但是在查看一些不同项目的源代码时,我想知道为什么每个骨骼的缩放、旋转和平移值是分开存储的。你可以把它们都存储在一个矩阵中,对吗?这不是更有效吗,或者你需要更多的数学来得到不同的值,从而降低效率


另外,当我在做这件事的时候,显然有两种常用的存储值的方法,一种是通过矩阵,另一种是使用向量和四元数。后者被更频繁地使用,以避免万向节锁。然而,我的项目只有2个自由度。存储我的值最有效的方法是什么?

不,矩阵不会更有效,因为您必须使用4x4矩阵,所以16个浮点。这主要是因为旋转+平移存储在矩阵中的方式

如果以SRT形式存储这些值,则最终会出现9个浮点,因为旋转四元数的w分量可以从加载的其他分量重新计算

此外,许多游戏引擎不支持非均匀缩放,因此您可以将缩放缩小到1个浮点值,并最终得到每个骨骼8个浮点值

这是在压缩之前:因为你知道骨骼不会移动超过某个点(它们是体积限制的),那么就没有点为它永远无法达到的范围分配精度,所以你可以将这些浮动编码到16位,所以你最终得到每个骨骼4个浮动

公平地说,我从来没有用压缩实现过最后一部分;这对我来说似乎有点极端,我没有时间


但从每块骨骼64字节到每块骨骼32字节可以节省50%

不,矩阵不会更有效,因为必须使用4x4矩阵,所以16个浮点。这主要是因为旋转+平移存储在矩阵中的方式

如果以SRT形式存储这些值,则最终会出现9个浮点,因为旋转四元数的w分量可以从加载的其他分量重新计算

此外,许多游戏引擎不支持非均匀缩放,因此您可以将缩放缩小到1个浮点值,并最终得到每个骨骼8个浮点值

这是在压缩之前:因为你知道骨骼不会移动超过某个点(它们是体积限制的),那么就没有点为它永远无法达到的范围分配精度,所以你可以将这些浮动编码到16位,所以你最终得到每个骨骼4个浮动

公平地说,我从来没有用压缩实现过最后一部分;这对我来说似乎有点极端,我没有时间

但从每块骨骼64字节到每块骨骼32字节可以节省50%