Contenu connexe
Similaire à 実行速度の最適化のあれこれ プラス おまけ (20)
Plus de エピック・ゲームズ・ジャパン Epic Games Japan (20)
実行速度の最適化のあれこれ プラス おまけ
- 1. 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)
実 行 速 度 の 最 適 化 の あ れ こ れ
プ ラ ス お ま け
- 2. 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』と記載しています
- 3. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
アジェンダ
- 4. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 自己紹介
• 揺れものアニメーションの改良と並列化
• PGO による実行速度の最適化
• おまけ:静的コード解析
アジェンダ
- 5. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• 自己紹介
• 揺れものアニメーションの改良と並列化
• PGO による実行速度の最適化
• おまけ:静的コード解析
アジェンダ
- 6. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
自己紹介
- 7. 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オンライン
• エンジニア
• 揺れものアニメーションのライブラリの窓口、カスタマイズ、速度最適化
• 最適化チームのメンバー
自己紹介
- 8. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーションの最適化
- 9. 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として実装された
揺れものアニメーション
- 10. 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
揺れものアニメーション
- 11. 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
- 12. 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
- 13. 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()
- 14. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
揺れものアニメーション
K B
・UE4を改造する設計(キャラ一体の処理)
- 15. 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
・よくある処理順
- 16. 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
- 17. 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
- 18. 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
揺れものアニメーション
- 19. 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 . の 実 装 イ メ ー ジ
- 20. 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
もうできた!?
- 21. 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
- 22. 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
- 23. 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
- 24. 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
- 25. 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
どうすればいい?
- 26. 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のタスク生成、依存関係と待ち処理を設定
- 27. 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が
• 配列のソート、タスク生成、待ち処理など
- 28. 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が
• 配列のソート、タスク生成、待ち処理など
• 配列をクリア
- 29. 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が
• 配列のソート、タスク生成、待ち処理開始、分散、待ち処理終了
• 配列をクリア
- 30. 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対応が別のプロジェクトでも使われることになった
揺れものアニメーション
反 省 点
- 31. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による実行速度最適化
- 32. 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 と は
- 33. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
PGO による実行速度最適化
(質問x2)
- 34. 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 と は
- 35. 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 と は
- 36. 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 )
- 37. 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)
- 38. 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 と は
- 39. 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
- 40. 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
(複数)
- 41. 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 と は
- 42. 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 に 導 入 さ れ た 機 能
- 43. 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 による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
- 44. 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 による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
- 45. 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 による最適化
プ ロ ジ ェ ク ト 側 で 対 応 し た こ と
- 46. 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 費 用 対 効 果
- 47. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
• デメリット
• ビルドが長くなる
• 自動プレイがない場合は面倒?
PGO による最適化
ま と め 2 / 3
- 48. 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
- 49. 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 大きく変わらない よりしやすい ?
- 50. 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 大きく変わらない よりしやすい ?
- 51. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
おまけ:静的コード解析
- 52. V F X S T U D Y G R O U P©2019 SQUARE ENIX CO., LTD. All Rights Reserved.
ご清聴ありがとうございました!
UNREALはエピック・ゲームズ・インコーポレーテッドの商標または登録商標です。
PlayStationおよびPS4は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。
その他掲載されている会社名、商品名は、各社の商標または登録商標です。