783.1K Views
November 16, 22
スライド概要
本スライドににはGif 動画を大量に使用しているため、パワポ版 での確認を強く推奨いたします
https://epicgames.ent.box.com/file/1066094333959?s=4kxbg3otcpm99roc29i1sxuwz3xbzpi6
【UE5】UE5のアニメーションに関する新機能をサクッと試せるサンプルを公開しました!
https://pafuhana1213.hatenablog.com/entry/2022/12/13/000758
講演動画
https://www.youtube.com/watch?v=FzTqrUlXg50
【講演内容】
Unreal Engine 5ではNanite, Lumen, World Partitionなど注目を集める機能が追加されましたが、実はアニメーションに関しても強力な機能・改善が多数追加されているんです!
本講演ではそれらの基本的な知識や、それらを使うことでアニメーションの品質・制作効率、そしてワークフローがどのように変わるのかについてご紹介する予定です。UEのアニメーション機能に関する基本的な知識があることを前提としているため難易度を中辛としていますが、ご紹介する機能は便利だけでなく簡単に使えるものばかりですので是非ご参加いただけますと幸いです。
http://cedec-kyushu.jp/2022/session/28.html
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE5.0, 5.1 における アニメーションの新機能について 猫でも分かる CEDEC+KYUSHU 2022 Epic Games Japan Kazuya Okada
本スライドにには 講演当時は隠していたものを含みます また、Gif動画を大量に使用しているため、 講演動画またはパワポ版での確認を 強く推奨いたします
自己紹介 Epic Games Japan 岡田 和也 Twitter:おかず ( @pafuhana1213 ) UEを使っている企業様への技術サポートや 勉強会などでの講演が主なお仕事 最近、ジャンプ+の「長谷川智広の帰って きたデジタル作画奮闘記~アンリアルエン ジン編~」という作品に数コマ出ました ©週刊少年ジャンプ編集部\集英社
はじめに UE5関連の話題となると 大抵は以下の3つですが… Nanite: 膨大な数のメッシュを配置可能 Lumen: リアルタイムな グローバルイルミネーション World Partition: オープンワールドなど 広大な環境を実現する機能
アニメーション もすごいんだぞ!!!
近年のゲーム開発における課題 グラフィックが高品質になればなるほど アニメーションの粗・違和感が 目立ちやすくなる キャラクタの移動量・速度と アニメーションが一致していない際に 足滑りなど 発生する
アニメーションの違和感への対策と問題 様々な場面・条件に対応するために 大量のアニメーションを用意しよう! ▶ 製作コスト・環境の問題 アニメーションが持つ移動・回転量によって キャラクタの動きを完全に制御しよう! ▶ ゲームプレイ側に支障が出てくる (調整しづらい、手触りが悪い など) プログラミングで…いい感じに…調整して! ▶ たいへん
というなかで、求められてきた機能 違和感のない・少ない アニメーションを 実現する機能 これまで以上の 大規模開発に耐えうる アニメーションシステム アセット製作コストの削減 ゲームプレイ側との両立 作業効率・柔軟性・拡張性 高パフォーマンス
Unreal Engine 5 で実現すること 複雑なアニメーション技術 を誰でも使える形で提供 社内外からの フィードバックを元に システムを大改良 社内タイトルで培われた手法 業界最先端の技術 プロシージャルアニメーション Animation BPの柔軟・拡張性の強化 さらなるマルチスレッド化 痒かったところに手を届かせる!
本講演・資料の注意点 その1 Unreal Engine(UE)のアニメーション機能の基礎を ある程度知ってることを前提としています 想定している対象層・者 ● エンジン標準のテンプレートレベルの Animation BP(Anim BP)なら理解・実装できる ● ルートモーションを伴う Anim Montageを使ったことがある ● アニメーション機能に直接・間接的に関わる プログラマとアーティスト
基本的な用語やAnim BPについて学びたい方へ 公式ドキュメント ● スケルタルメッシュのアニメーション システム Dev Community ● Unreal Engine 5でのはじめてのゲーム制作 ● サードパーソン キャラクタをゼロから作ってみよう Youtube ● 猫でも分かる UE4を使ったゲーム開発 超初級編 #5 Animation ブループリントの使い方を学ぼう! ● UE4版の内容のため、 最新のものとは一部異なる可能性があります コミュニティ ● UE5攻略 - α版 / Animation
本講演・資料の注意点 その2 紹介したい機能が大量にあり時間が全く足りないので 各機能の詳細(具体的な実装手順、各パラメータの意味など)は割愛します 機能紹介・解説の最後に 参考リンクをまとめていますので そちらをご確認ください もっと詳しく解説して!などありましたら @pafuhana1213 宛にお願いします! 会場の展示ブース①にもいますので是非
機能のステータスの違いに関して 実制作への 導入 動作保証 後方互換性 破壊的変更 オススメ しません なし なし あり ベータ 慎重に 自己責任で なし あり なし Production Ready ぜひ! あり あり なし Experimental 実験的 Beta 正式リリース
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
Locomotion & Interactions
Locomotion & Interactions Paragon における技術を誰でも使える形で提供 より高品質なアニメーションを実現するだけでなく 少ないデータで様々な挙動を実現することで作業コストを削減 当時の技術講演
Locomotion Interactions
Motion Warping
UE4では… ルートボーンの移動・回転を伴うアニメーション(Root Motion)の 補正ができなかったため、異なる環境・条件での使い回しが大変でした…
無限に増えるアニメーションアセット ギミックの高さ 長さ 角度 キャラの種類 低 短 -15 度 男性 中 中 0度 女性 高 長 +15 度 モンスター …
無理やり補正するのも可能でしたが…大変! C++でアニメーションの移動・回転情報を取得して… それと対象オブジェクトとの位置関係を元にどのように補正するか計算して… その他にも色々…
Motion Warping 対象オブジェクトとの位置・向きに応じて アニメーションの移動・回転量を補正する機能 レベル上のオブジェクトに干渉するような動きを かんたんに実装できるように!
アニメーションの移動・回転量を補正し、様々な条件に対応
セットアップ・実装はかんたん! 1. Motion Warpingによる補正を行う区間を設定 2. Motion Warpingによる補正のゴール位置・向きを設定 ① ② OR
City Sampleでの使用例 Vehicle_HeroCar_Enter_C_Montage
5.1での追加・変更点 ① 移動処理の 補正形式が選択可能に 従来の線形補間では 違和感があった場面で 有効!
5.1での追加・変更点 ② ルートボーンの移動情報が含まれていないアニメーションでも Motion Warpingを適用できるオプションを追加 Add translation Easing FuncをCustomに設定し Float Curveで移動処理を制御 1.0 0.0 1.0
ステータス・参考資料 ステータス ● 5.0:Experimental ● 5.1:Beta 公式ドキュメント ● モーションワープ Youtube ● Motion Warping and Full-Body IK | Inside Unreal ● Motion Warpingでパルクールを実装する【逆引きUE】 スライド・記事 ● Unreal Engine 5 早期アクセス Animation Update (p67から) ● [UE5] MotionWarping Shallow Dive
Locomotion Interactions
Pose Warping - Locomotion –
Pose Warping キャラクタの移動・回転速度や地面の情報に応じて 関連するボーンの動きを補正する機能 少ないアニメーションデータから幅広い表現を実現
Stride Warping - Locomotion / Pose Warping -
これまでの課題 複数のアニメーションをブレンドした結果が 違和感のある動き・ポーズになることがあります
極端な例ですが、歩幅と移動速度が合わない場合 歩き始めや移動速度が一定以上になると 足滑りが発生して、違和感のある動きになってしまう…
違和感を軽減するのは可能ですが…大変! アニメーションを 大量に用意…? ブレンド率・移動速度を 細かく調整…? それらの対応を 大量のキャラ毎に…?
Stride Warping 移動速度に応じて、歩幅を調整することで 少ないアニメーションデータで、足滑りなどの違和感を軽減 Walkモーション単品に補正をかけた様子
セットアップ・実装はかんたん! セットアップ 足に関連する IK・FKボーンを設定 実行中 キャラクタの 現在の移動速度を設定
注意点! 複数のアニメーションをブレンドした際の 違和感を軽減するのが主な用途 Walk モーションを Run モーションとして代用するようなものではありません!
Stride Warping の 担当範囲 後述の Distance Matching が担当
記事「Lyra アニメーションを UE5 ゲームに適応する方法について」より 再生レート / ストライド ワープの調整に対する 業界標準は、最大で 15 ~ 20% の増減幅です これを超える値にするとビジュアル品質が 大きく低下することになるため、 足をスライドさせる方が 良いとされる場合が多いでしょう
荒ぶりを抑えるTips Stride Scale Modifier Stride Warpingによる補正量を 制限・補間するオプション 補正が荒ぶるときは 有効・調整するのがオススメ! (特に、Clamp Max)
Orientation Warping - Locomotion / Pose Warping -
これまでの課題 様々な移動方法に対応するために 各方向ごとにアニメーションを用意することに…
Orientation Warping 移動方向に応じて腰・背骨を調整することで Blendspaceを用意しなくても、移動方向とアニメーションの向きを一致
セットアップ・実装はかんたん! セットアップ 腰・足に関連する IK・FKボーンを設定 実行中 キャラクタの 現在の移動速度・方向を設定
ぷちTips Orienation Warpingは 待機、動き始め、ストップなどあまり効果が出ない場面では alpha値を調整して動作しないようにすると良いです Analyzing Lyra's Animation | Inside Unreal 1:07:46 より
Slope Warping - Locomotion / Pose Warping -
Slope Warping 地面の傾きに応じて腰・足(IK Bone)を調整。IK Boneを元に補正を行う Leg IKノードと併用することで、Foot IKをより手軽に実現 補正前 Slope Warping Slope Warping & LegIK
セットアップ・実装はかんたん! セットアップ 腰・足に関連する IK・FKボーンを設定 Slope Warping Leg IK
注意点 傾き情報のみを利用するため、階段や凸凹がある地面との相性は悪い そういった環境に対応したい場合は 地面に対してレイを飛ばす手法を使う必要があります UE5マネキン標準のFoot IK
ABP_Manny / CR_Mannequin_BasicFootIK 1. 左右の足でSphere Traceを実行し、 床の高さを取得 2. 1の結果に対して 補間処理を実行 3. 足のIKボーンと 腰のボーンの Z値を補正 4. 足と腰に対して FullBodyIKを実行
使い分けの例(あくまで例で正解ではない) 移動中 or カメラから遠い: ある程度ごまかせるので、 Slope Warping(低コスト) 停止中 or カメラから近い: 接地感が目立つので、 UE5マネキン版Foot IK(高コスト) 補正なし (UE5標準 + Stopアニメーション)
やってみた 補正なし 補正あり
Slope Warpingの効果 Slope Warping:無効 Slope Warping:有効
どんな実装をしたのか 雑調整… 現在の移動速度を元に、補正処理を切り替え Slope Warping用(左)と Sphere Trace 用(右)の コリジョンを別々に用意
5.0ではここで話が終わりましたが… 5.1では Foot Placementノードが FootIK機能に追加されました!
Foot Placementノード UE5マネキン版Foot IKと同様の機能を 1つのAnimGraphノードで提供! ● レイを使った地面の検出 ● 腰のFKボーンと、足のIKボーンの制御 Control Rigのセットアップが不要になっただけでなく 強力な新機能 と 豊富な調整パラメータを提供!
Foot Placement の Lock機能 足の位置・向きを 固定する機能 キャラの向き変更時の 足滑りを防止! 足首や踵のみ固定 といった設定も可能 補正なし (左足が滑る) 補正あり (回転中は左足が固定)
セットアップ・実装はかんたん! セットアップ ● 腰・足に関連する IK・FKボーンを設定 オプション ● Lock, Trace設定など
注意点 5.1時点では Experimental 機能なので注意! 左右の足毎にレイを飛ばしている ため、 適応するキャラ数によっては処理負荷が気になる可能性も ● AnimNodeのLOD機能を使って遠距離では無効化したり、 Slope Warpingと切り替えたりなどの戦略を検討 ● Foot Placement は Lock 機能だけ使って FootIK は Slope Warpingのみを使うというのもあり
Pose Warpingを使う際の注意点 Root Motion有効が前提 ● ルートボーンの移動・回転量と 対象ボーンの情報を元に制御するため ● キャラ自体のTransform制御はしないため、 Montageの利用は必須ではない 一部の機能は CharacterMovementComponentが必要 ● Slope Warping、Foot Placementで利用 ● 完全自作でMovementComponentを 作っている方は注意
各機能のまとめ Stride Warping: 移動速度に応じて、 歩幅を補正 Orientation Warping: 移動方向に応じて、 腰と背骨を補正 Slope Warping / Foot Placement: 床の情報に応じて、 腰と足(IKボーン)を補正 どちらもExperimental
ステータス・参考資料 ステータス ● 5.0:Beta ● 5.1:Production Ready (一部機能はExperimental) ● 要Animation Warpingプラグイン:デフォルト無効 公式ドキュメント ● ポーズワープ Youtube ● Analyzing Lyra's Animation | Inside Unreal (1:07:46 ~) ● 【UE5マスター講座】#4 Stride Warping(歩幅の調整)と Sync Groupを使ってLocomotionの調整を行う ● 【UE5マスター講座】#6 移動の方向に応じたアニメーションの実装方法 (横歩きや後ろ歩きなど)
Locomotion Interactions
Distance Matching - Locomotion –
これまでの課題 キャラクタ(操作)優先: 足滑りが発生 アニメーション優先: キャラクタの 操作感が悪くなる 両方を満たすためには 実装・アセット共に 丁寧に調整する必要あり
Distance Matching アニメーションの再生速度を調整して アニメーションがキャラクタ 側に合わせることで足滑りを軽減する機能
Distance Matchingの実例 その② キャラクターが近づいてくる地面に向かって脚を伸ばすように 着地時の足滑りも軽減
Distance Matchingの実例 その②
Distance Matchingの仕組み 1/2 キャラクタの移動情報 と アニメーションに埋め込んだ移動情報を元に アニメーションの再生速度を動的に調整
移動情報(カーブ)の埋め込み方法 専用のAnimation Modifierを実行するだけでOK! (事前にRootMotionを有効にする必要あり)
移動情報(カーブ)の埋め込み方法 DistanceCurveModifierを実行すると、 ルートボーンの移動量がアニメーションカーブとして埋め込まれる
Distance Matchingの仕組み 2/2 キャラクタの移動情報 と アニメーションに埋め込んだ移動情報を元に アニメーションの再生速度を動的に調整
実装方法について 専用のAnimNodeが提供されているわけではなく 後述の Sequence Evaluator と Anim Node 関数を活用
Distance Matchingの具体的な導入手順 少し手順が複雑なので、 下記の記事にまとめました!!! 間に合いませんでした… 今年中には…書きます…申し訳ありません… Qiita : EGJ-Kaz_Okada 急ぎの方はLyraでの実装をご確認ください!
ステータス・参考資料 ステータス ● 5.0:Production Ready ● 要Animation Locomon Library プラグイン:デフォルト無効 公式ドキュメント ● 距離マッチング Youtube ● Analyzing Lyra's Animation | Inside Unreal (1:17:02~) ● 【UE5マスター講座】#3 Distance Matching(距離マッチング)を使う
ここまでのまとめ Locomotion Interactions
ここまでのまとめ Pose Warping Distance Matching Motion Warping キャラクタの動きに アニメーションを合わせる機能 アニメーションを補正し キャラクタを 指定の位置・向きに動かす機能 Locomotion Interactions
ここまでのまとめ これまでは違和感が(少)ない挙動を実現するには 大量のアセットや複雑な実装作業が必要でした UE5の新機能によってアニメーションを補正することで 少ないアニメーションデータから 高品質な挙動を実現可能に。しかも、誰でもかんたんに! 機能の大半は Root Motionであることを前提 としています 今後アニメーションアセットを作成する際は要注意!
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
Animation Blueprint(Anim BP)の強化 Anim BP に対して様々な新機能・変更が入り UE4時代と比べて、拡張性・柔軟性・再利用性が大幅に向上! ● ● ● ● ● ● ● ● ● Template Animation Blueprints Blendspace Update Blend Mask & Blend Profile Animation Mirroring State Machine Update Thread Safety Property Access Anim Node Functions Sequence Evaluator
Template Animation Blueprints - Runtime Framework -
Template Animation Blueprints EventGraph・AnimGraphの実装のみができる Skeletonに依存しない Anim BP ボーン構成、Skeletonアセットなどが異なっていても Anim BPにおける処理の共通化をかんたんに実現
作り方 Anim BPアセット作成時に表示される ダイアログから Template を選択して生成
セットアップ 通常のAnim BPと同様に、 Anim Graph・Event Graphを構築
セットアップ時の注意点 Skeletonに依存しないため、 アニメーションアセットを直接的に使用することは不可能 Template側ではアニメーション未指定、 またはプロパティと紐づけたSequence Playerノードを配置
ノードのプロパティをPinで公開する方法
プロパティを紐づける(バインドする)方法
子Anim BP へ Template AnimBPで実装した内容を引き継ぐ子Anim BPを作成 作成時にどのSkeletonと紐づけるかを指定
子Anim BP のセットアップ 子Anim BP側で実際に再生するアニメーションを設定 Template Anim BP側で用意したプロパティか、Asset Override機能を利用 Template Anim BP 子 Anim BP
どっちがおすすめ? Asset Override: Skeletonでフィルタしてくれるので アニメーションアセットの選択が楽に。ヒューマンエラーも回避 プロパティ: 全アニメーションアセットが対象になるため、アセットの選択は大変。 対応していないSkeletonのものを選ぶなどの ヒューマンエラーが起きる可能性も… その代わり、実装の融通が効きます! 遅延ロード、丁寧なメモリ管理、 BP・C++から差し替えをしたいなどの場合はこちら
子Anim BPのセットアップにおける注意点 Template Anim BPを継承した子Anim BPでは Anim Graphを編集することはできません
子Anim BP側でAnim Graphの実装を変更したい場合 Animation Layer Interface ( Linked Anim Layer )を使うことで 子Anim BP(AnimGraph)の一部 を 別Anim BPで実装した処理に差し替え可能
特定のアニメーションを再生するだけの Anim Graphを State Machineを使った処理に差し替え 子 Anim BP (差し替え後) Template Anim BP 子 Anim BP (差し替え前) State Machineを使った 処理の実装は別AnimBP内で
参考:Lyraにおける Animation Layer 活用例 継 承 CharacterのBPに設定する Anim BPの基底クラス 各Stateの実装は空 各 State 実装用 Anim BPの基底クラス プロパティの中身は空 未装備 ピストル 装備中 プロパティの 設定のみを担当
ステータス・参考資料 ステータス ● 5.0:Production Ready 公式ドキュメント ● Animation Blueprint Linking Youtube ● Analyzing Lyra's Animation | Inside Unreal (0:58:40~)
Blendspace Update - Runtime Framework -
Blendspace Graph Blendspace アセットを作成しなくても 新たに追加された Blendspace Graph ノード 単体で実装可能になりました! 従来のものは、Blendspace Player
Blendspace Graphの各キー は AnimGraph に アニメーション 単体だけでなく、 各AnimNodeで 制御した結果を ブレンド可能に! State Machineの 各State同士で Blendするイメージ
既存のBlendspaceアセットから変換も可能
Blendspace Analysis (分析) 複数のアセットを 自動的に配置してくれる機能 単純に名前からではなく ボーンの動きなどの解析結果を 元に自動配置 Blendspaceアセット専用機能で Blendspace Graphでは使用不可
分析用パラメータはエディタ上で設定可能 ● Blendspaceにおける X・Y軸の役割 ● 解析に使うボーン ● キャラの前・上方の軸 など 変更後に更新ボタン 即座に再解析・配置 を押すと
分析用パラメータ- 軸関数 軸関数の種類を選択 分析プロパティ ( 選択した軸関数によって変化 )
Blendspace の 補間方式 が 選択可能に
ぷちTips 補間中に 中間の状態をスキップするためのプロパティも 移動方向に急激な変化があった際の 違和感などを軽減
ステータス・参考資料 ステータス ● 5.0:Production Ready 公式ドキュメント ● ブレンドスペース ● アニメーション ブループリントでの ブレンド スペース ● ブレンドスペース分析 機能別サンプル ● Level ● AnimBP :Animation_Basics :2-6_ABP_BlendspaceGraph
Blend Mask & Blend Profile - Runtime Framework -
Blend Mask 各ボーンにおけるブレンド「率」のプリセット設定 部分的にブレンド処理をする際に設定を使い回せるように
Blend Maskの使い方・作り方 Skeleton側でBlendMaskを追加し 各ボーン毎のBlend率を設定 Layered Blend Per Bone ノード の Blend Mode を BlendMask に変更 ( UE4ではボーンを手動で設定する形式 )
Blend Profile 各ボーンにおけるブレンド「速度」のプリセット設定 一部ボーンを速く・遅くブレンドすることで、より自然なアニメーションを実現 デフォルト設定 両脚を高速にブレンド
Blend Profile の使い方・作り方 Blend Poseノード Blend Profileの同じフロー 値が小さいほど高速にブレンド ステート マシンの遷移 Anim Montage
ステータス・参考資料 ステータス ● 5.0:Production Ready ● Blend Maskに関する不具合の修正が 5.1で入っています UE-162984 公式ドキュメント ● ブレンド マスクとブレンド プロファイル ● Blend ノード ● 仮想ボーン 機能別サンプル ● Level ● AnimBP :Animation_Basics :2-2_ABP_BlendProfiles
Animation Mirroring - Runtime Framework -
Animation Mirroring アニメーションのミラー(反転)再生をするための機能 Anim Curve, Anim Notify, Sync Marker にも対応
Mirror Data Table ミラー再生するための 骨のマッピング情報を管理 アセット作成時に 指定のSkeletonアセットから 自動的にデータを構築 ● ● ● ● Bone Anim Notify Curve Sync Marker ● 不具合(UE-168448)により 手動追加のみ。5.2で修正
Mirror Data Table 自動マッピングのルールは Mirror Data Tableアセット作成時に編集可能
Mirror ノード Anim Graphに配置したMirrorノードに 作成した Mirror Data Tableを指定すればOK Blend Timeを利用したい場合は Intertializationノードとの併用が必須
エディタでのプレビュー、シーケンサでの利用 Animationトラックにおける Section のプロパティ
ステータス・参考資料 ステータス ● 5.0:Production Ready 公式ドキュメント ● アニメーションのミラーリング 機能別サンプル ● Level ● AnimBP :Animation_Basics :1-2_ABP_Mirroring
State Machine Update - Runtime Framework -
ステートエイリアス - State Machine Update -
ステートエイリアス 特定 または 全ての State から遷移可能な ショートカットタイプのノード
ステートエイリアスのメリット 直接繋がなくても遷移関係を構築できるため 遷移パターンが多くても、グラフをシンプルにすることが可能
ステートエイリアスの例
ステートエイリアスの例 JUMP!
ステートエイリアスの例 落下中なら Priority 2 落下中 & 上に移動中なら Priority 1
ステートエイリアスの働き・設定 「遷移のルート・判定」 を 特定 または 全ての State に追加可能
Conduits(コンジット) Entry States - State Machine Update -
Conduits Entry States Entry に Conduit を接続可能に =ステートマシンの入り口で 複数の分岐(判定)が可能に State Machineの Allow Conduit Entry States を有効に (デフォルト無効)
Event-based Transitions - State Machine Update -
Event-based Transitions イベントを発行するだけでState間の遷移を制御できるように 遷移判定のために用意していたプロパティ・処理が不要に! Twitterにアップした機能紹介動画
State Machine Function Library - State Machine Update -
State Machine Function Library BP / C++から StateMachineを 制御可能に 後述の AnimNode関数にて 利用可能 通常の遷移機能では 困難・面倒な 制御をしたい場合に
ステータス・参考資料 各機能は全てProduction Ready! 5.0: 5.1: ● ステートエイリアス ● Conduits Entry States ● State machine function library (5.1で関数追加) ● Event-based Transitions 公式ドキュメント ● ステートマシン Youtube ● 【UE5ゲーム制作講座】 新しくなったThidPersonTemplateのAnimationBPを見てみよう!
Thread Safety - Runtime Framework -
Thread Safety Event Graph 上の実装(の大半)がマルチスレッドで処理可能になり 複数のキャラ(Anim BP)を扱う際のパフォーマンスを大幅に改善可能! ゲームスレッド さん1人で 1つずつ処理していたのが… 大量のワーカースレッド さんが 分担して並列処理するように!
計測環境 ※ 説明のため、極端な設定にしています 環境 :UE5.1 Preview 2 、Windows、Standalone キャラ数:50 Anim BP :単純な計算を1000回実行 通常版 VS マルチスレッド版
計測結果 – stat unit - Event Blueprint :88.97ms Update Animation ※ 60fps:約16ms, 30fps:約33ms Blueprint Thread Safe :8.76ms Update Animation
計測結果 – Unreal Insights - ゲームスレッドが AnimBPの処理でパンパンに… 大量のワーカースレッドが 作業を分担!
拡大
すごい! どう使うの!?
Blueprint Thread Safe Update Animation 関数 従来のBlueprint Update Animation イベントのマルチスレッド版 キャラクタの状態(移動速度・向きなど)など頻繁に取得するものに有用
マルチスレッドで実行するための制限 マルチスレッド用の関数内では スレッドセーフ対応のノード・関数のみ使用可能 非対応のものを使おうとすると、コンパイル時にエラー発生 Try Get Pawn Owner Non-thread safe function
スレッドセーフ対応のノード・関数 ● スレッドセーフ対応関数の 右クリックメニューから 使用可能なノード ● UE5新機能の Thread Safeオプションが 有効な関数 ● UE5新機能の Property Accessノード
Property Access - Runtime Framework -
Property Access ノード スレッドセーフ対応のGet関数ノード Anim BP外のGet関数・プロパティも利用可能 例: AnimBP を使用している Pawn が持つ MovementComponent の Velocity を Get
従来の処理を置き換えるとこんな感じ
Property Access ノード 自作関数も対象に含めることも可能 Pure設定が有効 かつ 出力ピン名が “ReturnValue” であることが必須 ( “Return Value” は NG )
AnimNodeのピンへのバインド AnimGraphにおけるノードのプロパティに対して 直接使用することも可能。従来よりも 1.2-3x 倍高速に!(担当者からの情報)
Anim Node 関数 - Runtime Framework -
Anim Node 関数 既存のAnim Nodeに関数を紐づけることで Anim Graph上でも自作の関数を実行できるように!
Anim Node 関数のつかいかた Anim Nodeの詳細パネルから 新規・既存の関数を紐づける(Binding)するだけでOK!
全てのAnim Nodeに対して紐づけ可能 AnimGraphで配置可能な ほぼ全てのノードに対してAnim Node関数を紐づけ可能! プロパティのGetノードなど がないものは対象外 …
Anim Node 関数のいいところ その1 Anim Nodeと同様にワーカースレッド上で処理可能 ▶ 関数のスレッドセーフ設定を有効にする必要あり 関数の実行タイミングを選択可能(Bindingしたノードに依存) ▶ 更新処理だけでなく、初期化系の処理も実行可能 On Initial Update ● ノードの初回更新時 On Become Relevant ● ノードが実行対象になった時 On Update ● ノードの更新時
Become Relevantの実行タイミング ノードが 実行(評価)対象になった時 Initial Updateとは異なり 複数回呼ばれる可能性あり Log出力のみを入れた関数を Become Relevantに登録した 場合の挙動
全ての処理をワーカースレッドで Anim Node 関数, Property Access, BlueprintThreadsafeUpdateAnimation 関数 により Event Graphを空にし、(ほぼ)全ての処理をワーカースレッドで実行可能! LyraにおけるAnimBPでは、ゲームスレッドで動くEvent Graphの実装は完全に空!
Anim Node 関数のいいところ その2 Anim Nodeに対しても処理を実行することが可能 従来よりも格段に柔軟性のある設計や複雑な制御を実装できるように
ボーン制御系のAnimNodeの アルファ値を制御 ステートマシンのステート制御 他ステートへ 移行中か否かで処理分け Distance Matching
他のAnimNodeを制御することも可能 Anim NodeにTagを設定すると Anim Node Reference ノードを自動生成 AnimBPの様々な箇所で参照を取得し、 そのAnim Nodeに対して制御することが可能に
Sequence Evaluator - Runtime Framework -
Sequence Evaluator AnimNode関数で 制御することを前提としたノード バインディングする関数内で 様々な処理を手動で設定・制御 ● 再生アニメーションの指定 ● アニメーションの 再生時間の更新 ● 他のAnimNodeを制御 など
関数内で全てを設定する必要はなし 一部プロパティの初期値を設定したり ノードのピンに公開可能 初期値を設定しない場合は Dynamic Valueに設定する必要あり
ステータス・参考資料 各機能は全てProduction Ready! 公式ドキュメント ● アニメーション ブループリントでのグラフ作成 ● アニメーション変数を取得する方法 Youtube ● Analyzing Lyra's Animation | Inside Unreal (0:54:03~) ● 【UE5マスター講座】#2 マルチスレッドアニメーションと アニメーションレイヤーを用いたLocomotionの基本の実装 ブログ記事 ● UE5 Property Accessを使ってAnimBPをマルチスレッドに更新しよう
実例を見たいならLyraを見ましょう!(少し大変ですが…) 以下のABP2つにおける 各Anim Node関数の実装・用途が 非常に参考になります ● ABP_Mannequin_Base ● 位置・向き・速度などの ステート遷移用の情報取得など ● ↓と比較するとシンプル ● ABP_ItemAnimLayersBase ● 状況に応じた再生アニメーショ ンの選択やDistance Matching の制御など ● ↑と比較すると複雑
おまけ:Swap Root Bone - Runtime Framework -
Swap Root Bone ルートモーションの移動・回転量を Actor, または Componentに 反映できるようになりました! Animation Modeを Use Custom Modeにする必要あり
ここまでのまとめ Anim BP に対して様々な新機能・変更が入り UE4で よく怒られてた 少し不便だった部分が大幅に改善されました! ● Template Animation Blueprints ● Skeletonが異なっていても Anim BPで組んだ処理を共通化できるように ● BlendSpace Graph & Analysis ● 品質向上、一部セットアップ作業を自動化 ● Blend Mask & Blend Profile ● 設定の共通化、ブレンド品質の向上 ● Animation Mirroring ● ミラーリングを標準でサポート ● State Machine Update ● ステートマシンを外部から制御可能に
ここまでのまとめ Event Graph上で実装していた処理の大半を スレッドセーフ版のUpdate関数や Anim Graphで実装できるように ワーカースレッドで処理を並列実行するため、 複数のキャラを動かすケースで 大幅なパフォーマンス改善が期待できる! ● 扱えるスレッド数が少ない端末では効果が薄い ● キャラ単体の処理が非常に重い場合の 問題は解決できない
ここまでのまとめ Anim Nodeで関数を実行できるようになったことで 従来よりも柔軟な設計や複雑な処理を組むことが可能に Anim BP内・外のプロパティの取得に関しても Property Accessという新しい仕組みが追加 UE4から大きく変わった部分が多く、 プロジェクトにおける Anim BP周辺の 設計・ワークフローを再検討することを強く推奨!
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
AnimBPのデバッグ機能の改善
Pose Watch Manager 特定のAnim Node時点のPoseを可視化できるように どのノードが原因でアニメーションが破綻しているか?などのデバッグに有用
Pose Watch Manager Window→ Pose Watch Manager から 表示や色を切り替え可能 右クリックメニューから フォルダを生成することも 公式ドキュメント ● アニメーション ノードの リファレンス
Rewind Debugger 巻き戻しデバッガ
Rewind Debugger アニメーション と ゲームプレイ向けの新しいデバッグ機能 記録したデータを巻き戻ししながら確認可能 巻き戻し中! 実行・操作しながら録画
使用されたアニメーションを再生・巻き戻しながら確認 5.1からはグラフ形式で表示するようになりました
5.1からは、プロパティ・カーブ・Notifyも見れるように
アニメーションブレンド・AnimGraphの パラメータ確認
アニメーションブレンド・AnimGraphの パラメータ確認
AnimBP(AnimGraph)の巻き戻しデバッグ Rewind Debuggerから 直接Anim BPをOpen / Debug 紐づいた状態でエディタが開き AnimGraph・プロパティの状況を確認可能
BP・AnimBPのプロパティも確認可能!
アニメーションのデバッグだけでなく ゲームプレイやシステム部分など 様々な処理の巻き戻しデバッグが可能! 特定の条件・タイミングでしか 発生しないバグを追う際に非常に便利!
使い方 1/2 ・・・ プラグインを有効にすると 使用可能に 実行中に 録画対象を選択し、 Rewind Debuggerの から録画開始
使い方 2/2 一時停止中のみ 録画中に 指定の 巻き戻しデバッグが可能 プロパティを録画対象に追加 Componentなどは デフォルト非表示なので注意
ステータス・参考資料 ステータス ● 5.0:Beta ● 5.1:Production Ready 公式ドキュメント ● Rewind Debugger Youtube ● Analyzing Lyra's Animation | Inside Unreal (1:26:10 から) ブログ記事 ● UE5 Rewind Debbugerを使ってみよう
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
Position-Based IK Solver UE4版のFBIKから実装を大きく変更することで パフォーマンスが大幅に改善された上に 調整パラメータが減って作業効率が向上しました ベースになった論文 Detailed Rigid Body Simulation with Extended Position Based Dynamics
Position-Based IK Solver Control Rig専用の機能なので、 Control Rigのセットアップが必要 ノードに並ぶ大量の入力ピン・プロパティと格闘する必要もあり…
IK Rig
IK Rig IKの構築・制御に特化した新機能 専用エディタにより、セットアップや 挙動の調整が格段に楽に!
もちろん人型以外も
IK Rig ノード Anim Graph で IK Rig を 利用可能 Expose 設定により、指定のIK Goalを入力ピンに公開
どのIKを使えばいいのか?(あくまで一例) 従来のIK Node: シンプルな制御(TwoBoneIK で十分など) Control Rig: 様々な計算・制御が必要 (レイを飛ばして…など) IK Rig: FBIKを使いたい 複数のキャラで流用したい
IK Retargeter
IK Retargeter IK Rig と専用のエディタを使って 異なるキャラクタ間でアニメーションを共有する機能
FK・IKで制御するので、ボーンの構造が異なっていても流用可能
オフライン・オンライン両対応 エディタ上でのアセット作成だけでなく、 リアルタイム(Runtime)でのアニメーション流用も可能
ランタイム上でのリターゲット Retarget Pose From Mesh ノード 使い方は Copy Pose From Mesh と同じ 5.1 で調整用のパラメータが追加されました
Retarget Pose From Meshの負荷について FBIKをソルバーとして使った場合、 PC環境で1体毎に約0.1ms ( ワーカースレッドで並列動作 ) ある程度であればゲームでも十分利用可能ですが 100体など大量のキャラを動かす際は要注意 IK Retargeterをバリエーション違いの アニメーションを作るための オフラインツールとして使うという選択肢も Analyzing Lyra's Animation (0:48:11~) ハイエンドPC で 計測した際の様子
5.1での変更点 リターゲット元・先の ボーン階層が確認可能に Reference Poseを複数保存・編集できるように (リターゲット元・先の両方共に保存・編集可能)
5.1での変更点 Global Settingsから リターゲット後の歩幅を調整可能に リターゲット精度向上のための Speed Planting機能が追加 (公式ドキュメント)
Compatible Skeleton Skeletonアセットが異なっていても Compatible(互換性)があるから アニメーションの共有はOK!という機能 ≒
使い方は簡単! Skeletonアセット の Window -> Asset Detailes の Compatible Skeletons に Skeletonアセットを設定するだけでOK
ステータス・参考資料 ステータス ● 5.0:Production Ready 公式ドキュメント ● IK リグ 機能別サンプル ● Level:AnimationRetargeting ● BP:BP_RetargetingDifferentCharacters Youtube ● UE5でのアニメーションの流用方法について (スライドはこちら) 記事 ● UE5のアニメーションリターゲット機能を ハンズオン形式で解説 ● IK Rigを使って接地IKを実装してみました
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
Control Rig UE5.0 から Production Readyになりました! なので解説したいですが 既に講演時間に全く余裕がないはず…
ControlRig 学習リンク集 公式ドキュメント ● コントロールリグ ● コントロールリグクイックスタート ● Control Rig リソースリスト DevCommunity (日本語字幕付き) ● コントロールリグの作成と変更 Overview ● Puppeteering: Recording Animations in UE5 コミュニティ ● UE5攻略 -α版- / アニメーション / ControlRig
UE5.1 での最新情報に関する講演 Animating in Unreal Engine 5.1 | Unreal Fest 2022
本日のお品書き 1. Locomotion & Interactions アニメーション品質向上・制作コスト削減 1. Runtime Framework Animation BP・デバッグ機能の強化 2. IK Rig & Retargeting フルボディIK、アニメーション流用 3. Control Rig プロシージャルアニメーション、エンジン上でのアニメーション制作 4. 現在開発中の新機能について
まだExperimental段階で 今後色々変わる可能性ありますが、 どれも非常に強力な機能なのでご紹介!
Physics Control Component ( Experimental )
Physics Control Component より高品質・柔軟性のある物理アニメーションを実現するための機能 Skeletal Meshの全て、または一部のみに物理挙動を付与するComponent 地面や背景との物理干渉だけでなく、特定のオブジェクトと接続することも可能
ざっくりとした使い方 PhysicsControlプラグインを有効 にし、専用コンポーネントを追加 物理挙動を有効にする箇所や 各物理パラメータの設定をBPノードから
参考資料 機能別サンプル(5.1以降) ● Level:PhysicsControl ● BP:ExampleContent/PhysicsControl/BP Twitter ● 開発者のDannyさんによる解説 ● InuGamesさんのセットアップ例 関連講演 ● Physics Animation in Uncharted 4: A Thief's End ● Physics Driven Ragdolls and Animation at EA: From Sports to Star Wars ● Physical Animation in Star Wars Jedi: Fallen Order ● 4Gamerさんによるレポート記事
AnimToTexture ( Experimental )
AnimToTexture アニメーション情報をテクスチャにベイクすることで アニメーション付きのStaticMeshを作成する機能 (= 頂点アニメーションの作成機能)
City Sampleでの使用例 遠景では粗が目立ちづらいので アニメーション付きStatic Meshに切り替え 大量の群衆を、高いパフォーマンスで表現 ※ Skeletal から Staticへの 切り替わりが目立つように 群衆を5倍ぐらい増やしています 手前の30体ほどは Skeletal Mesh(赤・緑) その他は全てInstance Static Mesh(灰色)
ざっくりとした使い方 ● AnimToTextureプラグインを有効に ● Skeletal MeshからStatic Meshを生成 ● ベイク先のテクスチャも準備 ● 専用DataAssetを作成し、各パラメータを設定 ● プラグイン標準のBP_AnimToTextureから テクスチャへのベイク実行
参考資料 サンプル ● エンジン標準 ● /Plugins/AnimToTexture Content/ ● CitySample ● /Game/Character/Player/Male/ Meshes/SM_PlayerMale_Simplified Youtube ● The Matrix Awakens: Creating the Characters ( 7:50~ ) ブログ記事 ● [UE5]アニメーション付きSkeletalMeshのStaticMesh化 ● [UE5]AnimToTextureプラグインの使い方
Motion Matching ( Experimental )
Motion Matching 多数のアニメーションデータのリストとキャラクタの動きを元に 最適なポーズを自動的に選択・再生する機能 複雑なステートマシンを組まなくても、高品質な移動アニメーションを実現可能
これがノード1個だけで動く!すごい!!! 前に出ている足に応じた Stopモーションが選択されている 検証で使用したモーション: CLazy Runner Action Pack
Motion Database Motion Matchingで使用するアニメーションを登録・管理するアセット 専用のエディタもあり
Motion Database Config 最適なポーズを選ぶ上で必要となる 解析処理のパラメータを管理・設定するアセット
BPのセットアップ キャラクター側 Animation BP側
注意点 ● Pose Searchプラグインを有効にする必要があります ● UE5.1 Preview版ではMotion Database Configの設定が正常にできません 正式リリース版にてお試しください(Channelsの追加ボタンが効きません) ● 使用するアニメーションは 全てルートモーションが有効になっている必要があります ● Animation Sequenceアセットの Enable Root Motion, Force Root Lockを有効に ● Idle, Walk, Runなどの再生し続けるアニメーションは Loop フラグも有効に ● UE5.1 Preview 2 + α で検証してましたが、挙動が怪しい部分があったり それなりの頻度でクラッシュします…まあExperimentalなので!
捕捉 > Idle, Walk, Runなどの再生し続けるアニメーションは Loop フラグも有効に UE5.1からは Anim Sequence側でも Loopアニメーションか否かを 設定できるようになりました
デフォーマー ( Beta )
ML(機械学習)デフォーマ MayaなどのDCCツールにあるデフォーマ(メッシュ変形)を リアルタイム処理で再現(近似)するための機能
5.1版の機能別サンプル - AnimationDeformerレベル - Control Rig ドリブン ラティス デフォーマー デュアルクォータニオン スキニングデフォーマー デルタマッシュ デフォーマー
MLデフォーマの使い方 公式ドキュメント TECH ART ONLINE 機械学習デフォーマを使用する(UE5.0) 機械学習デフォーマ(ML Deformer)を使ってみよう! 機械学習デフォーマの使用方法(UE5.1)
Deformer Graph 複雑なメッシュ変形をエディタ上で作成する機能 専用のBPノードとHLSLコードを組み合わせて実装 公式ドキュメントはこちら
参考資料 機能別サンプル(5.1以降) ● Level:/Maps/AnimationDeformer ● Asset:/ExampleContent/AnimationDeformer/
Contextual Animations ( Experimental )
Contextual Animations 他のActorと連携・干渉する アニメーションを 作成・調整するための機能 ● ● ● ● ドアを開ける 車に乗る 椅子に座る 他キャラクタを投げ飛ばす などなど CitySample: /Crowd/Character/Anims/Interacts/CAS_Truck
Contextual Animations はいいぞ! ● Motion Warping, IK制御を前提としているため、 様々なシチュエーションに対応可能! ● 位置関係などに応じて、 再生するアニメーション(セット)を自動的に選択!
エディタの構成 制御するActorのRole名と 再生するアニメーションのセットを エディタ上でプレビュー
エディタの構成 Role毎に再生するAnimMontage、IK制御、 アニメーション選択判定に使うパラメータを設定
使用するRoleの設定 Contextual Anim Roles Asset ( DataAsset )
Contextual Animationsからの情報を元に制御
注意点 ● Contextual Animationプラグインを有効にする必要があります ● 現状は、CitySampleにあるアセットが唯一のサンプルです Type=ContextualAnimSceneAsset ● UE5.0だと専用エディタが立ち上がらないので UE5.1以降でのみ試すことができます ● UE5.1 Preview 2 + α で検証してましたが、 挙動が怪しい部分があったり それなりの頻度でクラッシュします… まあExperimentalなので!
開発中でいろいろ変わる可能性はありますが、 どれも非常に強力な機能です!今後にご期待ください!
本講演のまとめ UE5は レンダリング・オープンワールド周りの機能が注目されがちですが アニメーションも凄いことになってます! しかも、各機能はプラットフォームなどに依存しないため、 ほぼ全てのプロジェクトに恩恵あり! 違和感 が(少)ないアニメーションを 誰でも実現可能にする機能を提供 作業効率・拡張性・処理負荷など、 既存システムの様々な箇所が改善!
本講演のまとめ これらの機能の恩恵を受けるためには アニメーション関連の設計・ワークフローなどを 再検証・構築する必要あり 大変ではありますが、 コンテンツの完成度・パフォーマンスが (大幅に)向上する…はずです! 今回ご紹介した新機能を 是非試してみてください!
ご不明な点やリクエストなどありましたら オフライン参加者向け: 展示ブース①にて お待ちしております! オンライン参加者向け: @pafuhana1213 宛にどうぞ! なお、DMによる質問は 基本的に受け付けていません (他の方に情報共有されないので…!)