PR

【UE5】ボーンを連動させる方法

Unreal Engine 5

Unreal Engine 5のコントロールリグで、ボーン同士を連動させる処理を実装する方法です。
例として、フルボディIKで動かすロボットの腕に、肩パーツが連動して動くように設定します。
下の動画のように、腕が外側に動く場合に肩パーツも外に動き、腕が内側に動く場合は肩パーツが一定以上内側に動かないようにします。

スポンサーリンク

処理の概要

コントロールリグのリググラフで処理を実装します。
最終的なノードは、次のようになります。

フルボディIKで動いた腕のボーンの回転量を計算して、オイラー角度に変換します。
腕のボーンが外側に回転していれば肩パーツのボーンを動かし、内側に回転していれば動かさずに処理を終わります。
グラフの詳細は、以下の通りです。

スポンサーリンク

1.腕の回転量の計算

  • Get Transformノードで、腕の初期姿勢と現在姿勢をQuaternionで取得
  • Inverseノードで、初期姿勢の逆Quaternionを計算
  • Multiplyノードで、初期姿勢の逆Quaternionと現在姿勢のQuaternionの積(=腕の回転量)を計算

覚え書き

Quaternionは4つの数値で3つの軸周りの回転方向と角度を表したものです。
2つのQuaternionの積は、それぞれのQuaternionが表す回転を合成した回転になります。

スポンサーリンク

2.腕の回転角度の判定

Quaternionのままでは回転方向や角度が判別できないため、オイラー角度に変換してから角度を判定します。

  • To Eularノードで、腕の回転量のQuaternionを、オイラー角度に変換
  • Lessノードで、腕の回転のオイラー角度が0より小さい場合(=外側に回転している場合)、Trueと判定
スポンサーリンク

3.肩パーツの回転実行

腕が外側に回転している場合だけ、肩パーツを回転します。

  • Branchノードで、Lessノードの結果がTrueの場合のみ、Offset Transfromノードを実行
  • Offset Transformノードで肩パーツを回転

腕が内側に回転している場合は、Full Body IKノード以降の処理は実行されず、肩パーツは回転しません。

以上で、腕の回転に連動して、肩パーツを動かす機能を実装できました。

コメント

タイトルとURLをコピーしました