【UE5 EA】Control RigでFoot Placement IK
- はじめに
- 注意事項
- 足IK用のControlを追加
- Basic IKで足を動かす
- 閑話休題:Basic IKノードのPrimary AxisとSecondary Axis
- 閑話休題:Basic IKノードのPole Vector
- SphereTraceを使って足を地面にスナップさせる
- Control Rigと連携する
- Pelvis(腰骨)を落とす
- 足の向きを直す
- 参考資料
はじめに
Control Rig Plugin for UE4: Getting Started part 2 - YouTube
Inu Gamesさんが投稿した動画の内容をベースに手順をまとめた個人的なメモ。いくつかの点で動画とは異なる内容もある。
Control Rigアセットの作り方やエディタについてはUE5 EAのドキュメントにあるControl Rigのページを参照。
Control Rig | Unreal Engine ドキュメント
注意事項
使用バージョン : UE5 EA版
最新のUE4.27では確認していない。ノード名やパラメータ名が異なっている可能性があるため注意。
足IK用のControlを追加
Rig Hierarchyに2つのControlを追加する。ボーン階層に含める必要は無い。名前をそれぞれ「IK_Foot_L」「IK_Foot_R」とする。
ビューポート画面にてIK_Foot_Lを左足首に移動し、ビューポート上でIK_Foot_Lを右クリック。コンテキストメニューから「Set Initial Transform from Closest Bone」を選択。IK_Foot_Lコントローラーはfoot_lボーンにスナップする。続いてその上にある「Set Initial Transform from Current」を選択する。これでIK_Foot_Lコントローラーはfoot_lボーンと同じトランスフォーム値にセットされる。
IK_Foot_Rについても同様の手順でセットアップする。(IK_Foot_Rは右足首にスナップさせる)
追加したコントローラーのギズモは好みに応じて変更する。例えばこんな感じ。
Basic IKで足を動かす
Basic IKノードを呼び出す前にForwards Solveノードの直後に「Draw Hierarchyノード」を呼び出して接続する。Draw Hierarchyノードはデバッグ用ノードで、Executeピンに接続するだけで、各ボーンのアウトラインとローカル軸を表示してくれる。どのボーンがどの方向に向いているかを確認するのにはかなり便利。
Draw Hierarchyノードの直後に「Basic IKノード」を呼び出して接続する。このBasic IKノードは左足を対象としたもの。パラメータ設定はこんな感じ。
Basic IKノードのEffectorピンにはIK_Foot_LコントローラーのRotationとTranslationを接続する。(Basic IKノードとGet Transform - ControlノードのTransformピンを展開するとRotation、Translation、Scale3Dにそれぞれアクセスできる)
続いて右足側も同様にノードを構築する。ただしBasic IKノードのパラメータが左足と一部異なる箇所があるので注意。(画像赤枠部分)
以上の操作が完了したら、ビューポート画面でいずれかのコントローラーを選択し、マニピュレーターでグリグリ動かす。
ノードの全体図
閑話休題:Basic IKノードのPrimary AxisとSecondary Axis
※1. ここの内容はMannequinのボーンに対する内容なので、ボーン構造が異なるモデルについては通用しない可能性がある。すまんな。
Primary AxisはボーンのX軸についての値を設定する。このときX軸が体の中心(内側、PelvisやSpine)へ向いている場合、Primary AxisのX軸は-1.0(負の値)。X軸が体の末端(外側、footやhand)にへ向いている場合、Primary AxisのX軸は1.0(正の値)を設定する。
Secondary AxisはボーンのY軸についての値を設定する。Y軸がワールド座標のY軸方向へ向いていればSecondary AxisのY軸は1.0(正の値)。Y軸がワールド座標のY軸と反対方向へ向いていれば-1.0(負の値)を設定する。
閑話休題:Basic IKノードのPole Vector
Pole Vectorは関節(特に第2関節)を曲げる際に目安となる位置/方向を示す値。以下に示すURLの「Basic IK」の項を参照するべし。
UE4.26 Control Rig における IK ノードまとめ - ほげたつブログ
「Basic IKノードのPrimary AxisとSecondary Axis」の項で紹介したSecondary AxisはこのPole Vectorがいる位置を指すように値を設定しても良い。Secondary Axisピンにマウスオーバーすると「The minor axis being aligned - towards the polevector」と表示される。
Pole Vector Spaceにボーンを指定すると、Pole Vectorの解釈が「指定されたボーンからの相対座標」(Pole Vector Kindが「Location」の場合)になる。例えば左足のBasic IKノードのPole Vector Spaceのボーンに「calf_l」を指定し、Pole Vectorを「X=0.0, Y=0.0, Z=0.0」にするとcalf_lとぴったり重なる位置に移動する。この様子はPole Vectorピンを右クリックしコンテキストメニューからAdd Visual Debugを押すと座標が可視化されて確認しやすくなる。
SphereTraceを使って足を地面にスナップさせる
「Sphere Trace By Trace Channelノード」を呼び出す。このノードは通常のブループリントでも使われるSphere Traceノードと働きは同じ。まずは左足から始める。Sphere Trace By Trace ChannelノードのStartピンは「foot_l」ボーンのいくらか高い位置を指定し、Endピンは同じく「foot_l」ボーンのいくらか低い位置を指定する。
StartピンとEndピンに「Add Visual Debug」をするとStartピンとEndピンの座標が可視化されるので、適宜確認すること。
Hit Locationピンを展開しZの値を変数「Foot_L_Height」にセットする。Foot_L_Heightは「My Blueprintタブ -> Variables」にて予めFloat型で作成しておく。
右足も同様の手順で行う。右足の高さを記録する変数の名前は「Foot_R_Height」とする。
これらのノードはDraw HierarchyノードとBasic IKノードの間に挟むように配置する。
トレース位置からの高さが記録された変数Foot_L_HeightとFoot_R_Heightは次のように利用する。
ノードの全体図
Control Rigと連携する
実際にグレイマンのアニメーションと連携させるために、グレイマンのアニメーションブループリントにいくつか追記する。
グレイマンのアニメーションブループリント(ThirdPerson_AnimBP)を開き、Anim Graphを開く。Output Poseノードがあるページまで移動し、Output PoseノードとDefaultステートマシーンノードの間に「Control Rigノード」を挟む。 Control Rigノードを選択しDetailsパネルにある「Control Rig Class」という項目に作成したControl Rigアセットを設定する。これでグレイマンのアニメーションとControl Rigが連携される。
ここで実際にプレイし、グレイマンを坂道に立たせても、太ももが上がっていなかったり、平面に立つのと変わらない足の置かれ方だったりする。これの修正については後述する。
Anim Graphで配置したControl Rigノードは入力/出力ピンが対応している場所ならどこからでも呼べる。例えばIdleステートでControl Rigノードを配置すると、Idleステート時にのみ作用するControl Rigとして呼び出す事ができる。
Pelvis(腰骨)を落とす
しっかりと地に足をつけさせるために、Pelvis(腰骨)を落とす処理を追加する。Pelvisの新しい高さは、上の項で求めた「Sphere Traceのヒット位置の高さが低い方」とする。
ノードは以下のように組む。
このノードはBasic IKノードの処理の手前に配置する。結果を確認するとグレイマンの両足はきっちり地面にスナップされいい感じになる。
ノードの全体図
足の向きを直す
グレイマンのIdleアニメーションは「左足が前、右足が後ろ」にあるが、現状は両足ともつま先の位置が揃っているのでこれを修正する。
Draw Hierarchyノードの直後に以下のノードを挟む。これはControl Rigの処理実行時点でのfoot_l、foot_rのTransformをIK_Foot_L、IK_Foot_Rにセットするというもの。
実際にプレイして確認すると、Idleアニメーションの通りに「左足が前、右足が後ろ」になっている。坂道に立っても自然な立ち姿になる。
ノードの全体図(横長になったのでSequenceノードを使って整えた)
参考資料
Control Rig Plugin for UE4: Getting Started part 2 - YouTube
猫でも分かる Control Rig UE4.25 版 - YouTube
seiko_dev_memo - [UE4]Control Rig機能調査