IKとは?

IKとは「インバース・キネマティクス」の事で、簡単に言えば、一般的なポーズの指定方法であるボーン(の関節)を回転させてポーズを決めるのではなく、ボーン(の関節)の移動先を先に指定して、その形になるように後付けでボーンを回転させる技術の事です。なお、前者の事はFK(フォワードキネマティクス)と呼びます。

これで何かできるかと言えば、階段等で不自然な足の動きではなくなったり、壁に衝突する時に手を出すような動作が可能となります。

左:IK処理なし 右:IK処理あり

上記の画像を比較してもらえば一目瞭然ですが、明らかにIK処理をした方がリアリティが増していますよね。ちなみに、IK処理していない方は、ThirdPersonサンプルから何も弄ってない状態です。UE4を初めてばかりの時は感動すら覚えたThirdPersonサンプルですが、こう見てみると、このままゲームを作っていくとしたら完成度がまだまだ低いことが分かります。

まずは、IKに慣れてみよう

いきなりロジックを書き始めても分かりづらいので、グレイマンのアニメーションBPで遊びながらIKを覚えていきましょう。

まずは、グレイマンのアニメーションBPである”/Mannequin/ThirdPerson_AnimBP”を開いてみましょう。その中のAnimGraphを選択すると、次のような画面が表示されます。

早速、ここに”TwoBoneIK”ノードを入れていきます。Defaultと出力ポーズの間にTwoBoneIKノードを入れてみてください。(「ローカルからコンポーネントへ」「コンポーネントからローカルへ」というノードは自動的に接続されます)

これで、IKを試してみる準備ができました。TwoBoneIKノードを選択すると、詳細タブに色々と表示されますので、以下のように設定してください。

IKBonefoot_l
EffectorLocationSpaceBone Space
EffectorTargetfoot_l

設定したら、コンパイルボタンをクリックすると、プレビューエリアのグレイマンの左足にギズモが表示されます。

ギズモを引っ張ると、左足の先を自由に動かすことができます。(同時にTwoBoneIKノードのEffectorLocationの値もギズモに追従していることを確認してください)ただし、ボーン構造の範囲内で自由に動くだけですので、足の先が取れちゃったりすることはありません。

色々弄っていると、気になるところが出てくると思います。多分、それは膝の関節のおかしさです。

基本的にグレイマンが内股になり、しかも、膝が逆に曲がる事もしばしばあります。一旦、それは無視して色々と遊んでみてください。

問題となった膝の関節ですが、これもTwoBoneIKノードのJointTargetLocationで対処可能です。試しに、Xに15,Yに200、Zに40を入れてみてください。グレイマンが足を持ち上げる程度であれば、この数値を指定しておくだけで、自然なアニメーションになると思います。

色々を数値を弄ってみると分かりやすいのですが、JointTargetLocationは、最初に指定した足の先のボーンの一つ上の位置を指定しています。この位置をかなり前方に指定してあげることで、基本的に膝が逆に曲がることが無くなり、足を上げる程度であれば適切な動きをするようになります。(かなり前方の座標を指定しても、ボーン構造が崩壊することは無い為、ちょうど良い値を見つけ出す必要があります。ということで、今回の数値が正しいという事ではなく、アニメーションさせたい動きに合わせて適切な位置を探したしたり、動的に設定する必要があります)

つまり・・・

このTwoBoneIKで足の先を動かすことで、階段の段差対して適切な足の位置を指定するのが、FootIKという事になります。個人的な意見ですが、UE4は色々な便利機能が搭載されているので、これを初めて知った時は「何!?自分で足の位置を計算しないといけないのか!」って思いましたが、その通りでした・・・・

次回からは、このTwoBoneIKを使って、階段や坂道に合わせた足の位置を求める処理を記述していきたいと思います。

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です