[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)

7.1K Views

August 31, 17

スライド概要

CEDEC2017の講演資料を公開します。
http://cedec.cesa.or.jp/2017/session/ENG/s59102d1ea3268/

profile-image

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

シェア

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

各ページのテキスト
1.

UE4 プロファイリングツール総おさらい (グラフィクス編) Nori Shinoyama Senior Support Engineer @ Epic Games Japan #UE4CEDEC

2.

最適化の前にプロファイル はじめに #UE4CEDEC

3.

本日の内容 UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきます #UE4CEDEC

4.

なぜプロファイル? どうしてそんな狭く地味な範囲を? 最適化じゃないの? #UE4CEDEC

5.

なぜプロファイル? あるあるCase.1 ありがたいことに、コミュニティやライセンシ様のおかげで、 ネット上に沢山の最適化Tipsが出てくるようになりました。 Tips1 Tips2 Tips3 Optimization #UE4CEDEC

6.

なぜプロファイル? あるあるCase.1 でも、こんなときはどうしましょう? 「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」 Tips1 ?? Tips2 ?? Tips3 ?? 一つしかできないなら。。 Optimization どれ? #UE4CEDEC

7.

なぜプロファイル? あるあるCase.1 でも、こんなときはどうしましょう? 「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」 Tips1 Profiling どれが一番効果的? Tips2 Tips3 Optimization #UE4CEDEC

8.

なぜプロファイル? あるあるCase.2 全部やりました!! Tips1 Tips2 Tips3 。。本当に必要? #UE4CEDEC Optimization

9.

なぜプロファイル? あるあるCase.2 半透明は重いらしいので、 エフェクトは減らしました! すべてのテクスチャ 解像度を512に落としました! DrawCall増えると怖いので オブジェクトをまとめました! とりあえずライトはMovable をやめて全部Stationaryに! #UE4CEDEC

10.

なぜプロファイル? あるあるCase.2 Tips1 Profiling どれはやらなくていい? Tips2 Tips3 Optimization #UE4CEDEC

11.

どちらも極端な例ですが、 実際の制作現場でよくあることだと思います。 #UE4CEDEC

12.

プロファイルしない最適化は危険 中身を知らずにとりあえずその設定を試したり。。 ボトルネックと違うところを最適化したり。。 最適化に時間や労力をかけても、 パフォーマンスは上がらず、 クオリティだけ下がってしまったり。。 #UE4CEDEC

13.

なぜプロファイル? 最適化の前に、 開発初期から、日常的に、 プロファイルする癖を ボトルネックの予測精度を上げて。。。 ボトルネック部分 -> 短時間で効率的な最適化を ボトルネックじゃない部分 -> 贅沢に使いクオリティアップに #UE4CEDEC

14.

UE4の充実したプロファイリングツール #UE4CEDEC

15.

本日の内容 (再掲) UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきます #UE4CEDEC

16.

本講演の対象者 UE4を触って頂いている 技術寄りのアーティストやデザイナの方がメインです (触っていない方は、UE4はこんな機能があるのか~と眺めて頂ければ) #UE4CEDEC

17.

本講演で話さないこと • コリジョン、ネットワーク、アニメーションなどの プロファイル手法 • モバイルやVRに特化した内容 • きれいな絵作りする方法 • プラットフォーム固有の話 #UE4CEDEC

18.

備考 • Twitter等での情報拡散にご協力ください。 – #UE4CEDEC • 本資料はすぐにネットにアップされます。 • エディタは英語版を使います。 • UE4.17をベースにします。 • 質疑応答は時間があまれば。。 #UE4CEDEC

19.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

20.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

21.

Console Command & CVars 基本のプロファイリングツール 1 #UE4CEDEC

22.

Console Command & Console Variables (CVars) #UE4CEDEC

23.

Console Command & Variables (CVars) コマンドによって、ゲーム内の挙動を変えたり情報を出力する方法 (大文字小文字の区別はありません) #UE4CEDEC

24.

Console Command & Console Variables (CVars) 一覧表の作成 Help -> “Console Variables” を選ぶ事によって、全コマンドのHTMLヘルプを出力 #UE4CEDEC

25.

Console Command & Console Variables (CVars) 一覧表 .htmlファイルで、各コマンドとそのヘルプを出力してくれる #UE4CEDEC

26.

Command入力方法 #UE4CEDEC

27.

Command / CVar の送り方 1 開発機にキーボードを指して、コンソールウィンドウを立ち上げる (Editorでももちろん可能。Output Windowからも入力できる。) #UE4CEDEC

28.

Console Windowを立ち上げショートカットの指定 Project Settings/ Input の一番下に “Console Keys” という設定があり、 そこで指定できます。 #UE4CEDEC

29.

Command / CVar の送り方 2 Blueprintで送る “Execute Console Command” ノード #UE4CEDEC

30.

Command / CVar の送り方 3 SessionFrontendを使って、PC上から実機で動いている アプリケーションに対してコマンドを送る #UE4CEDEC

31.

Command / CVar の送り方 4 起動時引数で送る –execmds=“コマンドA, コマンドB” ”,” で複数コマンドを区切る #UE4CEDEC

32.

では、 プロファイルに使えるコマンドを見ていきます #UE4CEDEC

33.

Stat fps / unit / unitgraph #UE4CEDEC

34.

Console Command stat fps / stat unit / stat unitgraph CPUやGPUの負荷を表示する基本コマンド Stat fps Stat unit Stat unitgraph #UE4CEDEC

35.

レンダリングから見た Game / Draw / GPU CPU GPU Game Draw 世界のアップデート Gameから来た シーンを解釈して GPU描画命令 (DrawCallなど) に変換する 時計の針を進めて キャラクタの動き 物理などを確定 #UE4CEDEC GPU GPUが実際に頂点 やピクセルを計算 して絵をつくる

36.

Game Draw GPU 合計がそのフレームの処理時間じゃないの?? #UE4CEDEC

37.

Game / Draw / GPU の並列処理 VSync Game Draw GPU Display VSync 1 VSync 2 1 2 1 2 0 1 2 各処理が並行で進んでいるため、 Game/Draw/GPUの最大がそのフレームの処理時間になる。 この図はあくまで概要です。 実際のスレッドの流れは、プラットフォームやレンダリング手法で異なります。 #UE4CEDEC

38.

CPU Game GPU Draw GPU 本日はDrawとGPUのプロファイルがメイン #UE4CEDEC

39.

CPU Game GPU Draw GPUの処理負荷を見てみる #UE4CEDEC GPU

40.

GPUの処理負荷を見てみる #UE4CEDEC

41.

GPUの処理負荷を階層的に出すConsole Command “ProfileGPU” (Default shortcut: “Ctrl + Shift + ,”) #UE4CEDEC

42.

コンソールなどの実機では、 ウインドウは出ずに出力ウィンドウにテキストで表示できます。 #UE4CEDEC

43.

Tips (Advanced) BasePass内部で、各メッシュ単位の負荷を出さない機種もある Editor #UE4CEDEC Console

44.

Tips (Advanced) 実機でBasePassのメッシュ単位の処理負荷を出力する方法 • r.ShowMaterialDrawEvents – ただし、RHIThreadがOffじゃないと動作しない。 • r.RHISetGPUCaptureOptions – 一括設定コマンド – 自動でRHIThreadをOffに • ※DrawThreadの負荷が跳ね上がります。 – 計測するときにOnにして、それ以外ではOffに。 #UE4CEDEC

45.

Console Command Stat GPU ProfileGPUのリアルタイム表示版 #UE4CEDEC

46.

レンダリングの流れは去年のCEDECで講演させていただきました SlideShareにUpしてあるので、良ければご参考にしてください #UE4CEDEC

47.

CPU Game GPU Draw GPU profilegpu stat gpu #UE4CEDEC

48.

CPU Game GPU Draw Drawの処理負荷を見てみる まえに。。。 #UE4CEDEC GPU

49.

CPU Game GPU Draw GPU CPU側の処理負荷 確認方法 #UE4CEDEC

50.

ConsoleCommand Stat dumpframe 1フレームのCPU処理フローの階層表示 #UE4CEDEC

51.

ConsoleCommand Stat dumpframe 1フレームのCPU処理フローの階層表示 17.773ms ( 27) - Thread_12a6c_0 - RenderThread 16.084ms ( 1) - RenderViewFamily 7.650ms ( 1) - DeferredShadingSceneRenderer Lighting 7.258ms ( 1) - Lighting drawing 2.104ms ( 1) - Base pass drawing 1.946ms ( 1) - StaticDrawList drawing 1.368ms ( 1) - InitViews 例: Dumpされた部分のRenderThread部分 #UE4CEDEC

52.

Stat dumpframe オプションで見やすい形に調整可能 例: Drawの処理負荷を計測する方法 stat dumpframe -root=renderthread –depth=5 -ms=.1 どの処理から下を表示するか? 例: Gamethread Renderthread Initviews #UE4CEDEC 何階層深くまで表示するか 何ms以上の処理だけ記載するか

53.

Console Command stat startfile / stopfile 複数フレームをキャプチャして、後々にエディタで処理負荷をチェックする #UE4CEDEC

54.

stat startfile / stopfile 使い方 Stat stopfileと打ち込むと、プロファイルデータを出力する 書き出し先はログ(LogStats)に出る #UE4CEDEC

55.

stat startfile / stopfile 使い方 Session Frontend を立ち上げる #UE4CEDEC Profiler Tabからファイルを読み込む

56.

例えば、各アクターのTickがどれだけかかっているか? などがわかるようになります。 注意点: 処理順番ではありません。 処理負荷順や名前順でソートを変えたりできます。 #UE4CEDEC

57.

CPU Game GPU Draw Stat dumpframe Stat startfile/stopfile #UE4CEDEC GPU CPU側の処理負荷 確認方法

58.

CPU Game GPU Draw Stat dumpframe Stat startfile/stopfile #UE4CEDEC GPU Drawの処理負荷 を見てみる

59.

Drawの処理負荷を見てみる #UE4CEDEC

60.

Drawの主な役割 Draw GPU Z Prepass Base Pass Transparency ②GPUに描画命令を発行する #UE4CEDEC

61.

Drawの主な役割 Draw GPU Z Prepass どのオブジェクトを? リストないの?? Base Pass Transparency ②GPUに描画命令を発行する #UE4CEDEC

62.

Drawの主な役割 Draw GPU Z Prepass Init Views Base Pass Transparency ①渡すオブジェクトを選定し それぞれのパスのリストを作る #UE4CEDEC ②GPUに描画命令を発行する

63.

InitViewsで行われるカリング Init Views ①渡すオブジェクトを選定し それぞれのパスのリストを作る #UE4CEDEC 選定方法1: Frustum Culling 選定方法2: Occlusion Culling

64.

(CPU) Frustum Culling 見えない! Object 見えない! Object 見える Object Object 見える オブジェクトのバウンディングボックスを調べ、 画面外のオブジェクトをGPUに計算させない機能 #UE4CEDEC

65.

Occlusion Culling 見えない! Object Object Object 見える 前面のオブジェクトに隠れて見えないオブジェクトを描画リストから外す (1フレーム前のDepthを用いて行います) #UE4CEDEC

66.

FreezeRendering コマンドで、 その時点でのカメラのカリング結果を止めることができる。 #UE4CEDEC

67.

Drawの主な役割 Draw GPU Z Prepass Init Views Base Pass Transparency ①渡すオブジェクトを選定し それぞれのパスのリストを作る #UE4CEDEC ②GPUに描画命令を発行する

68.

Console Command stat SceneRendering レンダリング(Draw)の全体の処理内訳をリアルタイムで表示 #UE4CEDEC

69.

Stat scenerendeing 注意点 (表示内容はフラットですが、) 処理内容は階層的です RenderViewFamiliy - InitViews - BasePass drawing -- StaticDrawList drawing -- Dynamic Primitive drawing #UE4CEDEC

70.

Stat scenerendeing Stat SceneRenderingで見える負荷はDrawの負荷です。 GPUの処理ではありません! Draw が重たい場合は真っ先に参照してみてください #UE4CEDEC

71.

ConsoleCommand stat InitViews Culling処理にかかった時間やプリミティブ数などをリアルタイムで確認 #UE4CEDEC

72.

ConsoleCommand stat InitViews • InitViewsは何の処理をしてる?? – 画面に見えないオブジェクトを省く処理 • Frustum Culling • Occlusion Culling – レンダリングオブジェクトをソートしたり – シャドウ計算に寄与するオブジェクトもここで算出している #UE4CEDEC

73.

stat InitViews でよく見るところ 処理時間 Frustum Cull Occlusion Cull Processed Primitives: 投入された全オブジェクト数 Frustum Culled primitives: カリングされたオブジェクト数 Occluded Culled Primitives: オクルージョンカリングされた Primitive数 生き残ったPrimitiveたち Visible Static Mesh Elements Visible Dynamic Mesh Elements #UE4CEDEC

74.

Stat initviews Culling処理はCPU負荷をあげますが、 GPU負荷を下げるために必ず必要な処理です。 Culling負荷が高い場合、遠くのオブジェクトや目に見えないオブジェクト を自前でVisibilityをOffにしたりなどが効果があります。 また、不要なオブジェクトがGPUに投入されていないか確認するために、 FreezeRenderingコマンドも用いて下さい。 #UE4CEDEC

75.

備考: Precomputed Visibilityについて • Precomputed VisibilityはStaticなオブジェクトに対して、シーン のある視点から見えるオブジェクトを事前計算しリストを作成して おく手法です。 • メモリやデータサイズが増えますが、InitViewsの負荷削減につな がりますので、静的オブジェクトが多い方は参考にしてください。 • 英語ですが、以下のスレッドに使い方がとても丁寧に説明されてい ます。 – http://timhobsonue4.snappages.com/culling-precomputed-visibilityvolumes #UE4CEDEC

76.

備考: 全体のDrawCall数を把握したい場合 Stat RHI “Draw primitive Calls”でシーン内の全DrawCall数を確認 #UE4CEDEC

77.

CPU GPU Game Draw Stat SceneRendering Stat InitViews Stat RHI Stat dumpframe Stat startfile/stopfile #UE4CEDEC GPU

78.

ここまででどの箇所が重たいのかだいたいわかるようになってきた Stat unit, unitgraph ? ? ? Draw Game Stat sceneredering Stat dumpframe ? Light? ? Particle? GPU profilegpu stat gpu ? Static Mesh? ? Post Process? 次は、なぜその処理が重たいのだろう?? #UE4CEDEC

79.

各アセットやレンダリング手法の詳細 #UE4CEDEC

80.

各処理内容に特化したStat Stat XXXXXX 100種類以上の項目がある #UE4CEDEC

81.

各処理内容専用のコマンドや変数 レンダリング関連の設定コマンド r.XXXXXX 700種類以上 その中の影の設定コマンド r.shadow.XXXXXX 50種類以上 #UE4CEDEC

82.

Stat unit, unitgraph ? ? ? Draw Game Stat sceneredering Stat dumpframe ? Light? ? Particle? GPU profilegpu stat gpu ? Static Mesh? ? Post Process? 各処理の専用コマンドで理由を調査 stat LightRendering, Foliage, Particle, #UE4CEDEC r.XXXXX,

83.

プロファイリング補助コマンド #UE4CEDEC

84.

Console Command Show オブジェクトや機能のOn/Off #UE4CEDEC

85.

Console Command FreezeRendering 現時点のカメラのカリングをフリーズする #UE4CEDEC

86.

Console Command ToggleDebugCamera プレイヤーのカメラから離れ、自由に視点を変えられる #UE4CEDEC

87.

プロファイリングツール1 まとめ #UE4CEDEC

88.

グラフィクスプロファイル全体の流れ Step.1 Game? Draw? GPU? Stat unit / stat unit graph Draw Game Step.2 どの部分が重たい? Step.3 各処理のコマンドを 使って理由を調査 補助コマンド #UE4CEDEC Stat Light? Sceneredering Initviews, rhi Dumpframe, startfile Particle? Static Mesh? stat LightRendering, Foliage,,,, GPU profilegpu stat gpu Post Process? r.XXXXX, etc. show, freezerendering, toggledebugcamera, etc.

89.

なぜ、Console Commandから??? #UE4CEDEC

90.

実機確認できるから! #UE4CEDEC

91.

実機で確認しなきゃだめ? #UE4CEDEC

92.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

93.

プロファイルの流れ #UE4CEDEC

94.

オススメしない運用 PCでゲームデザインしてから、コンソールで最適化 Editor 1 ゲームプレイを 作り上げる 敵が100万体同時に 出て来るゲームだぜ! 2 Console コンソール向けに 最適化!! あれ。。。 1fpsしか出ない。 問題点 • 弱: 修正するアセットが大量になる。 • 強: 実機では実現不可能 対策1: 仕様を満たすために著しくクオリティを下げる 対策2: ゲームの仕様を再考する #UE4CEDEC

95.

オススメする運用 PCでゲームデザイン&実機プロファイリングを 並行して行う Editor 1 ゲームプレイを 作り上げる Console 夢と現実の すり合わせ 1 ゲームプレイに必要な パフォーマンス検証 利点 • 修正アセット(手戻り)の削減 • 実現可能なゲームデザイン 全体で見れば、製品開発スピードは前者よりも速くなります。(断言) #UE4CEDEC

96.

備考: (おすすめしない運用2) コンソールと同程度のスペックのPCによる開発 残念ながら全然あてになりません。 UE4のコードが全然違う! SDK APIがそもそも違う OS,ドライバがそもそも違う ハードウェア構成が厳密には違う 同スペックのPCとコンソールの違い #UE4CEDEC 各機種専用の 最適化を 行っている。。

97.

プロファイルの流れ まとめ #UE4CEDEC

98.

なぜプロファイル? (再掲) 最適化の前に、開発初期から、日常的に、 実機で プロファイルする癖を #UE4CEDEC

99.

備考 だけど 重要 各ビルドコンフィギュレーションによる設定の差 Development Test Shipping CPU Stat (CVars) 検証コードあり 全機能使える 検証コードなし Stat unit ぐらい GPU ほぼ同じ 無効 各ビルドコンフィギュレーションによる設定の差 CPU本来の負荷は Testビルドで計測するようにしてください。 日頃Developmentビルドで計測し、重たい部分などは実際のTestビルドで。 どれだけの差が出るかを定期的に調べて下さい。 #UE4CEDEC

100.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

101.

Editorのデバッグ機能 基本のプロファイリングツール 2 #UE4CEDEC

102.

今回紹介する3つのEditor機能 Viewmode #UE4CEDEC Show Statistics

103.

ViewMode 中間バッファやデバッグ用表示へ切り替える機能 #UE4CEDEC

104.

ViewMode EditorのViewModeから選択可能 見れる一覧は公式ドキュメントで詳細 に説明があります。 Link: 公式ドキュメント ViewMode 一部Viewmodeは Viewmode コマンドで 実機でも見ることが可能 #UE4CEDEC

105.

Optimization ViewModes #UE4CEDEC

106.

Light Complexity #UE4CEDEC

107.

Light Complexity 動的ライティングが どれだけされている かを視覚化 気づかずに、大きな ライティングをして いる際などは要注意。 5以上になると紫に なっていきます #UE4CEDEC

108.

Console Command togglelight 文字列 文字列を含むライトをOn/Offにすることができる。 #UE4CEDEC

109.

Deferred Lightingは 影がなければ動的ライト沢山おいても軽い? #UE4CEDEC

110.

範囲の小さい Movable Lightを100個 #UE4CEDEC VS 範囲の大きい Movable Lightを8個

111.

範囲の小さい Movable Lightを100個 VS 範囲の大きい Movable Lightを8個 Light Complexityでの比較 #UE4CEDEC

112.

範囲の小さい Movable Lightを100個 VS 範囲の大きい Movable Lightを8個 処理負荷確認方法 ProfileGPU / stat GPUのLightsにGPU負荷がでます #UE4CEDEC

113.

Q: Deferred Lightingならライトを沢山おいていいのか? ライトを沢山を”置けます”が、 ライトが触れるピクセルが増えれば増えるほど処理負荷は増えます。 簡易的に、Light Complexityという機能があるので、 そちらで高負荷なライティングの場所を探りましょう。 #UE4CEDEC

114.

Lightmap Density #UE4CEDEC

115.

Lightmap Density Lightmap 密度を視覚的に表示 #UE4CEDEC

116.

Lightmap Density ライトマップの密度は 処理負荷にも影響はしますが それよりも メモリ(テクスチャストリーミング) ロード時間に影響します 事例があるので紹介させてください #UE4CEDEC

117.

#UE4CEDEC

118.

#UE4CEDEC

119.

#UE4CEDEC

120.

#UE4CEDEC

121.

#UE4CEDEC

122.

#UE4CEDEC

123.

#UE4CEDEC

124.

#UE4CEDEC

125.

#UE4CEDEC

126.

#UE4CEDEC

127.

#UE4CEDEC

128.

#UE4CEDEC

129.

#UE4CEDEC

130.

#UE4CEDEC

131.

続きはスライドを! #UE4CEDEC

132.

Stationary Light Overlap #UE4CEDEC

133.

Stationary Lightのメインの制約 影付きStationary Lightを5つ以上重ねると、 5つ目以降のライトが”自動的に”MovableなLightになる。 #UE4CEDEC

134.

Stationary Lightのメインの制約 #UE4CEDEC

135.

Stationary Lightの影については、上記ブログが参考になります #UE4CEDEC http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary

136.

オーバラップしたStationary Lightのランタイム負荷 • Movable Lightとして 動的シャドウを生成するこ とになるので。。 – Draw, GPUともに負荷 がかかります。 #UE4CEDEC

137.

Stationary Lightのメインの制約 特に良いことは何もないので、 原則禁止が良いかと思います #UE4CEDEC

138.

Shader Complexity #UE4CEDEC

139.

Shader Complexity 各ピクセルのシェーダの 命令数の合算を表示する (赤い部分の殆どは、 半透明描画の重ね合わせ) #UE4CEDEC

140.

Shaderの命令数の見方 Material EditorのStat Window Stat WindowにPC版での大まかなシェーダ命令数を出してくれます #UE4CEDEC

141.

Shader Complexity の仕組み 不 透 明 不透明ポリゴンのシェーダ命令数のみ 不 透 明 半透明のシェーダ命令は加算されていく #UE4CEDEC

142.

Shader Complexity の見方 キャラクタの シェーダ命令数が多い 多分どっちも 半透明描画が 重なってる #UE4CEDEC

143.

Shader Complexityが赤いのは 直さなきゃ駄目? #UE4CEDEC

144.

注意点 シェーダの命令数 ≠ シェーダの重たさ (Cycle数と言おうか。。) (大雑把に見れば=でもいいけど。。。) #UE4CEDEC

145.

命令数と処理負荷の違い:1 1命令の重たさの違い パスワード変更しといて GDCでアテンドしてきて どちらも同じ1行(命令)だけれども、 タスク量(Cycle数)が違う。 #UE4CEDEC

146.

命令数と処理負荷の違い:2 命令の仕方の違い 命令数: 50 命令数: 1 ビールで乾杯; もう一杯; もう一杯; もう一杯; … もう一杯; 50杯ビール飲む; 1行 50行 ※あくまでイメージです。コンパイラは賢く処理するし、実際にForLoopが1命令になるわけではありません。 #UE4CEDEC

147.

命令数と処理負荷の違い:3 同じシェーダでも処理負荷がランタイムで変わる コンパイラは賢い。 アルファテストのあるシェーダを アルファテスト -> 色と計算するようにしたりする。(Early Exit) 透明部分の処理負荷 アルファテスト 不透明部分の処理負荷 アルファテスト #UE4CEDEC 色の計算

148.

シェーダの命令数とシェーダの重たさの違う例1 悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、 39命令のシェーダでも、 20msの処理負荷に #UE4CEDEC

149.

シェーダの命令数とシェーダの重たさの違う例2 悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、 2533命令のシェーダでも、 0.04msの処理負荷で済む。 #UE4CEDEC

150.

注意点 シェーダの命令数 ≠ シェーダの重たさ (Cycle数と言おうか。。) (大雑把に見れば=でもいいけど。。。) #UE4CEDEC

151.

Q. Shader Complexityで赤いのは直さなきゃ駄目? このように、 処理負荷は命令数だけでは厳密にはわかりません。 一番怖いのは、 効果の少ない最適化をしてしまうこと Shader Complexityが真っ赤だからといって、 必死に命令数を減らしても効果がないかもしれません。 ダメな例: テクスチャの参照回数がネックなのに、 キャラの重要な強調表現の計算量を減らす #UE4CEDEC

152.

Shader Complexityのおすすめの使い方 1 キャラクタなどの不透明オブジェクト 赤や白の場合。。。 マテリアルに問題ないかエンジニアに 一度ご相談 プロファイル例: キャラクタを単純なマテリアルに差し替えて 差分計測 #UE4CEDEC

153.

Shader Complexityのおすすめの使い方 2 半透明やMaskedマテリアル 赤や白の場合。。。 透明部分を小さくできないか検討 プロファイル例 Show Particles などを使ってエフェクトをOn/Offにしてみる #UE4CEDEC

154.

ということで、個人的にはShader Complexity は透明物の重なり具合にのみ使っています。。。 Shader Complexity View #UE4CEDEC

155.

それって。。。Quad Overdrawと同じじゃ。。 Shader Complexity View #UE4CEDEC Quad Over Draw

156.

Quad Overdraw #UE4CEDEC

157.

Quad Overdraw 同一Quadで 何回描画計算が走ったかを表示 Quad = 2 * 2 Pixel GPUはQuad単位で描画している。 Quad Over Draw #UE4CEDEC

158.

LOD Coloration #UE4CEDEC

159.

LOD Coloration どのLODモデルを表示して いるかを色で表示 0 #UE4CEDEC 7

160.

LODの処理負荷確認方法 LODを使わない場合、GPU描画負荷の 様々な箇所で負荷としてできてます。 処理負荷確認方法 BasePass、Prepass, Shadowなどの 処理が重たい際に、そのオブジェクトが どれくらいの処理負荷になってるいるか 確認する。 r.staticmeshLODDistanceScaleでおお ざっぱにLODの範囲を全体で変えて、ど れぐらいの処理軽減になるか見積もれる。 #UE4CEDEC

161.

Console Command r.staticmeshLODDistanceScale コマンドでLODのスケールを一括で変更 (大雑把に、LODを強くしたらどれだけ処理負荷が下がるかの見積もりとして) #UE4CEDEC

162.

Optimization ViewModes を見てきました。。。 #UE4CEDEC

163.

今回紹介する3つのEditor機能 Viewmode #UE4CEDEC Show Statistics

164.

Tips: 実機でViewModeの変更 Console Command: ViewMode XXXX • コンソールが対応していないViewMode – – – – Unlit StationaryLightOverlap Lit_DetailLighting ReflectionOverride • r.ForceDebugViewModesを1にすると。。 – ShaderComplexityも可能 #UE4CEDEC

165.

ConsoleCommand ViewMode “HOGEHOGE” 一覧 • • • • • • • • • • • • • • • • • • • • • • • case case case case case case case case case case case case case case case case case case case case case case case VMI_BrushWireframe:return TEXT("BrushWireframe"); VMI_Wireframe:return TEXT("Wireframe"); VMI_Unlit:return TEXT("Unlit"); VMI_Lit:return TEXT("Lit"); VMI_Lit_DetailLighting:return TEXT("Lit_DetailLighting"); VMI_LightingOnly:return TEXT("LightingOnly"); VMI_LightComplexity:return TEXT("LightComplexity"); VMI_ShaderComplexity:return TEXT("ShaderComplexity"); VMI_QuadOverdraw:return TEXT("QuadOverdraw"); VMI_ShaderComplexityWithQuadOverdraw: return TEXT("ShaderComplexityWithQuadOverdraw"); VMI_PrimitiveDistanceAccuracy:return TEXT("PrimitiveDistanceAccuracy"); VMI_MeshUVDensityAccuracy:return TEXT("MeshUVDensityAccuracy"); VMI_MaterialTextureScaleAccuracy: return TEXT("MaterialTexturecaleAccuracy"); VMI_RequiredTextureResolution: return TEXT("RequiredTextureResolution"); VMI_StationaryLightOverlap:return TEXT("StationaryLightOverlap"); VMI_LightmapDensity:return TEXT("LightmapDensity"); VMI_LitLightmapDensity:return TEXT("LitLightmapDensity"); VMI_ReflectionOverride:return TEXT("ReflectionOverride"); VMI_VisualizeBuffer:return TEXT("VisualizeBuffer"); VMI_CollisionPawn:return TEXT("CollisionPawn"); VMI_CollisionVisibility:return TEXT("CollisionVis"); VMI_LODColoration:return TEXT("LODColoration"); VMI_HLODColoration:return TEXT("HLODColoration"); #UE4CEDEC

166.

Show Console Command Show のエディタ設定版 #UE4CEDEC

167.

今回紹介する3つのEditor機能 Viewmode #UE4CEDEC Show Statistics

168.

Statistics シーンにおいてあるメッシュやテクスチャの情報を表で出してくれる #UE4CEDEC

169.

Statistics #UE4CEDEC

170.

Statistics Primitive Stats シーンのメッシュの統計情報を表示 何個シーンにある? #UE4CEDEC そのメッシュの ポリゴン数は? そのメッシュの シーン内の大きさは?

171.

Statistics Texture Stats シーン内に読み込まれているテクスチャの統計情報を表示 #UE4CEDEC

172.

Statistics (Primitive Stats) の半径を見て 不要に小さなオブジェクトがないかを探す #UE4CEDEC

173.

Robがいるこのシーン、 RobのメッシュをPrimitive Statsで見てみる あきらかに小さいRobがいる。 #UE4CEDEC

174.

草むらに小さなロブが沢山いた #UE4CEDEC

175.

3つのEditor機能を紹介してきました Viewmode #UE4CEDEC Show Statistics

176.

RenderDoc #UE4CEDEC

177.

UE4.16から標準プラグインに #UE4CEDEC

178.

RenderDocで何ができる? #UE4CEDEC

179.

GPUのレンダリング工程を まるはだかにできる! ※Windows限定 #UE4CEDEC

180.

EditorからのCapture ボタンひとつでCaptureを取ることができます #UE4CEDEC

181.

Runtimeからのキャプチャ renderdoc.CaptureFrameでCaptureしてくれます。 #UE4CEDEC

182.

RenderDoc の画面 #UE4CEDEC

183.

Event Browser • 呼び出された命令を階層表示してくれる。 • このBrowserでDrawCallを選ぶ • この後説明するエディタで、 選んだDrawCallの詳細がわかる #UE4CEDEC

184.

Texture Viewer • Input – そのDrawCallが使用 したテクスチャ一覧が • Output – そのDrawCallで出力 されたRenderTarget の一覧 #UE4CEDEC

185.

Texture Viewer 選択したDrawCallまで描画してくれるので、Event ViewerでDrawCallを選 択していくことによって、描画の流れを理解することができる。 EID: 3536 次の DrawCall EID: 3559 #UE4CEDEC

186.

Texture Viewer 選んだRenderTargetのピクセルの描画履歴を追うことが可能。 RenderTargetのみたいあたりに、右ボタンクリックで、Pixel Contextのズーム画面に。 更に正確には PixelContext画面で矢印キーで、ピクセルを選択 #UE4CEDEC

187.

Mesh Output そのDrawCallで呼び出された そのメッシュが、画像のどのあたりにレンダリング されるのかも描画してくれる メッシュを描画してくれる VS Input #UE4CEDEC VS Output Texture Viewerと比較

188.

Pipeline State • そのDrawCallの 各種設定などがわかる • 例えば、 – Depthの設定 – Rasterizerの設定 #UE4CEDEC

189.

Pipeline State Shaderも見ることがきる。 #UE4CEDEC

190.

Tips RenderDocでソースを見る方法 • r.Shaders.KeepDebugInfo=1 をConsoleVariables.iniに記述 • “-d3ddebug”オプションをエ ディタ起動 • シェーダコンパイルが再度すべ てに走るがRenderDocでソー スが見れるように #UE4CEDEC

191.

RenderDocまとめ 1フレームの描画をキャプチャし、 – どんな順に – どんなオブジェクトが – どんなテクスチャ/シェーダで。。。 レンダリングしているかがわかる便利ツール ※Windows限定 #UE4CEDEC RenderDoc

192.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

193.

Showcase #UE4CEDEC

194.

Foliageのプロファイリングをデモしてみます (資料は別途公開します) #UE4CEDEC

195.

本講演の目次 1. 2. 3. 4. 5. 6. はじめに 基本のプロファイリングツール 1 プロファイルの流れ 基本のプロファイリングツール 2 Showcase まとめ&おまけ #UE4CEDEC

196.

まとめのまえに。。 #UE4CEDEC

197.

各PlatformのProfiler #UE4CEDEC

198.

各コンソールにもRenderDocみたいなのないの? PC #UE4CEDEC Console

199.

各コンソールにもRenderDocみたいなのないの? PC Console PS4 Razor XBOX Pix などなど 各プラットフォームが用意してくれてます #UE4CEDEC

200.

Q.プラットフォームのプロファイラを 使ったほうがいいの? A. (テクニカルよりの方ならば) 絶対使った方が良いです チートです #UE4CEDEC

201.

プラットフォーム専用プロファイラのできること • RenderDocと同様の機能 (フレームのCapture&Replayシステム) • ハードウェアレベルのTrace機能 #UE4CEDEC

202.

ハードウェアレベルのTrace機能でわかること テクスチャ 使いすぎ? 頂点多い? シェーダの計算 が重たい? その描画が重たい理由が一発でわかります #UE4CEDEC ピクセル 打ちすぎ?

203.

ですが、それらを理解するためには、 こんなグラフを読み解く必要があります。 #UE4CEDEC Radeon GPU Profilerサイトより引用

204.

さらに。。。 グラフを読み解くためには、 GPU構成をある程度理解する必要があります。 #UE4CEDEC 【後藤弘茂のWeekly海外ニュース】AMDの新GPUアーキテクチャ「Graphics Core Next」の秘密 - PC Watch

205.

自習するのは大変そう。。。 #UE4CEDEC

206.

プラットフォーム別のUE4勉強会を開催します! UE4ライセンシの方々には日程が決まり次第別途ご連絡いたします 勿論ですが、各プラットフォームのNDAライセンスをお持ちの方限定です 10月末、11月頭 東京大阪二箇所で開催 #UE4CEDEC 11月末or12月上旬 東京開催

207.

まとめ #UE4CEDEC

208.

本日の内容 UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきました #UE4CEDEC

209.

グラフィクスプロファイル全体の流れ Step.1 Game? Draw? GPU? Stat unit / stat unit graph Draw Game Step.2 どの部分が重たい? Step.3 各処理のコマンドを 使って理由を調査 補助コマンド #UE4CEDEC Stat sceneredering Stat dumpframe… Light? Particle? Static Mesh? stat LightRendering, Foliage,,,, GPU profilegpu stat gpu Post Process? r.XXXXX, etc. show, freezerendering, toggledebugcamera, etc.

210.

3つのEditor機能やプラグイン Viewmode #UE4CEDEC Show Statistics RenderDoc

211.

なぜプロファイル? プロファイルしない最適化は危険 最適化の前に、開発初期から、日常的に、 実機で、 プロファイルする癖を #UE4CEDEC

212.

本当に、本当にありがとうございました! 次回は10月8日のこの場所で! #UE4CEDEC