Virtual Bone で IK を調整する
最近は 電脳少女 YouTuber シロ の動画を観るのが日課になってます。キュイ🐬
今回は UE4 の Virtual Bone について調べてみました。
Virtual Bone について
スキニングされないボーンをエディタ上で作成する機能です。ThirdPerson テンプレート等に付属する UE4 Mannequin にも「ik_foot_l」「ik_hand_l」等のスキニングされないボーンが追加されていますが、これらを DCC ツールを経由せずに作成できます。
Virtual Bone を追加することで、ランタイムで IK 等を利用する場合にターゲットとして使うことができ、Anim Graph でプレビューする際に直感的な操作で IK の具合を調整することが可能です。詳しくは後述します。
Virtual Bone + Look At を試す
流れを簡単に動画にしました。
以下、要点だけピックアップします。
Virtual Bone を追加する
Skeleton Tree 上で右クリックし、「Add Virtual Bone」メニューから追加します。今回は Look At のターゲットとして追加するので、アニメーションした時に位置が変更されないように root ボーンに関連付けて作成しています。
Look At ノードを追加する
Anim Graph 上で Look At ノードを追加します。頭が動くように「Body to Modify」に head ボーンを設定し、「Look at Target」に先程追加した VB root_root ボーンを設定しています。
Transform (Modify) Bone ノードを追加する
Anim Graph 上で Transform (Modify) Bone ノードを追加します。このノードはボーン指定で Transform 情報に変更を加えるノードですが、ノードを選択している間は Viewport 上でボーンを直接移動させられるという便利機能があります。このノードで指定するボーンを Look At 対象の Virtual Bone に設定することで、Viewport 上で直感的に操作しながら Look At の調整を行うことが可能になります。
余談
Look At ノードは動かすボーンを一つしか指定できないため、単純に利用すると目線を向ける時に頭だけを動かすという不自然な動作になります。本来であれば目線を向ける時は頭だけでなく、眼球や上半身も一緒に動きます。
お手軽にこれを実現するなら複数の Look At ノードを繋げると良いです。ただ、単純に繋げるだけだと spine -> neck -> head と繋いだ場合に spine が大きく動いてしまい、neck や head が動かず不自然な動作になります。そんな時は各 Look At ノードの Alpha を調整することで、各ボーンが少しずつ動いて最終的にターゲットを向くという動作を実現できます。
上記の例だと「spine_03 : 0.4」「neck_01 : 0.5」「head : 1.0」で設定されているので、例えばターゲットとの角度差が 90度 あった場合はそれぞれのボーンによる角度補正は以下の様になります。
spine_03 → 90 * 0.4 = 36 度
neck_01 → (90 - 36) * 0.5 = 27 度
head → (90 - 36 - 27) * 1.0 = 27 度
以上です。白組に戻ります。