Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

17,109 views

Published on

訂正:67, 69ページ目 MasterPostComponentを使う場合、厳密にはコピー元・先のスケルトンが同一でなくても、「ボーン名が同じ」ならTransformがコピーされます。つまり、headボーンを持つ体用スケルトンのアニメーション結果を、headボーンだけを持つ頭のみメッシュ・スケルトンに適用することが可能です。(エンジニア向け USkinnedMeshComponent::UpdateMasterBoneMap()をご確認ください)

訂正:68ページ目「コピー後の追加制御が不可能」→ 「コピー後の追加制御が可能」

2018年2月26日に行われた「Unreal Engine Meetup Nagoya #6 in 名古屋城」で登壇した際に使用した資料です。
https://www.meetup.com/ja-JP/UnrealNagoya/events/245020665/

Published in: Engineering
  • Be the first to comment

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

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

×