インバースキネマティクス(IK)で関節を末端から曲げる
この記事では『インバースキネマティクス』について解説します。 インバースキネマティクスは日本語では『逆運動学』と訳され、通常、"Inverse Kinematics" を略して "IK" と呼びます。
『逆運動学』と聞くと難しそうですが、簡単に言えば骨格を楽に動かすための技術です。 3DCGアニメーションの世界だけでなく、ロボットの分野やゲームの分野でも利用される技術です。
インバースキネマティクスの概要
インバースキネマティクスでは『起点のボーン』に『ターゲット』を設定します。 例えばボールを掴むアニメーションを作るなら、『起点のボーン』は手のボーンであり、『ターゲット』はボールとなります。
それらを設定すると、手のボーンがボールにたどり着くように関節が自動的に曲げられます。 曲げられるのは手のボーン(手首)だけではなく、前腕のボーン(肘)や上腕のボーン(肩)も曲げられます。 なお、どの関節まで曲げるかは設定次第です。
関節が曲げられる順序は末端からです。 まずは手首が曲げられ、それでもボールに届かなければ、肘が曲げられます。 それでも届かなければさらに肩が曲げられる、という具合です。 末端のボーンから順に曲げられるため、『逆運動学』と呼ばれます。
インバースキネマティクスの例
インバースキネマティクスの例を紹介します。 以下の例で使用するのは、アーマチュアが埋め込まれたクマのメッシュと球体です。

上図のようにアーマチュアが埋め込まれたクマのメッシュと球体があるとします。 このような状況でクマに球体を掴ませたい場合、どうすればいいでしょうか。
まずは、インバースキネマティクスを使用しない場合を考えてみます。 つまり、本ウェブサイトで今まで解説した範囲でやってみよう、ということです。 その場合、どう動かすでしょうか。

上図のように肩のボーンを曲げ、肩を少し上げることになるでしょう。 これで少しだけ手が球体に近づきました。 次は上腕を動かしましょう。

上図のように上腕を上げます。 つまり、肩関節を曲げます。 さらに手が球体に近づきました。
最後に前腕を動かします。

上図のように前腕を上げます。 つまり、肘を曲げます。 うーん、球体には手が届きませんでした。
肩のボーンをもう少し大きく曲げていれば届いたかもしれません。 また上腕のボーンも、もっと上げておけばよかったですね。
このようにインバースキネマティクスを利用しない場合は、各関節を手作業で動かす必要があります。 しかも、今回のように一度の操作で手が届かなかった場合は、何度も調整しなければならなりません。
ここからは、インバースキネマティクスを利用した場合の動きを紹介します。 なお、インバースキネマティクスはすでに設定されているものとします。
手のボーンが起点のボーンで、球体がターゲットです。 つまり、手のボーンが球体に向かうようにインバースキネマティクスを設定しています。

上図のように手が球体に届いています。 肩のボーン・上腕のボーン・前腕のボーン・手のボーンの4本のボーンが一直線に球体に向かっています。 このように、インバースキネマティクスを設定することで関節が自動的に曲がります。
ではここで球体を下げてみましょう。

上図のように球体を下げると腕も下がります。 手のボーンが球体に向かうように設定していますので当然の結果です。
では次に、球体を体に近づけてみましょう。

上図のように球体を体に近づけるとボーンが曲がります。 手のボーンがターゲットである球体の中心に届いているのがわかります。
このように、インバースキネマティクスを利用することで関節を楽に曲げることができます。
インバースキネマティクスを使ってみよう
では、実際にインバースキネマティクスを利用してみましょう。 なお、今回は脚を動かすためのインバースキネマティクスについて紹介します。
まずは、以下のファイルをダウンロードしてください。 本ウェブサイトで用意したクマのメッシュとアーマチュアを含むファイルです。
ダウンロードした "bearwithrig.zip" を展開すると "bearwithrig.blend" というファイルが作成されます。 トップバーのプルダウンメニューの"File" -> "Open..."を実行して "bearwithrig.blend" を開いてください。
最初に、クマのメッシュとアーマチュアの間にアーマチュア変形の親子関係を構築しましょう。 まずはクマのメッシュから選択します。

上図のようにオブジェクトモードでクマのメッシュを選択します。
次に、アーマチュアを追加選択します。

上図のようにアーマチュアを追加選択します。
これでアーマチュア変形の親子関係を構築する準備ができました。 キーボードのCTRL+Pを押します。

上図のように "Set Parent To" というタイトルのメニューが表示されますので、"With Automatic Weights" を実行します。 これでアーマチュア変形の親子関係が構築されました。
ここからは制御用ボーンを追加する作業に入ります。 制御用ボーンとは、メッシュを曲げるためではなく他のボーンを制御するために使うボーンのことです。
先ほどの球体を掴む例で言えば、球体にあたるのが制御用ボーンです。 つまり、インバースキネマティクスの設定で『ターゲット』となるボーンのことです。
では、制御用ボーンの追加作業を始めましょう。 まずは、アーマチュアを選択してください。

上図のようにアーマチュアを選択します。 では、この状態でエディットモードに切り替えましょう。 キーボードのTabキーを押します。

上図のようにエディットモードに切り替わり、ボーンの追加や削除が行える状態になりました。
制御用ボーンを追加する前に、アーマチュアの編集に関する設定を変更しておきます。 ボーンが左右対称で作成されるようにするための設定 "X-Axis Mirror" をオフにしておきます。
![6. [X-Axis Mirror]ボタンをクリックしてオフにする 6. [X-Axis Mirror]ボタンをクリックしてオフにする](/images/screenshot_inversekinematics-06.jpg)
上図のように3D Viewportのヘッダにある[X-Axis Mirror]ボタンをクリックしてオフにします。
では次に、体の右側(画面向かって左側)のボーンを非表示にします。 その方が側面図で作業しやすいからです。

上図のように右側のボーンを選択します。
では選択中のボーンを非表示にしましょう。 キーボードのHを押します。

上図のように右側のボーンが非表示になります。
では、作業しやすいように視点を側面図の位置へ移動します。 キーボードのテンキーの3を押します。

上図のように視点が側面図の位置へ移動します。
まだ制御用ボーンは追加しません。 その前に確認しなければならないことがあります。 大腿と下腿のボーンが一直線ではないことを確認します。

上図のように大腿と下腿のボーンが一直線ではないことを確認します。 つまり、膝が少し前に出ている必要があります。 一直線になっている場合は、膝を少し前に出して補正してください。





