実行速度の最適化のあれこれ プラス おまけ【UE4を用いた大規模開発事例紹介 ~スクウェア・エニックス様をお招きして~ 2019】

15.8K Views

March 20, 19

スライド概要

※本セッションには多くの動画が含まれていたり、ノートに備考が記載されている可能性があります。実際の講演で行われたスライドが下記からダウンロード可能ですので、是非そちらをご覧頂けますと幸いです。
講演パワーポイントリンク: https://epicgames.box.com/s/e2qgrrtoel12aq6ug79kpmscu6ls4tmt

登壇者
HUI T.Y. Fredさま

内容 
揺れものアニメーションの並列化、PGO による最適化の応用編を紹介します。おまけとして、静的コード解析を簡単かつ低コストで導入するやり方も話させていただきます。

本スライドは2019年3月15日に行われた「UE4を用いた大規模開発事例紹介 ~スクウェア・エニックス様をお招きして~」にてスクウェア・エニックス様に講演していただいたものです。

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

実行速度の最適化のあれこれ プラス おまけ 株式会社スクウェア・エニックス ヒュイ フレッド ( F r e d T. Y. H u i ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

2.

略称について ・『Unreal Engine 4』をスライド内では『UE4』と記載しています ・『PlayStation®4』も同様に『PS4』と記載しています ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

3.

アジェンダ ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

4.

アジェンダ • 自己紹介 • 揺れものアニメーションの改良と並列化 • PGO による実行速度の最適化 • おまけ:静的コード解析 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

5.

アジェンダ • 自己紹介 • 揺れものアニメーションの改良と並列化 • PGO による実行速度の最適化 • おまけ:静的コード解析 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

6.

自己紹介 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

7.

自己紹介 • HUI T.Y. Fred(ヒュイ フレッド) • ホンコン • VisualWorks, ドラクエ10オンライン • エンジニア • 揺れものアニメーションのライブラリの窓口、カスタマイズ、速度最適化 • 最適化チームのメンバー ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

8.

揺れものアニメー シ ョン の 最適 化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

9.

揺れものアニメー シ ョン • Bonamik - B Plugin • 鎖、紐、髪、クロスなどの物理シミュレーション • KineDriver(Deformation/変形)- K Plugin • 補助骨、ドライバー • どちらも社内にすでに実績があるライブラリ • 今回は初UE4対応で、Pluginとして実装された ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

10.

揺れものアニメー シ ョン • 今日の話 • 私一人だけではなく、 テクノロジー推進部のメンバー達と共同開発 Aitzol Muelas Thierry Babin-Ruel ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

11.

揺れものアニメー シ ョン ・UE4を改造する設計(Componentなど) SkeletalMeshComponent KineDriver Component ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. Bonamik Component VFX STUDY GROUP

12.

揺れものアニメー シ ョン ・UE4を改造する設計(Componentなど) SkeletalMeshComponent K Component ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B Component VFX STUDY GROUP

13.

揺れものアニメー シ ョン ・UE4を改造する設計(処理順) SkeletalMeshComponent:: PostPhysicsTickComponet() K Component:: TickComponent() ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B Component:: TickComponent() VFX STUDY GROUP

14.

揺れものアニメー シ ョン ・UE4を改造する設計(キャラ一体の処理) K ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B VFX STUDY GROUP

15.

揺れものアニメー シ ョン ・よくある処理順 K1 B1 K2 B2 K3 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B3 VFX STUDY GROUP

16.

揺れものアニメー シ ョン A.問題点#1 K1 B1 K2 B2 K3 B3 A.問題点#1(Componentを統合) KBD 1 KBD 2 KBD 3 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

17.

揺れものアニメー シ ョン A.並列化のイメージ(3コアの場合) KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

18.

揺れものアニメー シ ョン • 統合版:KBD Component • もう一つのメリット:表現幅のアップ • 対応前は固定:K -> B のみ • 対応後は可変:K -> B -> K でも、B -> K -> B でもOK ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

19.

揺れものアニメー シ ョン ステップ A. の実装イメージ • PluginをModuleにRefactoringした • UKBDComponentの生成 • USkeletalMeshComponent::OnRegister() • UKBDComponent::OnRegister() • UKBDComponent::TickComponent() • 必ずメインスレッドで呼ばれる • TaskGraphのタスク生成、依存関係と待ち処理を設定 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

20.

揺れものアニメー シ ョン A.並列化のイメージ(3コアの場合) KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6 もうできた!? ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

21.

揺れものアニメー シ ョン A.並列化はできたが、現実は KBD 1 KBD 4 KBD 2 Other task KBD 5 KBD 3 Other task KBD 6 Other task ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

22.

揺れものアニメー シ ョン A.現実は TickGroup_PostPhysics KBD 1 KBD 4 KBD 2 Other task KBD 5 KBD 3 Other task KBD 6 Other task ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

23.

揺れものアニメー シ ョン B.問題点#2 KBD 1 KBD 4 KBD 2 Other task KBD 5 KBD 3 Other task KBD 6 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. Other task VFX STUDY GROUP

24.

揺れものアニメー シ ョン B.タスク・スケジューラの IDEA! KBD 1 KBD 6 KBD 3 KBD 5 KBD 2 KBD 4 Other task Other task Other task ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

25.

揺れものアニメー シ ョン B.タスク・スケジューラ KBD 1 KBD 6 KBD 3 KBD 5 Other task どうすればいい? KBD Other 2 KBD 4 task Other task ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

26.

揺れものアニメー シ ョン ステップ B. の実装のイメージ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

27.

揺れものアニメー シ ョン ステップ B. の実装のイメージ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理など ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

28.

揺れものアニメー シ ョン ステップ B. の実装のイメージ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • KBDManager::PendingComponents 配列に自分を追加 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理など • 配列をクリア ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

29.

揺れものアニメー シ ョン ステップ B. の実装のイメージ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • KBDManager::PendingComponents 配列に自分を追加 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理開始、分散、待ち処理終了 • 配列をクリア ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

30.

揺れものアニメー シ ョン 反省点 • PluginをModuleにRefactoringした • キャラ内のコリジョン・グループごとに計算すれば・・・ • ただ、専用AssetUserDataのデータ構造を変更しないと厳しい • 良かった このKBD対応が別のプロジェクトでも使われることになった ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

31.

PGO による実行速度最 適化 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

32.

PGO による最適化 PGO とは • PGO - Profile Guided Optimization の略 • コンパイラとリンカー要対応! • プロファイル(の結果)に基づく最適化 • 一般的な PGO • 実績:Windowsは10年以上, コンソール機は数年前から!? • 理論 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

33.

PGO による実行速度最 適化 (質問x2) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

34.

PGO による最適化 PGO とは PGO を使わない場合は・・・ (イメージ) - Cpp の行単位で #pragma optimize speed #pragma optimize size - コンパイラのオプションで -OSpeed, -Osize - 等々 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

35.

PGO による最適化 PGO とは 理論: Training (Profiling, game play) 時によく通ったコード それ以外のコード -> ー> ビルド時に速度最適化 ビルド時にサイズ最適化 例: if ( ConditionX ) { // run A } else { // run B } ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

36.

PGO による最適化 PGO とは(出典:March 20, 2013 -- Profile Guided Optimization -Ankit Asthana ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

37.

(.exe) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

38.

PGO による最適化 PGO とは 例: if ( ConditionX ) { PGO( counterA ); // run A } else { PGO( counterB ); // run B } ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

39.

(ジョブ) (.exe) (複数) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

40.

(.exe) (複数) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

41.

PGO による最適化 PGO とは • Sampling PGO (S-PGO) • Training用のビルドが要らない • UE4.19では未対応 • 自分で対応(ビルドオプションのみ) ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

42.

PGO による最適化 UE4.19に導入された機能 • UE4.19の機能だけを、うちのUE4(4.17)にマージした • Platformに依存しないビルドオプション -PGOProfile, -PGOOptimize (”-bAllowLTCG true” も) • コンソールコマンド “pgo start” -> プレイ -> ”pgo end” ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

43.

PGO による最適化 プロジェクト側で対応したこと 1. Training すべきところ 2. ジョブごとの自動プレイスクリプト(内製ツール) 3. ジョブごとに、平均フレーム速度をログ出力 4. その他:全体自動化、Platformごとの対応、SPGO、エ ラー対策、ライブラリのビルドなど ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

44.

PGO による最適化 プロジェクト側で対応したこと 1. Training すべきところ PLAN 2. 自動プレイのスクリプト DO 3. ジョブごとに、平均フレーム速度をログ出力 CHECK KPI 4. その他:全体自動化、Platformごとの対応、SPGO、エ ラー対策、ライブラリのビルドなど ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

45.

PGO による最適化 プロジェクト側で対応したこと PDC (Plan ->Do -> Check)のサイクルを回す • 全体最適化する • ジョブの効果高いものを残し、 ジョブの効果低いものを消す • 最適化できなかった例 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

46.

PGO による最適化 まとめ 1/3 費用対効果 • PS4でのフレーム速度の改善(Shipping) • 37ms -> 33ms(最大効果のところ) • UE4.19で導入された機能をマージ • 複数のPlatformのビルドオプション • コンソールコマンド ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

47.

PGO による最適化 まとめ 2/3 • デメリット • ビルドが長くなる • 自動プレイがない場合は面倒? ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

48.

(.exe) (.exe) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

49.

PGO による最適化 まとめ 3/3 Training用 ビルド Training用ビルド のRuntime速度 (1) PGO yes 重い SPGO no  大きく変わらない ジョブの調整 QA用ビルドの (PDCサイクル) Runtime速度 対応 Platformの 数  より少し速い ? よりしやすい ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

50.

PGO による最適化 まとめ 3/3 Training用 ビルド Training用ビルド ジョブの調整 QA用ビルド のRuntime時の速度 (PDCサイクル) Runtime時の速 (1) 度 PGO yes 重い SPGO no  大きく変わらない 対応 Platformの 数  より少し速い ? よりしやすい <戦略> 開発サイクルの最中では、S-PGOを 最終リリースの時期は、PGOを ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

51.

おまけ:静的コー ド 解析 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP

52.

ご清聴ありがとうございました! UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。 PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。 その他掲載されている会社名、商品名は、各社の商標または登録商標です。 ©2019 SQUARE ENIX CO., LTD. All Rights Reserved. VFX STUDY GROUP