PavilionDV7の雑多なやつ

Qiitaから移行しました。UE4に関する記事から興味のあることまで色々書きます。

【UE5 EA】Control RigでFoot Placement IK

はじめに

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ボーンと同じトランスフォーム値にセットされる。

f:id:PavilionDV7:20220215213619p:plain

IK_Foot_Rについても同様の手順でセットアップする。(IK_Foot_Rは右足首にスナップさせる)


追加したコントローラーのギズモは好みに応じて変更する。例えばこんな感じ。

f:id:PavilionDV7:20220215213633p:plain

Basic IKで足を動かす

Basic IKノードを呼び出す前にForwards Solveノードの直後に「Draw Hierarchyノード」を呼び出して接続する。Draw Hierarchyノードはデバッグ用ノードで、Executeピンに接続するだけで、各ボーンのアウトラインとローカル軸を表示してくれる。どのボーンがどの方向に向いているかを確認するのにはかなり便利。

f:id:PavilionDV7:20220215213645p:plain


Draw Hierarchyノードの直後に「Basic IKノード」を呼び出して接続する。このBasic IKノードは左足を対象としたもの。パラメータ設定はこんな感じ。

f:id:PavilionDV7:20220215213655p:plain


Basic IKノードのEffectorピンにはIK_Foot_LコントローラーのRotationとTranslationを接続する。(Basic IKノードとGet Transform - ControlノードのTransformピンを展開するとRotation、Translation、Scale3Dにそれぞれアクセスできる)

f:id:PavilionDV7:20220215213704p:plain

続いて右足側も同様にノードを構築する。ただしBasic IKノードのパラメータが左足と一部異なる箇所があるので注意。(画像赤枠部分)

f:id:PavilionDV7:20220215213718p:plain

f:id:PavilionDV7:20220215213720p:plain


以上の操作が完了したら、ビューポート画面でいずれかのコントローラーを選択し、マニピュレーターでグリグリ動かす。

f:id:PavilionDV7:20220215213804g:plain


ノードの全体図

f:id:PavilionDV7:20220216175538p:plain

閑話休題: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(正の値)を設定する。

f:id:PavilionDV7:20220215213739p:plain

Secondary AxisはボーンのY軸についての値を設定する。Y軸がワールド座標のY軸方向へ向いていればSecondary AxisのY軸は1.0(正の値)。Y軸がワールド座標のY軸と反対方向へ向いていれば-1.0(負の値)を設定する。

f:id:PavilionDV7:20220215213751p:plain

閑話休題: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」ボーンのいくらか低い位置を指定する。

f:id:PavilionDV7:20220215214659p:plain


StartピンとEndピンに「Add Visual Debug」をするとStartピンとEndピンの座標が可視化されるので、適宜確認すること。

f:id:PavilionDV7:20220215214708p:plain


Hit Locationピンを展開しZの値を変数「Foot_L_Height」にセットする。Foot_L_Heightは「My Blueprintタブ -> Variables」にて予めFloat型で作成しておく。

f:id:PavilionDV7:20220215214716p:plain

右足も同様の手順で行う。右足の高さを記録する変数の名前は「Foot_R_Height」とする。

これらのノードはDraw HierarchyノードとBasic IKノードの間に挟むように配置する。


トレース位置からの高さが記録された変数Foot_L_HeightとFoot_R_Heightは次のように利用する。

f:id:PavilionDV7:20220216210541p:plain


ノードの全体図

f:id:PavilionDV7:20220216210723p:plain

Control Rigと連携する

実際にグレイマンのアニメーションと連携させるために、グレイマンのアニメーションブループリントにいくつか追記する。

レイマンのアニメーションブループリント(ThirdPerson_AnimBP)を開き、Anim Graphを開く。Output Poseノードがあるページまで移動し、Output PoseノードとDefaultステートマシーンノードの間に「Control Rigノード」を挟む。 Control Rigノードを選択しDetailsパネルにある「Control Rig Class」という項目に作成したControl Rigアセットを設定する。これでグレイマンのアニメーションとControl Rigが連携される。

f:id:PavilionDV7:20220216205122p:plain

ここで実際にプレイし、グレイマンを坂道に立たせても、太ももが上がっていなかったり、平面に立つのと変わらない足の置かれ方だったりする。これの修正については後述する。

f:id:PavilionDV7:20220215214735p:plain f:id:PavilionDV7:20220215214738p:plain


Anim Graphで配置したControl Rigノードは入力/出力ピンが対応している場所ならどこからでも呼べる。例えばIdleステートでControl Rigノードを配置すると、Idleステート時にのみ作用するControl Rigとして呼び出す事ができる。

Pelvis(腰骨)を落とす

しっかりと地に足をつけさせるために、Pelvis(腰骨)を落とす処理を追加する。Pelvisの新しい高さは、上の項で求めた「Sphere Traceのヒット位置の高さが低い方」とする。

f:id:PavilionDV7:20220215214801p:plain


ノードは以下のように組む。

f:id:PavilionDV7:20220215214804p:plain

このノードはBasic IKノードの処理の手前に配置する。結果を確認するとグレイマンの両足はきっちり地面にスナップされいい感じになる。

f:id:PavilionDV7:20220215214807p:plain


ノードの全体図

f:id:PavilionDV7:20220216211104p:plain

足の向きを直す

レイマンのIdleアニメーションは「左足が前、右足が後ろ」にあるが、現状は両足ともつま先の位置が揃っているのでこれを修正する。

f:id:PavilionDV7:20220215215028p:plain


Draw Hierarchyノードの直後に以下のノードを挟む。これはControl Rigの処理実行時点でのfoot_l、foot_rのTransformをIK_Foot_L、IK_Foot_Rにセットするというもの。

f:id:PavilionDV7:20220216211441p:plain

実際にプレイして確認すると、Idleアニメーションの通りに「左足が前、右足が後ろ」になっている。坂道に立っても自然な立ち姿になる。


ノードの全体図(横長になったのでSequenceノードを使って整えた)

f:id:PavilionDV7:20220216211801p:plain

参考資料

Control Rig Plugin for UE4: Getting Started part 2 - YouTube

猫でも分かる Control Rig UE4.25 版 - YouTube

seiko_dev_memo - [UE4]Control Rig機能調査

UE4.26 Control Rig における IK ノードまとめ - ほげたつブログ

Control Rig | Unreal Engine ドキュメント