Unreal Engine 5のコントロールリグで、Full Body IKノードを使ってIKを実装する方法です。
このノードを使うと、手の位置に合わせて胴、肩、腕のボーンを自動で追従させる、といったことができます。
コントロールリグでFull Body IKを使う場合、Full Body IKプラグインが必要です。
プラグインは次の手順で導入できます。
- レベルエディタのメニューで、「編集」をクリック
- 「プラグイン」を選択
- 「Full Body IK」にチェックを入れて導入
コントロールリグのアセットを開き、リググラフで作業します。
1.Full Body IKノードの追加
Full Body IKノードを追加します。
- コントロールリグエディタのリググラフ内で右クリック
- 「Hierarchy」の「Full Body IK」を選択
2.Full Body IKノードの実行設定
Full Body IKノードが実行されるようにノードを繋ぎます。
- Forwards SolveノードのExcute出力を、Full Body IKノードのExcute入力に繋ぐ
3.ルートボーンの設定
IKの起点となるルートボーンを設定します。
ルートボーンの子がIKの対象になります。
ドロップダウンリストから選択する場合
- Full Body IKノードの「Root」右の欄をクリック
- ドロップダウンリストから、ボーンを選択
リグ階層から選択する場合
- 「リグ階層」で、ボーンを選択
- Full Body IKノードの「Root」の欄の右にある「選択アイテムを使用」で設定
4.コントロールの作成
コントロールはIKの計算目標となるもので、アニメーション作成の際は、コントロールを動かすことでボーンの姿勢を決めます。
コントロールの追加
リグ階層にコントロールを追加します。
- 「リグ階層」で、IKの終端にするボーンを右クリック
- 「新規」の「新しいコントロール」を選択して、コントロールを追加
コントロールは、ボーンと同じ位置姿勢で作成されます。
リグ階層の変更
コントロールはボーンの子として作成され、ボーンが動くとコントロールも動いてしまうため、階層を変更します。
- 「リグ階層」でコントロールを選択
- Shift+P、または右クリックして「親から解除」で階層から分離
公式でも、最終的にコントロールをボーンの階層から切り離すことを推奨しています。
覚え書き
コントロールの形状変更
- 「リグ階層」でコントロールを選択
- 「詳細」の「形状のプロパティ」で、コントロールの形状と色を、「形状トランスフォーム」で、大きさを変更
5.Get Transformノードの追加
コントロールの位置を取得、出力する、Get Transformノードを追加します。
- コントロールを、「リグ階層」からリググラフにドラッグ&ドロップ
- 「コントロールを取得」を選択して、コントロールを対象としたGet Transformノードを追加
6.コントロールと終端ボーンの関連付け
Full Body IKノードに、各コントロール用のEffectorsピンを追加し、コントロールに対応するボーンを設定します。
- 「Effectors」右の「+」をクリックして、「Effectors」のピンを追加
- 追加した「Effectors」のピンを開き、コントロールで操作するボーンを「Bone」に設定
- Get TransformノードのTransform出力を、「Effectors」のTransform入力に繋ぐ
ここまでで、コントロールに従ってボーンが動くようになります。
以降は、スケルトンに合わせて、以下のような流れで詳細設定します。
7.Bone Settingsの設定
Full Body IKノードのBone Settingsで、ルート~終端までのボーンの、移動と回転の制限を設定します。
- 「Bone Settings」右の「+」をクリック
- 「Bone」を設定
- 各項目を設定
8.Excluded Bonesの設定
Full Body IKノードのExcluded Bonesで、IKから除外するボーンを設定します。
- 「Excluded Bones」右の「+」をクリック
- 追加したピンにボーンを設定
9.Settingsの設定
Full Body IKノードのSettningsで、ノード全体とルートボーンについて設定します。
例えば、ルートボーンを動かさないようにする場合は
- 「Settings」の「ルートの動作」を「Pin to Input」に変更
10.Effectorsの設定
コントロールの影響の設定は、Effectorsの項目を調整します。
例えば、ロボットアームのような、複雑な拘束がある場合は
- 「Pull Chain Alpha」を0に変更
各設定項目については、下の記事にまとめています。
Tips
関節の角度制限がうまく働かない場合の対応方法
問題点と変更結果
下半身を60°捩じって片足を持ち上げると、脚が意図しない方向に曲がってしまったため、コントロールリグを変更して対策しました。
変更前の設定
リグ構成は、足のIKコントロールを下半身とは別のコントロールの子にして、両足セットで動かすようにしています。
グラフは、FKで上半身、下半身を捩じる処理を先にして、フルボディIKのコントロール位置をGlobal Spaceで取得しています。
変更後の設定
リグ構成は、足のIKコントロールを下半身のコントロールの子にしました。
グラフは、フルボディIKを先にして、コントロール位置をLocal Spaceで取得しました。
補足
この問題の原因は、フルボディIK実行時に、初期姿勢のボーンの座標軸を参照してボーンを回転しているためだと思います。
下半身を捩じる→フルボディIKの順だと、フルボディIKの処理では、姿勢が変わったボーンを、初期姿勢の座標軸で回転するので、意図したように曲がりません。
フルボディIK→下半身を捩じるの順だと、初期姿勢のボーンの座標軸でボーンを回転するので、意図通りに曲がります。
以上です。
コメント