骨骼蒙皮 · 交互演示

一根骨头,两个骨骼(同轴),中间一段是混合区。右边的骨骼相对左边的绕轴扭转了一个角度 φ。 拖动滑块看两件事:LBS 会把混合区的半径压扁(这就是"糖果纸"),而双四元数(DQS)不会。

线性混合蒙皮 LBS半径被压扁

双四元数 DQS半径保持

参数

170.0°
40%
混合区中点的权重 w0.500
LBS 最小半径保留率—
DQS 最小半径保留率—
权重 w 处 LBS 的半径保留率 = √(1 − 2w(1−w)(1−cos φ))
  w = 0.5 时退化为 |cos(φ/2)|  DQS 恒为 1

半径保留率 vs 扭转角(权重 0.5 处)

橙色曲线是 LBS 的解析式 |cos(φ/2)|,圆点是从上面那根管子上实测出来的; 蓝色直线是 DQS。φ = 170° 时 LBS 只剩 8.7% —— 那条"收腰"就是这么来的。

这个演示在说什么

蒙皮的公式只有一条:u = Σ wᵢ · BᵢMᵢ⁻¹ · p。当 BᵢMᵢ⁻¹ 是矩阵时, 把两个旋转矩阵加权求和,得到的不是一个旋转——它的行列式会小于 1,也就是"缩了"。
收缩量只和两个旋转的夹角 φ 与权重 w 有关:√(1 − 2w(1−w)(1−cos φ))。 权重在两端(0 或 1)时没有损失,损失最大的是"一半一半"的中间地带 —— 所以收腰出现在混合区正中。
双四元数换了个表示:它混合的是旋转本身(对偶四元数是刚体变换的另一种参数化), 结果仍然是刚体变换,于是半径分毫不损。
代价:DQS 会"膨胀",且当两个四元数接近反极点(φ → 180°)时需要半球对齐,实现在 C++ 里比一行矩阵乘麻烦不少。