ポーズ ワープを使用すると、カプセルの動きに合わせてキャラクターのアニメートされたポーズを動的に調整することができます。このドキュメントでは、ポーズ ワープ機能と、キャラクターのアニメーション ブループリントでポーズ ワープを実装する方法について説明します。
前提条件
- Animation Warping プラグインを有効にする。プラグイン およびプラグインのインストール方法の詳細については、「プラグインを操作する」を参照してください。
-
ポーズ ワープ では、 アニメーション ブループリント のワークフローを使用するため、この機能について理解している。
-
また、ゲームプレイ サンプルを作成するプロジェクトで、 Root Motion (ルート モーション) 対応アニメーション、 IK リグ の実装、およびルート モーションによって制御される方向変数にアクセスできる。
ポーズ ワープの概要
アニメーション ブループリント ノードの一連のポーズ ワープ機能は、ワープによって アニメーション シーケンスのポーズ を動的に調整し、ゲーム ワールド内でより統一感のあるアニメーション インタラクションを作成します。
ポーズ ワープは、以下の 3 つの ノード に分類されます。これらのノードはそれぞれ、特定の用途のワープ実装を実行し、ルート モーションに一致するように独自の方法でアニメーションを調整します。
各ノードのプロパティで、これらのワープの生成を制御する [Manual Evaluation (手動評価)] モードを使用して、多くのパラメータを定義できます。また、[Graph Evaluation (グラフ評価)] モードでは、これらのパラメータを自動的に定義することができます。
一般的な詳細
以下に、Pose Warping ノードのプロパティとその機能について説明します。
名称 | 説明 |
---|---|
Mode | Pose Warping ノードがアニメーションのポーズをワープするための値を導出するモードを選択します。 Manual: アニメーション ワープ評価をユーザー定義のパラメータから導出します。更新変数を活用すると、遷移のスムーズさにかけるため、これはスタティック インスタンスまたはスクリプト インスタンスでの使用に適しています。 Graph: 動的に定義されたグラフ制御パラメータからアニメーション ワープ評価を導出します。一部のノード プロパティが変更され、ルート モーション対応アニメー ション シーケンスが必要になりました。 |
IK Foot Root Bone | スケルトンの IK Foot Root Bone を定義します。 |
ポーズ ワープ ノード
以下に、各ポーズ ワープ ノードの固有プロパティ、および機能について説明します。
Orientation Warping
Orientation Warping ノードは、動作中のアニメーションに指向性のある補正ワープを適用します。このノードでは、アニメーション ポーズの脚の IK ボーンを分離してワープし、ルート モーションの動的に更新されるロコモーション方向と一致させることができます。また、このポーズは、指定された軸に沿って脊椎ボーンにねじることで、向きの角度を維持します。
この機能を使用すると、アニメーション シーケンスで対処できない範囲を補うことができ、インタースティシャル アニメーションを手動で作成したり、追加のブレンド スペースの遷移を作成したりする必要性が軽減されます。
以下に、Orientation Warping のプロパティとその機能について説明します。
プロパティ | 説明 |
---|---|
Orientation Angle | Evaluation Mode プロパティが Manual に設定されている場合に限り、使用できます。ロコモーション コンポーネントのポーズをワープさせたい向きの度合いを定義します。これは、Rotation Axis プロパティで指定されている軸を基準にした値です。 |
Locomotion Angle | Evaluation Mode が Graph に設定されている場合に限り、使用できます。ロコモーション コンポーネントのポーズをワープさせたい向きの度合いを定義します。グラフ制御の値を使用するように作成されているため、Locomotion Angle は動的に変化する値に適しています。 次の式でこれを使用して、オリエンテーション角度を計算します。[Orientation = RotationBetween(RootMotionDirection, LocomotionDirection)] |
Location Angle Delta Threshold | キャラクターの誤った過回転を防止するための角度のしきい値を指定します。デフォルトでは、このプロパティは「90」度に設定されています。また、値を「0」に設定すると、無効にすることができます。 |
Spine Bones | よりシームレスな外観の回転を実現するために、全体的にワープをテーパーさせる脊椎ボーンを定義します。 定義を追加するには、追加 (+)ボタンを使用します。インデックス 0 は、最上位階層に位置し、最も回転の少ないボーンです。インデックスが追加されるごとに、次にネストされる脊椎ボーンとなり、徐々に回転の影響を大きく受けるようになります。 |
IK Foot Bones | スケルトンに含まれる IK Foot Bones のインデックス インスタンスを追加して定義します。 |
Rotation Axis | オリエンテーション ワープ実行する際に使用する軸を定義します。ほとんどの場合、オリエンテーション ワープは、Z 軸上で行われるため、ボディにねじれが生じます。 |
Distributed Bone Orientation Alpha | 脊椎ボーンを通じてキャラクター ボディ全体に分散される回転の量を指定します。この値は上半身で優先され、値「1」は全回転がインデックス「0」の脊椎ボーンで発生することを示し、値 0 は回転が最も高いインデックス付きのスパイン ボーンで発生することを示します。 |
Rotation Interp Speed | 最終的なワープ後の回転角度に到達するための補間またはブレンド速度 (1 秒あたりのアルファ値) を指定します。低い値では、補間速度が低いことを示し、その結果、ロコモーションの変更とアニメーションのワープ間の遷移が遅くなります。この値を大きくすると、スムージングを抑えて、すばやく遷移が行われます。値を「0」を指定すると、瞬時に回転します。 |
Stride Warping
Stride Warping は Pose Warping ノードで、カプセルの移動速度に合わせてキャラクターのアニメートされたストライド (歩幅) を動的に調整します。動作速度と関連するボーンを定義することで、Stride Warping ノードでは、足の位置の間隔を変更し、動作速度に合わせて歩幅を動的に調整することができます。これにより、アニメーションの再生に合わせて動作速度を手動で調整する必要性が低下し、異なる動作速度のアニメーション シーケンス間で移行するためのブレンド スペースへの依存も低下します。
以下に、Stride Warping のプロパティとその用途について説明します。
プロパティ | 説明 |
---|---|
Stride Direction | Evaluation Mode が Manual に設定されている場合に限り、使用できます。ストライドの動作方向を定義します。 |
Stride Scale | Evaluation Mode が Manual に設定されている場合、ストライド調整を細かく調整するために、足の定義に適用されるワープの量をスケーリングします。この値に「1」を指定するとデフォルトのワープ スケールになり、「0.5」を指定すると有効な脚のストライドが半分になり、「2」を指定すると有効な脚のストライドが 2 倍になります。 次の式を使用して、ストライド スケールを計算します。[StrideScale = (LocomotionSpeed / RootMotionSpeed)] |
Locomotion Speed | Evaluation Mode が Graph に設定されている場合は、キャラクターに適用される現在の動作速度を指定します。このパラメータは、Graph Driven Evaluation モードを活用し、ルート モーションやカプセル速度など、動的に更新されるデータと連係して動作するよう設計されています。最良の結果を得るには、宣言された速度はアニメーション グラフのデルタ時間を基準とする必要があります。 |
Min Locomotion Speed Threshold | ストライド ワープ機能の効果を適用するために必要な、最小ロコモーション速度値の定義済みのしきい値です。 |
Pelvis Bone | スケルトンの Pelvis Bone を定義します。 |
Foot Definitions | このパラメータ内で、インデックスを作成して使用することで、ワープの実行に必要な IK および FK の足と大腿部のボーンを定義できます。スケルトンに含まれるロコモーション脚ごとに 1 つのインデックスとその定義が必要です。 |
Stride Scale Modifier | このパラメータを使用すると、クランプや補間のガイドラインを追加して、ストライド スケールの最終結果を変更することができます。これらの制限は、Clamp Result または Interp Result サブプロパティを切り替えることで有効にできます。 クランプは、スケーリングを実行できる最小値と最大値を指定することで、変更できます。値を「1」に設定すると基本スケール、「0.5」ではハーフ スケール、「2」がダブル スケールになります。 補間速度を定義することで、補間が適用される動作速度の範囲を制御できます。Interp Speed Increasing では、動作速度の値を上げる際に、補間が適用されるしきい値を定義します。反対に、Interp Speed Decreasing は、動作速度が低下する際に、補間が適用されるしきい値を定義します。 |
以下に、ストライド ワープ アプリケーションの微調整に使用される Stride Warping ノードのパラメータにある Advanced プロパティについて説明します。
名称 | 説明 |
---|---|
Floor Normal Direction | この値は、ワープを行う前に、対応するコンポーネント空間表現に内部で変換されます。 モード: 対応するベクター値の空間。 Component Space Vector Actor Space Vector World Space Vector IKFoot Root Local Space Vector Value: モードで定義されたスぺースを基準にしたベクターを指定します。 |
Gravity Direction | この値は、ワープを行う前に、対応するコンポーネント空間表現に内部的に変換されます。 このプロパティが、重力による下向きの力のシミュレーションを適用する対応する Vector Value の変換先の空間を宣言します。宣言された空間の各種モードは以下のとおりです。 Component Space Vector Actor Space Vector World Space Vector IKFoot Root Local Space Vector |
Pelvis IK Foot Solver | 脚を伸ばす際の IK/FK 足の定義に対して骨盤をどれだけ「引き下げる」かを制御するためのソルバ。 Pelvis Adjustment Interp: Pelvis (骨盤) の調整中に適用されるスプリング補間パラメータを指定します。Stiffness Constraint プロパティと Dampening Ratio プロパティで定義されます。 Pelvis Adjustment Interp Alpha: オリジナルと調整後の骨盤の最終位置の間のアルファを指定します。これはオリジナルの骨盤の動きをある程度維持するために使用されます。 Pelvis Adjustment Max Distance: 元の位置に対して骨盤を調整できる最大ディスプレイスメントを指定します。 Pelvis Adjustment Error Tolerance: 骨盤調整距離が各イタレーションでこの値以下の値でインクリメントされている場合、ソルバが停止することを指定します。低い値ではパフォーマンスが低下しますがビジュアル品質が少し向上します。ただし、PelvisAdjustmentMaxIter により高い値を指定する必要がある可能性があります。 Pelvis Adjustment Max Iter: 骨盤調整ソルバに対して実行する最大イタレーション回数を指定します。イタレーション回数を増やすと PelvisAdjustmentErrorTolerance の収束に近づきますが、パフォーマンスが低下します。 |
Orient Stride Direction Using Floor Normal | 指定 (Manual) または計算 (Graph) されたストライド方向をフロア法線で方向付けます。 |
Compensate IK Using FK Thigh Rotation | IK/FK 足の定義に沿った FK 大腿部ボーンへのワープ調整を含めます。これは、元の全体的な脚の形状を保持するために使用されます。 |
Clamp IK Using FK Limits | IK 足のワープをクランプして、FK 脚全体を基準として過度な伸張を防止します。 |
Slope Warping
Slope Warping は、フロア法線に合わせた足の位置のワープや、傾斜や階段でのロコモーション アニメーションをよりスムーズな遷移をサポートします。
このノードはまだ開発中であり、このノードの機能をプロジェクトで使用できる信頼性は確保されていないため、テスト環境で実装することをお勧めします。
以下は、Slope Warping ノードに関連するプロパティのリストです。
名称 | 説明 |
---|---|
Pelvis Bone | スケルトンの Pelvis Bone を定義します。 |
Feet Definitions | このパラメータ内で、インデックスを作成して使用することで、必要な IK および FK 足のボーン、定義された足に関連する Number of Bones、および Foot Size 値 (Unreal 単位) を定義できます。これらの定義は、ノードがスロープ ワープを実行するために使用するボーンを定義します。スケルトンに含まれるロコモーション脚ごとに 1 つのインデックスとその定義が必要です。 |
Pelvis Offset Interpolator | 骨盤の調整時に適用される骨盤ボーン オフセット補間パラメータを指定します。Stiffness Constraint プロパティと Dampening Ratio プロパティによって定義されます。 |
Gravity Dir | ワープの影響を受けるスケルタル要素での重力の 方向 を定義します。 |
Custom Floor Offset | スケルトンを基準としたカスタム フロア オフセットを実行するために使用する軸を定義します。 |
Floor Normal Interpolator | 骨盤の調整時に適用されるフロア法線補間パラメータを指定します。Stiffness Constraint プロパティと Dampening Ratio プロパティによって定義されます。 |
Floor Offset Interpolator | 骨盤の調整時に適用されるフロア オフセット補間パラメータを指定します。Stiffness Constraint プロパティと Dampening Ratio プロパティによって定義されます。 |
Max Step Height | スロープ ワープのステップ間で可能な高さ調整の最大値を Unreal 単位で定義します。 |
Keep Mesh Inside Of Capsule | 有効にすると、ワープによって メッシュ が カプセル 外に押し出されるのを防ぎます。 |
Pull Pelvis Down | 新しい足の配置に対応するために、骨盤を引き下げることができます。 |
Use Custom Floor Offset | カスタム フロア オフセットの使用を切り替えます。 |
ポーズ ワープのワークフロー
以下のワークフローでは、ロコモーション アニメーションにワープを追加する、キャラクターのアニメーション ブループリントでの Orientation Warp ノードの基本的な実装を示しています。
まず、キャラクターのアニメーション ブループリントの AnimGraph 内で、Root Motion Enabled アニメーション シーケンスへの参照を呼び出します。このデモでは、アニメーションは 1 方向の単一の移動のアニメーションなど非常にシンプルなアニメーションと、遷移を伴う複数の基軸方向のあらゆる動きなど非常に複雑なアニメーションを取り上げています。このデモで使用するロコモーション ステート マシンは、前進ジョグ アニメーションのみを含んでいます。
この単一のアニメーションと Orientation Warping ノードを使用すると、上半身の向きの角度を維持したまま、アナログ入力コントロールに適応した完全な 180 度の下半身のアニメーションが可能になります。
必要な AnimBPノード を追加する
このデモでは、ルート モーション対応のアイドル アニメーションと単一前進ジョグ アニメーションの間の遷移を伴うシンプルなステート マシンを使用します。
ステート マシン の 出力ピン からドラッグして、Local To Component 空間変換ノード を作成します。このノードは、アニメーション シーケンスを構成するアニメーション ポーズをコンポーネント空間に変換するために必要です。
この Local To Component 空間変換ノードから、出力ピン をドラッグして、Orientation Warping ノードを作成します。
Orientation Warping ノードの後に、スケルトンの IK ボーンに行われるワープを FK ボーンに伝達するために、ダウンストリームの Leg IK ノードが必要です。
Leg IK ノードを Result ノードに接続し、Component To Local 空間変換ノードを作成すると、Local to Component の変換が自動的に終了します。
必要なノードをすべて配置すると、コンパイル時に Orientation Warping ノードに関連するエラーが返されます。コンパイラの結果パネルに表示される Orientation エラーによって、脊椎および IK ボーンの定義が要求されます。これらのボーンは、[Details (詳細)] パネルにある Orientation Wrapping プロパティで定義することができます。これらのプロパティについては、次のセクションで説明します。
必要なパラメータを定義する
AnimGraph ビューポートで Orientation Warping ノードをクリックすると、[Detail] パネルが表示されます。[Settings (設定)] ヘッダで、IK 足ルートのインスタンスと個別の IK 足をスケルトンに割り当てることができます。また、キャラクターの向きの角度を保持するために、追加 (+) をクリックして、ツイストを変位させるノードに少なくとも 1 つの脊椎ボーンを指定する必要があります。1 つのボーンは、下半身全体のピボット ポイントのように動作します。脊椎変数を追加すると、脊椎ボーン全体でワープがテーパーされ、より自然に見えるようになります。
モデルに含まれているスケルトンと同じ数の脊椎ボーンを指定することをお勧めします。
次に、オリエンテーション ワープの角度を定義する必要があります。この角度は、広範なパラメータ化によって手動で定義できます。または、ルート モーションの角度で制御される指向性変数などの動的な値によって、この角度を自動的に指定することもできます。
Orientation Warping ノードの [Details] パネルで、Evaluation Mode を Graph に変更します。グラフ評価モードでは、手動の静的な値である Orientation Angle ピンを、グラフで制御する値で接続できる Locomotion Angle ピンに変更します。この例では、カプセルの移動方向によって制御される方向変数を使用します。
Direction 変数を呼び出し、変数ノードの Output Pin を Locomotion Angle Input Pin に接続します。
最後に、実行されるワープをブレンドするために、IK リグのプロパティ内の FK ボーンに対応する IK ボーンの定義が必要です。
IK Rig の [Details] パネルで、追加 (+) ボタンを使用して、モデルに含まれる各脚の Leg Definition 配列を作成します。この配列で IKFoot ボーンと FKFoot ボーンを定義します。
Leg Definition 配列にある Num Bones In Limb プロパティは、各足に関連付けられている脚構造にあるボーン数を表します。この値 (足ボーン自体を含まない) は、ワープさせる必要のあるその他の構造を構成するすべてのボーンを考慮する必要があります。この例では、足からふくらはぎおよび大腿部のボーンを経て、骨盤ボーンに到達します。骨盤は脚の構造には含まれないため、定義済みの足ボーンに関連付けるために、2 つのボーンを宣言します。これは一般的な構造であるものの、ユーザーのスケルタル メッシュとは異なる場合があります。
結果
レベルをコンパイルして保存し、再生すると、Orientation Warping ノードの効果が示されます。1 つだけのアニメーション シーケンス、前進ジョギング アニメーションで、180 度のロコモーションをフルにカバーできます。また、脊椎ボーンを定義することで、キャラクターの向きの角度を保持し、進行方向を向いた状態を保ちます。
ポーズ ワープ前 | ポーズ ワープ後 |
---|---|
上記のデモでは、キャラクターに適用される入力は、カプセルを介して、メッシュに位置と方向の移動を実現しています。現在のアニメーションの適用範囲には制限があるため、入力はアニメーションの再生に影響しません。このアニメーションは、単に単一方向にループします。 | 上記のワークフローが完了すると、キャラクターの入力によって制御されるワープがリアルタイムに実行されます。脊椎で生じしているねじれに注目してください。このねじれは、入力によって制御されるロコモーション方向 (赤い矢印) に追従するように脚のアニメーションの方向に焦点を置くと同時に、ルート モーションが制御する向きの方向 (青い矢印) を保持するために加えられています。 |
以下は、このページで Orientation Warping ノードの実装に使用した Animation Blueprint ロジックの全体画像です。
デバッグ
以下に、Orientation Warping ノードまたは Stride Warping ノードを実装する際に発生した問題を修正するうえで役立つデバッグ プロパティについて説明します。
Orientation Warping
Orientation Warping ノードのデバッグ プロパティとその機能について説明します。
名称 | 説明 |
---|---|
Debug Draw Scale | 視覚的に描画されるデバッグ ガイドを均一にスケールします。 |
Enable Debug Draw | 有効にすると、実行時にビューポート内のキャラクターを起点として、対象のベクターを表す一連の色付きの矢印が描画されます。 赤色の矢印: 入力方向。 青色の矢印: ルート モーション。 緑色の矢印: シミュレートされた方向、ブレンドされたベクター。入力と表示されたアクションによって決まります。このブレンドの速度は、[Details] パネルの Rotation Interp Speed プロパティで調整できます。 |
Stride Warping
以下は、Stride Warping ノードの適切な実装をサポートする Debugging プロパティのリストです。
名称 | 説明 |
---|---|
Debug Draw Scale | 視覚的に描画されるデバッグ ガイドを均一にスケールします。 |
Enable Debug Draw | キャラクターのカプセルの中心を起点とする移動速度ベクターを表す赤い矢印を、実行時にビューポートに表示します。入力フォースが大きいほど長い矢印が描画され、小さいほど矢印が短くなります。 |
Debug Draw IKFoot Origin | 有効にすると、定義された IK 足が赤い球体で表示されます。 |
Debug Draw IKFoot Adjustment | 有効にすると、IK 足の中心を起点とする青いベクター矢印が描画され、調整内容が表示されます。 |
Debug Draw Pelvis Adjustment | 有効にすると、ビューポートにベクターが描画され、骨盤ボーンの調整が行われたことが示されます。 |
Debug Draw Thigh Adjustment | 描画されるベクターを切り替えることで、定義された大腿部のボーンに加えられた調整を視覚的に確認できます。 |
Debug Draw IKFoot Final | このプロパティでは、フル ワープの実行後に、IK 足ボーンの最終的な位置の視覚的な表現を描画することができます。 |