- はじめに
- 3.アニメーション
- アドバイス
- 最後に
- メモ
はじめに
今回はこちらを見ていきます
3.アニメーション
理念と概念
- アニメーションツールの目的: 汎用性を高め、アニメーションフローのレイヤー化を可能にすること
- レイヤー化による恩恵
- 異なるアニメーションレイヤーで起こっている事を分離可能となる
- レイヤー毎に反復及び改善ができるようになる
- 再利用性
- 1つのアニメーションから複数のものを取得し、他のキャラや他のアニメーションセットとそれを共有できる
- 異なるアニメーションレイヤーで起こっている事を分離可能となる
- アニメータの支援もある
- アニメーターはエンジン内のアニメーションの大部分を処理するため外部の力を必要とすべきではない
- ゲームプレイと非常に緊密に統合されたツールが有る
- レイヤー化による恩恵
UE1 to UE2
- UE1は頂点アニメーションベースで開始
- UE2
UE3
- クロスが追加
- シネマティックエディタであるマチネが追加される
- 全体図
- ここで重要なのはアニメーションをつなぎ合わせるシステムだということ
- スケルトン(左端)はアニメーションの主柱
- スケルトンに対して異なるスケルタルメッシュ(左上)が配置可能
- スケルタルメッシュからはスケーラビリティ機能を使用できる
- LODとセットを配置できる
- スケルタルメッシュからはスケーラビリティ機能を使用できる
- スケルトンに対して異なるAnimBP(中央)が配置可能
- AnimationBPはイベントグラフとAnimGraphに分けられる
- イベントグラフはアニメーションとゲームプレイを接続する
- AnimGraphはゲームプレイ変数によって駆動されるアニメーションフロー
- AnimationBPはイベントグラフとAnimGraphに分けられる
- スケルトンに対して異なるAnimatin Sequence(中央下)が配置可能
- Animation Sequenceではいくつかのツールで変換してAnimBPに配置できる
- スケルトンに対して異なる物理アセット(下)が配置可能
- Calculate Poseではポーズを計算
- 最後にスケルタルメッシュをレンダリングする
スキマティック
Skeleton and Skeltal Mesh
- アニメーションフレームワークの基本構造
- Skeletonでの依存関係
- リターゲッティングプロセス
- 1つのFBXファイル含まれるもの
- 0個以上の完成したアニメーション
- スケルトン
- リギング
- メッシュ
- 上記の通りFBXには色々な情報があるため、情報毎の複数のファイルがあるとみなせる
- それらはスケルトンになり、それに結びつく型でスケルタルメッシュ、表示ジオメトリ
- 上記の図は3本伸びていて、行き先は Skeltal Mesh、Skeleton、Animation Sequenceとなっている
- FBXインポート時に物理アセットを生成する事もできる
- スケルトンがどのように物理環境に反応するかを定義する
- スケルトン
- スケルタルメッシュ
- スケルトンに向かうものをバインドする
- 関連ツール
- スケルタルメッシュ減少ツール
- メッシュの数と骨の数を減らすことができる
- スケルタルメッシュ減少ツール
- マテリアル情報
- LODシステムの管理
- クロス情報も格納している
Animation Sequences アニメーション シーケンス
- スケルトンに割り当てた異なる複数のアニメーション
- アニメーションメタデータ
- ポーズ生成と使用
- FBXからインポートもできる
- Live Linkが使用できる
- DCCツールの変更を直接エンジンでプリビジュアライズが可能
Anim Curve
- それが入っているシーケンスが再生されると読み取れる曲線。
- 0個以上異なった目的で含めることができる
- 例えばルートモーションを削除するとアニメーションが歩く距離をこのカーブに基づいて計算できる
- その情報はイベントグラフで読み込みゲームプレイで使用できる
- 例えばルートモーションを削除するとアニメーションが歩く距離をこのカーブに基づいて計算できる
Anim Notifies
– 上図の通知の部分。タイムライン上に配置されていて効果などのアニメーションが挿入されている
– 音も入れられる
Sync Markers (同期マーカー)
- 異なる長さのアニメーションを同期させる
Blend Spaces
- 1つまたは2つのヘンスのディメンションに依存する複数のアニメーションを適切にブレンドする方法
- これは1次元で白い円がなんかしらのアクションで緑の円のいちに応じてアニメーションの比率を変える
Montages
- 異なるアニメーションシーケンスを一つにグループ化または結合する方法
- 複数の異なるアセットを1つのグループに結合する方法
- モンタージュはゲームプレイでの再生が簡単
- 通常はキャラクターの入力に応じて再生され、キャラクターの反応となる
- 例えば攻撃ヒット時、着地時でキャラクターのフローに合わせて再生されるわけではない
Pose Assets
- 新しいシーケンスを作成するかまたはAnimGraph内でブレンドするために組み合わせる事ができる
- このフレームポーズが取得され新しいアセットに保存される
- 保存されたものをブレンドして新しいアニメーションが生成できる
Animation Graph アニメーショングラフ
- AnimGraphとイベントグラフから成る
イベントグラフ
- アニメーションに関連するすべての変数を処理
- BやC++でイベントグラフにフィード
- イベントグラフはフィードされた情報を独自の変数に変換する
AnimGraph
- アニメーショングラフはイベンドグラフの変数の情報に基づいてアニメーションを決める
- 主要なものはステートマシン
Flow Control Nodes
Slots
- フローをスロットで上書きする
- 例えば攻撃を行ったすると、攻撃のモンタージュがスロットに保存される
- フローがスロットに来ると保存されている攻撃のモンタージュに置き換え出力する
- スロットが空なら何も上書きせずそのままに元のフローのままにして次に処理を渡す
Pose Caching
- 情報の再利用を可能にする
Blend and Additive
- ボーンとボーン間を補間する。
- いろいろな変数を使ってブレンドできる
Procdural Nodes
– 物理に依存するアニメーション
– どのように接続されているか確認可能
– これらのボディーがどのように変化するか定義できる
Rigid Body Node
物理アセットによって駆動される物理的な振る舞いを適用できる
Anim Dynamics
- 特定の物理的な振る舞いに使われるノード。
- Rigid Body Nodeよりもシンプル
- 例えばスパーリングエフェクト
IK Nodes
- 2つのボーンIKソリューションが使用され、足、腕などに使われる
- どこかを見ているアニメーションにも使われる
Animation Layers
– 実験的な段階のノード
– 小さく断片的な振る舞いを作成する
– ゲームプレイからの入力や変数によってレイヤーを切り替えることができる
– 2つのアニメーショングラフを連携させる事も可能
Control Rig
– エンジン内でリギングを作成できるツール
– 例えばスケルトン階層の異なるパーツに応じて振る舞いを作成できる
Final Pose ファイナルポーズ
– 計算されたアニメーションでの可能性
– アニメーション共有マネージャ
– シーケンスレコーダー
Animation Sharing Manager アニメーション共有マネージャ
- 同じスケルトンを共有しているいくつかのPawnに同じファイナルポーズを共有できる。
- 上記を非常に洗練された方法で可能にしている
- 例えば4つのポーズを計算して数百というスケルトンに分配する
- 4つのポーズを処理するためのCPUのみを使用しそれを多数のスケルトンで共有する
Sequence Recorder
- アニメーションで起こることを記録できる
- ゲームプレイの動作を記憶し後で再生し何が起こっているかを見ることができる
- 上記以外でも例えばボックスを複数配置するものを記録した場合、ゲームに組み込みシュミレーションではなくそのアニメーションをゲームに挿入させる事も可能
Performance
– 場合によりアニメーションは非常に重くなる
– その影響を軽減するためのツール群がここにある
Animation Budget Allocator
- アニメーションに費やせる時間を設定できる
- 超過した場合、アロケータは機能をカットする
Animation Tick
- アニメーションのTickを減らしたりできる
LODs
- ポリゴンの量を減らすだけではなくキャラクタのボーン数も減らせる
Fast Path Nodes
- Animation BPとAnimGraphにある
- 右上に雷マークのあるノードは C++ で作られていて速度が早い
Multi Threaded Update
- マルチスレッドでもアニメーションを実行できる
- アイドルのスレッドが多くあればよく機能する
アドバイス
AnimBP Retargeting
– Animation BPでもリターゲットできる
– つまりゲームの中のすべてのキャラクターが使用できる非常に基本的なAnimationBPを作成することがキャラクターがグローバルな振る舞いを共有する場合は重要と成る
– そこから個別に詳細を編集できる
– コピーペーストするのではなくリターゲットもできる
– リターゲットは開発時にプロジェクトを整理する良い方法
Layering
– ステートマシンをシンプルにとどめましょう
– ステートマシンの中にステートマシンを作りレイヤー化できます
– 可視性は損なわれるが、デバッグは簡単になる
– フローを作成する場合は最も基本的な動きを定義し詳細はあとのフローに配置したほうが簡単
– デバッグも簡単になる
Flow Control
– リアクションアニメーションやオーバーライドが必要であればスロットを使用しましょう
– 例えば攻撃のアニメーションはスロットに配置する
– Pose Cachingを恐れないでください。クリエイティブに使用してください
Ticking and Performance
– AnimationBPのTickを削減できます
– 更新レート最適化を適用できます
– 遠くにキャラが離れた時に更新レートを最適化を有効にする
– キャラクターレート(最適化の設定度合い)は色付きで確認する方法があり、BPのTickが減っていく様が確認できる
– Anim Budgeter(実験的)
– デフォルトで Anim Budgeter を有効にできる
– これを使えば「このキャラについてTickを減らそう」などと詳細について考えなくてよくなる
– Animation Streaming (実験的)
– チャンクがある場合、通常はシネマティックだが、チャンクの入出力を行うことができる
Physics Behavior
– 適切な物理アセットの設定は必要最小限の振る舞いにすること
– IK vs Simulated
– KInematic はアニメーション、Simulated は物理。どっちに基づいて動かすかを決定できる
– Physics Profiles 物理プロファイル
– 物理プロファイルの利点はランタイムで切り替えができること
Animation Sharing Manager
- 少量のポーズ計算を群衆に適用可能
- つまり群衆のアニメーションが簡単になる
- ランダマイズもできるため、共有されている事があまり目立たない
- 共有アニメーションの上にリアクションアニメーションを設定できる
- 群衆の中の1人を攻撃した場合などに適切に反応する
最後に
アニメーションについては下記記事でも書いたので今回は復習となった。
ken26u.hatenablog.jp