RigidBody

RigidBody ノードと、それをアニメーション ブループリント内で軽量物理シミュレーションとして使用する方法を説明します。

RigidBody アニメーション ブループリント ノードを使用して、物理アセット を使ったキャラクターの補助オブジェクトの軽量物理モーションをシミュレートすることができます。このドキュメントでは、RigidBody ノードの概要を説明し、RigidBody ノードの使用方法についてワークフローの例を使って解説します。

rigidbody node animation blueprint node

前提条件

概要

RigidBody ノードは Anim Dynamics ノードに似た機能を実行しますが、キャラクターの物理アセットを統合してより適切にシミュレーションを制御することができるため、より豊富な機能を持つ物理シミュレーション ソリューションを提供しています。RigidBody ノードを物理アセットと連動して使用することにより、キャラクターの他の部分とレベルの他のオブジェクトとのコリジョンをシミュレートすることもできます。

RigidBody ノードの一般的なユース ケースは、キャラクターの スケルタル メッシュ にある二次的な構造体、たとえば、ポニーテールやチェーン、キャラクターのメイン ボディにぶら下がっていたり伸びていたりする他のボーンなど、レベルや スケルタル メッシュ の他の部分とのコリジョンによる相互作用が必要になるモーションをシミュレートすることです。RigidBody ノードを使用すると、これらの構造体に対する動的および反応的なモーションを、本物の物理シミュレーションなどのパフォーマンスが要求される技法に比べてより効率的なプロセスで、よりリアルタイムにシミュレートすることができます。

copy bone demo disabled

copy bone demo enabled

RigidBody が無効な状態

RigidBody が有効な状態

設定

ワークフローの例では、物理アセットを使用して RigidBody ノードをキャラクターの アニメーション ブループリント に設定して実装し、キャラクターの スケルタル メッシュ にある二次的構造体について動的で反応的なモーションをシミュレートする方法を紹介します。

物理アセットを作成する

RigidBody ノードを使い始めるには、最初にキャラクターの物理アセットを設定する必要があります。詳細な設定ガイドは、「物理アセットの新規作成」のドキュメントで確認することができます。

すでにキャラクターに関連付けられている物理アセットがある場合は、RigidBody ノードでモーションとコリジョンをシミュレートする二次的構造体専用の物理アセットをオプションで作成することもできます。RigidBody ノード専用の物理アセットを使用することは、シミュレーション中の構造体の動作をより適切に制御するために最適な方法です。

physics asset in the content browser

キャラクターに物理アセットがない場合、または RigidBody ノードで使用するための専用物理アセットを作成する場合は、コンテンツ ブラウザ でキャラクターの スケルタル メッシュ アセットを 右クリック して [Create (作成)] > [Physics Asset (物理アセット)] > [Create] を選択すると、キャラクターに新しい物理アセットを作成することができます。

create a new physics asset by right clicking a skeletal mesh in the content browser

[New Physics Asset (新しい物理アセット)] ウィンドウから、[Create Asset (アセットを作成)] を選択してキャラクターに新しい物理アセットを作成します。

物理アセットの作成の詳細については、「物理アセットの新規作成」ガイドを参照してください。

物理アセットを編集する

キャラクターの物理アセットを 物理アセット エディタ で開き、キャラクターの物理アセットに RigidBody ノードで使用する構造体の 物理ボディ があることを確認します。この例では、キャラクターのヘッド ホースや、キャラクターの頭部、背中、腕、武器などのヘッド ホースと相互作用するオブジェクトの物理ボディが生成されています。

physics asset physics bodies represent collision and components

デフォルト設定では、物理ボディ に対するコリジョンはすべて無効になります。スケルタルツリー で物理モーションをシミュレートする スケルタル メッシュ のパーツを構成するボディでコリジョンを有効にするには、右クリック して[Collision (コリジョン)] > [Enable Collision All (すべてのコリジョンを有効にする)] を選択します。

enable collision on all

物理とコリジョンをシミュレートする スケルタル メッシュ のパーツを構成するボディをすべて選択した状態で、[Details (詳細)] パネルで 物理モード[Simulated (シミュレート済み)] に設定します。

select the physics type as simulated for the hoses

残りの物理ボディを選択し、物理モード[Kinematic (キネマティック)] に設定します。

set remainging physics bodies to kinematic

物理アセット エディタツールバー にある [Simulate (シミュレート)] ボタンを使用して、物理アセットの基本機能をテストすることができます。

demo of siumulaiton

この段階では、シミュレートしたオブジェクトが小刻みに動くことはよくあります。この問題は、それぞれの物理ボディで Mass (kg) プロパティを有効にしてテーパーをすることで修正できます。最も重い物理ボディとして、親階層に最も近いボディを設定し、チェーン内でそれに続くボディについて、それぞれ質量を半分にします。

この例では、最初のヘッド ホースの物理ボディは質量が 2kg、2 つ目のヘッド ホースの物理ボディは質量が 1kg に設定されていました。

物理ボディの Mass (kg) プロパティ

最後に、モーションとコリジョンをシミュレートするすべてのボディについて、Linear Damping プロパティと Angular Damping プロパティの値を設定します。値が大きいほど動きが減り、シミュレートされるボディの揺れが制御されます。この例では、各プロパティの値が「5.0」に設定されていますが、固有の実装ごとにこの値を微調整し、理想的な結果を得ることが重要です。

damping settings

アニメーション ブループリント

物理アセットを使用して、AnimGraph でキャラクターのアニメーション ブループリントに RigidBody ノードを追加できるようになりました。

RigidBody ノードは コンポーネント空間 内で機能するため、このノードをキャラクターのアニメーション ブループリント内に実装するには、空間の変換 を行う必要があります。

デフォルトでは、RigidBody ノードはキャラクターに関連付けられている物理アセットを利用します。二次的な物理アセットが使用されている場合は、Rigidbody ノードの [Details] パネルにある Override Physics Asset プロパティで特定のアセットを定義することができます。

override physics asset porperty in the rigidbody nodes details panel

調整および微調整

RigidBody ノードのプロパティ (Component Liner Acc ScaleComponent Linear Vel ScaleComponent Applies Linear Acc Clamp および Sim Space Settings プロパティ) でコンストレイントを使用するか、物理アセットの 物理ボディ の位置をスケルトンのジョイントにさらに近づくようにすることにより、さらに調整を行うことができます。

scale settings

また、物理アセットの物理ボディごとに Center of Mass プロパティを調整して最も近いスケルタル ジョイントに近づけると、より一層揺れや余計な動きを減らすことができます。

adjust the physics bodies

結果

ワークフローの例で実演した RigidBody ノードの簡単な実装の最終結果を確認することができます。

example demo of the rigidbody node

ベース ボーン シミュレーションのリファレンス

シミュレーション空間ベース ボーン空間 に設定し、RigidBody ノードの [Details] パネルで ベース ボーン を定義すると、任意のジョイントをシミュレーションの参照ポイントとして使用することができます。

スケルタル メッシュ 全体を移動し、個別に ベース ボーン を変更しても、速度に影響はありません。そのため、ベース ボーン空間シミュレーション空間 として使用する場合、キャラクターの動きはシミュレーションに影響を与えません。

ダイナミクスをリセットする

RigidBody ノードは、アニメーション ブループリントの イベントグラフ で使用することができる Reset Dynamics ブループリント ノードもサポートしています。関数ノードを使用するには、ブループリントの スケルタル メッシュ からアニメーション インスタンスを取得し、関数呼び出しの Reset Dynamics ノードを使用してシミュレーションをリセットします。

reset dynamics node aniamtion blueprint event graph

この関数ノードは、シミュレーションをリセットする場合に特に有用で、たとえば、キャラクターがテレポートする際に発生することがあるビジュアルや動作の問題を防ぐことができます。

プロパティのリファレンス

rigid body node details panel

RigidBody ノードの Settings プロパティのリファレンスを以下に示します。

プロパティ

説明

Override Physics Asset

使用する物理アセットを選択します。空白の場合は、スケルタル メッシュ のデフォルトの物理アセットを使用します。

Override World Gravity

有効の場合は、ワールド グラビティを X 軸、Y 軸、 Z 軸に設定されている値にオーバーライドします。

External Forces

ワールド空間で均一な外力を適用します。これにより、コンポーネント空間でシミュレートしながら簡単に動きの惰性を模倣することができます。このプロパティは、デフォルトで AnimGraph 内のノードにピンとして表示されます。

Component Linear Acc Scale

ワールド空間以外のシミュレーションを使用している場合は、このプロパティにより、ローカル空間シミュレーションに渡されるコンポーネントのワールド空間加速度の度合いが制御されます。

Component Linear Vel Scale

ワールド空間以外のシミュレーションを使用している場合は、このプロパティにより、コンポーネントのワールド空間の速度に基づいて、ローカル空間シミュレーション内の 物理ボディ に抗力が適用されます。

Component Applied Linear Acc Clamp

ワールド空間以外のシミュレーションを使用している場合は、全体が Component Linear Acc Scale プロパティから派生した加速度にクランプされ、過剰にならないようにします。

Cashed Bounds Scale

キャッシュされた境界のスケール (実際の境界に対して)。これを増やすとパフォーマンスが向上しますが、オーバーラップが機能しなくなる場合があります。(値「1.0」で、キャッシュされた境界を効果的に無効にします)。

Base Bone Ref

Simulation SpaceBase Bone に設定されている場合、シミュレーションの参照ポイントとして機能するボーンをキャラクターの スケルトン から選択します。

Overlap Channel

衝突するスタティック ジオメトリを見つけるために使用されるチャンネルです。オプションは次のとおりです。

World Static World Dynamic ポーン Visibility Camera Physics Body Vehicle Destructible

Simulation Space

物理ボディ をシミュレートする空間。これは生成される速度に影響します。オプションは次のとおりです。

Component Space:コンポーネント空間でシミュレートします。スケルタル メッシュ 全体を移動しても速度に影響はありません。 World Space:ワールド空間でシミュレートします。スケルタル メッシュ を移動すると速度が変化します。 Base Bone Space:Base Bone で選択されているボーン空間でシミュレートします。スケルタル メッシュ 全体を移動し、個別に ベース ボーン を変更しても、速度に影響はありません。

Force Disable Collision Between Constrained Bodies

コンストレイントで結合された 2 つの 物理ボディ 間のコリジョンを許可するかどうかを設定します。

Transfer Bone Velocities

シミュレーションが開始すると、入力ポーズから以前のボーンの速度が転送され、シミュレーションへの移行をシームレスにします。

Freeze Incoming Pose on Start

シミュレーションが開始すると、ポーズの入力はフリーズされます。これは、ラグドールをシミュレーションに引き継がせたい場合に役立ちます。シミュレートされていないボーンがアニメートされないようにします。

Clamp Linear Translation Limit to Ref Pose

すべての軸がロックされた状態でボディ上の直線的な引き裂きを修正します。これは、すべての軸の直線的な移動がロックされている場合にのみ機能します。

World Space Minimum Scale

ワールド空間シミュレーションでは、コンポーネントの 3D スケールの大きさが ワールド空間の最小スケールより小さい場合、このノードを更新しないでください。

Evaluation Rest Time

ノードがこの時間の間 (秒) 評価されない場合は、低い LOD がしばらく使われていたか、コンポーネントが表示されていなかったことが原因です。次の評価でシミュレーションをデフォルトのポーズにリセットしてください。時間ベースのリセットを無効にするには「0」に設定します。

シミュレーション空間設定

RigidBody ノードの [Sim Space Settings (シミュレーション空間設定)] 設定では、シミュレーションの空間からシミュレーションに渡される動きを制御します。これによりワールド空間の動きの一部を 物理ボディ に渡すことができ、ボーン空間コンポーネント空間 のシミュレーションで、コントロール可能な方法によってワールド空間での動きに反応するようにできます。

このシステムは、Component Liner Acc ScaleComponent Linear Vel Scale および Component Applied Linear Acc Clamp によって提供される機能のスーパーセットです。多くの場合、両方のシステムを有効にするべきではありません。

SimSettings.png

RigidBody ノードのシミュレーション空間設定プロパティのリファレンスを以下に示します。

プロパティ

説明

Master Alpha

シミュレーション空間の動きの効果に対するグローバル乗数。[0, 1] の範囲で使用します。マスター アルファが「0」に設定されている場合、システムは無効になり、シミュレーションは完全にローカルになります。たとえば、ワールド空間のアクタの動きと回転はシミュレーションに影響しません。マスター アルファが「1」に設定されているとき、シミュレーションはワールド空間のシミュレーションとして機能します。ただし、他のパラメータに一定の制限を設ける機能が用意されています。

Velocity Scale Z

このシミュレーションに渡される速度と加速度の Z 成分の乗数。一般に 0.0 から 1.0 で、シミュレーションでジャンプする時やしゃがむ時の効果を低減します。ただし、この動きを誇張する必要がある場合は、1.0 より大きい値にすることができます。

Max Linear Velocity

このシミュレーションに渡されるワールド空間の速度の実質的クランプ。単位は「cm/ 秒」です。デフォルト値は事実上「無制限」です。通常はこれを変更する必要はありませんが、シミュレーションでの 物理ボディ に対する抗力の効果を制限するために減らすことができます (物理アセットに直線抗力をゼロ以外に設定したボディがある場合)。この場合の期待される値は、オブジェクトの通常の速度より少し小さい値で、キャラクターでは一般に数百程度です。

Max Angular Velocity

このシミュレーションに渡されるワールド空間の角速度の実質的クランプ。単位は「ラジアン / 秒」です。つまり、おおよそ 6.0 の値で毎秒 1 回転です。デフォルト値は事実上「無制限」です。この値 (および Max Angular Acceleration の値) を減らして、ある場所でアクタがスピンしたときにボディがどれくらい飛び出すのかを制限できます。これが特に便利なのは、高速に回転するキャラクターがある場合です。その場合は値を 10 以下に設定することをお勧めします。

Max Linear Acceleration

このシミュレーションに渡されるワールド空間の加速度の実質的クランプ。単位は「cm/ 秒 / 秒」です。デフォルト値は事実上「無制限」です。このプロパティは、リニアの速度が突然変化したときにシミュレーションの 物理ボディ が飛び出すのを止めるために使用します。FPS の場合のように、静止からランニングに急に変更できるキャラクターがある場合に便利です。キャラクターに対する一般的な値は数百程度です。

Max Angular Acceleration

このシミュレーションに渡されるワールド空間の角加速度の実質的クランプ。単位は「ラジアン / 秒 / 秒」です。デフォルト値は事実上「無制限」です。これは最大角速度と同様の効果がありますが、回転速度が突然変化したときに、ボディから飛び出すような場合は除きます。キャラクターの通常の制限は 100 程度です。

External Linear Drag V

物理アセットで指定された直線抗力の他に、各ボディに加わる追加の直線抗力。外部直線速度と結合すると、物理アセットにあるすべてのボディで直線抗力を調整することなく、一時的な風を受けた影響を加えるために使用できます。この結果は、他のすべての力に加えて、各ボディに (- 外部直線抗力 V * 外部直線速度) に等しい力がかかります。このベクターは、シミュレーションのローカル空間にあります。

External Linear Velocity

アクタが静止しているときでも動いているかのようにシミュレーションするために、コンポーネントの速度に追加する速度。ベクターはワールド空間にあります。単位は「cm/ 秒」です。風の効果などに使用できます。一般的な値はオブジェクトや効果の速度と同等です。キャラクターや風に対して 1000 以下程度にします。

External Angular Velocity

コンポーネントの角速度に追加される角速度。アクタが回転していないときでも、回転しているかのようにシミュレーションするために使用することができます。たとえば、表彰台上のキャラクターにカメラが周りを回るように物理シミュレーションを適用すると、表彰台自体が回転するようにエミュレートします。ベクターはワールド空間にあります。単位は「ラジアン / 秒」です。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル