AutoCharactorSetup3bを使用すればIKとFKをブレンドすることが出来ます。しかし、通常モーション付けをする場合IKを使って行なったほうがはるかに楽な為、FKを使用する機会が少なくなりがちです。
ここではFKとIKの違いを明確にしその利点と欠点を理解を深める事を目的としています。欠点と利点をが判ればどんな場合にIKを使うべきかがもっと判りやすくなるはずです。
IK(インバースキネマティクス)とFK(フォワードキネマティクス)の違いは何でしょうか?
もっとも大きな違いのひとつが補完されたモーションです。親子関係の有無によってIKは直線的に、FKは円弧的に補完されます。
左図では右手をFKで左手をIKで動かしています。どちらもキーは開始と終了の二点のみです。
IKを使用した場合左図のようなフリップが多発します。クォータニアン補完のないLightWaveでは特に顕著で、かつ、厄介な問題です。ではこのフリップはなぜ発生しているのでしょうか。
肩の矢印に注目してください。このNULLは肘の向きを制御する為に使用されています。(UpVectorと同様のものです。)
この矢印が、フリップを起こしている部分で大きく変化しています。これはIKの計算結果が不安定になっていることを示しています。
フリップの原因はIKの計算結果が複数ある為に発生します。手のような場合だと手と体の位置を固定した状態で肘を動かす事が出来ます。コンパスの両端を持ったとき中心部分(肘に当たる部分)をくるくる回転させる事が出来るはずです。意図的に方向を決めてやらない限り肘の向きは定まりません。ACS3bでは上記の矢印がこの方向を定める役割をしています。
しかし、IK計算の場合、伸びきった位置と縮んだ位置で計算誤差や符号の変化から肘の向きが不安定になります。結果的に肘がくるくる回転し、フリップが発生します。
IKの直線的な補完もフリップを起こす大きな要因になります。直線的な補完により上記の制限がある部分を通過してしまう場合が多くなります。
FKでは上記のような計算を行なっているわけではないので、フリップは発生しません。(ただし、3軸を同時に動かすとジンバルロックからフリップと似た動きになることは有ります。)円弧的な補完を行なう為、滑らかな動きを生成することも可能です。
しかし、親から子へモーションが受け継がれていくので一定の位置に停止したり、直線的なモーションを作成するのが非常に困難になります。
左図はIKとFKの動きの違いを示したものです。左図では右手をFKで左手をIKで動かしています。どちらもキーは開始、中間と終了の3点になります。
IKの動きはフリップを発生しています。
FKの場合、一見問題がなさそうですが、手の軌跡hが波打つような動作になっています。足の場合、これは大きな問題になります。足がこの様な動きをすれば、接地感がなくなり、体は中に浮いたようなモーションになってしまいます。
FK/IKの利点と欠点をまとめると以下の様になります。
利点
IK | FK |
手首足首を決められた位置にすばやく移動出来る。 | フリッピングを抑えることが出来る。 |
モーション中、手首足首の位置を固定できる。 | 親と同期して動く |
直線的な動き | 円弧的な動き |
欠点
IK | FK |
フィリッピングが起きやすい。 | World座標上の決められた位置に移動するのは訓練を必要とする。 |
親と同期して動かすことがやりにくい。 | モーション中、手首足首の位置を固定しにくい。 |
それぞれの欠点は他の利点になっています。つまり、IK/FKをブレンドし、互いに補完しあえば、よりよいモーションを手早くつけることが可能になります。