UE5にてアニメーション回りの機能が充実して、IK Rigもその内の1つです。
オフィシャルドキュメントが用意されたとはいえ、EpicからはIK Rigをアニメーションのリターゲット用途についてチュートリアルを出しましたが、IK Rigを使ってキャラクターのIKの実装については触れてなかったのでIKリグを使ってキャラクターの足接地用IKを実装してみました。
実装環境
UE 5.02を使用して実装を行いました。
ThirdPersonテンプレートで提供されたBP_ThirdPersonCharacterを対象にIKを実装しました。
デフォルトのIKの無効化
UE5のThirdPersonテンプレートではデフォルトでキャラクターの足接地IKが実装されておりますので、IK Rigの実装を行う前にはこのデフォルトのIKを外す必要があります。
デフォルトのIKはプロジェクトフォルダーの「ABP_Manny」のアニメーションBPのアニムグラフで実装されております。
こちらの画像の黄色枠で囲まれた部分がIKを行う処理です。
IKの処理を外すとこうなります:
これで実装の準備を整いました。
# IK Rigの実装
公式ドキュメントを参考して、接地IK用のIK Rigを作成しました。
尻の位置補正を行うための「トランスフォームを設定」ソルバーと足の位置を補正する「手足IK」ソルバー2個で構成されます。
まだソルバーの挙動をアニメーションBP側で制御できるようにソルバーのIK目標のExpose Positionのチェックを入れます。
次はアニメーションBPの方にIK Rig用の処理を実装していきます。
実装はHistoriaさんのチュートリアルを参考にして足の補正位置を計算します。
UE4のマネキンと違って、UE5のマネキンのスケルトンの中には最初から足IK用の補助ボーンが入っていますのでそちらを使用してライントレースの位置を決めていきます。
Foot Trace関数の中身:
AnimGraph:
IK Rigノードの各Goalの設定は「Manual Input」にして、Position Spaceの設定は「Additive」にしています。
実装した結果はこちら:
問題点
IK Rigの実装をABP_Mannyで実装してもデフォルトのBP‗ThirdPersonCharacterにIKを適用できなかった。
色々探した結果、どうやらIK Rigノードは継承されたアニメーションBPに正しく適用されないようです。
左側がIK Rigを実装したアニメーションBP、右側がそれを継承したアニメーションBPです。BP‗ThirdPersonCharacterはデフォルトで右側のアニメーションBPを設定している。ただし右側のBPは自分で一切ロジックを持っていなくて、AnimGraphで再生されるアニメーションをオーバーライドするためだけのBPのため、エンジン側の不具合の可能性が高いです。
現状はキャラクターのアニメーションBPを「ABP_Manny」に設定したら正しく動作してくれますのでそれで回避しています。
感想
IK Rigを使用してゲーム内のIKを実装してみましたが、コントロールリグで実装すると比べて計算処理をIKリグの内部で完結できないのが不便と感じました。
まだIK Rigはスケルトンを参照しているため、コントロールリグとは違って違うスケルトンの間での流用が難しいので、ゲーム内IKを実装する場合はスケルトンの構成によって複数のIK Rigを作成して複数のアニメーションBPにそれぞれ実装する必要が出てきます。
まだ前述した継承したアニメーションBPでの挙動の問題も含めて、採用できないケースもあると思います。
将来は期待できるかもしれませんが、現状でゲーム内のIKを実装するならコントロールリグの方がおすすめです。
参考資料
公式ドキュメント:https://docs.unrealengine.com/5.0/ja/unreal-engine-ik-rig/
HistoriaさんのIK実装チュートリアル:
https://historia.co.jp/archives/3421/
https://historia.co.jp/archives/3434/
https://historia.co.jp/archives/3518/