#ue4studynagoya
猫でも分かる
UE4のAnimation Blueprintの運用について
- Unreal Engine Meetup Nagoya #6 in 名古屋城 -
Epic Games Japan 岡田和也
#ue4nagoya
※
以降のスライドでは
Animation Blueprint を Anim BPと省略します
文字数多いので…
#ue4nagoya
自己紹介
Epic Games Japan サポートエンジニア
岡田和也 ( おかず @pafuhana1213 )
#ue4nagoya
本日のお品書き
• Anim BPって?
• Anim BPの運用でよく問題になること
• アニメーションとロジックの共有について
• Anim BPの肥大化の回避について
#ue4nagoya
Anim BPって?
#ue4nagoya
Anim BPとは
Skeletal Meshのアニメーションを
制御するための特殊なBlueprint
• Event Graph, AnimGraphの2要素で構成
特定の Skeleton に紐づく
• Skeletal Mesh ジャナイヨ!
#ue4nagoya
Event Graph
Anim Graphで使用するパラメータを管理・制御
• 通常のBPと同じインターフェイス
#ue4nagoya
Anim Graph
現在フレームにおけるSkeletalMeshの
最終ポーズを評価
• Animation Sequence
• State Machine
• Blend
• Skeletal Control
• IK
• などなど…
( C++でノードの自作も可能! )
#ue4nagoya
BPとの連携例 入力に応じたモーション再生
Aボタンを押したよ!
Aボタンはジャンプだから
Jumpノードを呼び出すよ!
地面から離れたから
ジャンプ開始モーションを
再生するよ!
ヒャッフー!
#ue4nagoya
ThirdPersonテンプレートのAnimBP
#ue4nagoya
BPとの連携例 IKによる足の位置調整
#ue4nagoya
Animation BPを活用することで
状況に応じた 様々な表現・挙動を実現可能!
#ue4nagoya
しかし、運用方法に注意しないと
後々大変なことに…
#ue4nagoya
本日のお品書き
• Anim BPって?
• Anim BPの運用でよく問題になること
• アニメーションとロジックの共有について
• Anim BPの肥大化の回避について
#ue4nagoya
運用失敗した際のワーストケース ①
#ue4nagoya
膨大な数のAnimBP (とアニメーションアセット )
リソースの共有が全くできていないケース
• AnimBPなどのアニメーション系アセットが
キャラクタ毎に専用のものが存在
#ue4nagoya
リソースの共有ができていない場合…
リソースやロジックの 追加・変更・確認 コストが膨大に
• もしキャラクタの数が100体だったら…?
ゲーム実行中も様々な箇所に悪影響
• メモリ使用量、ロード時間など
• 中身は全く同じなのに別物として管理されてしまう
#ue4nagoya
この問題に陥りやすいフローの例
異なるスケルトンに対しての
アニメーションリターゲットを使用しているケース
変
換
用
リ
グ
#ue4nagoya
異なるスケルトンに対しての
アニメーションリターゲット の問題点
アニメーション系アセットの 流用 はできますが、
共有 はできない
• その時点でのAnimBPで実装した
ロジック、各モーションはコピーできる
• しかし別々のアセットになるので、
以降の作業では、先述の問題が発生!!!
#ue4nagoya
便利な機能ですが、
用法・容量を守って
正しくお使い下さい!
#ue4nagoya
運用失敗した際のワーストケース ②
#ue4nagoya
スパゲッティ化したステートマシン
#ue4nagoya
#ue4nagoya
スパゲッティステートマシンのデメリット
各作業がつらすぎる
#ue4nagoya
Anim BPを運用する上での注意点
• アニメーション系アセットの共有度合い
• Anim BPの複雑度
#ue4nagoya
Anim BPを運用する上での注意点
• アニメーション系アセットの共有度合い
• Anim BPの複雑度
• キャラクタ数に応じて事故率が向上!
• 変更・追加に弱いシステムに!
最終クオリティに
大きく影響する…!
#ue4nagoya
これらの問題を回避するために
• UE4におけるアニメーションの共有方法を理解した上で
各ロジック・リソースを作成する
• Anim BPに関する各機能を活用し
複雑度合いが低く、変更に強いAnim BPの実装を意識する
#ue4nagoya
検証・設計のFixは
必ず量産前までに!
#ue4nagoya
本日のお品書き
• Anim BPって?
• Anim BPの運用でよく問題になること
• アニメーションとロジックの共有について
• Anim BPの肥大化の回避について
#ue4nagoya
アニメーション・Anim BP共有のメリット
汎用的なモーション・ロジックを使いまわすことが可能
• 例:モブキャラの待機・歩き・走りモーション
• 例:Anim BPのState Machine
追加・変更コストの削減
• 作業内容が共有先にも行き渡る
#ue4nagoya
アニメーション・Anim BPを共有するには?
共有元・先の Skeletal Mesh が 同じ Skeleton を持つ必要がある
同じSkeletonを持たせるためには?
• 流用元・先のSkeletal Mesh ( の元リソース ) が持つボーン階層が
Skeleton共有可能条件を満たす必要がある
#ue4nagoya
・・・?
#ue4nagoya
Skeletal Mesh が持つ
ボーン階層
Skeleton アセット Skeletal Mesh アセット
#ue4nagoya
FBXインポート時の挙動
紐付け
#ue4nagoya
Skeletonアセットとボーン階層
Q.「Skeletal Mesh が持つボーン階層」と
Skeletonアセットは同一のもの?
A. NO!
≠
#ue4nagoya
Skeletonアセットとボーン階層
Skeletonアセットは
複数 の 類似 ボーン階層を保持するリスト
#ue4nagoya
FBXインポート時に既存Skeletonを指定すると
Skeletonの類似ボーン階層リスト に
「FBXのボーン階層と同じものが含まれるか? 」または
「リストに追加できるか?」のチェックが走る
#ue4nagoya
FBXインポート時のチェックを通過すると
インポートによる追加されたSkeletal Meshが
既存Skeletonに関連付けされる
• 既存Skeleton に関連付けられたアニメーションを使用可能に!
#ue4nagoya
1ページ前に戻る
Skeletonの類似ボーン階層リスト に
「FBXのボーン階層と同じものが含まれるか? 」または
「リストに追加できるか?」のチェックが走る
後述の共有可能パターンを
満たす必要がある!
#ue4nagoya
このSkeletonに
新たなボーン階層を追加するケースを想定
7
65
4
32
1
0
#ue4nagoya
共有可能パターン①
ボーン階層が完全に一致
• 階層構造・各ボーンの名前が一致。位置は無関係
7
65
4
32
1
0
7
65
4
32
1
0
7
6
5
4
3
2
1
0
7
65
A
32
1
0
#ue4nagoya
イメージ
体型が異なっていても、ボーン階層が同じなら共有可能
#ue4nagoya
共有可能パターン②
ボーン階層が、共有元のボーン階層 + α
• ただし、ボーン間への追加はNG
7
65
4
32
1
0
7
65
4
32
1
0
7
65
4
32
1
0
8
9
8
#ue4nagoya
イメージ
アタッチメントの追加 身体構造の拡張
#ue4nagoya
共有可能パターン③
• ボーン階層が、共有元のボーン階層 - α
• ただし、間にあるボーンの削除はNG
7
65
4
32
1
0
7
5
4
3
1
0
7
65
4
32 0
#ue4nagoya
イメージ
不要なボーンの削除
#ue4nagoya
共有 OK / NG の基準
比較する2つのボーン階層の内のどちらかが
相手側のボーン階層と同一のものを持っているか否か
7
65
4
32
1
0
7
65
4
32
1
0
8
9
#ue4nagoya
共有 OK / NG の基準
比較する2つのボーン階層の内のどちらかが
相手側のボーン階層と同一のものを持っているか否か
7
65
4
32
1
0
7
65
4
32
1
0
8
9
7
65
4
32
1
0
#ue4nagoya
共有 OK / NG の基準
比較する2つのボーン階層の内のどちらかが
相手側のボーン階層と同一のものを持っているか否か
7
65
4
32
1
0
7
65
4
32
1
0
8
9
7
65
4
32
1
0
7
65
4
32
1
0
7
65
4
32 0
説明のためボーンの位置を同じにしていますが
位置は一致していなくても問題ありません
あくまで、階層構造の比較です
#ue4nagoya
ルールを満たさなかった場合
エラーメッセージが表示され
Skeletonの再生成を促される
#ue4nagoya
これらの挙動・ルールを理解した上で
エンジニアとアーティストさんが
ボーン階層のルールを相談すること!
#ue4nagoya
Skeletonの共有後の管理・調整について
時間がないので…
UNREAL FEST EAST 2017における
バイキングさんの講演内容をご確認ください!
「バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~」
SlideShare YouTube
#ue4nagoya
バイキングさんの講演で
触れてなかった部分について
#ue4nagoya
ツリーに表示するボーンのフィルタリング
Skeletonが管理するボーン階層の数が増えると
ツリーに表示されるボーン数が膨大に…
#ue4nagoya
ツリーに表示するボーンのフィルタリング
Show Mesh Bones 設定を活用!
作業対象のSkeletal Meshが持つ
ボーン階層と一致するボーンだけ
ツリーに表示するように!
#ue4nagoya
どこまで1つのSkeletonに含めるか?
2足、4足、多脚など、用途・挙動が異なるボーン階層を
1つのSkeletonで管理すべきなのか?
• 全部入りSkeletonにすべきか否か?
#ue4nagoya
全部入りSkeletonのメリット / デメリット
メリット
• Anim BPで実装したロジックを共有可能
デメリット
• アニメーションを流用可能だが、対象が限定される
• 2足歩行アニメーションをクモのような多脚キャラで使う?
• リターゲットの調整コストや
ボーン階層変更時の対応コストの問題
• 詳細はバイキングさんの講演にて
#ue4nagoya
カテゴリ毎にSkeletonを用意する手
用途・挙動に応じたカテゴリを決定し、
カテゴリ毎にSkeletonを用意
• 2足用Skeleton, 4足用Skeleton, …
#ue4nagoya
カテゴリ別Skeletonのメリット / デメリット
メリット
• カテゴリ内なら、アニメーション・ロジックの共有が可能
• 全部入りSkeletonのデメリットを削減
デメリット
• カテゴリ間でロジックの共有ができない
• 場合によっては、ほぼ同じロジックをカテゴリの数だけ実装することに
( Skeletonに依存しない自作AnimGraph・ノードをC++で作るという手も…)
#ue4nagoya
プロジェクトの仕様によって
最適解は変わってきます!
十分に検討・検証した上で
どういう形で進めるか決めましょう!
#ue4nagoya
アニメーションの共有関係で
少し余談
#ue4nagoya
Master Pose
vs
Copy Pose From Mesh
#ue4nagoya
Master Pose / Copy Pose From Mesh
指定のSkeletal Mesh Component から ポーズをコピー可能
• Anim BPによる処理結果を流用可能
#ue4nagoya
ユースケース:カスタマイズ可能なキャラ
カスタマイズ可能な箇所毎にSkeletal Mesh Componentを用意
• Skeletal Meshの部分的な差し替えが可能に
#ue4nagoya
モーションのコピーが必要な理由
各Skeletal Mesh Componentのアニメーション結果を
一致させる必要がある
• 全く同じ内容のアニメーション更新処理を
Componentの数だけ実行するのは無駄
× 3
#ue4nagoya
モーションのコピーが必要な理由
全く同じ結果になるのなら
1つのアニメーション更新処理結果を
コピーした方が無駄な処理を省ける!
コピー
#ue4nagoya
Master Poseのメリット / デメリット
メリット
• 現状最も負荷が低い
• ポーズコピー用のAnim BPが不要
デメリット
• コピー後の追加制御が不可能
• NG:一部だけコピー元から変えたい
コピー後に物理適用したい
• コピー元のボーン階層と一致しない部分は
コピーが行われず破綻する
#ue4nagoya
Copy Pose From Meshのメリット / デメリット
メリット
• コピー後の追加制御が不可能
• 制限:コピー元が物理を使っている場合、コピー先では物理が使えない
• 別Skeletonであってもコピーが可能
• コピー元のボーン階層と一致しない部分には
リファレンスポーズが適用 ( Master Poseと比べると、破綻はしづらい)
デメリット
• Master Poseに比べると負荷が高い
• ポーズコピー用のAnim BPが必要
#ue4nagoya
Master PoseとCopy Poseの使い分け
Master Poseのデメリットが問題にならない場合は
Master Poseの利用を強く推奨
• 「コピー後の追加制御が不要」 かつ 「同じSkeletonを使用」
問題はそれ以外のケースでどうするか?
#ue4nagoya
Copy Poseを使うか使わないか
ベースとなるSkeletal Mesh Componentの
Anim BPにおける処理結果が必要なのかどうか?
• 不要なら、別Skeletal MeshをベースにAttachする手も
例:
ベースのジャンプ力に応じて
羽の動きを変えたい
#ue4nagoya
Copy Poseを使うか使わないか
リリース後もコンテンツを追加する運営型の場合は、
今後を見据えてCopy Poseを採用するという可能性も
• 処理のオーバーヘッドよりも、
追加コンテンツの幅を優先する形
• リリース後の共有Skeletonの変更は
対応コストが心配
#ue4nagoya
微妙に長かった余談、おわり
#ue4nagoya
ここまでのまとめ
アニメーション・Anim BPによるロジックを
共有・流用できるようになりました!
• Skeletonの共有, Master Pose, Copy Pose From Mesh
• 同内容のアニメーションアセットの乱立・管理を回避
#ue4nagoya
共有することで発生する問題
1つのAnim BPが複数のSkeletal Meshで使用されるため、
設計に注意しないと、簡単に肥大化してしまう…
• キャラクタ毎の特殊対応
• ロジックの汎用化への対応
#ue4nagoya
本日のお品書き
• Anim BPって?
• Anim BPの運用でよく問題になること
• アニメーションとロジックの共有について
• Anim BPの肥大化の回避について
#ue4nagoya
肥大化を回避する上での課題
• スパゲッティ State Machineの回避
• 汎用性はある程度維持しつつ、
キャラクタ毎の特殊対応を実現
#ue4nagoya
スパゲッティ State Machineを回避するには
1つのState Machineで
全てをカバーしようとしない!
#ue4nagoya
回避するために検討すべき手法
• Slot機能の利用
• アニメーション系アセットピンの公開・変数化
• State Machineの分割
• Anim BPの分割
#ue4nagoya
Slot機能の利用
#ue4nagoya
イベントタイプのモーションの場合
攻撃・ダメージ・死亡などのモーションを
State Machineで管理するのはとても大変…
• どんな状態からでも遷移可能、という仕様の場合が多い
#ue4nagoya
Stateの数が増えれば増えるほど
追加・管理コストが大変なことに…
#ue4nagoya
AnimGraphのSlotノードを使おう!
• 普段はSourceに接続された内容をそのまま出力
• Slot付きのアニメーションが呼ばれた場合は
そのアニメーションを出力
• Sourceの内容は無視
#ue4nagoya
Slot付きのアニメーションの呼び方
• Animation Montage
• Play Slot Animation (as Dynamic Montage)
• シーケンサのAnimationトラック
• 右クリックメニューから設定
#ue4nagoya
レイヤーアニメーションのチュートリアル
体の一部にのみ、Slot付きアニメーションを適用・ブレンド
#ue4nagoya
アニメーション系アセットピンの
公開・変数化
#ue4nagoya
AnimGraphの一部ノードは
アニメーションアセットの指定を公開可能
#ue4nagoya
どういう時に便利なの?
State Machineによる遷移条件はそのままで
再生されるアニメーションだけ変えたい時
• この方法を知らないと、全く同じ内容のState Machineが増えてしまう
同じwalkステートでも
状態によって内容を変更
#ue4nagoya
State Machineの分割
#ue4nagoya
1つのState Machine内で組むべきなのか?
とあるState Machineの例
立っている状態と
しゃがんでいる状態が混在
• 今後拡張していく際
作業コストが膨れ上がらないか?
#ue4nagoya
大きなカテゴリで分割するという手
State Machineを分割することで
管理コストや挙動変更時の作業コストを削減
• 別State Machineへの移行時は
Blend ノード や
Slot付きアニメーションを再生
#ue4nagoya
Anim BPの分割
#ue4nagoya
Sub Anim Instance
別のAnim BPにおけるAnimGraph, EventGraphの処理を実行
• 同じSkeletonを使用しているという条件あり
#ue4nagoya
Sub Anim Instanceのメリット
• 実装したものを再利用可能に
• コンポーネント的な管理が可能に
• 別アセットになるので、同時並行作業が可能に
#ue4nagoya
スケルトンの共有を使っている場合は
Sub Anim Instanceのメリットは
とても効果的に働きます!
積極的に使っていきましょう!
#ue4nagoya
肥大化を回避する上での課題
• スパゲッティ State Machineの回避
• 汎用性はある程度維持しつつ、
キャラクタ毎の特殊対応を実現
#ue4nagoya
よくあるユースケース
• Anim BPで実装した内容を流用しつつ、
再生するアニメーションを変えたい ・ 処理を追加したい
• 流用元Anim BPの変更は自動的に反映されて欲しい
• ほぼ同内容のAnim BPが
完全別アセットとして増えるのを防止したい
#ue4nagoya
AnimMontage + Slotによる差別化
キャラクタ毎に実行するSlot付きアニメーションを
変えることで、Anim BPに手を加えずにキャラ間の差を出す方法
#ue4nagoya
Anim BPのオーバーライド
• Anim Graphで指定したアニメーションを別アセットに変更可能
• Event Graphへの処理追加が可能
・ ・ ・
#ue4nagoya
#ue4nagoya
Anim BPのオーバーライドの注意点
アニメーションアセットを変数化した場合は
オーバーライド候補に挙がりません
• Class Defaultから変数の初期値を変えましょう!
#ue4nagoya
Post Process Anim BP
Skeletal Mesh Componentに設定した
Anim BP( AnimInstance ) の処理が完了した後に呼ばれるAnim BP
#ue4nagoya
Post Process Anim BPの用途
基本的な挙動は汎用的なAnim BPで制御しつつ
キャラ毎に異なる調整が必要になる処理を行う
• IK, 物理, ボーンの直接的な制御
#ue4nagoya
4.19 ニュース!
• Post Process Anim BPを使用するか否かを
• Skeletal Mesh Component単位で出来るようになります!
#ue4nagoya
本日のまとめ
Anim BP ・アニメーション系アセットの運用に
注意しないと、様々な問題が発生します
• リソースの管理コストの増加
• 各実装の追加・変更コストの増加
#ue4nagoya
本日のまとめ
• Skeletonを共有することで
アニメーション・ロジックの共有が可能に
• Skeletonを共有するためには
幾つかの条件を満たす必要がある
#ue4nagoya
本日のまとめ
• 様々な機能・テクニックを使うことで
Anim BPの肥大化を回避することが可能
• プロジェクトの規模・仕様・ワークフローによって
最適解は変わるので、量産前に必ず検証を!
#ue4nagoya
Paragonにおける
アニメーション管理・制御の講演
• Bringing a Hero from Paragon to Life with UE4
• https://archives.nucl.ai/recording/bringing-a-hero-from-paragon-to-life-with-
ue4/
#ue4nagoya
ご清聴
ありがとうございました!
本講演に関する質問はこちらからどうぞ!
E-mail : kaz.okada@epicgames.com
Twitter : @pafuhana1213

猫でも分かる UE4のAnimation Blueprintの運用について