アニメーション事始め (9)
~第9回「FKとIK」
ボーンを使ったポージングを行う方法としては、FKとIKというのがあります。
今までの連載ではFKを使用してました。
接地のアニメーション時の位置ずれなど、IKを使うことで手間をかけずに調整を行うことができるようになりますが得手不得手があります。
今回は「骸骨」をモデルに、FK/IKで使い分けてポージングする方法について説明していきます。
なお、IKの操作はモーションウィンドウのシーケンスをOnにし、「ジョイントモード」で行うようにしてください。
FK (Forward Kinematics)
FKとは、ポージング時にルートボーンから順番に回転させて目的の位置や姿勢まで近づけていく方法です。
たとえば足を曲げる場合は、足の付け根のボーンを回転させてから膝のボーンを回転させて目的のポーズを決めますよね。
このように、前(Forward)から順番に運動させる(Kinematics)動きを「FK (Forward Kinematics)」と呼びます。
補助がなにもない状態でのポージングはFKになります。
IK (Inverse Kinematics)
さて、地面に接地させて歩かせるモーションをつける場合を考えましょうか。
本連載の第4回で歩かせるモーションを指定していますが、これと対比していきます。
歩く/走るモーション時は、ルートボーンは波のようにゆったりと上下します。
そのときに1つのキーフレームを見ると屈伸するような動きをさせることになります。
屈伸のポーズをする場合、まずはルートボーンを下げて、次に足を曲げていきます。
この場合はFKでのポージングになりますが、地面に足がのめりこまないように接地させる手間が発生します。
また、歩行時は前進に合わせた軸足の地面での固定、を何回か反復させて調整することになります。
この手間を省くための手段がIKとなります。
IKの場合は、ある親子関係のボーンに対してルートとエンドの組み合わせを与え、ボーンの先端(Shade 3DのIKの機能ではゴールと呼んでいます)のボールジョイントにエンドのボーン位置を一致させることで、その間の姿勢を自動補正します。
手順としては以下のとおり。
- 親子関係のボーンに対して、IKの属性(ルートとエンド)を与える。ゴールのボールジョイントは自動生成されます。
- キャラクタのルートボーンをオフセット移動。
- IK機能をOffにして、微調整。
[1]のIKの割り当ては1回だけ行えばOK。キャラクタのルートボーン(IKのルートではありません)を動かすと、IKのゴール位置に合わせるようにIK間のボーンは自動で姿勢が与えられます。
注意点として、IKの自動補正をOnにしているときはその間のボーンのオフセット移動/回転は制御できません。
このボーンのオフセット移動/回転の手動調整処理を行う場合は、一時的にIKを無効にする必要があります。
IKを割り当てた直後。左足と右足にIKを割り当てました。詳しい割り当ての手順は後述します。
IKは青色の太線で表現されます。
また、IKゴールのボールジョイントはキャラクタのルートボーン(ここではbone_Hips)から外に出しています。
こうすることで、IKゴールはルートボーンのオフセット移動や回転の影響を受けなくなります。
この状態でルートボーン(bone_Hips)をオフセット移動させます。
IKゴールの位置に足先を合わせるように屈伸が行われました。
また、IKゴールのボールジョイントをオフセット移動させることで、自動で間のボーン(足の付け根、ひざ)の回転が行われます。
ここで、気に入った姿勢になったのちにキーフレーム登録します。
接地についてはFKでのポージングよりも楽にできそうですね。
このように、ボーンの先端(エンド)から逆方向(Inverse)のルートに向かって運動させる(Kinematics)動きを「IK (Inverse Kinematics)」と呼びます。IKエンドがIKゴールを目指すように補正されることになります。
では、IKの指定方法について詳しく説明していきます。
IKの割り当て
IKは、親子関係になっているボーンに対して割り当てることになります。
ここでは左足/右足の2か所に割り当てます。まずは左足から。
左足は、bone_LeftUpRegボーンが付け根、bone_LeftLegボーンがひざ、bone_LeftFootボーンが足のつま先、となっています。
これらは親子関係になっています。
この「bone_LeftUpReg」をIKルートに、「bone_LeftFoot」をIKエンドとして割り当てます。
IKの場合は、1つ飛ばしでIKルートからIKエンドを指定するのが一番安定します。
ツールボックスから「編集」-「共通」-「IK」を選択。
ブラウザで「bone_LeftUpReg」を選択し、IKのツールパラメータでの「ルート」の適用ボタンを押します。
ブラウザで「bone_LeftFoot」を選択し、IKのツールパラメータでの「エンド」の適用ボタンを押します。
すると、自動的にIKゴールのボールジョイントが生成されて以下のようになりました。
「bone_LeftUpReg」のラベルとして (IK-Root) 、「bone_LeftFoot」のラベルとして (IK-End)がつきます。
また、「IKゴール」のボールジョイントが生成されました。
IKゴールはキャラクタのルートボーン(bone_Hips)のオフセット移動や回転の影響を受けないようにしたいため、bone_Hipsの外に出してしまいます。
これで左足のIKが割り当てられました。キャラクタのルートボーン(bone_Hips)を選択し、オフセット移動して効果を確認してみましょう。
なお、モーションウィンドウのシーケンスをOnにし、ジョイントモードで操作するようにしてください。
内股に曲がってしまいました。
これは、IKルートである左足の付け根の「bone_LeftUpReg」が自由に回転できる状態になっており、IK計算の解答は無限にあるため起きる現象です。
ここで、ボーンの回転に角度制限を加えます。
一度UNDO(やり直し)で直立状態に戻します。
もしくは、まだキーフレーム割り当てしてませんので、モーションウィンドウのシーケンスをOffにしてからOnに戻すと直立状態に戻ります。
ボーンの角度制限
どの軸で回転を制限するかわかりやすくするため、マニピュレータ座標系を「ローカル」にします。
「bone_LeftUpReg」をブラウザで選択し、統合パレットの形状情報ウィンドウを表示。
ボーンジョイント属性でのオイラー角のスライダでXYZそれぞれに小さな白いつまみがあるのがわかりますでしょうか。
これで角度制限をかけます。なお「範囲」チェックボックスをOffにするとこの角度制限はかからなくなります。
マニピュレータの色で赤がX軸、緑がY軸、青がZ軸の回転となります(ローカル座標系の場合)。
X軸中心の回転は、-90度から0度で制限。
Y軸中心の回転は行わない(0で固定)。0度から0度で制限。
Z軸中心の回転はほんの少しだけ回転に余裕を持たせる。-10度から10度あたりで制限。
とします。指定はざっくりとでいいです。
この状態でキャラクタのルートボーン(bone_Hips)を選択し、オフセット移動します。
今度は内股にならずに左足のボーンが曲がりました。
同様に右足もIK割り当て、ボーンの角度制限を行います(skeleton_bone_ik.shd)。
IKを割り当てたときの動きを動画にしてみました。
歩くモーションでIKを使用
では、歩くモーションを例に、IKの補正も加えたキーフレームを与えていくことにします。
今までの説明では、ひざの回転はそれらしく自動で曲がりましたが、IKエンドの足首での回転はかからないため地面に平行にはなっていませんでした。
これも修正を加えていきます。
そのためには、IKのOn/Offを切り替える操作が必要となります。
まずは、ルートボーン(bone_Hips)のオフセット移動で屈伸させて、両足のIKゴールを移動させます。
3回のオフセット移動だけで足は屈伸しています。
注意点として、ルートボーン(bone_Hips)の移動、左足のIKゴールの移動、右足のIKゴールの移動、それぞれをキーフレームとして登録する必要があります。
これは、IKゴールはルートボーンの外に出ているためです。
足首の回転を調整していないため地面に足は接地されていませんが、そのまま進めます。
シーケンス位置を10フレーム目に移動。
次に、ルートボーンのオフセットを+Z方向に移動させて前進します。
このときに、ルートボーンが前かがみになるように回転を加えたり、少し下に移動させてそれらしくします。
ルートボーンをキーフレームとして登録します。
足はIKの影響で固定化されるため、軸足の固定は制御しやすいですね。
この後、軸足とは逆の前進させる足のIKゴールをオフセット移動させます。左足のIKゴールを移動させました。
この後、ルートボーン、左足のIKゴール、右足のIKゴールをキーフレーム登録しておきます。
後は繰り返して、歩行の1パターン分をキーフレーム登録していきます。
こんな感じの動きになりました(skeleton_bone_IK_walk1.shd)。
接地の調整は、FK時よりもずいぶんと楽になりました。
後はIKの補正は不要であるので、IKをOffにしてFKとして調整していきます。
IKをOffにする
ツールボックスより、「編集」-「共通」-「IK」を選択。
ブラウザでIKルートの「bone_LeftUpReg」を選択し、ツールパラメータで「ルート」の「有効」チェックボックスをOffにします。
同様に、「bone_RightUpReg」でのIKもOffにします。
これでモーションを再生すると、IKが無効になった普通のキーフレームアニメーションが行われることになります。
FKで調整
地面に接地している足の足首を回転させて、地面に平行になるように調整していきます。
なお、回転させた後は必ずルートボーン(bone_Hips)を選択し、キーフレーム登録しておきます。
後は、すべてのキーフレームで同様の修正を行います。
これ以降は、普通のFKの調整になりますね。
最後に、0フレーム目のキーフレームを最終フレームに複製。
以下のようになりました(skeleton_bone_IK_walk2.shd)。
後は、腕や頭を調整して完成に近づけていくことになります。
これらについては、FKでの調整ですので今までで行った内容となりますね。
ということで、今回はFKとIKについてでした。
ここで作成したモーションについてはダウンロード(anim_9_skeleton_bone_IK_motions.zip)できるようにしました。
ただし、骸骨のモデリングデータはつけておらず、ボーンとモーション情報だけになります。
IKを使うと、接地が必要な動きに関してはかなり作業を短縮できるかと思います。
ただし、姿勢の自動計算になるためボーンの角度制限で拘束したり、使用後はIKをOffにしての微調整が発生することになりそうです。
便利機能でちょっと使い方が複雑ではありますが、モーション補助の道具として利用してみてください。
今まで作成したモーションで後からIKのような調整、、、はちょっと難しいので、近いうちに「後から軸足などを拘束して小刻みな揺れを補正」のスクリプトなど用意できればと考えてます(予定は未定)。
それでは、次回もお楽しみに。
文:ft-lab
この記事へのご意見・ご感想などはこちらで受け付けております。