Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

11,648 views

Published on

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

Published in: Software

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

  1. 1. #UE4CEDEC UE4 プロファイリングツール総おさらい (グラフィクス編) Nori Shinoyama Senior Support Engineer @ Epic Games Japan
  2. 2. #UE4CEDEC はじめに 最適化の前にプロファイル
  3. 3. #UE4CEDEC 本日の内容 UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきます
  4. 4. #UE4CEDEC なぜプロファイル? どうしてそんな狭く地味な範囲を? 最適化じゃないの?
  5. 5. #UE4CEDEC なぜプロファイル? あるあるCase.1 ありがたいことに、コミュニティやライセンシ様のおかげで、 ネット上に沢山の最適化Tipsが出てくるようになりました。 Tips1 Tips2 Tips3 Optimization
  6. 6. #UE4CEDEC なぜプロファイル? あるあるCase.1 でも、こんなときはどうしましょう? 「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」 Tips1 Tips2 Tips3 Optimization 一つしかできないなら。。 どれ? ?? ?? ??
  7. 7. #UE4CEDEC なぜプロファイル? あるあるCase.1 でも、こんなときはどうしましょう? 「今週中にこのシーン60fpsで安定させて。まだ20fpsしか出ないけど」 Tips1 Tips2 Tips3 Optimization Profiling どれが一番効果的?
  8. 8. #UE4CEDEC なぜプロファイル? あるあるCase.2 Tips1 Tips2 Tips3 Optimization 。。本当に必要? 全部やりました!!
  9. 9. #UE4CEDEC なぜプロファイル? あるあるCase.2 半透明は重いらしいので、 エフェクトは減らしました! すべてのテクスチャ 解像度を512に落としました! DrawCall増えると怖いので オブジェクトをまとめました! とりあえずライトはMovable をやめて全部Stationaryに!
  10. 10. #UE4CEDEC なぜプロファイル? あるあるCase.2 Tips1 Tips2 Tips3 Optimization Profiling どれはやらなくていい?
  11. 11. #UE4CEDEC どちらも極端な例ですが、 実際の制作現場でよくあることだと思います。
  12. 12. #UE4CEDEC プロファイルしない最適化は危険 中身を知らずにとりあえずその設定を試したり。。 ボトルネックと違うところを最適化したり。。 最適化に時間や労力をかけても、 パフォーマンスは上がらず、 クオリティだけ下がってしまったり。。
  13. 13. #UE4CEDEC なぜプロファイル? 最適化の前に、 開発初期から、日常的に、 プロファイルする癖を ボトルネックの予測精度を上げて。。。 ボトルネック部分 -> 短時間で効率的な最適化を ボトルネックじゃない部分 -> 贅沢に使いクオリティアップに
  14. 14. #UE4CEDEC UE4の充実したプロファイリングツール
  15. 15. #UE4CEDEC 本日の内容 (再掲) UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきます
  16. 16. #UE4CEDEC 本講演の対象者 UE4を触って頂いている 技術寄りのアーティストやデザイナの方がメインです (触っていない方は、UE4はこんな機能があるのか~と眺めて頂ければ)
  17. 17. #UE4CEDEC 本講演で話さないこと • コリジョン、ネットワーク、アニメーションなどの プロファイル手法 • モバイルやVRに特化した内容 • きれいな絵作りする方法 • プラットフォーム固有の話
  18. 18. #UE4CEDEC 備考 • Twitter等での情報拡散にご協力ください。 – #UE4CEDEC • 本資料はすぐにネットにアップされます。 • エディタは英語版を使います。 • UE4.17をベースにします。 • 質疑応答は時間があまれば。。
  19. 19. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  20. 20. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  21. 21. #UE4CEDEC 基本のプロファイリングツール 1 Console Command & CVars
  22. 22. #UE4CEDEC Console Command & Console Variables (CVars)
  23. 23. #UE4CEDEC Console Command & Variables (CVars) コマンドによって、ゲーム内の挙動を変えたり情報を出力する方法 (大文字小文字の区別はありません)
  24. 24. #UE4CEDEC Console Command & Console Variables (CVars) 一覧表の作成 Help -> “Console Variables” を選ぶ事によって、全コマンドのHTMLヘルプを出力
  25. 25. #UE4CEDEC Console Command & Console Variables (CVars) 一覧表 .htmlファイルで、各コマンドとそのヘルプを出力してくれる
  26. 26. #UE4CEDEC Command入力方法
  27. 27. #UE4CEDEC Command / CVar の送り方 1 開発機にキーボードを指して、コンソールウィンドウを立ち上げる (Editorでももちろん可能。Output Windowからも入力できる。)
  28. 28. #UE4CEDEC Console Windowを立ち上げショートカットの指定 Project Settings/ Input の一番下に “Console Keys” という設定があり、 そこで指定できます。
  29. 29. #UE4CEDEC Command / CVar の送り方 2 Blueprintで送る “Execute Console Command” ノード
  30. 30. #UE4CEDEC Command / CVar の送り方 3 SessionFrontendを使って、PC上から実機で動いている アプリケーションに対してコマンドを送る
  31. 31. #UE4CEDEC Command / CVar の送り方 4 起動時引数で送る –execmds=“コマンドA, コマンドB” ”,” で複数コマンドを区切る
  32. 32. #UE4CEDEC では、 プロファイルに使えるコマンドを見ていきます
  33. 33. #UE4CEDEC Stat fps / unit / unitgraph
  34. 34. #UE4CEDEC Console Command stat fps / stat unit / stat unitgraph Stat unitgraph Stat fps Stat unit CPUやGPUの負荷を表示する基本コマンド
  35. 35. #UE4CEDEC レンダリングから見た Game / Draw / GPU Game Draw GPU CPU GPU 世界のアップデート 時計の針を進めて キャラクタの動き 物理などを確定 Gameから来た シーンを解釈して GPU描画命令 (DrawCallなど) に変換する GPUが実際に頂点 やピクセルを計算 して絵をつくる
  36. 36. #UE4CEDEC Game Draw GPU 合計がそのフレームの処理時間じゃないの??
  37. 37. #UE4CEDEC Game / Draw / GPU の並列処理 Game Draw GPU 1 1 1 Display 10 VSync VSync VSync 2 2 2 2 各処理が並行で進んでいるため、 Game/Draw/GPUの最大がそのフレームの処理時間になる。 この図はあくまで概要です。 実際のスレッドの流れは、プラットフォームやレンダリング手法で異なります。
  38. 38. #UE4CEDEC 本日はDrawとGPUのプロファイルがメイン Game Draw GPU CPU GPU
  39. 39. #UE4CEDEC Game Draw GPU CPU GPU GPUの処理負荷を見てみる
  40. 40. #UE4CEDEC GPUの処理負荷を見てみる
  41. 41. #UE4CEDEC GPUの処理負荷を階層的に出すConsole Command “ProfileGPU” (Default shortcut: “Ctrl + Shift + ,”)
  42. 42. #UE4CEDEC コンソールなどの実機では、 ウインドウは出ずに出力ウィンドウにテキストで表示できます。
  43. 43. #UE4CEDEC Tips (Advanced) BasePass内部で、各メッシュ単位の負荷を出さない機種もある Editor Console
  44. 44. #UE4CEDEC Tips (Advanced) 実機でBasePassのメッシュ単位の処理負荷を出力する方法 • r.ShowMaterialDrawEvents – ただし、RHIThreadがOffじゃないと動作しない。 • r.RHISetGPUCaptureOptions – 一括設定コマンド – 自動でRHIThreadをOffに • ※DrawThreadの負荷が跳ね上がります。 – 計測するときにOnにして、それ以外ではOffに。
  45. 45. #UE4CEDEC Console Command Stat GPU ProfileGPUのリアルタイム表示版
  46. 46. #UE4CEDEC レンダリングの流れは去年のCEDECで講演させていただきました SlideShareにUpしてあるので、良ければご参考にしてください
  47. 47. #UE4CEDEC Game Draw GPU CPU GPU profilegpu stat gpu
  48. 48. #UE4CEDEC Game Draw GPU CPU GPU Drawの処理負荷を見てみる まえに。。。
  49. 49. #UE4CEDEC Game Draw GPU CPU GPU CPU側の処理負荷 確認方法
  50. 50. #UE4CEDEC ConsoleCommand Stat dumpframe 1フレームのCPU処理フローの階層表示
  51. 51. #UE4CEDEC 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部分
  52. 52. #UE4CEDEC Stat dumpframe オプションで見やすい形に調整可能 例: Drawの処理負荷を計測する方法 stat dumpframe -root=renderthread –depth=5 -ms=.1 どの処理から下を表示するか? 例: Gamethread Renderthread Initviews 何階層深くまで表示するか 何ms以上の処理だけ記載するか
  53. 53. #UE4CEDEC Console Command stat startfile / stopfile 複数フレームをキャプチャして、後々にエディタで処理負荷をチェックする
  54. 54. #UE4CEDEC stat startfile / stopfile 使い方 Stat stopfileと打ち込むと、プロファイルデータを出力する 書き出し先はログ(LogStats)に出る
  55. 55. #UE4CEDEC stat startfile / stopfile 使い方 Session Frontend を立ち上げる Profiler Tabからファイルを読み込む
  56. 56. #UE4CEDEC 例えば、各アクターのTickがどれだけかかっているか? などがわかるようになります。 注意点: 処理順番ではありません。 処理負荷順や名前順でソートを変えたりできます。
  57. 57. #UE4CEDEC Game Draw GPU CPU GPU CPU側の処理負荷 確認方法Stat dumpframe Stat startfile/stopfile
  58. 58. #UE4CEDEC Game Draw GPU CPU GPU Stat dumpframe Stat startfile/stopfile Drawの処理負荷 を見てみる
  59. 59. #UE4CEDEC Drawの処理負荷を見てみる
  60. 60. #UE4CEDEC Base Pass Drawの主な役割 GPUDraw ②GPUに描画命令を発行する Transparency Z Prepass
  61. 61. #UE4CEDEC Base Pass Drawの主な役割 GPUDraw ②GPUに描画命令を発行する Transparency Z Prepass どのオブジェクトを? リストないの??
  62. 62. #UE4CEDEC Base Pass Drawの主な役割 Init Views GPUDraw ②GPUに描画命令を発行する Transparency Z Prepass ①渡すオブジェクトを選定し それぞれのパスのリストを作る
  63. 63. #UE4CEDEC InitViewsで行われるカリング Init Views ①渡すオブジェクトを選定し それぞれのパスのリストを作る 選定方法1: Frustum Culling 選定方法2: Occlusion Culling
  64. 64. #UE4CEDEC (CPU) Frustum Culling Object Object 見えない! 見える オブジェクトのバウンディングボックスを調べ、 画面外のオブジェクトをGPUに計算させない機能 Object 見える Object 見えない!
  65. 65. #UE4CEDEC Occlusion Culling Object 前面のオブジェクトに隠れて見えないオブジェクトを描画リストから外す (1フレーム前のDepthを用いて行います) Object Object 見えない! 見える
  66. 66. #UE4CEDEC FreezeRendering コマンドで、 その時点でのカメラのカリング結果を止めることができる。
  67. 67. #UE4CEDEC Base Pass Drawの主な役割 Init Views GPUDraw ②GPUに描画命令を発行する Transparency Z Prepass ①渡すオブジェクトを選定し それぞれのパスのリストを作る
  68. 68. #UE4CEDEC Console Command stat SceneRendering レンダリング(Draw)の全体の処理内訳をリアルタイムで表示
  69. 69. #UE4CEDEC Stat scenerendeing 注意点 (表示内容はフラットですが、) 処理内容は階層的です RenderViewFamiliy - InitViews - BasePass drawing -- StaticDrawList drawing -- Dynamic Primitive drawing
  70. 70. #UE4CEDEC Stat scenerendeing Stat SceneRenderingで見える負荷はDrawの負荷です。 GPUの処理ではありません! Draw が重たい場合は真っ先に参照してみてください
  71. 71. #UE4CEDEC ConsoleCommand stat InitViews Culling処理にかかった時間やプリミティブ数などをリアルタイムで確認
  72. 72. #UE4CEDEC ConsoleCommand stat InitViews • InitViewsは何の処理をしてる?? – 画面に見えないオブジェクトを省く処理 • Frustum Culling • Occlusion Culling – レンダリングオブジェクトをソートしたり – シャドウ計算に寄与するオブジェクトもここで算出している
  73. 73. #UE4CEDEC stat InitViews でよく見るところ 処理時間 Frustum Cull Occlusion Cull Processed Primitives: 投入された全オブジェクト数 Frustum Culled primitives: カリングされたオブジェクト数 Occluded Culled Primitives: オクルージョンカリングされた Primitive数 生き残ったPrimitiveたち Visible Static Mesh Elements Visible Dynamic Mesh Elements
  74. 74. #UE4CEDEC Stat initviews Culling処理はCPU負荷をあげますが、 GPU負荷を下げるために必ず必要な処理です。 Culling負荷が高い場合、遠くのオブジェクトや目に見えないオブジェクト を自前でVisibilityをOffにしたりなどが効果があります。 また、不要なオブジェクトがGPUに投入されていないか確認するために、 FreezeRenderingコマンドも用いて下さい。
  75. 75. #UE4CEDEC 備考: Precomputed Visibilityについて • Precomputed VisibilityはStaticなオブジェクトに対して、シーン のある視点から見えるオブジェクトを事前計算しリストを作成して おく手法です。 • メモリやデータサイズが増えますが、InitViewsの負荷削減につな がりますので、静的オブジェクトが多い方は参考にしてください。 • 英語ですが、以下のスレッドに使い方がとても丁寧に説明されてい ます。 – http://timhobsonue4.snappages.com/culling-precomputed-visibility- volumes
  76. 76. #UE4CEDEC 備考: 全体のDrawCall数を把握したい場合 Stat RHI “Draw primitive Calls”でシーン内の全DrawCall数を確認
  77. 77. #UE4CEDEC Game Draw GPU CPU GPU Stat dumpframe Stat startfile/stopfile Stat SceneRendering Stat InitViews Stat RHI
  78. 78. #UE4CEDEC ここまででどの箇所が重たいのかだいたいわかるようになってきた profilegpu stat gpu Stat sceneredering Stat dumpframe Stat unit, unitgraph Game GPUDraw ? ? ? Light? Particle? Static Mesh? Post Process? ?? ? ? 次は、なぜその処理が重たいのだろう??
  79. 79. #UE4CEDEC 各アセットやレンダリング手法の詳細
  80. 80. #UE4CEDEC 各処理内容に特化したStat Stat XXXXXX 100種類以上の項目がある
  81. 81. #UE4CEDEC 各処理内容専用のコマンドや変数 レンダリング関連の設定コマンド r.XXXXXX 700種類以上 その中の影の設定コマンド r.shadow.XXXXXX 50種類以上
  82. 82. #UE4CEDEC Game GPU profilegpu stat gpu Stat sceneredering Stat dumpframe Draw Light? Particle? Static Mesh? Post Process? Stat unit, unitgraph ? ? ? ?? ? ? 各処理の専用コマンドで理由を調査 stat LightRendering, Foliage, Particle, r.XXXXX,
  83. 83. #UE4CEDEC プロファイリング補助コマンド
  84. 84. #UE4CEDEC Console Command Show オブジェクトや機能のOn/Off
  85. 85. #UE4CEDEC Console Command FreezeRendering 現時点のカメラのカリングをフリーズする
  86. 86. #UE4CEDEC Console Command ToggleDebugCamera プレイヤーのカメラから離れ、自由に視点を変えられる
  87. 87. #UE4CEDEC プロファイリングツール1 まとめ
  88. 88. #UE4CEDEC グラフィクスプロファイル全体の流れ show, freezerendering, toggledebugcamera, etc. stat LightRendering, Foliage,,,, r.XXXXX, etc. Game GPU Stat unit / stat unit graph Draw Step.1 Game? Draw? GPU? Step.2 どの部分が重たい? Step.3 各処理のコマンドを 使って理由を調査 profilegpu stat gpu Sceneredering Initviews, rhi Dumpframe, startfile Light? Particle? Static Mesh? Post Process? Stat 補助コマンド
  89. 89. #UE4CEDEC なぜ、Console Commandから???
  90. 90. #UE4CEDEC 実機確認できるから!
  91. 91. #UE4CEDEC 実機で確認しなきゃだめ?
  92. 92. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  93. 93. #UE4CEDEC プロファイルの流れ
  94. 94. #UE4CEDEC Console オススメしない運用 PCでゲームデザインしてから、コンソールで最適化 Editor 1 ゲームプレイを 作り上げる 2 コンソール向けに 最適化!! 問題点 • 弱: 修正するアセットが大量になる。 • 強: 実機では実現不可能 対策1: 仕様を満たすために著しくクオリティを下げる 対策2: ゲームの仕様を再考する 敵が100万体同時に 出て来るゲームだぜ! あれ。。。 1fpsしか出ない。
  95. 95. #UE4CEDEC Console オススメする運用 PCでゲームデザイン&実機プロファイリングを 並行して行う Editor 1 ゲームプレイを 作り上げる 利点 • 修正アセット(手戻り)の削減 • 実現可能なゲームデザイン 全体で見れば、製品開発スピードは前者よりも速くなります。(断言) 夢と現実の すり合わせ ゲームプレイに必要な パフォーマンス検証 1
  96. 96. #UE4CEDEC 備考: (おすすめしない運用2) コンソールと同程度のスペックのPCによる開発 残念ながら全然あてになりません。 OS,ドライバがそもそも違う ハードウェア構成が厳密には違う SDK APIがそもそも違う UE4のコードが全然違う! 同スペックのPCとコンソールの違い 各機種専用の 最適化を 行っている。。
  97. 97. #UE4CEDEC プロファイルの流れ まとめ
  98. 98. #UE4CEDEC なぜプロファイル? (再掲) 最適化の前に、開発初期から、日常的に、 実機で プロファイルする癖を
  99. 99. #UE4CEDEC 備考 だけど 重要 各ビルドコンフィギュレーションによる設定の差 CPU Stat (CVars) GPU Development 検証コードあり 全機能使える ほぼ同じTest 検証コードなし Stat unit ぐらい Shipping 無効 各ビルドコンフィギュレーションによる設定の差 CPU本来の負荷は Testビルドで計測するようにしてください。 日頃Developmentビルドで計測し、重たい部分などは実際のTestビルドで。 どれだけの差が出るかを定期的に調べて下さい。
  100. 100. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  101. 101. #UE4CEDEC 基本のプロファイリングツール 2 Editorのデバッグ機能
  102. 102. #UE4CEDEC 今回紹介する3つのEditor機能 Viewmode Show Statistics
  103. 103. #UE4CEDEC ViewMode 中間バッファやデバッグ用表示へ切り替える機能
  104. 104. #UE4CEDEC ViewMode EditorのViewModeから選択可能 見れる一覧は公式ドキュメントで詳細 に説明があります。 Link: 公式ドキュメント ViewMode 一部Viewmodeは Viewmode コマンドで 実機でも見ることが可能
  105. 105. #UE4CEDEC Optimization ViewModes
  106. 106. #UE4CEDEC Light Complexity
  107. 107. #UE4CEDEC Light Complexity 動的ライティングが どれだけされている かを視覚化 気づかずに、大きな ライティングをして いる際などは要注意。 5以上になると紫に なっていきます
  108. 108. #UE4CEDEC Console Command togglelight 文字列 文字列を含むライトをOn/Offにすることができる。
  109. 109. #UE4CEDEC Deferred Lightingは 影がなければ動的ライト沢山おいても軽い?
  110. 110. #UE4CEDEC 範囲の小さい Movable Lightを100個 範囲の大きい Movable Lightを8個VS
  111. 111. #UE4CEDEC 範囲の小さい Movable Lightを100個 範囲の大きい Movable Lightを8個VS Light Complexityでの比較
  112. 112. #UE4CEDEC 範囲の小さい Movable Lightを100個 範囲の大きい Movable Lightを8個VS 処理負荷確認方法 ProfileGPU / stat GPUのLightsにGPU負荷がでます
  113. 113. #UE4CEDEC Q: Deferred Lightingならライトを沢山おいていいのか? ライトを沢山を”置けます”が、 ライトが触れるピクセルが増えれば増えるほど処理負荷は増えます。 簡易的に、Light Complexityという機能があるので、 そちらで高負荷なライティングの場所を探りましょう。
  114. 114. #UE4CEDEC Lightmap Density
  115. 115. #UE4CEDEC Lightmap Density Lightmap 密度を視覚的に表示
  116. 116. #UE4CEDEC Lightmap Density ライトマップの密度は 処理負荷にも影響はしますが それよりも メモリ(テクスチャストリーミング) ロード時間に影響します 事例があるので紹介させてください
  117. 117. #UE4CEDEC
  118. 118. #UE4CEDEC
  119. 119. #UE4CEDEC
  120. 120. #UE4CEDEC
  121. 121. #UE4CEDEC
  122. 122. #UE4CEDEC
  123. 123. #UE4CEDEC
  124. 124. #UE4CEDEC
  125. 125. #UE4CEDEC
  126. 126. #UE4CEDEC
  127. 127. #UE4CEDEC
  128. 128. #UE4CEDEC
  129. 129. #UE4CEDEC
  130. 130. #UE4CEDEC
  131. 131. #UE4CEDEC 続きはスライドを!
  132. 132. #UE4CEDEC Stationary Light Overlap
  133. 133. #UE4CEDEC Stationary Lightのメインの制約 影付きStationary Lightを5つ以上重ねると、 5つ目以降のライトが”自動的に”MovableなLightになる。
  134. 134. #UE4CEDEC Stationary Lightのメインの制約
  135. 135. #UE4CEDEC Stationary Lightの影については、上記ブログが参考になります http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary
  136. 136. #UE4CEDEC オーバラップしたStationary Lightのランタイム負荷 • Movable Lightとして 動的シャドウを生成するこ とになるので。。 – Draw, GPUともに負荷 がかかります。
  137. 137. #UE4CEDEC Stationary Lightのメインの制約 特に良いことは何もないので、 原則禁止が良いかと思います
  138. 138. #UE4CEDEC Shader Complexity
  139. 139. #UE4CEDEC Shader Complexity 各ピクセルのシェーダの 命令数の合算を表示する (赤い部分の殆どは、 半透明描画の重ね合わせ)
  140. 140. #UE4CEDEC Shaderの命令数の見方 Material EditorのStat Window Stat WindowにPC版での大まかなシェーダ命令数を出してくれます
  141. 141. #UE4CEDEC Shader Complexity の仕組み 不 透 明 不透明ポリゴンのシェーダ命令数のみ 半透明のシェーダ命令は加算されていく 不 透 明
  142. 142. #UE4CEDEC Shader Complexity の見方 キャラクタの シェーダ命令数が多い 半透明描画が 重なってる 多分どっちも
  143. 143. #UE4CEDEC Shader Complexityが赤いのは 直さなきゃ駄目?
  144. 144. #UE4CEDEC 注意点 シェーダの命令数 ≠ シェーダの重たさ (大雑把に見れば=でもいいけど。。。) (Cycle数と言おうか。。)
  145. 145. #UE4CEDEC 命令数と処理負荷の違い:1 1命令の重たさの違い パスワード変更しといて GDCでアテンドしてきて どちらも同じ1行(命令)だけれども、 タスク量(Cycle数)が違う。
  146. 146. #UE4CEDEC 命令数と処理負荷の違い:2 命令の仕方の違い 命令数: 50 ビールで乾杯; もう一杯; もう一杯; もう一杯; … もう一杯; 命令数: 1 50杯ビール飲む; 50行 1行 ※あくまでイメージです。コンパイラは賢く処理するし、実際にForLoopが1命令になるわけではありません。
  147. 147. #UE4CEDEC 命令数と処理負荷の違い:3 同じシェーダでも処理負荷がランタイムで変わる コンパイラは賢い。 アルファテストのあるシェーダを アルファテスト -> 色と計算するようにしたりする。(Early Exit) 色の計算 アルファテスト透明部分の処理負荷 アルファテスト不透明部分の処理負荷
  148. 148. #UE4CEDEC シェーダの命令数とシェーダの重たさの違う例1 悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、 39命令のシェーダでも、 20msの処理負荷に
  149. 149. #UE4CEDEC シェーダの命令数とシェーダの重たさの違う例2 悪意をもってマテリアルを作ると。。。スフィアに貼り付けただけで、 2533命令のシェーダでも、 0.04msの処理負荷で済む。
  150. 150. #UE4CEDEC 注意点 シェーダの命令数 ≠ シェーダの重たさ (大雑把に見れば=でもいいけど。。。) (Cycle数と言おうか。。)
  151. 151. #UE4CEDEC このように、 処理負荷は命令数だけでは厳密にはわかりません。 一番怖いのは、 効果の少ない最適化をしてしまうこと Q. Shader Complexityで赤いのは直さなきゃ駄目? Shader Complexityが真っ赤だからといって、 必死に命令数を減らしても効果がないかもしれません。 ダメな例: テクスチャの参照回数がネックなのに、 キャラの重要な強調表現の計算量を減らす
  152. 152. #UE4CEDEC Shader Complexityのおすすめの使い方 1 キャラクタなどの不透明オブジェクト 赤や白の場合。。。 マテリアルに問題ないかエンジニアに 一度ご相談 プロファイル例: キャラクタを単純なマテリアルに差し替えて 差分計測
  153. 153. #UE4CEDEC Shader Complexityのおすすめの使い方 2 半透明やMaskedマテリアル 赤や白の場合。。。 透明部分を小さくできないか検討 プロファイル例 Show Particles などを使ってエフェクトをOn/Offにしてみる
  154. 154. #UE4CEDEC ということで、個人的にはShader Complexity は透明物の重なり具合にのみ使っています。。。 Shader Complexity View
  155. 155. #UE4CEDEC それって。。。Quad Overdrawと同じじゃ。。 Shader Complexity View Quad Over Draw
  156. 156. #UE4CEDEC Quad Overdraw
  157. 157. #UE4CEDEC Quad Overdraw 同一Quadで 何回描画計算が走ったかを表示 Quad = 2 * 2 Pixel GPUはQuad単位で描画している。 Quad Over Draw
  158. 158. #UE4CEDEC LOD Coloration
  159. 159. #UE4CEDEC LOD Coloration 0 7 どのLODモデルを表示して いるかを色で表示
  160. 160. #UE4CEDEC LODの処理負荷確認方法 LODを使わない場合、GPU描画負荷の 様々な箇所で負荷としてできてます。 処理負荷確認方法 BasePass、Prepass, Shadowなどの 処理が重たい際に、そのオブジェクトが どれくらいの処理負荷になってるいるか 確認する。 r.staticmeshLODDistanceScaleでおお ざっぱにLODの範囲を全体で変えて、ど れぐらいの処理軽減になるか見積もれる。
  161. 161. #UE4CEDEC Console Command r.staticmeshLODDistanceScale コマンドでLODのスケールを一括で変更 (大雑把に、LODを強くしたらどれだけ処理負荷が下がるかの見積もりとして)
  162. 162. #UE4CEDEC Optimization ViewModes を見てきました。。。
  163. 163. #UE4CEDEC 今回紹介する3つのEditor機能 Viewmode Show Statistics
  164. 164. #UE4CEDEC Tips: 実機でViewModeの変更 Console Command: ViewMode XXXX • コンソールが対応していないViewMode – Unlit – StationaryLightOverlap – Lit_DetailLighting – ReflectionOverride • r.ForceDebugViewModesを1にすると。。 – ShaderComplexityも可能
  165. 165. #UE4CEDEC ConsoleCommand ViewMode “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");
  166. 166. #UE4CEDEC Show Console Command Show のエディタ設定版
  167. 167. #UE4CEDEC 今回紹介する3つのEditor機能 Viewmode Show Statistics
  168. 168. #UE4CEDEC Statistics シーンにおいてあるメッシュやテクスチャの情報を表で出してくれる
  169. 169. #UE4CEDEC Statistics
  170. 170. #UE4CEDEC Statistics Primitive Stats 何個シーンにある? そのメッシュの ポリゴン数は? そのメッシュの シーン内の大きさは? シーンのメッシュの統計情報を表示
  171. 171. #UE4CEDEC Statistics Texture Stats シーン内に読み込まれているテクスチャの統計情報を表示
  172. 172. #UE4CEDEC Statistics (Primitive Stats) の半径を見て 不要に小さなオブジェクトがないかを探す
  173. 173. #UE4CEDEC Robがいるこのシーン、 RobのメッシュをPrimitive Statsで見てみる あきらかに小さいRobがいる。
  174. 174. #UE4CEDEC 草むらに小さなロブが沢山いた
  175. 175. #UE4CEDEC 3つのEditor機能を紹介してきました Viewmode Show Statistics
  176. 176. #UE4CEDEC RenderDoc
  177. 177. #UE4CEDEC UE4.16から標準プラグインに
  178. 178. #UE4CEDEC RenderDocで何ができる?
  179. 179. #UE4CEDEC GPUのレンダリング工程を まるはだかにできる! ※Windows限定
  180. 180. #UE4CEDEC EditorからのCapture ボタンひとつでCaptureを取ることができます
  181. 181. #UE4CEDEC Runtimeからのキャプチャ renderdoc.CaptureFrameでCaptureしてくれます。
  182. 182. #UE4CEDEC RenderDoc の画面
  183. 183. #UE4CEDEC Event Browser • 呼び出された命令を階層表示してくれる。 • このBrowserでDrawCallを選ぶ • この後説明するエディタで、 選んだDrawCallの詳細がわかる
  184. 184. #UE4CEDEC Texture Viewer • Input – そのDrawCallが使用 したテクスチャ一覧が • Output – そのDrawCallで出力 されたRenderTarget の一覧
  185. 185. #UE4CEDEC Texture Viewer 選択したDrawCallまで描画してくれるので、Event ViewerでDrawCallを選 択していくことによって、描画の流れを理解することができる。 EID: 3536 EID: 3559 次の DrawCall
  186. 186. #UE4CEDEC Texture Viewer 選んだRenderTargetのピクセルの描画履歴を追うことが可能。 RenderTargetのみたいあたりに、右ボタンクリックで、Pixel Contextのズーム画面に。 更に正確には PixelContext画面で矢印キーで、ピクセルを選択
  187. 187. #UE4CEDEC Mesh Output そのDrawCallで呼び出された メッシュを描画してくれる VS Input VS Output そのメッシュが、画像のどのあたりにレンダリング されるのかも描画してくれる Texture Viewerと比較
  188. 188. #UE4CEDEC Pipeline State • そのDrawCallの 各種設定などがわかる • 例えば、 – Depthの設定 – Rasterizerの設定
  189. 189. #UE4CEDEC Pipeline State Shaderも見ることがきる。
  190. 190. #UE4CEDEC Tips RenderDocでソースを見る方法 • r.Shaders.KeepDebugInfo=1 をConsoleVariables.iniに記述 • “-d3ddebug”オプションをエ ディタ起動 • シェーダコンパイルが再度すべ てに走るがRenderDocでソー スが見れるように
  191. 191. #UE4CEDEC RenderDoc RenderDocまとめ 1フレームの描画をキャプチャし、 – どんな順に – どんなオブジェクトが – どんなテクスチャ/シェーダで。。。 レンダリングしているかがわかる便利ツール ※Windows限定
  192. 192. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  193. 193. #UE4CEDEC Showcase
  194. 194. #UE4CEDEC Foliageのプロファイリングをデモしてみます (資料は別途公開します)
  195. 195. #UE4CEDEC 本講演の目次 1. はじめに 2. 基本のプロファイリングツール 1 3. プロファイルの流れ 4. 基本のプロファイリングツール 2 5. Showcase 6. まとめ&おまけ
  196. 196. #UE4CEDEC まとめのまえに。。
  197. 197. #UE4CEDEC 各PlatformのProfiler
  198. 198. #UE4CEDEC 各コンソールにもRenderDocみたいなのないの? ConsolePC
  199. 199. #UE4CEDEC 各コンソールにもRenderDocみたいなのないの? ConsolePC PS4 Razor XBOX Pix などなど 各プラットフォームが用意してくれてます
  200. 200. #UE4CEDEC Q.プラットフォームのプロファイラを 使ったほうがいいの? A. (テクニカルよりの方ならば) 絶対使った方が良いです チートです
  201. 201. #UE4CEDEC プラットフォーム専用プロファイラのできること • RenderDocと同様の機能 (フレームのCapture&Replayシステム) • ハードウェアレベルのTrace機能
  202. 202. #UE4CEDEC ハードウェアレベルのTrace機能でわかること 頂点多い? ピクセル 打ちすぎ? テクスチャ 使いすぎ? シェーダの計算 が重たい? その描画が重たい理由が一発でわかります
  203. 203. #UE4CEDEC ですが、それらを理解するためには、 こんなグラフを読み解く必要があります。 Radeon GPU Profilerサイトより引用
  204. 204. #UE4CEDEC さらに。。。 グラフを読み解くためには、 GPU構成をある程度理解する必要があります。 【後藤弘茂のWeekly海外ニュース】AMDの新GPUアーキテクチャ「Graphics Core Next」の秘密 - PC Watch
  205. 205. #UE4CEDEC 自習するのは大変そう。。。
  206. 206. #UE4CEDEC プラットフォーム別のUE4勉強会を開催します! UE4ライセンシの方々には日程が決まり次第別途ご連絡いたします 勿論ですが、各プラットフォームのNDAライセンスをお持ちの方限定です 10月末、11月頭 東京大阪二箇所で開催 11月末or12月上旬 東京開催
  207. 207. #UE4CEDEC まとめ
  208. 208. #UE4CEDEC 本日の内容 UE4のプロファイリングツールを俯瞰で眺めながら、 UE4上でどのように プロファイルしていくのかを見ていきました
  209. 209. #UE4CEDEC グラフィクスプロファイル全体の流れ show, freezerendering, toggledebugcamera, etc. stat LightRendering, Foliage,,,, r.XXXXX, etc. Game GPU Stat unit / stat unit graph Draw Step.1 Game? Draw? GPU? Step.2 どの部分が重たい? Step.3 各処理のコマンドを 使って理由を調査 profilegpu stat gpu Stat sceneredering Stat dumpframe… Light? Particle? Static Mesh? Post Process? 補助コマンド
  210. 210. #UE4CEDEC 3つのEditor機能やプラグイン Viewmode Show Statistics RenderDoc
  211. 211. #UE4CEDEC なぜプロファイル? プロファイルしない最適化は危険 最適化の前に、開発初期から、日常的に、 実機で、 プロファイルする癖を
  212. 212. #UE4CEDEC 本当に、本当にありがとうございました! 次回は10月8日のこの場所で!

×