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

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

Embed Size (px)

Citation preview

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

#UE4CEDEC

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

Nori Shinoyama Senior Support Engineer @ Epic Games Japan

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

#UE4CEDEC

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

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

#UE4CEDEC

本日の内容

UE4のプロファイリングツールを俯瞰で眺めながら、

UE4上でどのように

プロファイルしていくのかを見ていきます

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

#UE4CEDEC

なぜプロファイル?

どうしてそんな狭く地味な範囲を?

最適化じゃないの?

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

#UE4CEDEC

なぜプロファイル?あるあるCase.1

ありがたいことに、コミュニティやライセンシ様のおかげで、ネット上に沢山の最適化Tipsが出てくるようになりました。

Tips1

Tips2

Tips3

Optimization

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

#UE4CEDEC

なぜプロファイル?あるあるCase.1

でも、こんなときはどうしましょう?

「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」

Tips1

Tips2

Tips3

Optimization一つしかできないなら。。どれ?

??

??

??

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

#UE4CEDEC

なぜプロファイル?あるあるCase.1

でも、こんなときはどうしましょう?

「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」

Tips1

Tips2

Tips3

Optimization

Profiling

どれが一番効果的?

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

#UE4CEDEC

なぜプロファイル?あるあるCase.2

Tips1

Tips2

Tips3

Optimization。。本当に必要?

全部やりました!!

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

#UE4CEDEC

なぜプロファイル?あるあるCase.2

半透明は重いらしいので、エフェクトは減らしました!

すべてのテクスチャ解像度を512に落としました!

DrawCall増えると怖いのでオブジェクトをまとめました!

とりあえずライトはMovableをやめて全部Stationaryに!

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

#UE4CEDEC

なぜプロファイル?あるあるCase.2

Tips1

Tips2

Tips3

Optimization

Profiling

どれはやらなくていい?

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

#UE4CEDEC

どちらも極端な例ですが、

実際の制作現場でよくあることだと思います。

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

#UE4CEDEC

プロファイルしない最適化は危険

中身を知らずにとりあえずその設定を試したり。。

ボトルネックと違うところを最適化したり。。

最適化に時間や労力をかけても、

パフォーマンスは上がらず、

クオリティだけ下がってしまったり。。

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

#UE4CEDEC

なぜプロファイル?

最適化の前に、

開発初期から、日常的に、

プロファイルする癖を

ボトルネックの予測精度を上げて。。。

ボトルネック部分 -> 短時間で効率的な最適化を

ボトルネックじゃない部分 -> 贅沢に使いクオリティアップに

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

#UE4CEDEC

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

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

#UE4CEDEC

本日の内容 (再掲)

UE4のプロファイリングツールを俯瞰で眺めながら、

UE4上でどのように

プロファイルしていくのかを見ていきます

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

#UE4CEDEC

本講演の対象者

UE4を触って頂いている

技術寄りのアーティストやデザイナの方がメインです

(触っていない方は、UE4はこんな機能があるのか~と眺めて頂ければ)

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

#UE4CEDEC

本講演で話さないこと

• コリジョン、ネットワーク、アニメーションなどのプロファイル手法

• モバイルやVRに特化した内容

• きれいな絵作りする方法

• プラットフォーム固有の話

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

#UE4CEDEC

備考

• Twitter等での情報拡散にご協力ください。– #UE4CEDEC

• 本資料はすぐにネットにアップされます。

• エディタは英語版を使います。

• UE4.17をベースにします。

• 質疑応答は時間があまれば。。

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

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

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

#UE4CEDEC

Console Command &

Console Variables (CVars)

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

#UE4CEDEC

Console Command & Variables (CVars)

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

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

#UE4CEDEC

Console Command & Console Variables (CVars)一覧表の作成

Help -> “Console Variables”を選ぶ事によって、全コマンドのHTMLヘルプを出力

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

#UE4CEDEC

Console Command & Console Variables (CVars)一覧表

.htmlファイルで、各コマンドとそのヘルプを出力してくれる

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

#UE4CEDEC

Command入力方法

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

#UE4CEDEC

Command / CVar の送り方 1

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

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

#UE4CEDEC

Console Windowを立ち上げショートカットの指定

Project Settings/

Input

の一番下に

“Console Keys”

という設定があり、

そこで指定できます。

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

#UE4CEDEC

Command / CVar の送り方 2

Blueprintで送る“Execute Console Command” ノード

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

#UE4CEDEC

Command / CVar の送り方 3

SessionFrontendを使って、PC上から実機で動いているアプリケーションに対してコマンドを送る

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

#UE4CEDEC

Command / CVar の送り方 4

起動時引数で送る–execmds=“コマンドA, コマンドB”

”,” で複数コマンドを区切る

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

#UE4CEDEC

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

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

#UE4CEDEC

Stat fps / unit / unitgraph

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

#UE4CEDEC

Console Commandstat fps / stat unit / stat unitgraph

Stat unitgraph

Stat fps

Stat unit

CPUやGPUの負荷を表示する基本コマンド

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

#UE4CEDEC

レンダリングから見た Game / Draw / GPU

Game Draw GPU

CPU GPU

世界のアップデート

時計の針を進めてキャラクタの動き物理などを確定

Gameから来たシーンを解釈してGPU描画命令(DrawCallなど)に変換する

GPUが実際に頂点やピクセルを計算して絵をつくる

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

#UE4CEDEC

Game Draw GPU

合計がそのフレームの処理時間じゃないの??

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

#UE4CEDEC

Game / Draw / GPUの並列処理

Game

Draw

GPU

1

1

1

Display 10

VSync VSync VSync

2

2

2

2

各処理が並行で進んでいるため、Game/Draw/GPUの最大がそのフレームの処理時間になる。

この図はあくまで概要です。実際のスレッドの流れは、プラットフォームやレンダリング手法で異なります。

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

#UE4CEDEC

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

Game Draw GPU

CPU GPU

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

#UE4CEDEC

Game Draw GPU

CPU GPU

GPUの処理負荷を見てみる

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

#UE4CEDEC

GPUの処理負荷を見てみる

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

#UE4CEDEC

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

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

#UE4CEDEC

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

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

#UE4CEDEC

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

Editor Console

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

#UE4CEDEC

Tips (Advanced)実機でBasePassのメッシュ単位の処理負荷を出力する方法

• r.ShowMaterialDrawEvents– ただし、RHIThreadがOffじゃないと動作しない。

• r.RHISetGPUCaptureOptions– 一括設定コマンド

– 自動でRHIThreadをOffに

• ※DrawThreadの負荷が跳ね上がります。

– 計測するときにOnにして、それ以外ではOffに。

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

#UE4CEDEC

Console Command

Stat GPU

ProfileGPUのリアルタイム表示版

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

#UE4CEDEC

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

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

#UE4CEDEC

Game Draw GPU

CPU GPU

profilegpu

stat gpu

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

#UE4CEDEC

Game Draw GPU

CPU GPU

Drawの処理負荷を見てみるまえに。。。

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

#UE4CEDEC

Game Draw GPU

CPU GPU

CPU側の処理負荷確認方法

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

#UE4CEDEC

ConsoleCommandStat dumpframe

1フレームのCPU処理フローの階層表示

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

#UE4CEDEC

ConsoleCommandStat dumpframe

1フレームのCPU処理フローの階層表示

17.773ms ( 27) - Thread_12a6c_0 - RenderThread16.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部分

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

#UE4CEDEC

Stat dumpframeオプションで見やすい形に調整可能

例: Drawの処理負荷を計測する方法

stat dumpframe -root=renderthread –depth=5 -ms=.1

どの処理から下を表示するか?例: GamethreadRenderthreadInitviews

何階層深くまで表示するか

何ms以上の処理だけ記載するか

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

#UE4CEDEC

Console Commandstat startfile / stopfile

複数フレームをキャプチャして、後々にエディタで処理負荷をチェックする

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

#UE4CEDEC

stat startfile / stopfile使い方

Stat stopfileと打ち込むと、プロファイルデータを出力する

書き出し先はログ(LogStats)に出る

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

#UE4CEDEC

stat startfile / stopfile使い方

Session Frontendを立ち上げる

Profiler Tabからファイルを読み込む

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

#UE4CEDEC

例えば、各アクターのTickがどれだけかかっているか?などがわかるようになります。

注意点: 処理順番ではありません。処理負荷順や名前順でソートを変えたりできます。

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

#UE4CEDEC

Game Draw GPU

CPU GPU

CPU側の処理負荷確認方法Stat dumpframe

Stat startfile/stopfile

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

#UE4CEDEC

Game Draw GPU

CPU GPU

Stat dumpframe

Stat startfile/stopfile

Drawの処理負荷を見てみる

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

#UE4CEDEC

Drawの処理負荷を見てみる

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

#UE4CEDEC

Base Pass

Drawの主な役割

GPUDraw

②GPUに描画命令を発行する

Transparency

Z Prepass

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

#UE4CEDEC

Base Pass

Drawの主な役割

GPUDraw

②GPUに描画命令を発行する

Transparency

Z Prepass

どのオブジェクトを?リストないの??

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

#UE4CEDEC

Base Pass

Drawの主な役割

Init Views

GPUDraw

②GPUに描画命令を発行する

Transparency

Z Prepass

①渡すオブジェクトを選定しそれぞれのパスのリストを作る

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

#UE4CEDEC

InitViewsで行われるカリング

Init Views

①渡すオブジェクトを選定しそれぞれのパスのリストを作る

選定方法1: Frustum Culling

選定方法2: Occlusion Culling

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

#UE4CEDEC

(CPU) Frustum Culling

Object

Object

見えない!見える

オブジェクトのバウンディングボックスを調べ、画面外のオブジェクトをGPUに計算させない機能

Object

見える

Object

見えない!

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

#UE4CEDEC

Occlusion Culling

Object

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

Object

Object

見えない!

見える

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

#UE4CEDEC

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

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

#UE4CEDEC

Base Pass

Drawの主な役割

Init Views

GPUDraw

②GPUに描画命令を発行する

Transparency

Z Prepass

①渡すオブジェクトを選定しそれぞれのパスのリストを作る

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

#UE4CEDEC

Console Commandstat SceneRendering

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

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

#UE4CEDEC

Stat scenerendeing注意点

(表示内容はフラットですが、) 処理内容は階層的です

RenderViewFamiliy- InitViews- BasePass drawing-- StaticDrawList drawing-- Dynamic Primitive drawing

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

#UE4CEDEC

Stat scenerendeing

Stat SceneRenderingで見える負荷はDrawの負荷です。GPUの処理ではありません!

Draw が重たい場合は真っ先に参照してみてください

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

#UE4CEDEC

ConsoleCommandstat InitViews

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

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

#UE4CEDEC

ConsoleCommandstat InitViews

• InitViewsは何の処理をしてる??– 画面に見えないオブジェクトを省く処理

• Frustum Culling

• Occlusion Culling

– レンダリングオブジェクトをソートしたり

– シャドウ計算に寄与するオブジェクトもここで算出している

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

#UE4CEDEC

stat InitViewsでよく見るところ

処理時間Frustum CullOcclusion Cull

Processed Primitives: 投入された全オブジェクト数Frustum Culled primitives: カリングされたオブジェクト数Occluded Culled Primitives: オクルージョンカリングされたPrimitive数

生き残ったPrimitiveたちVisible Static Mesh ElementsVisible Dynamic Mesh Elements

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

#UE4CEDEC

Stat initviews

Culling処理はCPU負荷をあげますが、GPU負荷を下げるために必ず必要な処理です。

Culling負荷が高い場合、遠くのオブジェクトや目に見えないオブジェクトを自前でVisibilityをOffにしたりなどが効果があります。

また、不要なオブジェクトがGPUに投入されていないか確認するために、FreezeRenderingコマンドも用いて下さい。

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

#UE4CEDEC

備考: Precomputed Visibilityについて

• Precomputed VisibilityはStaticなオブジェクトに対して、シーンのある視点から見えるオブジェクトを事前計算しリストを作成しておく手法です。

• メモリやデータサイズが増えますが、InitViewsの負荷削減につながりますので、静的オブジェクトが多い方は参考にしてください。

• 英語ですが、以下のスレッドに使い方がとても丁寧に説明されています。– http://timhobsonue4.snappages.com/culling-precomputed-visibility-

volumes

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

#UE4CEDEC

備考: 全体のDrawCall数を把握したい場合Stat RHI

“Draw primitive Calls”でシーン内の全DrawCall数を確認

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

#UE4CEDEC

Game Draw GPU

CPU GPU

Stat dumpframe

Stat startfile/stopfile

Stat SceneRendering

Stat InitViews

Stat RHI

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

#UE4CEDEC

ここまででどの箇所が重たいのかだいたいわかるようになってきた

profilegpustat gpu

Stat scenerederingStat dumpframe

Stat unit, unitgraph

Game GPUDraw

? ? ?

Light? Particle? Static Mesh? Post Process?

?? ? ?

次は、なぜその処理が重たいのだろう??

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

#UE4CEDEC

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

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

#UE4CEDEC

各処理内容に特化したStat

Stat XXXXXX100種類以上の項目がある

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

#UE4CEDEC

各処理内容専用のコマンドや変数

レンダリング関連の設定コマンドr.XXXXXX700種類以上

その中の影の設定コマンドr.shadow.XXXXXX50種類以上

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

#UE4CEDEC

Game GPU

profilegpustat gpu

Stat scenerederingStat dumpframe

Draw

Light? Particle? Static Mesh? Post Process?

Stat unit, unitgraph

? ? ?

?? ? ?

各処理の専用コマンドで理由を調査stat LightRendering, Foliage, Particle, r.XXXXX,

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

#UE4CEDEC

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

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

#UE4CEDEC

Console CommandShow

オブジェクトや機能のOn/Off

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

#UE4CEDEC

Console CommandFreezeRendering

現時点のカメラのカリングをフリーズする

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

#UE4CEDEC

Console CommandToggleDebugCamera

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

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

#UE4CEDEC

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

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

#UE4CEDEC

グラフィクスプロファイル全体の流れ

show, freezerendering, toggledebugcamera, etc.

stat LightRendering, Foliage,,,, r.XXXXX,etc.

Game GPU

Stat unit / stat unit graph

Draw

Step.1Game? Draw? GPU?

Step.2どの部分が重たい?

Step.3各処理のコマンドを使って理由を調査

profilegpustat gpu

ScenerederingInitviews, rhi

Dumpframe, startfile

Light? Particle? Static Mesh? Post Process?

Stat

補助コマンド

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

#UE4CEDEC

なぜ、Console Commandから???

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

#UE4CEDEC

実機確認できるから!

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

#UE4CEDEC

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

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

プロファイルの流れ

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

#UE4CEDEC

Console

オススメしない運用PCでゲームデザインしてから、コンソールで最適化

Editor 1

ゲームプレイを作り上げる

2

コンソール向けに最適化!!

問題点• 弱: 修正するアセットが大量になる。• 強: 実機では実現不可能

対策1: 仕様を満たすために著しくクオリティを下げる対策2: ゲームの仕様を再考する

敵が100万体同時に出て来るゲームだぜ!

あれ。。。1fpsしか出ない。

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

#UE4CEDEC

Console

オススメする運用PCでゲームデザイン&実機プロファイリングを並行して行う

Editor 1

ゲームプレイを作り上げる

利点• 修正アセット(手戻り)の削減• 実現可能なゲームデザイン

全体で見れば、製品開発スピードは前者よりも速くなります。(断言)

夢と現実のすり合わせ

ゲームプレイに必要なパフォーマンス検証

1

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

#UE4CEDEC

備考: (おすすめしない運用2) コンソールと同程度のスペックのPCによる開発

残念ながら全然あてになりません。

OS,ドライバがそもそも違う

ハードウェア構成が厳密には違う

SDK APIがそもそも違う

UE4のコードが全然違う!

同スペックのPCとコンソールの違い

各機種専用の最適化を行っている。。

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

#UE4CEDEC

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

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

#UE4CEDEC

なぜプロファイル? (再掲)

最適化の前に、開発初期から、日常的に、

実機でプロファイルする癖を

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

#UE4CEDEC

備考 だけど 重要各ビルドコンフィギュレーションによる設定の差

CPU Stat (CVars) GPU

Development 検証コードあり 全機能使える

ほぼ同じTest検証コードなし

Stat unit ぐらい

Shipping 無効

各ビルドコンフィギュレーションによる設定の差

CPU本来の負荷は Testビルドで計測するようにしてください。日頃Developmentビルドで計測し、重たい部分などは実際のTestビルドで。どれだけの差が出るかを定期的に調べて下さい。

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

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

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

#UE4CEDEC

今回紹介する3つのEditor機能

Viewmode Show Statistics

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

#UE4CEDEC

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

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

#UE4CEDEC

ViewMode

EditorのViewModeから選択可能見れる一覧は公式ドキュメントで詳細に説明があります。

Link: 公式ドキュメント ViewMode

一部ViewmodeはViewmode コマンドで実機でも見ることが可能

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

#UE4CEDEC

Optimization ViewModes

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

#UE4CEDEC

Light Complexity

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

#UE4CEDEC

Light Complexity

動的ライティングがどれだけされているかを視覚化

気づかずに、大きなライティングをしている際などは要注意。

5以上になると紫になっていきます

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

#UE4CEDEC

Console Commandtogglelight 文字列

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

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

#UE4CEDEC

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

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

#UE4CEDEC

範囲の小さいMovable Lightを100個

範囲の大きいMovable Lightを8個VS

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

#UE4CEDEC

範囲の小さいMovable Lightを100個

範囲の大きいMovable Lightを8個VS

Light Complexityでの比較

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

#UE4CEDEC

範囲の小さいMovable Lightを100個

範囲の大きいMovable Lightを8個VS

処理負荷確認方法ProfileGPU / stat GPUのLightsにGPU負荷がでます

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

#UE4CEDEC

Q: Deferred Lightingならライトを沢山おいていいのか?

ライトを沢山を”置けます”が、

ライトが触れるピクセルが増えれば増えるほど処理負荷は増えます。

簡易的に、Light Complexityという機能があるので、

そちらで高負荷なライティングの場所を探りましょう。

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

#UE4CEDEC

Lightmap Density

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

#UE4CEDEC

Lightmap Density

Lightmap 密度を視覚的に表示

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

#UE4CEDEC

Lightmap Density

ライトマップの密度は

処理負荷にも影響はしますが

それよりも

メモリ(テクスチャストリーミング)

ロード時間に影響します

事例があるので紹介させてください

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

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

#UE4CEDEC

続きはスライドを!

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

#UE4CEDEC

Stationary Light Overlap

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

#UE4CEDEC

Stationary Lightのメインの制約

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

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

#UE4CEDEC

Stationary Lightのメインの制約

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

#UE4CEDEC

Stationary Lightの影については、上記ブログが参考になります

http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary

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

#UE4CEDEC

オーバラップしたStationary Lightのランタイム負荷

• Movable Lightとして動的シャドウを生成することになるので。。

– Draw, GPUともに負荷がかかります。

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

#UE4CEDEC

Stationary Lightのメインの制約

特に良いことは何もないので、原則禁止が良いかと思います

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

#UE4CEDEC

Shader Complexity

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

#UE4CEDEC

Shader Complexity

各ピクセルのシェーダの命令数の合算を表示する

(赤い部分の殆どは、半透明描画の重ね合わせ)

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

#UE4CEDEC

Shaderの命令数の見方Material EditorのStat Window

Stat WindowにPC版での大まかなシェーダ命令数を出してくれます

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

#UE4CEDEC

Shader Complexityの仕組み

不透明

不透明ポリゴンのシェーダ命令数のみ

半透明のシェーダ命令は加算されていく

不透明

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

#UE4CEDEC

Shader Complexityの見方

キャラクタのシェーダ命令数が多い

半透明描画が重なってる

多分どっちも

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

#UE4CEDEC

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

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

#UE4CEDEC

注意点

シェーダの命令数 ≠ シェーダの重たさ

(大雑把に見れば=でもいいけど。。。)

(Cycle数と言おうか。。)

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

#UE4CEDEC

命令数と処理負荷の違い:1

1命令の重たさの違い

パスワード変更しといて

GDCでアテンドしてきて

どちらも同じ1行(命令)だけれども、タスク量(Cycle数)が違う。

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

#UE4CEDEC

命令数と処理負荷の違い:2

命令の仕方の違い

命令数: 50

ビールで乾杯;

もう一杯;

もう一杯;

もう一杯;

もう一杯;

命令数: 1

50杯ビール飲む;

50行

1行

※あくまでイメージです。コンパイラは賢く処理するし、実際にForLoopが1命令になるわけではありません。

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

#UE4CEDEC

命令数と処理負荷の違い:3

同じシェーダでも処理負荷がランタイムで変わる

コンパイラは賢い。 アルファテストのあるシェーダを

アルファテスト -> 色と計算するようにしたりする。(Early Exit)

色の計算

アルファテスト透明部分の処理負荷

アルファテスト不透明部分の処理負荷

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

#UE4CEDEC

シェーダの命令数とシェーダの重たさの違う例1

悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、

39命令のシェーダでも、

20msの処理負荷に

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

#UE4CEDEC

シェーダの命令数とシェーダの重たさの違う例2

悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、

2533命令のシェーダでも、

0.04msの処理負荷で済む。

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

#UE4CEDEC

注意点

シェーダの命令数 ≠ シェーダの重たさ

(大雑把に見れば=でもいいけど。。。)

(Cycle数と言おうか。。)

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

#UE4CEDEC

このように、処理負荷は命令数だけでは厳密にはわかりません。

一番怖いのは、効果の少ない最適化をしてしまうこと

Q. Shader Complexityで赤いのは直さなきゃ駄目?

Shader Complexityが真っ赤だからといって、必死に命令数を減らしても効果がないかもしれません。

ダメな例: テクスチャの参照回数がネックなのに、

キャラの重要な強調表現の計算量を減らす

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

#UE4CEDEC

Shader Complexityのおすすめの使い方 1キャラクタなどの不透明オブジェクト

赤や白の場合。。。

マテリアルに問題ないかエンジニアに一度ご相談

プロファイル例: キャラクタを単純なマテリアルに差し替えて差分計測

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

#UE4CEDEC

Shader Complexityのおすすめの使い方 2半透明やMaskedマテリアル

赤や白の場合。。。

透明部分を小さくできないか検討

プロファイル例Show Particlesなどを使ってエフェクトをOn/Offにしてみる

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

#UE4CEDEC

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

Shader Complexity View

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

#UE4CEDEC

それって。。。Quad Overdrawと同じじゃ。。

Shader Complexity View Quad Over Draw

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

#UE4CEDEC

Quad Overdraw

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

#UE4CEDEC

Quad Overdraw

同一Quadで何回描画計算が走ったかを表示

Quad = 2 * 2 PixelGPUはQuad単位で描画している。

Quad Over Draw

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

#UE4CEDEC

LOD Coloration

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

#UE4CEDEC

LOD Coloration

0 7

どのLODモデルを表示しているかを色で表示

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

#UE4CEDEC

LODの処理負荷確認方法

LODを使わない場合、GPU描画負荷の様々な箇所で負荷としてできてます。

処理負荷確認方法BasePass、Prepass, Shadowなどの処理が重たい際に、そのオブジェクトがどれくらいの処理負荷になってるいるか確認する。

r.staticmeshLODDistanceScaleでおおざっぱにLODの範囲を全体で変えて、どれぐらいの処理軽減になるか見積もれる。

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

#UE4CEDEC

Console Commandr.staticmeshLODDistanceScale

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

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

#UE4CEDEC

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

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

#UE4CEDEC

今回紹介する3つのEditor機能

Viewmode Show Statistics

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

#UE4CEDEC

Tips: 実機でViewModeの変更Console Command: ViewMode XXXX

• コンソールが対応していないViewMode– Unlit

– StationaryLightOverlap

– Lit_DetailLighting

– ReflectionOverride

• r.ForceDebugViewModesを1にすると。。– ShaderComplexityも可能

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

#UE4CEDEC

ConsoleCommandViewMode “HOGEHOGE” 一覧

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

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

#UE4CEDEC

Show

Console Command Show のエディタ設定版

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

#UE4CEDEC

今回紹介する3つのEditor機能

Viewmode Show Statistics

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

#UE4CEDEC

Statistics

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

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

#UE4CEDEC

Statistics

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

#UE4CEDEC

StatisticsPrimitive Stats

何個シーンにある? そのメッシュのポリゴン数は?

そのメッシュのシーン内の大きさは?

シーンのメッシュの統計情報を表示

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

#UE4CEDEC

StatisticsTexture Stats

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

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

#UE4CEDEC

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

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

#UE4CEDEC

Robがいるこのシーン、RobのメッシュをPrimitive Statsで見てみる

あきらかに小さいRobがいる。

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

#UE4CEDEC

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

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

#UE4CEDEC

3つのEditor機能を紹介してきました

Viewmode Show Statistics

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

#UE4CEDEC

RenderDoc

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

#UE4CEDEC

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

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

#UE4CEDEC

RenderDocで何ができる?

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

#UE4CEDEC

GPUのレンダリング工程をまるはだかにできる!

※Windows限定

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

#UE4CEDEC

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

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

#UE4CEDEC

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

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

#UE4CEDEC

RenderDoc の画面

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

#UE4CEDEC

Event Browser

• 呼び出された命令を階層表示してくれる。

• このBrowserでDrawCallを選ぶ

• この後説明するエディタで、選んだDrawCallの詳細がわかる

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

#UE4CEDEC

Texture Viewer

• Input– そのDrawCallが使用

したテクスチャ一覧が

• Output– そのDrawCallで出力

されたRenderTargetの一覧

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

#UE4CEDEC

Texture Viewer

選択したDrawCallまで描画してくれるので、Event ViewerでDrawCallを選択していくことによって、描画の流れを理解することができる。

EID: 3536

EID: 3559

次のDrawCall

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

#UE4CEDEC

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

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

#UE4CEDEC

Mesh Output

そのDrawCallで呼び出されたメッシュを描画してくれる

VS Input VS Output

そのメッシュが、画像のどのあたりにレンダリングされるのかも描画してくれる

Texture Viewerと比較

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

#UE4CEDEC

Pipeline State

• そのDrawCallの各種設定などがわかる

• 例えば、

– Depthの設定

– Rasterizerの設定

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

#UE4CEDEC

Pipeline StateShaderも見ることがきる。

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

#UE4CEDEC

TipsRenderDocでソースを見る方法

• r.Shaders.KeepDebugInfo=1をConsoleVariables.iniに記述

• “-d3ddebug”オプションをエディタ起動

• シェーダコンパイルが再度すべてに走るがRenderDocでソースが見れるように

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

#UE4CEDEC

RenderDoc

RenderDocまとめ

1フレームの描画をキャプチャし、

– どんな順に

– どんなオブジェクトが

– どんなテクスチャ/シェーダで。。。

レンダリングしているかがわかる便利ツール

※Windows限定

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

Showcase

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

#UE4CEDEC

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

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

#UE4CEDEC

本講演の目次

1. はじめに2. 基本のプロファイリングツール 13. プロファイルの流れ4. 基本のプロファイリングツール 25. Showcase6. まとめ&おまけ

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

#UE4CEDEC

まとめのまえに。。

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

#UE4CEDEC

各PlatformのProfiler

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

#UE4CEDEC

各コンソールにもRenderDocみたいなのないの?

ConsolePC

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

#UE4CEDEC

各コンソールにもRenderDocみたいなのないの?

ConsolePC

PS4 Razor

XBOX Pix

などなど各プラットフォームが用意してくれてます

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

#UE4CEDEC

Q.プラットフォームのプロファイラを使ったほうがいいの?

A.

(テクニカルよりの方ならば)

絶対使った方が良いです

チートです

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

#UE4CEDEC

プラットフォーム専用プロファイラのできること

• RenderDocと同様の機能 (フレームのCapture&Replayシステム)

• ハードウェアレベルのTrace機能

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

#UE4CEDEC

ハードウェアレベルのTrace機能でわかること

頂点多い?

ピクセル打ちすぎ?

テクスチャ使いすぎ?

シェーダの計算が重たい?

その描画が重たい理由が一発でわかります

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

#UE4CEDEC

ですが、それらを理解するためには、こんなグラフを読み解く必要があります。

Radeon GPU Profilerサイトより引用

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

#UE4CEDEC

さらに。。。グラフを読み解くためには、

GPU構成をある程度理解する必要があります。

【後藤弘茂のWeekly海外ニュース】AMDの新GPUアーキテクチャ「Graphics Core Next」の秘密 - PC Watch

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

#UE4CEDEC

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

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

#UE4CEDEC

プラットフォーム別のUE4勉強会を開催します!UE4ライセンシの方々には日程が決まり次第別途ご連絡いたします

勿論ですが、各プラットフォームのNDAライセンスをお持ちの方限定です

10月末、11月頭東京大阪二箇所で開催

11月末or12月上旬東京開催

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

#UE4CEDEC

まとめ

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

#UE4CEDEC

本日の内容

UE4のプロファイリングツールを俯瞰で眺めながら、

UE4上でどのように

プロファイルしていくのかを見ていきました

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

#UE4CEDEC

グラフィクスプロファイル全体の流れ

show, freezerendering, toggledebugcamera, etc.

stat LightRendering, Foliage,,,, r.XXXXX,etc.

Game GPU

Stat unit / stat unit graph

Draw

Step.1Game? Draw? GPU?

Step.2どの部分が重たい?

Step.3各処理のコマンドを使って理由を調査

profilegpustat gpu

Stat scenerederingStat dumpframe…

Light? Particle? Static Mesh? Post Process?

補助コマンド

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

#UE4CEDEC

3つのEditor機能やプラグイン

Viewmode Show Statistics RenderDoc

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

#UE4CEDEC

なぜプロファイル?

プロファイルしない最適化は危険

最適化の前に、開発初期から、日常的に、

実機で、

プロファイルする癖を

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

#UE4CEDEC

本当に、本当にありがとうございました!

次回は10月8日のこの場所で!