V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
株式会社スクウェア・エニックス
ヒュイ フレッド ( Fr ed T.Y. H ui)
実 行 速 度 の 最 適 化 の あ れ こ れ
プ ラ ス お ま け
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
略称について
・『Unreal Engine 4』をスライド内では『UE4』と記載しています
・『PlayStation®4』も同様に『PS4』と記載しています
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
アジェンダ
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 自己紹介
• 揺れものアニメーションの改良と並列化
• PGO による実行速度の最適化
• おまけ:静的コード解析
アジェンダ
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 自己紹介
• 揺れものアニメーションの改良と並列化
• PGO による実行速度の最適化
• おまけ:静的コード解析
アジェンダ
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
自己紹介
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• HUI T.Y. Fred(ヒュイ フレッド)
• ホンコン
• VisualWorks, ドラクエ10オンライン
• エンジニア
• 揺れものアニメーションのライブラリの窓口、カスタマイズ、速度最適化
• 最適化チームのメンバー
自己紹介
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーションの最適化
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• Bonamik - B Plugin
• 鎖、紐、髪、クロスなどの物理シミュレーション
• KineDriver(Deformation/変形)- K Plugin
• 補助骨、ドライバー
• どちらも社内にすでに実績があるライブラリ
• 今回は初UE4対応で、Pluginとして実装された
揺れものアニメーション
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 今日の話
• 私一人だけではなく、
テクノロジー推進部のメンバー達と共同開発
Aitzol Muelas
Thierry Babin-Ruel
揺れものアニメーション
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
KineDriver
Component
Bonamik
Component
・UE4を改造する設計(Componentなど)
SkeletalMeshComponent
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K Component B Component
・UE4を改造する設計(Componentなど)
SkeletalMeshComponent
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K Component::
TickComponent()
B Component::
TickComponent()
・UE4を改造する設計(処理順)
SkeletalMeshComponent::
PostPhysicsTickComponet()
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K B
・UE4を改造する設計(キャラ一体の処理)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K1 B1 K2 B2 K3 B3
・よくある処理順
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K1 B1 K2 B2 K3 B3
KBD 2 KBD 3KBD 1
A.問題点#1(Componentを統合)
A.問題点#1
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
A.並列化のイメージ(3コアの場合)
揺れものアニメーション
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 統合版:KBD Component
• もう一つのメリット:表現幅のアップ
• 対応前は固定:K -> B のみ
• 対応後は可変:K -> B -> K でも、B -> K -> B でもOK
揺れものアニメーション
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• PluginをModuleにRefactoringした
• UKBDComponentの生成
• USkeletalMeshComponent::OnRegister()
• UKBDComponent::OnRegister()
• UKBDComponent::TickComponent()
• 必ずメインスレッドで呼ばれる
• TaskGraphのタスク生成、依存関係と待ち処理を設定
揺れものアニメーション
ス テ ッ プ A . の 実 装 イ メ ー ジ
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
A.並列化のイメージ(3コアの場合)
揺れものアニメーション
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
もうできた!?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
A.並列化はできたが、現実は
揺れものアニメーション
Other
task
Other
task
Other
task
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
A.現実は
揺れものアニメーション
Other
task
Other
task
Other
task
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
TickGroup_PostPhysics
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
B.問題点#2
揺れものアニメーション
Other
task
Other
task
Other
task
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
B.タスク・スケジューラの IDEA!
揺れものアニメーション
Other
task
Other
task
Other
task
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
B.タスク・スケジューラ
揺れものアニメーション
Other
task
Other
task
Other
task
KBD
1
KBD
4
KBD
2
KBD
5
KBD
3
KBD
6
どうすればいい?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
ス テ ッ プ B . の 実 装 の イ メ ー ジ
・タスク
• KBDComponent::TickComponent()
• TaskGraphのタスク生成、依存関係と待ち処理を設定
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
ス テ ッ プ B . の 実 装 の イ メ ー ジ
・タスク
• KBDComponent::TickComponent()
• TaskGraphのタスク生成、依存関係と待ち処理を設定
• TickGroup の最後で、KBDManagerが
• 配列のソート、タスク生成、待ち処理など
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
ス テ ッ プ B . の 実 装 の イ メ ー ジ
・タスク
• KBDComponent::TickComponent()
• TaskGraphのタスク生成、依存関係と待ち処理を設定
• KBDManager::PendingComponents 配列に自分を追加
• TickGroup の最後で、KBDManagerが
• 配列のソート、タスク生成、待ち処理など
• 配列をクリア
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
ス テ ッ プ B . の 実 装 の イ メ ー ジ
・タスク
• KBDComponent::TickComponent()
• TaskGraphのタスク生成、依存関係と待ち処理を設定
• KBDManager::PendingComponents 配列に自分を追加
• TickGroup の最後で、KBDManagerが
• 配列のソート、タスク生成、待ち処理開始、分散、待ち処理終了
• 配列をクリア
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• PluginをModuleにRefactoringした
• キャラ内のコリジョン・グループごとに計算すれば・・・
• ただ、専用AssetUserDataのデータ構造を変更しないと厳しい
• 良かった
このKBD対応が別のプロジェクトでも使われることになった
揺れものアニメーション
反 省 点
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による実行速度最適化
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• PGO - Profile Guided Optimization の略
• コンパイラとリンカー要対応!
• プロファイル(の結果)に基づく最適化
• 一般的な PGO
• 実績:Windowsは10年以上, コンソール機は数年前から!?
• 理論
PGO による最適化
P G O と は
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による実行速度最適化
(質問x2)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO を使わない場合は・・・ (イメージ)
- Cpp の行単位で
#pragma optimize speed
#pragma optimize size
- コンパイラのオプションで
-OSpeed, -Osize
- 等々
PGO による最適化
P G O と は
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
理論:
Training (Profiling, game play) 時によく通ったコード ー> ビルド時に速度最適化
それ以外のコード -> ビルド時にサイズ最適化
例:
if ( ConditionX )
{
// run A
}
else
{
// run B
}
PGO による最適化
P G O と は
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による最適化
P G O と は ( 出 典 : M a r c h 2 0 , 2 0 1 3 - - P r o f i l e G u i d e d O p t i m i z a t i o n - -
A n k i t A s t h a n a )
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
(.exe)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
例:
if ( ConditionX )
{
PGO( counterA );
// run A
}
else
{
PGO( counterB );
// run B
}
PGO による最適化
P G O と は
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
(ジョブ) (.exe) (複数)
出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
(.exe)
出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
(複数)
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• Sampling PGO (S-PGO)
• Training用のビルドが要らない
• UE4.19では未対応
• 自分で対応(ビルドオプションのみ)
PGO による最適化
P G O と は
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• UE4.19の機能だけを、うちのUE4(4.17)にマージした
• Platformに依存しないビルドオプション
-PGOProfile, -PGOOptimize (”-bAllowLTCG true” も)
• コンソールコマンド
“pgo start” -> プレイ -> ”pgo end”
PGO による最適化
U E 4 . 1 9 に 導 入 さ れ た 機 能
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
1. Training すべきところ
2. ジョブごとの自動プレイスクリプト(内製ツール)
3. ジョブごとに、平均フレーム速度をログ出力
4. その他:全体自動化、Platformごとの対応、SPGO、エ
ラー対策、ライブラリのビルドなど
PGO による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
1. Training すべきところ PLAN
2. 自動プレイのスクリプト DO
3. ジョブごとに、平均フレーム速度をログ出力 CHECK KPI
4. その他:全体自動化、Platformごとの対応、SPGO、エ
ラー対策、ライブラリのビルドなど
PGO による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PDC (Plan ->Do -> Check)のサイクルを回す
• 全体最適化する
• ジョブの効果高いものを残し、
ジョブの効果低いものを消す
• 最適化できなかった例
PGO による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• PS4でのフレーム速度の改善(Shipping)
• 37ms -> 33ms(最大効果のところ)
• UE4.19で導入された機能をマージ
• 複数のPlatformのビルドオプション
• コンソールコマンド
PGO による最適化
ま と め 1 / 3 費 用 対 効 果
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• デメリット
• ビルドが長くなる
• 自動プレイがない場合は面倒?
PGO による最適化
ま と め 2 / 3
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
(.exe)
(.exe)
出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による最適化
ま と め 3 / 3
Training用
ビルド
Training用ビルド
のRuntime速度
(1)
ジョブの調整
(PDCサイクル)
QA用ビルドの
Runtime速度
対応
Platformの
数
PGO yes 重い より少し速い 
SPGO no  大きく変わらない よりしやすい ?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による最適化
ま と め 3 / 3
<戦略>
開発サイクルの最中では、S-PGOを
最終リリースの時期は、PGOを
Training用
ビルド
Training用ビルド
のRuntime時の速度
(1)
ジョブの調整
(PDCサイクル)
QA用ビルド
Runtime時の速
度
対応
Platformの
数
PGO yes 重い より少し速い 
SPGO no  大きく変わらない よりしやすい ?
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
おまけ:静的コード解析
V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ご清聴ありがとうございました!
UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。
PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。
その他掲載されている会社名、商品名は、各社の商標または登録商標です。

実行速度の最適化のあれこれ プラス おまけ

  • 1.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 株式会社スクウェア・エニックス ヒュイ フレッド ( Fr ed T.Y. H ui) 実 行 速 度 の 最 適 化 の あ れ こ れ プ ラ ス お ま け
  • 2.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 略称について ・『Unreal Engine 4』をスライド内では『UE4』と記載しています ・『PlayStation®4』も同様に『PS4』と記載しています
  • 3.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. アジェンダ
  • 4.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 自己紹介 • 揺れものアニメーションの改良と並列化 • PGO による実行速度の最適化 • おまけ:静的コード解析 アジェンダ
  • 5.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 自己紹介 • 揺れものアニメーションの改良と並列化 • PGO による実行速度の最適化 • おまけ:静的コード解析 アジェンダ
  • 6.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 自己紹介
  • 7.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • HUI T.Y. Fred(ヒュイ フレッド) • ホンコン • VisualWorks, ドラクエ10オンライン • エンジニア • 揺れものアニメーションのライブラリの窓口、カスタマイズ、速度最適化 • 最適化チームのメンバー 自己紹介
  • 8.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーションの最適化
  • 9.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • Bonamik - B Plugin • 鎖、紐、髪、クロスなどの物理シミュレーション • KineDriver(Deformation/変形)- K Plugin • 補助骨、ドライバー • どちらも社内にすでに実績があるライブラリ • 今回は初UE4対応で、Pluginとして実装された 揺れものアニメーション
  • 10.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 今日の話 • 私一人だけではなく、 テクノロジー推進部のメンバー達と共同開発 Aitzol Muelas Thierry Babin-Ruel 揺れものアニメーション
  • 11.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション KineDriver Component Bonamik Component ・UE4を改造する設計(Componentなど) SkeletalMeshComponent
  • 12.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション K Component B Component ・UE4を改造する設計(Componentなど) SkeletalMeshComponent
  • 13.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション K Component:: TickComponent() B Component:: TickComponent() ・UE4を改造する設計(処理順) SkeletalMeshComponent:: PostPhysicsTickComponet()
  • 14.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション K B ・UE4を改造する設計(キャラ一体の処理)
  • 15.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション K1 B1 K2 B2 K3 B3 ・よくある処理順
  • 16.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション K1 B1 K2 B2 K3 B3 KBD 2 KBD 3KBD 1 A.問題点#1(Componentを統合) A.問題点#1
  • 17.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. A.並列化のイメージ(3コアの場合) 揺れものアニメーション KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6
  • 18.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • 統合版:KBD Component • もう一つのメリット:表現幅のアップ • 対応前は固定:K -> B のみ • 対応後は可変:K -> B -> K でも、B -> K -> B でもOK 揺れものアニメーション
  • 19.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • PluginをModuleにRefactoringした • UKBDComponentの生成 • USkeletalMeshComponent::OnRegister() • UKBDComponent::OnRegister() • UKBDComponent::TickComponent() • 必ずメインスレッドで呼ばれる • TaskGraphのタスク生成、依存関係と待ち処理を設定 揺れものアニメーション ス テ ッ プ A . の 実 装 イ メ ー ジ
  • 20.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. A.並列化のイメージ(3コアの場合) 揺れものアニメーション KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6 もうできた!?
  • 21.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. A.並列化はできたが、現実は 揺れものアニメーション Other task Other task Other task KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6
  • 22.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. A.現実は 揺れものアニメーション Other task Other task Other task KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6 TickGroup_PostPhysics
  • 23.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B.問題点#2 揺れものアニメーション Other task Other task Other task KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6
  • 24.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B.タスク・スケジューラの IDEA! 揺れものアニメーション Other task Other task Other task KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6
  • 25.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. B.タスク・スケジューラ 揺れものアニメーション Other task Other task Other task KBD 1 KBD 4 KBD 2 KBD 5 KBD 3 KBD 6 どうすればいい?
  • 26.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション ス テ ッ プ B . の 実 装 の イ メ ー ジ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定
  • 27.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション ス テ ッ プ B . の 実 装 の イ メ ー ジ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理など
  • 28.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション ス テ ッ プ B . の 実 装 の イ メ ー ジ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • KBDManager::PendingComponents 配列に自分を追加 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理など • 配列をクリア
  • 29.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 揺れものアニメーション ス テ ッ プ B . の 実 装 の イ メ ー ジ ・タスク • KBDComponent::TickComponent() • TaskGraphのタスク生成、依存関係と待ち処理を設定 • KBDManager::PendingComponents 配列に自分を追加 • TickGroup の最後で、KBDManagerが • 配列のソート、タスク生成、待ち処理開始、分散、待ち処理終了 • 配列をクリア
  • 30.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • PluginをModuleにRefactoringした • キャラ内のコリジョン・グループごとに計算すれば・・・ • ただ、専用AssetUserDataのデータ構造を変更しないと厳しい • 良かった このKBD対応が別のプロジェクトでも使われることになった 揺れものアニメーション 反 省 点
  • 31.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO による実行速度最適化
  • 32.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • PGO - Profile Guided Optimization の略 • コンパイラとリンカー要対応! • プロファイル(の結果)に基づく最適化 • 一般的な PGO • 実績:Windowsは10年以上, コンソール機は数年前から!? • 理論 PGO による最適化 P G O と は
  • 33.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO による実行速度最適化 (質問x2)
  • 34.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO を使わない場合は・・・ (イメージ) - Cpp の行単位で #pragma optimize speed #pragma optimize size - コンパイラのオプションで -OSpeed, -Osize - 等々 PGO による最適化 P G O と は
  • 35.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 理論: Training (Profiling, game play) 時によく通ったコード ー> ビルド時に速度最適化 それ以外のコード -> ビルド時にサイズ最適化 例: if ( ConditionX ) { // run A } else { // run B } PGO による最適化 P G O と は
  • 36.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO による最適化 P G O と は ( 出 典 : M a r c h 2 0 , 2 0 1 3 - - P r o f i l e G u i d e d O p t i m i z a t i o n - - A n k i t A s t h a n a )
  • 37.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana (.exe)
  • 38.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 例: if ( ConditionX ) { PGO( counterA ); // run A } else { PGO( counterB ); // run B } PGO による最適化 P G O と は
  • 39.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. (ジョブ) (.exe) (複数) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
  • 40.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. (.exe) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana (複数)
  • 41.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • Sampling PGO (S-PGO) • Training用のビルドが要らない • UE4.19では未対応 • 自分で対応(ビルドオプションのみ) PGO による最適化 P G O と は
  • 42.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • UE4.19の機能だけを、うちのUE4(4.17)にマージした • Platformに依存しないビルドオプション -PGOProfile, -PGOOptimize (”-bAllowLTCG true” も) • コンソールコマンド “pgo start” -> プレイ -> ”pgo end” PGO による最適化 U E 4 . 1 9 に 導 入 さ れ た 機 能
  • 43.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 1. Training すべきところ 2. ジョブごとの自動プレイスクリプト(内製ツール) 3. ジョブごとに、平均フレーム速度をログ出力 4. その他:全体自動化、Platformごとの対応、SPGO、エ ラー対策、ライブラリのビルドなど PGO による最適化 プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
  • 44.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. 1. Training すべきところ PLAN 2. 自動プレイのスクリプト DO 3. ジョブごとに、平均フレーム速度をログ出力 CHECK KPI 4. その他:全体自動化、Platformごとの対応、SPGO、エ ラー対策、ライブラリのビルドなど PGO による最適化 プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
  • 45.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PDC (Plan ->Do -> Check)のサイクルを回す • 全体最適化する • ジョブの効果高いものを残し、 ジョブの効果低いものを消す • 最適化できなかった例 PGO による最適化 プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
  • 46.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • PS4でのフレーム速度の改善(Shipping) • 37ms -> 33ms(最大効果のところ) • UE4.19で導入された機能をマージ • 複数のPlatformのビルドオプション • コンソールコマンド PGO による最適化 ま と め 1 / 3 費 用 対 効 果
  • 47.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. • デメリット • ビルドが長くなる • 自動プレイがない場合は面倒? PGO による最適化 ま と め 2 / 3
  • 48.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. (.exe) (.exe) 出典:March 20, 2013 -- Profile Guided Optimization -- Ankit Asthana
  • 49.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO による最適化 ま と め 3 / 3 Training用 ビルド Training用ビルド のRuntime速度 (1) ジョブの調整 (PDCサイクル) QA用ビルドの Runtime速度 対応 Platformの 数 PGO yes 重い より少し速い  SPGO no  大きく変わらない よりしやすい ?
  • 50.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. PGO による最適化 ま と め 3 / 3 <戦略> 開発サイクルの最中では、S-PGOを 最終リリースの時期は、PGOを Training用 ビルド Training用ビルド のRuntime時の速度 (1) ジョブの調整 (PDCサイクル) QA用ビルド Runtime時の速 度 対応 Platformの 数 PGO yes 重い より少し速い  SPGO no  大きく変わらない よりしやすい ?
  • 51.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. おまけ:静的コード解析
  • 52.
    V F XS T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved. ご清聴ありがとうございました! UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。 PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。 その他掲載されている会社名、商品名は、各社の商標または登録商標です。