BLOGブログ

2015.09.17UE4UE/ Animation

[UE4] Foot IK で段差がある地形でも自然なアニメーションを実現する ~IKによる補正~

こんにちは。ほげたつ(@HogeTatu)です。

前回に引き続き、Foot IKについて書いていきます。

今回は 立っている場所よりも高い位置に足を着こうとするとめり込んでしまう 問題に対する対応です。

 

LineTrace用のソケットを追加

LineTraceを用いて足と地面のめり込みを検出するため、スケルタルメッシュにソケットを追加します。

  • foot_l に対して LeftGroundSocket を追加し、高さが地面すれすれになるようにオフセットを設定する
  • foot_r に対して RightGroundSocket を追加し、高さが地面すれすれになるようにオフセットを設定する

FootIK_14

 

両足のトレース処理を実施して地面までのオフセットを取得

アクターのZ値から、両足の内でより低い位置にある足のZ値までトレース処理を実施します。

これにより各足の地面からのオフセット値が取得できます。

この処理はアニメーションBP内からアニメーションを更新する度に呼び出します。

FootIK_18

UpdateFootIK … 各足の地面からのオフセットを更新する

FootIK_15

FootIK_16

TryGetFootOffset … 各足のトレース処理

FootIK_17

 

 

オフセットに従ってボーンを制御する

ボーンを制御する際はアニメーションBP内で TwoBoneIK 等を実行します。

TwoBoneIK ではいくつかのパラメータを指定できます。

ここでは、今回変更したパラメータを説明します。

IKBone 制御対象のボーン 左足なら foot_l(足首)
Effector Location Space IK制御の座標系 今回はオフセット値に従って上下させるので、ボーン座標系(BoneSpace)を指定
Effector Space Bone Name IKの先端 左足なら foot_l(足首)
Joint Target Space Bone Name IK制御時に曲げる関節 左足なら thigh_l(膝)
Joint Target Location Space IK制御時に曲げる関節制御の座標系 今回は固定値になるように、親ボーン座標系(ParentBoneSpace)を指定

 

FootIK_19

FootIK_20

これで AnimPreviewEditor 内から EditPreview で LeftFootEffectorLocation や RightFootEffectorLocation のX値を変更してあげると、足が上下に動くことをプレビューできるかと思います。

それが確認できたら、EventGraph内で UpdateFootIK の呼び出しと、各足のオフセットを取得して EffectorLocation に指定してあげればIK制御が完了します。

 

こんな感じになります

 

終わりに

UE4のアニメーション関連はとても充実しており、使いこなせば色々なことができます。

まだまだ試していない機能も多いので、今後も時間を見つけて試していきたいと思います。