スキニングの話(2)
Linear Blend Skinningでしばしばおかしな変形を目にすることになる。
一例を図に示す。
(Ladislav Kavan et al.,Geometric Skinning with Approximate Dual Quaternion Blendingより引用)
頂点はとから50%ずつ影響されているとする。
ボーンアニメーションにより、は動かず、が180°回転したとする。
このときの影響でに変換され、の影響でに変換されるため、50%ずつの重みにより平均した結果、はに一致してしまい、完全にメッシュがつぶれてしまう。
"candy-wrapper"と呼ばれる現象である。
これは重みつき平均を計算する際、単純に線形に平均してしまったことに起因する。
は回転せず、は180°回転しているため、本来であればは90°回転となってほしいところである。
(+90°なのか-90°なのかという曖昧さは残っているが…)
この例を見ていると、回転をQuaternionでの球面線形補間とするという発想が生まれてくる。
この手法は以下の論文に論じられている。
KAVAN, L., AND ZARA, J. 2005. Spherical blend skinning: A real-time deformation of articulated models. In 2005 ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games, ACM Press, 9–16
回転を補間するのであるが、回転の中心点がどこであるかというのが論文中では詳しく書かれている。
上例のように隣接するボーン2つから影響される場合は単純である。回転中心は誰がどう見てもである。
さてを回転部と移動部に分解しよう。
とし、さらにをクォータニオンに変換しよう。
との回転部のクォータニオンを適切に補間したものをとすると、
]
とすればよい。
これがSpherical Blend Skinningの手法である。
クォータニオンの補間に球面線形補間を使うのが自然であるが、補間計算は頂点毎に行う必要があるため、球面線形補間を行うのは処理が重過ぎる。(arccosが1回にsinが2回)
単純に線形補間を行い正規化してもそれほど誤差がないそうである。
さて上例では隣接したボーンから影響される頂点について考えていた。
このため、を回転中心に選ぶというシンプルな計算であった。
実際には3本以上のボーンから影響される頂点もあるし、隣接しないボーン2本から影響される場合もある。
このような場合にはどのように回転中心を選べばよいであろうか?
まず上例の場合では、回転中心は
という関係が成り立っていたことに注目する。
一般に個のボーンに影響されている場合、回転中心は
により定義することができる。
これはが3以上では優決定系であり、一般的には解が存在しないため、最小二乗法により解くことになる。
回転中心が決まれば、以下の式で変換後の頂点が計算できる。
しかしながらこの手法が3本以上のボーンなどの一般の場合に使われるかどうか微妙である。
何しろ回転中心の計算はボーンの組み合わせ毎に行わなければならず、面倒すぎるのだ。