起因是在看UE的Footplacement节点的算法时看到了ToSwingTwist这个函数
notion image
这是一个针对四元数的处理,传入参数有向量和四元数
notion image
这个功能在Unity相关的API里并未出现,功能是将一个四元数以传入向量为轴分解为Swing和Twist两个不同方式扭转的四元数
该文章阐述了使用Swing-Twist分解作为Slerp替代的过程
 
简单来讲,在四元数的旋转插值中,存在nlerp与slerp两种方式,nlerp有较快但不恒定的角速度,slerp较慢但是有恒定的角速度。
对于小角度插值,使用nlerp是足够的,因为角速度即使存在变化,它在较小的角度插值过程中的变化也不大。而slerp是“最短旋转路径”的算法,其路径并不一定是3D球面上的最短弧线。
将这个Slerp分解为一个摆动部分和一个扭动部分,分别进行Slerp后再进行组合,可以实现恒定角速度且最短弧线的旋转
 
Half-Life : Alyx 的角色Locomotion改进方案研读Maya2022及以上版本安装pymel