SlideShare a Scribd company logo
1 of 52
Download to read offline
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は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。
その他掲載されている会社名、商品名は、各社の商標または登録商標です。

More Related Content

What's hot

UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-com044
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてcom044
 
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTERエピック・ゲームズ・ジャパン Epic Games Japan
 
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-Tatsuya Iwama
 
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級com044
 

What's hot (20)

バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編60fpsアクションを実現する秘訣を伝授 基礎編
60fpsアクションを実現する秘訣を伝授 基礎編
 
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
 
UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例UE4におけるエフェクトの為のエンジン改造事例
UE4におけるエフェクトの為のエンジン改造事例
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-UE4 アセットロード周り-アセット参照調査-
UE4 アセットロード周り-アセット参照調査-
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法Unreal Engine 4を使って地球を衛る方法
Unreal Engine 4を使って地球を衛る方法
 
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTERUE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る!  | UNREAL FEST EXTREME 2020 WINTER
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
 
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
 
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
初心者向け UE4 映像制作での シーケンサー と Movie Render Queue の使い方
 
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
 
大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用大規模CSゲームにおけるライトマス運用
大規模CSゲームにおけるライトマス運用
 
Fortniteを支える技術
Fortniteを支える技術Fortniteを支える技術
Fortniteを支える技術
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
第2回UE4勉強会 in 大阪 - マテリアル基礎・初級
 

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

Game Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiGame Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiTakashi Itai
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた虎の穴 開発室
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
How to make a Flash based Wii Ware
How to make a Flash based Wii WareHow to make a Flash based Wii Ware
How to make a Flash based Wii WareTamotsu Machida
 
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" case
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" caseCEDEC2017 VR180 3D live streaming camera at "SHOWROOM" case
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" caseTakeyuki Ogura
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例gree_tech
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料直久 住川
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜Kentaro Matsumae
 
Current status and future trends in Node-RED
Current status and future trends in Node-REDCurrent status and future trends in Node-RED
Current status and future trends in Node-REDnodered_ug_jp
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsHajimeSasanuma
 

Similar to 実行速度の最適化のあれこれ プラス おまけ (20)

UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例  UE4におけるアニメーション制作事例
UE4におけるアニメーション制作事例
 
UE4におけるエフェクトの基本戦略事例 前半
UE4におけるエフェクトの基本戦略事例  前半UE4におけるエフェクトの基本戦略事例  前半
UE4におけるエフェクトの基本戦略事例 前半
 
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
 
UE4における自動プレイのポストモーテム
UE4における自動プレイのポストモーテム  UE4における自動プレイのポストモーテム
UE4における自動プレイのポストモーテム
 
Game Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi ItaiGame Creators Conference 2019 Takashi Itai
Game Creators Conference 2019 Takashi Itai
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
UE4における大規模背景制作事例(データメンテナンス・大技設定編 )
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
UE4におけるエフェクトの基本戦略事例 後半
UE4におけるエフェクトの基本戦略事例  後半UE4におけるエフェクトの基本戦略事例  後半
UE4におけるエフェクトの基本戦略事例 後半
 
How to make a Flash based Wii Ware
How to make a Flash based Wii WareHow to make a Flash based Wii Ware
How to make a Flash based Wii Ware
 
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" case
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" caseCEDEC2017 VR180 3D live streaming camera at "SHOWROOM" case
CEDEC2017 VR180 3D live streaming camera at "SHOWROOM" case
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
Current status and future trends in Node-RED
Current status and future trends in Node-REDCurrent status and future trends in Node-RED
Current status and future trends in Node-RED
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
 

More from エピック・ゲームズ・ジャパン Epic Games Japan

『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 

More from エピック・ゲームズ・ジャパン Epic Games Japan (20)

猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 1
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)UE4を使った映像制作 (UE4 Character Art Dive Online)
UE4を使った映像制作 (UE4 Character Art Dive Online)
 
Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)Hair Groom入門 (UE4 Character Art Dive Online)
Hair Groom入門 (UE4 Character Art Dive Online)
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER『バランワンダーワールド』でのマルチプラットフォーム対応について  UNREAL FEST EXTREME 2021 SUMMER
『バランワンダーワールド』でのマルチプラットフォーム対応について UNREAL FEST EXTREME 2021 SUMMER
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMERUnreal Engineでのコンフィギュレーター制作と映像制作  UNREAL FEST EXTREME 2021 SUMMER
Unreal Engineでのコンフィギュレーター制作と映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMERバレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏  UNREAL FEST EXTREME 2021 SUMMER
バレンシアガ『Afterworld: The Age of Tomorrow』の舞台裏 UNREAL FEST EXTREME 2021 SUMMER
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMERSAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
 
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編)  UNREAL FEST EXTREME 2021 SUMMER
『ガールズ&パンツァー 最終章』第3話 アニメとゲームエンジンの融合(ジャングル完結編) UNREAL FEST EXTREME 2021 SUMMER
 
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMERUE4を使用したバーチャルヒューマンの映像制作  UNREAL FEST EXTREME 2021 SUMMER
UE4を使用したバーチャルヒューマンの映像制作 UNREAL FEST EXTREME 2021 SUMMER
 
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMERオンラインで同期した100体の巨大生物から地球を衛る方法  UNREAL FEST EXTREME 2021 SUMMER
オンラインで同期した100体の巨大生物から地球を衛る方法 UNREAL FEST EXTREME 2021 SUMMER
 
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMERMetaHumanサンプル解体新書  UNREAL FEST EXTREME 2021 SUMMER
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
 
Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介Twinmotion 2021とAEC分野向けソリューションのご紹介
Twinmotion 2021とAEC分野向けソリューションのご紹介
 
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
UE4.26 レンダリング新機能(CEDEC+KYUSHU 2020)
 

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

  • 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は株式会社ソニー・インタラクティブエンタテインメントの商標または登録商標です。 その他掲載されている会社名、商品名は、各社の商標または登録商標です。