CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

12,086 views

Published on

2016年8月25日にパシフィコ横浜にて開催されたCEDEC2016の講演資料です。UE4のレンダリングフローの概要を説明しています。(Epic Games Japan 篠山範明)
http://cedec.cesa.or.jp/2016/session/VA/12631.html

Published in: Engineering
0 Comments
44 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,086
On SlideShare
0
From Embeds
0
Number of Embeds
3,674
Actions
Shares
0
Downloads
241
Comments
0
Likes
44
Embeds 0
No embeds

No notes for slide

CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

  1. 1. Unreal Engine 4 の レンダリングフロー総おさらい Epic Games Japan Senior Support Engineer 篠山 範明 16:30 5
  2. 2. はじめに
  3. 3. 本日の内容 UE4のRenderingのフローを俯瞰で見て、 各要所のTipsを見ていきます。
  4. 4. Renderingの調整は 日々クオリティとパフォーマンスとの戦い。 Quality Performance Iteration
  5. 5. Renderingの調整は 日々クオリティとパフォーマンスとの戦い。 Quality Performance Iteration 誰の仕事?
  6. 6. UE4は、アーティストでもPerformance解析をできるような 様々なツールを用意しています。
  7. 7. ツールの存在は知られているが、 あまり使われていないのはなんでだろう?
  8. 8. UE4のレンダリングの知識を ある程度把握しないといけないのではないか?
  9. 9. 例えば、こんなシーン
  10. 10. UE4のDeferred Renderingの一般的なイメージ Base Pass Lighting Post Process
  11. 11. 完成
  12. 12. “ProfileGPU” コマンドor “Ctrl + Shift + ,”で Renderingの処理の流れが見えます。
  13. 13. 何をやっているのがよくわからない処理も あるのではないでしょうか? ?
  14. 14. Base Pass Lighting Post Process このイメージだけでは足りないのではないか?
  15. 15. 本講演の目標 Renderingの流れと、中で何が行われているかを理解する。 その際に開発で重要となるTipsや機能を知り、 日々の開発や意思決定をスムーズにする。
  16. 16. 本講演の目的 Quality Performance Iteration このIterationをアーティストが自身で回すためのとっかかりに。
  17. 17. 本日の対象者 UE4を用いて日々開発を行っている アーティスト、 テクニカルアーティスト (エンジニア)
  18. 18. 本日話さない事 • Render Thread からRHI Threadへのコマンドの積み方 • RHI ThreadからGPUコマンド発行プロセス • 俺俺G-buffer拡張方法 • .usfのコンパイルプロセス • DX12が(以下略)
  19. 19. 本日の非対象者 UE4の内部Renderingフローと 日々格闘しているエンジニアの方 (特に、FDeferredShadingRender::Render()以下の流れを熟読しているかた。)
  20. 20. 本日のアジェンダ • Renderingフローをもう少し掘り下げる • 各項目毎に掘り下げる(仮) • Z-Prepass • BasePass • (Custom-Depth/Stencil) • Lighting • Transparency • Reflection • Fog • まとめ(振り返り)
  21. 21. 備考 • 本資料はすぐにアップされます。 説明で出てくるコマンドを逐一メモする必要はありません • エディターは英語版で説明を行います。 • UE4.13を想定しています。 • 質疑応答は予定しておりません。
  22. 22. 本日のアジェンダ • Renderingフローをもう少し掘り下げる • 各項目毎に掘り下げる • Z-Prepass • BasePass • (Custom-Depth/Stencil) • Lighting • Transparency • Reflection • Fog • まとめ(振り返り)
  23. 23. Renderingフローを もう少し掘り下げる (一階層だけ深く) 5(2)16:35
  24. 24. Base Pass Lighting Post Process
  25. 25. Base Pass Lighting Post Process
  26. 26. Base Pass Lighting Post Process Transparency
  27. 27. Base Pass Lighting Post Process TransparencyReflection
  28. 28. Base Pass Lighting Post Process TransparencyReflection Pre- Lighting Decal Ambient Occlusion
  29. 29. Base Pass Lighting Post Process TransparencyReflection Pre- Lighting Z PrePass
  30. 30. Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting これらを大まかなブロックとして、 ブロック毎に掘り下げていきたいと思います。
  31. 31. Base Pass 一番重要かつ基本のパス Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 7(15)16:37
  32. 32. Base Passで行われること Opaque / Maskedマテリアルのオブジェクトを レンダリングし、G-bufferを作成する。
  33. 33. G-Bufferとは 後のライティングやポストエフェクトで使われるための中間バッファ。
  34. 34. BasePassの描画順を視覚化
  35. 35. Base Pass の注意点 BasePassはジオメトリ投入のコストが直に反映される場所なので、 処理負荷になりやすい場所です。 少し時間をとって、BasePassの注意点を見ていきます。
  36. 36. Base Passで注意すべきこと • 無駄な頂点を計算させない • 無駄なピクセルを計算させない • 無駄にシェーダを重たくしない (こちらはマテリアル作成の問題で今回は触れない)
  37. 37. Base Passで注意すべきこと • 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない • 無駄なピクセルを計算させない • 無駄にシェーダを重たくしない (こちらはマテリアル作成の問題で今回は触れない) 8(5)
  38. 38. 例えば、こんなメッシュを頑張って作成してみたものの。。
  39. 39. このキャラクタ一体しか見えないシーンなのに、 処理負荷がめちゃくちゃ高い!!
  40. 40. 処理負荷の原因は、画面に見えないはずの大量のロブさん
  41. 41. (CPU) Frustum Culling Object Object 見えない! 見える オブジェクトのバウンスを調べ、 画面外のオブジェクトをGPUに計算させない機能 Object 見える??
  42. 42. 不必要におおきなバウンスはGPUの負荷につながります 良いバウンス 悪いバウンス 友情出演
  43. 43. 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない。 コックピットならば、前後左右を一体で作ると、 全く見えない後ろのポリゴンもマイフレームGPUが計算してしまう。 Kentuckyguard http://free-photos.gatag.net/2014/06/06/160000.html
  44. 44. Stat InitViews コマンドで、 どれだけ事前にオブジェクトをカリングしたかわかる。
  45. 45. FreezeRendering コマンドで、 その時点でのカメラのカリング結果を見ることができる。
  46. 46. 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない。 Init Views や FreezeRendering で、 画面に映らないオブジェクトがGPUに投入されていないか確認してみましょう。 また、各プラットフォームのGPU解析ツールで、 GPUから見たプロファイルもできます。 (こちらは、エンジニアにお願いしましょう!)
  47. 47. Base Passで注意すべきこと • 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない • 無駄なピクセルを計算させない • 無駄にシェーダを重たくしない (こちらはマテリアル作成の問題で今回は触れない)
  48. 48. Base Passで注意すべきこと • 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない • 無駄なピクセルを計算させない • 無駄にシェーダを重たくしない (こちらはマテリアル作成の問題で今回は触れない) 13(+7)16:43
  49. 49. Depth Test のGPU内部の動作
  50. 50. Depth Test 0. 何もないシーンに。。。 Color Buffer Depth Buffer
  51. 51. Depth Test 1. 赤いポリゴンが描画されて。。。 Color Buffer Depth Buffer①
  52. 52. Depth Test 2. 青いポリゴンが描画されて。。。深度比較されて遠くのオブジェクトは消える。 Color Buffer Depth Buffer① ②
  53. 53. Depth Test Q. この赤の裏に隠れた青のピクセル達は、計算されるんでしょうか??? Color Buffer Depth Buffer① ②
  54. 54. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Rasterizer Vertex Shader
  55. 55. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Rasterizer Vertex Shader 頂点シェーダで、画面のどこにポリゴンがあるかを計算します。
  56. 56. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Rasterizer Vertex Shader ラスタライザでそのポリゴンがどのピクセルを埋めるかを判断します。
  57. 57. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Vertex Shader そしてPixel Shaderでピクセルの色を計算する Rasterizer
  58. 58. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Rasterizer Vertex Shader Pixel Shaderの前に、各ピクセルに描画されるデプスは決まってすよね? ?
  59. 59. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Vertex Shader PreZ: Pixel Shaderの前でDepth Test及びDepth Writeを行う Pre Z Rasterizer
  60. 60. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Vertex Shader そしてPixel Shaderでピクセルの色を計算する Pre Z Rasterizer
  61. 61. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Vertex Shader 次に青いポリゴンが奥に投入されても。。。。 Pre Z Rasterizer
  62. 62. 描画の流れをGPU的に追っていきます。 Color Buffer Depth Buffer Pixel Shader Vertex Shader PreZで先にDepth計算と比較をするので。。。 Pre Z Rasterizer
  63. 63. 描画の流れをGPU的に追っていきます。 Pixel Shaderでこの重なった部分のピクセルは計算されません。 めでたしめでたし。。。 Color Buffer Depth Buffer Pre Z Pixel Shader Rasterizer Vertex Shader
  64. 64. Color Buffer Depth Buffer Pixel Shader Rasterizer Vertex Shader Pixel Shaderの前に、各ピクセルに描画されるデプスは決まってすよね? ? 本当か?
  65. 65. Color Buffer Depth Buffer Pixel Shader Vertex Shader Pixel Shaderを走らせないと最終的なDepthがわからない例: 1 アルファテスト Pre Z Rasterizer
  66. 66. アルファテストを行うMaskedマテリアル
  67. 67. Color Buffer Depth Buffer Pixel Shader Vertex Shader Pixel Shaderを走らせないと最終的なDepthがわからない例: 2 Pixel Shader内部で無理やりDepthを書き換える Pre Z Rasterizer
  68. 68. PixelのDepthを変更するPixel Depth Offset
  69. 69. この様なシェーダに出くわすと、GPUは自動的に、 シェーダを計算してからDepth処理を行う、Post Zというものに切り替えます。 Color Buffer Depth Buffer Pre Z Post Z Pixel Shader Rasterizer Vertex Shader
  70. 70. これらを意識していないと、 PreZがOffになり、 不要なPixel Shaderが走る可能性があります。
  71. 71. 駄目な例: 不透明だけどとりあえずMaskedにパラメータ入れておく Pre Z Post Z Pixel Shader Rasterizer Vertex Shader
  72. 72. 駄目な例: 使わないけど、Pixel Depth Offsetをパラメータ化 Pre Z Post Z Pixel Shader Rasterizer Vertex Shader
  73. 73. マスターマテリアルに汎用性を持たせるために、 MaskedやPixel Depth Offsetをパラメータ化している場合、 PreZが走っているかのチェックが必要です。
  74. 74. PreZ / PostZどちらが走るかは、 GPU内部の処理のため、UE4では観測できません。 エンジニアにお願いして、 各プラットフォームのGPUプロファイラを使ってください。
  75. 75. Base Passで注意すべきこと • 無駄な頂点を計算させない カメラに入らないオブジェクトをGPUに投入させない • 無駄なピクセルを計算させない PreZの効果を不必要に消させない • 無駄にシェーダを重たくしない (こちらはマテリアル作成の問題で今回は触れない)
  76. 76. BasePass まとめ Base PassはG-bufferを作成するフェイズです。 OpaqueとMaskedマテリアルが投入されます。 オブジェクトの投入が直に響く箇所です。 バウンスの設定を確認し、無駄な頂点計算をさせないように。 マテリアルを確認し、無駄なピクセル計算をさせないように。
  77. 77. Advanced: G-Bufferの拡張 20(2)
  78. 78. G-Bufferの拡張(エンジン拡張) もんしょさん(@monsho1977)の上記の記事では、 実際にソースコードを改変して、G-Bufferを拡張する方法を説明しています。 http://monsho.blog63.fc2.com/blog-entry-191.html
  79. 79. おぎまふさん(@ogimafu) はG-Bufferを拡張し、 独自のToon Shadingを実装 http://www.slideshare.net/TomohiroOgiwara/ue4meetup-63696087?ref=http://ogimafu.blogspot.jp/2016/07/3ue4meetup.html
  80. 80. ノンフォト描画については、G-Bufferを拡張しないで表現する方法などを、 弊社下田が中心にUE4 Forumで議論しております。 https://forums.unrealengine.com/showthread.php?88581- %E3%82%A2%E3%83%B3%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B34%E3%81%A7%E3%83%8E%E3%83%B3%E3%83%95%E3%82%A9%E3%83%88%E3%83%AA%E3%82%A2%E3% 83%AB%E6%8F%8F%E7%94%BB%E3%81%97%E3%82%88%E3%81%86%EF%BC%81
  81. 81. G-Bufferの精度の制御 Project Settings の Rendering内で、G-bufferの精度を変更できます。 映像系など高精細な絵作りが必要な場合、精度を上げてください。
  82. 82. Base Pass 一番重要かつ基本のパス Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  83. 83. Z prepass Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 22(3)16:52
  84. 84. Z Prepassとは? Base Pass 全オブジェクトを 毎回G-bufferに書き出して。。。 とやるのは処理負荷が高い。。
  85. 85. Z Prepassとは? Base Pass Z PrePass Depth-Bufferのみを作成するパスを BasePassの前(pre)に仕込んでおく。 BasePassで実際にG-Bufferに書き出す のは前もって用意したデプスに勝つピ クセルのみとなり、処理負荷が減る “可能性”がある。
  86. 86. Z Prepass Off ver. のBasePass描画
  87. 87. GOAL
  88. 88. Z Prepass ON ver. の BasePass描画
  89. 89. Z prepassで背景のデプスバッファを作成
  90. 90. Z Prepassの設定場所(Project Settings) Project Settings / Rendering内の Early Z-passというタブでおこなえる。 また、下のMovables in early Z-passでMovableメッシュもこのEarly-Zに参加させるか指定可能
  91. 91. Decide Automaticallyの挙動 Defaultのこの設定ですが、十中八九Opaque Meshes Onlyになると考えてOKです。
  92. 92. Z Prepassの各オブジェクトの設定場所 (Use as Occluder) 各オブジェクトのRenderingタブ内に、 “Use as Occluder”という項目がある。 この設定がDefaultでONだが、これをOff にすることで、Early-Zへの参加の有無を オブジェクト単位で調整できる。
  93. 93. Z prepassの効き目と注意点 Z prepassは、 BasePassのピクセル処理負荷を下げる代わりに。。。 Z prepassでもジオメトリを投入します。 ポリゴン数が多いシーンでは、 逆にZ Prepassが処理負荷につながるケースもあります、 こちらをOn/Offしてみて、 採用の判断をしていただければと思います。
  94. 94. Z prepass Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  95. 95. Custom Depth/Stencil ちょっと脱線。。 Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting Custom Depth / Stencil 25 (3)16:55
  96. 96. Custom Depth/ Stencil 特定のメッシュのDepthだけを別バッファに書き出す機能とそのバッファ名 本来のDepthBuffer もう一つ別のDepthBuffer
  97. 97. Custom Depth/ Stencil Project SettingのRendering項目にある、 “Custom Depth-Stencil Pass”をONにしてください。
  98. 98. Custom Depth/ Stencil 各メッシュのRender CustomDepth Passにチェックをいれる
  99. 99. Custom Depth/ Stencil 試しにキャラクター全部のカスタムDepthをONにしてみる。
  100. 100. Alweiさん(@aizen76) の上記のブログでも Toon ShadingのマスキングのためにCustom Depthを使用 http://unrealengine.hatenablog.com/entry/2016/05/30/220000 Custom Depthなし Custom DepthありCustom Depth
  101. 101. らりほまさん(@rarihoma) の上記のブログでは D言語君のマスクとしてCustom Depthを使用 http://rarihoma.xvs.jp/2015/02/22/1/#customdepth-
  102. 102. Custom Depth/ Stencil Q. Custom Depth を作成するのは重たいでしょうか?
  103. 103. Custom Depth/ Stencil A. Custom Depth を描くオブジェクトが増えれば増えるほど、重たくなります。
  104. 104. Custom Depth/ Stencil 先ほどのシーンでプロファイルしてみます。
  105. 105. Custom Depth/ Stencil 処理負荷比較 Custom Depthもほぼ同等の負荷がかかります BasePassのキャラクターレンダリング負荷
  106. 106. Custom Depth/ Stencil Custom Depth / Stencilにチェックを入れたオブジェクトは、 もう一度オブジェクトがGPUに投入されて計算されます。 その分GPUコストにつながるので、 ちゃんとプロファイリングして使ってください
  107. 107. Custom Depth/Stencil ちょっと脱線。。 Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting Custom Depth / Stencil
  108. 108. Pre-Lighting Decal & AO Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 28(5)16:58
  109. 109. Decal Ambient Occlusion テクスチャをプロジェクションする。 弾痕や血しぶきとか。。 疑似的なライティング遮蔽情報 物体の接地感やディティールの増幅に
  110. 110. Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 後のLighting等で使われるので、 前もって処理しておく必要がある
  111. 111. Decal をUE4コミュニティの方達の資料を用いて紹介したいと思います。
  112. 112. http://konabe.blog.jp/archives/33883823.html 栗坂こなべさん(@kurisaka_konabe)の記事を参照させて頂きます。
  113. 113. インクが付くようなエフェクト、 右の図の様にプレーンを置くとなると、ぎりぎり面の上に置かなければいけないし、 壁際のコーナーなどでは不具合が生じる
  114. 114. Decalはボックス形状で、プロジェクションするので、 複雑なオブジェクトにも対応しています。
  115. 115. Decalは便利なのですが。。。 事前に焼き付けたライティングの干渉など、 ライティングの問題が多いです。
  116. 116. ずしさん(@shiba_zushi)の ツイートを参考させて頂きます。
  117. 117. https://twitter.com/shiba_zushi/status/736443001820454912
  118. 118. https://twitter.com/shiba_zushi/status/736443290791202816
  119. 119. https://twitter.com/shiba_zushi/status/736443563806838785
  120. 120. アンコウさん (@dgtanaka) もこの問題について取り組んでいます 「スカイライトを配置するとデカールが透ける問題調査」 https://trello.com/c/fkJo51iu/12--
  121. 121. UE4もくもく会 = (ソースコードリーディング会) にて資料を公開してくれています https://trello.com/c/fkJo51iu/12--
  122. 122. このライティングの不具合を解消するために D-Buffer という解決策をUE4は提供しています。
  123. 123. Project Settings / Rendering内にある D-Buffer DecalsをONにすることにより、この問題を解決できます。
  124. 124. https://twitter.com/shiba_zushi/status/736446424028569602
  125. 125. D-Bufferデカールの具体的な仕組みや負荷など、 詳細に記述してくれています。 https://twitter.com/shiba_zushi/status/736443563806838785
  126. 126. Pre-Lighting Decal & AO Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  127. 127. Lighting Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 33(7)17:03
  128. 128. LightのMobilityのおさらい 事前計算なし ライト 全てRuntimeで計算 LightMap生成用 ライト 全て事前計算 ShadowMap 事前計算ライト Runtime: Lighting 事前計算: 静的オブジェクト のShadow Map
  129. 129. LightのMobilityのおさらい 事前計算なし ライト 全てRuntimeで計算 LightMap生成用 ライト 全て事前計算 ShadowMap 事前計算ライト Runtime: Lighting 事前計算: 静的オブジェクト のShadow Map
  130. 130. ライティング事前計算機能: Lightmass
  131. 131. ライティング事前計算機能: Lightmass たった数時間で。
  132. 132. ライティング事前計算機能: Lightmass この計算をエディタの裏でしているのがLightmassです
  133. 133. ライティング事前計算機能: Lightmass 先月に、Lightmass専門の勉強会を行いました。 資料や情報がForumにあがっていますので、参考にしてください
  134. 134. 建築ビジュアリゼーションの真茅健一さんが、 ルイスバラガン邸をUE4で再現し、 その制作フローを講演してくれています @torashami
  135. 135. LightのMobilityのおさらい 事前計算なし ライト 全てRuntimeで計算 LightMap生成用 ライト 全て事前計算 ShadowMap 事前計算ライト Runtime: Lighting 事前計算: 静的オブジェクト のShadow Map
  136. 136. LightのMobilityのおさらい 事前計算なし ライト 全てRuntimeで計算 LightMap生成用 ライト 全て事前計算 ShadowMap 事前計算ライト Runtime: Lighting 事前計算: 静的オブジェクト のShadow Map
  137. 137. Stationary Lightのメインの制約
  138. 138. Stationary Lightのメインの制約 影付きStationary Lightを5つ以上重ねると、 5つ目以降のライトが”自動的に”MovableなLightになる。
  139. 139. Stationary Lightのメインの制約 “Stationary Light Overlap”で Stationary Lightの重なり具合を確認できます。 処理負荷が読めなくなるので、赤は基本的になしにしてください!
  140. 140. Stationary Lightの影については、 上記ブログが参考になります http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary
  141. 141. LightのMobilityのおさらい 事前計算なし ライト 全てRuntimeで計算 LightMap生成用 ライト 全て事前計算 ShadowMap 事前計算ライト Runtime: Lighting 事前計算: 静的オブジェクト のShadow Map
  142. 142. Deferred Lightingは 影がなければ動的ライト沢山おいても軽い?
  143. 143. 範囲の小さい Movable Lightを100個 範囲の大きい Movable Lightを8個VS
  144. 144. Light Complexity Lightingの負荷を大まかに見積もる機能
  145. 145. 範囲の小さい Movable Lightを100個 範囲の大きい Movable Lightを8個VS Light Complexityでの比較 (青->緑->赤と高負荷を示す)
  146. 146. Q: Deferred Lightingならライトを沢山おいていいのか? ライトを沢山を”置けます”が、 ライトが触れるピクセルが増えれば増えるほど処理負荷は増えます。 簡易的に、Light Complexityという機能があるので、 そちらで高負荷なライティングの場所を探りましょう。
  147. 147. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか?
  148. 148. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか? いいえ
  149. 149. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか? 試しにStatic Lightを3000個置いてみる。
  150. 150. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか? CPU プロファイラで見ると、 “Init Dynamic Setup”に処理負荷が。 UE4ではStatic Lightに何か変更があっ た際(Dirtyフラグが立った場合)、自動 で動的ライトに切り替える機能があり ます。 そのために、Static Lightのデータを、 ランタイム上でも一度チェックします
  151. 151. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか? いいえ CPU(Render Thread)の負荷になります
  152. 152. 発展編 Q. Static LightはRuntimeに影響受けないでしょうか? UE- 31804で対応しています。
  153. 153. バグトラックが公開されました。
  154. 154. UE4のWebサイトから ISSUESを選択してください。
  155. 155. このバグはまだ公開されていなかったorz
  156. 156. LightのMobilityのおさらい 各種設定とその特徴を理解して、正しく使いましょう。 「とりあえずStationary 」はご法度
  157. 157. Lighting Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  158. 158. Reflection Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 40(3)17:10
  159. 159. Reflection Probe 事前計算で静的シーンの ReflectionMapを作成 Screen Space Reflection 動的に反射を作成、 画面に見えない反射は 表現できない Planar Reflection 平面限定だが、完璧に 動的に反射を表現 重たいので映像向け
  160. 160. ドキュメントと、専用のサンプルまでと非常に充実している Reflection
  161. 161. Reflections Sample
  162. 162. 静的なReflection エディタ内部で事前にキャプチャするか、 特定のCubeMapを指定できる。
  163. 163. 静的なReflection Project SettingsでCaptureする CubeMapのサイズを変更できる。
  164. 164. 静的なReflection 複数のReflection Probeの混ざり方
  165. 165. 静的なReflection 複数のReflection Probeの混ざり方
  166. 166. Reflection Captureの数は 処理負荷につながる? 一個だけのReflectionCapture: 0.17ms 200個のReflectionCapture: 0.22ms
  167. 167. Reflection Captureの数は 処理負荷につながる? 200個のReflectionCapture: 0.48ms Radius = 200 200個のReflectionCapture: 2.01ms Radius = 1000
  168. 168. 静的なReflection: 配置方法 Reflection Probeの処理負荷は “Reflection Environment Compute Shader XXXX”に出てきます Lightingパスのライトと同様、 Probeの数よりも、それらが寄与するピクセル数が多いほど処理負荷が高い。 よって、不用意に半径を大きくすべきではない。 (しかし、ライト程負荷が跳ね上がることはないので、 そこまでここがボトルネックになることはなさそう。。。)
  169. 169. 静的なReflection: 配置方法 UE4 documentationに記載されている 配置方法。 全体を覆う赤: Reflectionがシーン全体で なくならないようにする 部屋単位で覆う青: メイン。大まかな整合性はここで定義 オブジェクトのディティールとしての緑: Reflectionが映える特殊なオブジェクト にのみ配置
  170. 170. 動的なReflection Screen Space Reflection 長所 • 完全に動的にReflectionを生成 事前計算なし 短所 • 画面範囲外の反射は取得できない • ノイズが多い • 半透明の映り込みが正しくない
  171. 171. Planar Reflection 4.12から生まれた機能、平面のみ可能、 非常に高負荷で、シーンを二回レンダリングしているようなもの
  172. 172. Planar Reflection vs Screen Space Reflection SSRはあくまで画像範囲内の疑似的なReflection
  173. 173. Reflection Reflectionには静的なものと動的なものを組み合わせて実現します。 静的なものは配置方法を、 動的なものはクオリティと処理負荷を、 それぞれ意識して使用してください。 ReflectionはUE4 Docで詳細が沢山記載されているので、 そちらも併せて参考にしてください。
  174. 174. Reflection Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  175. 175. 半透明 Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 43(9)17:13
  176. 176. 半透明は UE4に限らず 現代のリアルタイムレンダリングの最大の課題の一つ
  177. 177. 半透明の問題とUE4上の対策 1. Depth描画をしない 2. 描画負荷
  178. 178. Eeffectをシーンに置いてみる
  179. 179. Depthは何も書かれていない
  180. 180. 半透明の問題とUE4上の対策 Depthを描画しないため Depthを用いるエフェクトで問題が起こる
  181. 181. Depth Of Fieldをかけてみる
  182. 182. この不一致を解決するために Separate Translucency という機能をUE4は用意しています。
  183. 183. Lighting Post Processそれまでの パス 半透明描画 パス Depth Of Field
  184. 184. Lighting Post Processそれまでの パス Depth Of Field Separate Translucency Pass 半透明描画 パス
  185. 185. Separate Translucency = ON
  186. 186. Separate Translucency ONOFF
  187. 187. Project 単位でSeparate Translucencyの設定 Project Settings / Rendering内
  188. 188. マテリアル単位で、 どちらのパスで描画 できるかも設定可能 (マテリアルの Translucencyタブ内)
  189. 189. Separate Translucency = ON 本来、遠くの煙にはボケてほしい。
  190. 190. Lighting Post Processそれまでの パス 半透明描画 パス Depth Of Field Separate Translucency Pass Separate Translucency のパスは Depth Of Fieldがかからない
  191. 191. UE4 フォーラムでスレッドがあります。 「半透明描画とDOFを両立させる方法について」 より良いアイディアがあれば、是非議論していければと思います。
  192. 192. マテリアル単位で、Depth Of Fieldのパラメータを取得できる “Depth Of Field Function”ノード
  193. 193. DOF Functionなし DOF Functionあり
  194. 194. 半透明の問題とUE4上の対策 1. Depth描画をしない 2. 描画負荷
  195. 195. どちらが重たいでしょう?? 画面全体の色を変えるPostEffect 煙のエフェクト一個
  196. 196. ピクセル描画の主な負荷 = 各ピクセル描画の重たさ * ピクセル数
  197. 197. 半透明描画では、 透明でも沢山のピクセルを描画している可能性がある 煙のエフェクト一個ワイヤーフレーム表示
  198. 198. たった一個のエフェクトでも、描画するピクセル数が増えれば、 PostEffect以上の負荷に簡単に跳ね上がる。 画面全体の色を変えるPostEffect 煙のエフェクト一個
  199. 199. 重なり具合を確認できる Debug View Shader Complexity
  200. 200. ピクセル描画の主な負荷 = 各ピクセル描画の重たさ * ピクセル数 どのように処理ピクセルを減らすか?
  201. 201. UE4でのピクセル描画負荷対策 1: Separate Translucencyの解像度削減 2: Particle Cut Out
  202. 202. Lighting Post Processそれまでの パス 半透明描画 パス Depth Of Field Separate Translucency Pass このバッファの解像度を減らすことで描画ピクセルを減らす r.SeparateTranslucencyScreenPercentage コマンド
  203. 203. Resolution = 100% : 0.44ms
  204. 204. Resolution = 50% : 0.32ms
  205. 205. Resolution = 10% : 0.2ms
  206. 206. Separate Translucencyをお使いの場合 r.SeparateTranslucencyScreenPercentage コマンドで、 クオリティと処理負荷を比較してみてください
  207. 207. UE4でのピクセル描画負荷対策 1: Separate Translucencyの解像度削減 2: Particle Cut Out
  208. 208. UV-Animationによるスプライト表示では、 透明部分が不要に出てきてしまう場合が多い
  209. 209. ”Particle CutOut” Particleの透明部分を、自動でポリゴン分割してくれる機能
  210. 210. ポリゴン数は少し増えるが、大幅なピクセル描画負荷を削減 Paragonではこれでエフェクトの描画負荷が3分の1に。
  211. 211. mokoさんの上記ブログで、詳細な設定方法を説明して頂いております http://effect.hatenablog.com/entry/2016/07/04/015542
  212. 212. 半透明の問題とUE4上の対策 1. Depth描画をしない 2. 描画負荷
  213. 213. 半透明 Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  214. 214. Post Process Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 52(5)17:22
  215. 215. Post Process なし
  216. 216. Post Process あり
  217. 217. Post Process ありPost Process なし
  218. 218. Post Process ありPost Process なし
  219. 219. Post Processの設定は位置(Volume内)、カメラ、 それぞれに設定可能
  220. 220. どちらも Post Process Volume内で 自身のポストエフェクトの設定 を調整可能。
  221. 221. 各々のPriorityとBlend Weightでそれぞれの設定を シームレスに変更することができる。
  222. 222. 様々なポストプロセスがあり、 個別の効果はUE4 Docを参照してください
  223. 223. UE4のPost Processingは順序が定まっています。 Depth Of Field Motion Blur Bloom Tone Mapping マテリアルエディターなどで自由にパスを入れ替えることはできません。 その中で、各エフェクトに関してパラメータを設定できます
  224. 224. ProfileGPUPost Process 設定 不一致
  225. 225. ProfileGPUは、具体的な実装に近い要素を記述しています。 どこがどこまでかわからない場合は、エンジニアに相談してください。
  226. 226. さらに詳細に調整したい場合、、 エディタに出ていないコマンドで様々な設定ができます。
  227. 227. Bloomの設定、沢山パラメータがあるが、 コンソールコマンドでも設定できる項目がある。
  228. 228. r.BloomQuality 5r.BloomQuality 0 r.BloomQuality 1 r.BloomQualityコマンドでBloomの広がりが変更され。。。
  229. 229. r.BloomQuality 5r.BloomQuality 0 r.BloomQuality 1 さらに ProfileGPUで見える処理のフローも変わる。
  230. 230. コマンドの意味は、 いままではソースコードのコメントを読むしかなかったが。。
  231. 231. 4.13からConsole Variablesのヘルプをローカルに保存する機能が。
  232. 232. 英語のみだが、各コマンドの意味を検索できるようになっている
  233. 233. Post Processing まとめ UE4のPost Processingのパスは固定です。 Profileの”Post Process”項目は、 Post Process Volumeの項目と違います。 しかも、設定によって処理の中身や負荷ががらりと変わることもあります。 ポストプロセスボリュームの設定項目だけじゃなく、 r.XXXXXというコマンドで様々な設定ができます。 処理見積もりがしやすい場所でもあります。 エンジニアと相談しつつ、早めに計測しましょう。
  234. 234. Post Process Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  235. 235. おわりに Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting 57(3)17:27
  236. 236. かけ足でしたが、UE4のレンダリングフローを見ながら、 要所でのTipsを説明していきました。 Base Pass Lighting TransparencyZ PrePass Post Process Reflection Pre- Lighting
  237. 237. まとめ レンダリングの中身をしることで、 クオリティとパフォーマンスを両立することができます そのために、UE4は様々なツールを用意しています。 エンジニアと協力しつつ、色々な検証をしてみてください。
  238. 238. UE4はソースコードを公開しています。 (最近はバグトラッカーまで公開されました!) そしてありがたい事に、UE4コミュニティには沢山の優秀な人々がいます。 多くの方がオープンに情報を公開し、議論して頂き、 素晴らしい情報が日々蓄積されています。 今日、ご紹介できなかった方々や、 自分も把握し切れてない多くの方々に日々支えられております。 本当に感謝しております。 ありがとうございます。
  239. 239. ご清聴ありがとうございました Special Thanks!! ロブさんも、 アセット貸してくれてありがとうございます。 アンケートにご協力ください! また、今日出せてない情報が沢山ありますので、 それらは、UE4 Forumで是非ポストモーテムできればと思います。

×