Lyra のアニメーション

Lyra のアニメーション システムの概要

Lyra のキャラクター アニメーションは、Unreal Engine 5 で強化された アニメーション ブループリント システムを使用して、ほぼ完全に ブループリント で作成されています。このシステム設定は、C++ のカスタム機能を使用して同様の結果を実現している Paragon やフォートナイトの影響を受けています。

アセットの概要

AnimBP_Mannequin_Base アニメーション ブループリントには、 AnimGraph ウィンドウがあります。このウィンドウを使用すると、キャラクター マネキンの最終出力ポーズに役立つ アニメーション ノード のアーキテクチャを確認することができます。 このアニメーション ブループリントは、[Content Drawer (コンテンツ ドロワー)] を選択して、「Characters」 > 「Heroes」 にある AnimBP_Mannequin_Base をクリックすると、表示できます。

Mannequin Base アニメーション ブループリントの AnimGraph とBlueprint Thread Safe Update Animation 関数。

AnimBP_Mannequin_Base は、Lyra ゲームの [サンプル武器]() と ゲームプレイ アビリティ で使用されている一般的な手法をサポートするように設定されています。

ブループリントのスレッドセーフな更新アニメーション

キャラクター クラスのアニメーションを開発する際は、アニメーションを最適なパフォーマンスで実行するために、いくつかの考慮事項があります。Lyra では、アニメーションの値を計算するのに、 イベント グラフ ではなく、 マルチスレッド アニメーション を使用します。

アニメーション ファスト パス は、ゲーム スレッド外で値を計算するプロセスを保持するうえで役立ちます。この機能は、エディタで [Edit (編集)] > [Project Settings (プロジェクト設定)] > [Engine (エンジン)] > [General Settings (基本設定)] > [Anim Blueprints (Anim ブループリント)] に移動して、[Allow Multi Threaded Animation Update (マルチスレッド アニメーションの更新を許可)] をオンにすることで有効にできます。

AnimBP_Mannequin_Base[Class Defaults (クラスのデフォルト)] を開き、[My Blueprint (マイ ブループリント)] > [Functions (関数)] カテゴリに移動して、BlueprintThreadSafeUpdateAnimation 関数をクリックすると、アニメーション データの収集とこれらの計算処理を担う関数を確認することができます。

スレッドセーフ関数を使用する際は、イベント グラフ内で行うように、ゲーム オブジェクトから直接データにアクセスすることはできません。たとえば、キャラクターの速度に関するゲームプレイの float 値をコピーしようとすると、スレッドセーフとはみなされません。そのため、このような場合に対処するため、プロパティ アクセス の使用をお勧めします。

Anim Node 関数

Lyra では、Anim Node 関数を使用してステート固有のロジックが作成されます。これには、アニメーションのロジックを整理できるというメリットがあります。キャラクターがアイドル アニメーションである間に値を計算する必要がある場合、そのロジックをアイドル ステートにすることができます。例を確認するには、次のステップを実行します。

  1. AnimBP_Mannequin_Base > [Anim Graph (アニメーション グラフ)] に移動して、LocomotionSM ステート マシンをダブルクリックすると、ロコモーション ステートを表示するウィンドウが開きます。

    Locomotion ステート マシンには、さまざまなアニメーション ステート間を遷移するためのステート エイリアスがあります。

  2. Idle ステートをダブルクリックして、Output Animation Pose ノードを選択すると、[Details (詳細)] パネルの [Functions] に、ノードの初期値を設定するアニメーション ノード関数が表示されます。

    この例では、Idle ステート マシンを開き、その Output Animation Pose で使用されている アニメーション ノード関数を表示します。

    関数

    説明

    On Initial Update

    ノードが初めて更新される前に呼び出されます。

    On Become Relevant

    ノードに関連性が生じたときに呼び出されます。

    On Update

    ノードが更新されたときに呼び出されます。

  3. [My Blueprint (マイ ブループリント)] > [Functions] > [State Node Functions (ステート ノード関数)] に移動して、UpdateIdleState 関数をダブルクリックして、Idle State locomotion ノードの最終出力ポーズを計算するために使用されるロジックを表示します。

    エンジンのこれまでバージョンでは、従来のステート マシン イベントはアニメーションの更新後に実行されます。

ステート エイリアス

プロジェクトが拡大し始めると、キャラクターの遷移先のアニメーション ステートが多くなる可能性があります。その結果、ステート マシンで複数の遷移ラインが生じ、グラフがわかりづらくなることがあります。ステート エイリアスは、ステート間の個々の遷移を制御しながら、遷移ロジックを簡素化するために使用されます。Lyra で、AnimBP_Mannequin_Base > [Anim Graph] > [LocomotionSM] グラフに移動し、JumpSources ステート ノードを選択すると、ステート エイリアスの使用例を表示できます。

Jump Sources ノードがハイライトされたロコモーション ステート マシン グラフ。使用可能なステート エイリアスを確認できます。

[Details] パネルでは、ジャンプ ステートに直接遷移できるロコモーション ステートを確認することができます。

Lyra キャラクターがアイドル ステートで、プレイヤーがジャンプ アクションを使用すると、Lyra キャラクターはジャンプ ステートになります。最終的に、落下ステートに移行した後、サイクル ステートまたはアイドル ステートに戻ります。

上半身と下半身のレイヤー化

ブレンド ノード は、複数のアニメーションをまとめてブレンドするために使用されます。Lyra で使用されるロコモーション アニメーションのほとんどはフル ボディです。つまり、アニメーションが (jog_fwd アニメーションなど) スケルトン全体で再生され、その後、プレイヤーがいつでも使用できるさまざまな上半身のアクション (武器の発射やリロードのアニメーションなど) と組み合わされます。

これは、Layered blend per bone ノードを使用することで実現できます。このノードは、AnimBP_Mannequin_Base > [AnimGraph] を開いて、Upperbody/lowerbody split とコメントされている箇所に移動すると確認できます。

Layered blend per bone ノードを選択すると、ブレンドに関連する個々のボーンのウェイトの明示的なコントロールを提供するブレンド マスクを含む [Details] パネルが表示されます。

リンクされたレイヤー アニメーション ブループリント

アニメーション ブループリント リンク システムでは、アニメーション グラフ上の異なるサブセクション間を動的に切り替えることができます。メインのアニメーション ブループリントには、リンクされたレイヤー アニメーション ブループリントを使用してポーズをオーバーライドできる箇所が複数あります。 つまり、Lyra では、プレイヤーがどの武器を持っているかに応じて、異なるロコモーション動作、アニメーション アセット、またはポーズ補正を行うことができます。それぞれの機能を分離して、複数のユーザーが同時にアニメーションを操作できるようにしたり、同じコア機能を共有しながら、アセット間の依存性を低減することができます。

アニメーション レイヤー インターフェース

ALI_ItemAnimLayers は、アニメーション ブループリントでアニメーションをオーバーライドできる箇所を指定するアニメーション レイヤー インターフェースです。Lyra では、これは、照準コントロールおよびスケルタル コントロール用のレイヤーに加えて、ロコモーション ステートに対しても実行されます。

Item Anim Layers インターフェースの一部である FullBody_Aiming アニメーション レイヤー。

ABP_ItemAnimLayersBase は、すべての武器が使用する基本的なリンクされたレイヤー アニメーション ブループリントです。このブループリントは、「Content」 > 「Characters」 > 「Heroes」 > 「Mannequin」 > 「Animations」 > 「LinkedLayers」 からアクセスできます。

Main AnimBP のデータにアクセスする

ABP_ItemAnimLayersBase アニメーション ブループリント内には、カスタム関数 Get Main Anim BPThreadSafe があり、メイン アニメーション ブループリント (AnimBP_Mannequin_Base) への参照を取得するために使用されます。

Item Anim Layers Base アニメーション ブループリントに表示されている Get Main Anim BPThreadSafe 関数

これは、プロパティ アクセスを使用してそのすべてのデータにアクセスし、AccelerationVelocity など、リンクされたレイヤーが使用する可能性のあるあらゆる値を再計算する必要がないようにします。

アニメーションの選択に Anim Node Functions を使用する

Lyra では、Linked Anim Layers は、アニメーションの更新時 (On Update) または関連性が生じたとき (On Become Relevant) に、プロパティ アクセス と Anim Node 関数を使用してロジックを実行します。

以下の例では、アニメーションが関連性を持つたびに、指向性開始アニメーションを選択します。

リンクされたレイヤーの子アニメーション ブループリント

Lyra では、すべての武器には、ABP_ItemAnimLayersBase を継承した子アニメーション ブループリントがあります。アニメーターは、以下の ABP_PistolAnimLayers アニメーション ブループリントの画像のように、武器ごとにアニメーションを接続し、変数を編集することができます。

距離マッチングとストライド ワープ

距離マッチング は、スタート、ストップ、着地アニメーションといったロコモーション アセットなどの、アニメーション アセットとゲームプレイの間の動作を一致させるのが困難な場合にアニメーションの再生レートを調整します。

ストライド ワープは、キャラクターがジョグ ステートに移行したときなど、再生レートの調整ができない場合に、キャラクターのストライド (歩幅) を動的に調整するために使用されます。

stride-warping

stride-warp-motion

これら 2 つの手法を組み合わせることで、どちらか一方を優先するように動的に選択することができます。スタート ステートでは、まず距離マッチングでポーズを保持し、ジョグ ステートに近づくにつれてストライド ワープを使用してブレンドします。

update-start-anim

オリエンテーション ワープ

[オリエンテーション ワープ]() は、キャラクターの動きのルート モーションの角度と併用して、その角度に合わせてキャラクターの下半身を曲げることができます。Lyra では、Strafe アニメーションは 4 つの枢軸方向に対して作成されます。これは、プレイヤーが 360 度の自由度で移動できるため、オリエンテーション ワープを使用して、ポーズをプロシージャルに調整できるためです。この手法は、アニメーションの対応範囲が限定されているため、開始時に使用されます。

orientation-warping

所定の位置での旋回

Turn in Place (所定の位置での旋回) アニメーション選択は、Lyra のベースとなる Linked Animation Blueprint の Idle ステート マシンの内部で実行されます。旋回角度に基づくさまざまなアニメーションと、それらをトリガーするまでのプレイヤーの待機時間は、[Class Defaults] > [Anim Set - Turn In Place] > [Turn In Place Transitions] に移動することで、子 Anim ブループリントの per-weapon Anim Set (武器ごとのアニメーション セット) セクションでカスタマイズできます。

turn-in-place

Lyra では、キャラクター アクタはコントローラーのヨー方向に向いています。足の滑りを最小限に抑えるために、回転に対するカウンターが Rotate Root Bone ノードによって使用され、Root Yaw Offset によってオフセットされます。

counter-controller-yaw

この追加のオフセットは、FullBody Aiming レイヤーの Aim Offset にヨー値を渡すときに使用されます。プレイヤーが実行する動作に応じて、Root Yaw Offset のモードを以下の表のいずれかのステートに変更できるようにする必要があります。

オフセット モード

説明

Accumulate (蓄積)

アイドル時に、[Accumulate] では、アクタの回転を完全に無効にします。

Hold (保持)

開始時に、[Hold] では、このアニメーションが開始した元のオフセットを保持します。

Blend Out (ブレンド アウト)

ジョグ サイクルに入るときに、[Blend Out] ではスムーズにブレンドし、デフォルトの「コントローラーに向ける」動作に従います。

これは、各ステートで必要に応じて呼び出し可能な Request Root Yaw Offset Mode 関数で実行されます。

request-root-yaw-offset-mode

キャラクターがアイドル ステートで、オフセット モードが [Accumulate] に設定されている場合、アニメーションのルート回転を Root Yaw Offset に適用する必要があります。この情報は、Turn Yaw Anim Modifier を使用してカーブにベイクされるため、ソース アニメーションで Root Motion が有効である必要があります。

turn-yaw-anim

追記

ゲームプレイ タグ バインディング

Lyra は、プレイヤーのほとんどのアクションで ゲームプレイ アビリティ システム を使用しています。アニメーション ブループリントでは、ゲームプレイ タグ バインディングを使用して、これらのイベントに対応することができます。AnimBP_Mannequin_Base ブループリント内のゲームプレイ タグは、[Class Defaults] > [Details] > [Gameplay Tags] > [Gameplay Tag Property Map] から操作できます。

gameplay-tags

モンタージュ

モンタージュが更新され、ブレンド プロファイルInertialization をサポートするようになりました。

5.0 では、現時点では、これら両方を同時に有効にすることはできません。

montages

通知

追加のアニメーション通知情報が、ステート マシン遷移に公開されました。Lyra では、これを使用して、特定のステートから遷移できる正確なタイミングを制御しています。

state-machine-notify

デバッグ

ポーズ ウォッチ マネージャーを使用すると、グラフ上の特定のポイントにポーズ ウォッチを追加して、ランタイム ポーズを調べ、すばやく操作することができます。ポーズ ウォッチ マネージャーを開くには、[Window (ウィンドウ)]>[Pose Watch Manager (ポーズ ウォッチ マネージャー)] を選択します。

pose-watch-manager

デバッグでは、「アニメーション作業の生産性を高めるためのヒントとコツ」ページに記載のヒントとコツに加えて、Rewind Debugger (巻き戻しデバッガ) を使用できます。

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