スキニングの話(3)
次はDual Quaternionを使ったスキニング手法。
Ladislav Kavan et al.,2008, Geometric skinning with approximate dual quaternion blending, ACM Trans. Graph. 27, 4, 105.
Quaternionは回転しか表せず、平行移動は表せないのがとっても不満です。
Dual Quaternionはその不満を解消するツールです。
Dual Quaternionは
のように定義されます。
ここでは"dual unit"と呼ばれ、という特殊な規則に従う数です。
、は普通のQuaternionであり、前者はnon-dual part、後者はdual partと呼ぶことにします。
Quaternionとの積は可換です。
さて、回転を表すdual quaternionはnon-dual partのを0とし、
とするだけ。つまり今までのquaternionと同じだ。
では今までと変わったのは何かというと、平行移動を表せることだ。
平行移動を表すには
のようnon-dual partを1とし、dual partに平行移動成分を持たせたものとなる。
2で割るのは回転のquaternionのときと似ている。
平行移動と回転移動を合成するには普通に乗算すればよい。
さて、実際に頂点にdual quaternionを作用させるには、まず頂点座標を
のように変換し、
とすればよい。
回転と平行移動を合成するというよりは、平行移動しながら回転するという螺旋的なイメージの方が合っている。
実際、
というdual quaternionを考えてみる。とは両方ともdual quaternionである。
これは螺旋軸に沿った回転と平行移動を表す。
は回転角を表し、は螺旋軸に沿った平行移動量を表す。
または螺旋軸の向きの単位ベクトルを表す。
だけわかりにくいのだが、回転中心をとしたとき、となる。
さてこれをスキニングにどう使うのか。
まず回転を表すquaternionと平行移動を合成して、dual quaternionを作る。
これをボーンウェイトに従って線形補間する。
このdual quaternionを使って頂点を変換すればよい。
この変換について、論文中に高速化の方法が書かれているため、実装する際には参照するとよい。