四元数的二次插值(SQUAD)



我在动画中有四个关键帧,f0,f1,f2,f3,我正在尝试插入位于f 1和f2之间的某个时间的帧f的旋转,t = (f-f1)/(f2-f1)。

我的问题是,我可以在关键帧之间进行二次插值以找到旋转吗?我想使用所有四个关键帧。我还希望它在关键帧之间是 C1 连续的。

我已经研究了SQUAD和Catmull-Rom 样条,但我仍然有点犹豫要不要实现它们,因为我不确定公式应该是什么样子。SQUAD告诉如何在一系列旋转之间进行插值,我不确定如何将其应用于四个旋转。提前感谢!

不幸的是,四元数并不存在于线性空间中,因此它们之间的插值有点棘手,正如您已经发现的那样。

我假设你想使用加权平均值,就像你在 3D 空间中计算曲线一样。

首先,没有定义两个以上四元数的精确球面插值(SLERP)。这是因为它们的组合是用乘法描述的,而它们的乘法是不可交换的(除了其他原因)。因此,您将不得不使用近似解决方案,就像其他所有动画软件一样:-)

SQUAD(又名Shoemake的四元数曲线)是一种可能性,甚至是更高级(和更准确)的基于优化的广义四元数插值。然而,在实践中,我总是使用NLERP(归一化线性插值,例如在这里描述),如果插值的四元数相当接近(大约60到90度的差异仍然很好),它给出了很好的结果,同时非常简单和快速。这里有一篇带有 3D 矢量示例的漂亮简单文章,显示了这些示例之间的区别。

就我个人而言,我总是回到几何工具的四元数代数和微积分笔记,它们对CG中四元数的理论和实践方面都有非常简洁的描述。

并且不要忘记对足性,这是迄今为止实现四元数插值时最常见的问题:)

最新更新