cedec2016: unreal engine 4 のレンダリングフロー総おさらい

266
Unreal Engine 4 の レンダリングフロー総おさらい Epic Games Japan Senior Support Engineer 篠山 範明 16:30 5

Upload: -epic-games-japan

Post on 16-Apr-2017

14.454 views

Category:

Engineering


16 download

TRANSCRIPT

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

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

Epic Games Japan

Senior Support Engineer

篠山 範明

16:30 5

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

はじめに

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

本日の内容

UE4のRenderingのフローを俯瞰で見て、

各要所のTipsを見ていきます。

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

Renderingの調整は日々クオリティとパフォーマンスとの戦い。

Quality Performance

Iteration

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

Renderingの調整は日々クオリティとパフォーマンスとの戦い。

Quality Performance

Iteration誰の仕事?

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

UE4は、アーティストでもPerformance解析をできるような様々なツールを用意しています。

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

ツールの存在は知られているが、あまり使われていないのはなんでだろう?

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

UE4のレンダリングの知識をある程度把握しないといけないのではないか?

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

例えば、こんなシーン

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

UE4のDeferred Renderingの一般的なイメージ

BasePass

Lighting PostProcess

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

完成

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

“ProfileGPU” コマンドor “Ctrl + Shift + ,”でRenderingの処理の流れが見えます。

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

何をやっているのがよくわからない処理もあるのではないでしょうか?

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

BasePass

Lighting PostProcess

このイメージだけでは足りないのではないか?

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

本講演の目標

Renderingの流れと、中で何が行われているかを理解する。

その際に開発で重要となるTipsや機能を知り、

日々の開発や意思決定をスムーズにする。

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

本講演の目的

Quality Performance

Iteration

このIterationをアーティストが自身で回すためのとっかかりに。

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

本日の対象者

UE4を用いて日々開発を行っている

アーティスト、

テクニカルアーティスト

(エンジニア)

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

本日話さない事

• Render Thread からRHI Threadへのコマンドの積み方

• RHI ThreadからGPUコマンド発行プロセス

• 俺俺G-buffer拡張方法

• .usfのコンパイルプロセス

• DX12が(以下略)

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

本日の非対象者

UE4の内部Renderingフローと

日々格闘しているエンジニアの方

(特に、FDeferredShadingRender::Render()以下の流れを熟読しているかた。)

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

本日のアジェンダ

• Renderingフローをもう少し掘り下げる

• 各項目毎に掘り下げる(仮)• Z-Prepass

• BasePass

• (Custom-Depth/Stencil)

• Lighting

• Transparency

• Reflection

• Fog

• まとめ(振り返り)

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

備考

• 本資料はすぐにアップされます。説明で出てくるコマンドを逐一メモする必要はありません

• エディターは英語版で説明を行います。

• UE4.13を想定しています。

• 質疑応答は予定しておりません。

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

本日のアジェンダ

• Renderingフローをもう少し掘り下げる

• 各項目毎に掘り下げる• Z-Prepass

• BasePass

• (Custom-Depth/Stencil)

• Lighting

• Transparency

• Reflection

• Fog

• まとめ(振り返り)

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

Renderingフローをもう少し掘り下げる(一階層だけ深く)

5(2)16:35

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

BasePass

LightingPost

Process

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

BasePass

LightingPost

Process

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

BasePass

LightingPost

ProcessTransparency

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

BasePass

LightingPost

ProcessTransparencyReflection

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

BasePass

LightingPost

ProcessTransparencyReflection

Pre-Lighting

Decal Ambient Occlusion

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

BasePass

LightingPost

ProcessTransparencyReflection

Pre-Lighting

Z PrePass

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

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

これらを大まかなブロックとして、ブロック毎に掘り下げていきたいと思います。

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

Base Pass一番重要かつ基本のパス

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

7(15)16:37

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

Base Passで行われること

Opaque / Maskedマテリアルのオブジェクトを

レンダリングし、G-bufferを作成する。

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

G-Bufferとは

後のライティングやポストエフェクトで使われるための中間バッファ。

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

BasePassの描画順を視覚化

Page 36: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 37: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 38: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 39: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 40: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 41: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 42: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 43: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 44: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Base Pass の注意点

BasePassはジオメトリ投入のコストが直に反映される場所なので、

処理負荷になりやすい場所です。

少し時間をとって、BasePassの注意点を見ていきます。

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

Base Passで注意すべきこと

• 無駄な頂点を計算させない

• 無駄なピクセルを計算させない

• 無駄にシェーダを重たくしない(こちらはマテリアル作成の問題で今回は触れない)

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

Base Passで注意すべきこと

• 無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない

• 無駄なピクセルを計算させない

• 無駄にシェーダを重たくしない(こちらはマテリアル作成の問題で今回は触れない)

8(5)

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

例えば、こんなメッシュを頑張って作成してみたものの。。

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

このキャラクタ一体しか見えないシーンなのに、処理負荷がめちゃくちゃ高い!!

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

処理負荷の原因は、画面に見えないはずの大量のロブさん

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

(CPU) Frustum Culling

Object

Object

見えない!見える

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

Object見える??

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

不必要におおきなバウンスはGPUの負荷につながります

良いバウンス 悪いバウンス

友情出演

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

無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない。

コックピットならば、前後左右を一体で作ると、全く見えない後ろのポリゴンもマイフレームGPUが計算してしまう。

Kentuckyguard http://free-photos.gatag.net/2014/06/06/160000.html

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

Stat InitViews コマンドで、どれだけ事前にオブジェクトをカリングしたかわかる。

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

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

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

無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない。

Init Views や FreezeRendering で、画面に映らないオブジェクトがGPUに投入されていないか確認してみましょう。

また、各プラットフォームのGPU解析ツールで、GPUから見たプロファイルもできます。

(こちらは、エンジニアにお願いしましょう!)

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

Base Passで注意すべきこと

• 無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない

• 無駄なピクセルを計算させない

• 無駄にシェーダを重たくしない(こちらはマテリアル作成の問題で今回は触れない)

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

Base Passで注意すべきこと

• 無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない

• 無駄なピクセルを計算させない

• 無駄にシェーダを重たくしない(こちらはマテリアル作成の問題で今回は触れない)

13(+7)16:43

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

Depth Test のGPU内部の動作

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

Depth Test

0. 何もないシーンに。。。

Color Buffer Depth Buffer

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

Depth Test

1. 赤いポリゴンが描画されて。。。

Color Buffer Depth Buffer①

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

Depth Test

2. 青いポリゴンが描画されて。。。深度比較されて遠くのオブジェクトは消える。

Color Buffer Depth Buffer① ②

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

Depth Test

Q. この赤の裏に隠れた青のピクセル達は、計算されるんでしょうか???

Color Buffer Depth Buffer① ②

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

頂点シェーダで、画面のどこにポリゴンがあるかを計算します。

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

ラスタライザでそのポリゴンがどのピクセルを埋めるかを判断します。

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

そしてPixel Shaderでピクセルの色を計算する

Rasterizer

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

Pixel Shaderの前に、各ピクセルに描画されるデプスは決まってすよね?

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

PreZ: Pixel Shaderの前でDepth Test及びDepth Writeを行う

Pre Z

Rasterizer

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

そしてPixel Shaderでピクセルの色を計算する

Pre Z

Rasterizer

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

次に青いポリゴンが奥に投入されても。。。。

Pre Z

Rasterizer

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

描画の流れをGPU的に追っていきます。

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

PreZで先にDepth計算と比較をするので。。。

Pre Z

Rasterizer

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

描画の流れをGPU的に追っていきます。

Pixel Shaderでこの重なった部分のピクセルは計算されません。めでたしめでたし。。。

Color Buffer Depth Buffer

Pre Z

Pixel Shader

Rasterizer

Vertex Shader

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

Color Buffer Depth Buffer

Pixel Shader

Rasterizer

Vertex Shader

Pixel Shaderの前に、各ピクセルに描画されるデプスは決まってすよね?

本当か?

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

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

Pixel Shaderを走らせないと最終的なDepthがわからない例: 1

アルファテスト

Pre Z

Rasterizer

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

アルファテストを行うMaskedマテリアル

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

Color Buffer Depth Buffer

Pixel Shader

Vertex Shader

Pixel Shaderを走らせないと最終的なDepthがわからない例: 2

Pixel Shader内部で無理やりDepthを書き換える

Pre Z

Rasterizer

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

PixelのDepthを変更するPixel Depth Offset

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

この様なシェーダに出くわすと、GPUは自動的に、シェーダを計算してからDepth処理を行う、Post Zというものに切り替えます。

Color Buffer Depth Buffer

Pre Z

Post Z

Pixel Shader

Rasterizer

Vertex Shader

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

これらを意識していないと、PreZがOffになり、

不要なPixel Shaderが走る可能性があります。

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

駄目な例: 不透明だけどとりあえずMaskedにパラメータ入れておく

Pre Z

Post Z

Pixel Shader

Rasterizer

Vertex Shader

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

駄目な例: 使わないけど、Pixel Depth Offsetをパラメータ化

Pre Z

Post Z

Pixel Shader

Rasterizer

Vertex Shader

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

マスターマテリアルに汎用性を持たせるために、MaskedやPixel Depth Offsetをパラメータ化している場合、

PreZが走っているかのチェックが必要です。

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

PreZ / PostZどちらが走るかは、GPU内部の処理のため、UE4では観測できません。

エンジニアにお願いして、各プラットフォームのGPUプロファイラを使ってください。

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

Base Passで注意すべきこと

• 無駄な頂点を計算させないカメラに入らないオブジェクトをGPUに投入させない

• 無駄なピクセルを計算させないPreZの効果を不必要に消させない

• 無駄にシェーダを重たくしない(こちらはマテリアル作成の問題で今回は触れない)

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

BasePass まとめ

Base PassはG-bufferを作成するフェイズです。

OpaqueとMaskedマテリアルが投入されます。

オブジェクトの投入が直に響く箇所です。

バウンスの設定を確認し、無駄な頂点計算をさせないように。

マテリアルを確認し、無駄なピクセル計算をさせないように。

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

Advanced:G-Bufferの拡張

20(2)

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

G-Bufferの拡張(エンジン拡張)

もんしょさん(@monsho1977)の上記の記事では、実際にソースコードを改変して、G-Bufferを拡張する方法を説明しています。

http://monsho.blog63.fc2.com/blog-entry-191.html

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

おぎまふさん(@ogimafu) はG-Bufferを拡張し、独自のToon Shadingを実装

http://www.slideshare.net/TomohiroOgiwara/ue4meetup-63696087?ref=http://ogimafu.blogspot.jp/2016/07/3ue4meetup.html

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

ノンフォト描画については、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

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

G-Bufferの精度の制御

Project Settings の Rendering内で、G-bufferの精度を変更できます。映像系など高精細な絵作りが必要な場合、精度を上げてください。

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

Base Pass一番重要かつ基本のパス

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

Z prepass

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

22(3)16:52

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

Z Prepassとは?

BasePass

全オブジェクトを毎回G-bufferに書き出して。。。

とやるのは処理負荷が高い。。

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

Z Prepassとは?

BasePass

Z PrePass

Depth-Bufferのみを作成するパスをBasePassの前(pre)に仕込んでおく。

BasePassで実際にG-Bufferに書き出すのは前もって用意したデプスに勝つピクセルのみとなり、処理負荷が減る“可能性”がある。

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

Z Prepass Off ver.

のBasePass描画

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

GOAL

Page 97: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 98: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 99: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 100: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 101: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 102: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 103: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 104: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 105: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Z Prepass ON ver.

の BasePass描画

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

Z prepassで背景のデプスバッファを作成

Page 107: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 108: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 109: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 110: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 111: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 112: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
Page 113: CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい

Z Prepassの設定場所(Project Settings)

Project Settings / Rendering内の Early Z-passというタブでおこなえる。また、下のMovables in early Z-passでMovableメッシュもこのEarly-Zに参加させるか指定可能

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

Decide Automaticallyの挙動

Defaultのこの設定ですが、十中八九Opaque Meshes Onlyになると考えてOKです。

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

Z Prepassの各オブジェクトの設定場所(Use as Occluder)

各オブジェクトのRenderingタブ内に、

“Use as Occluder”という項目がある。

この設定がDefaultでONだが、これをOffにすることで、Early-Zへの参加の有無をオブジェクト単位で調整できる。

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

Z prepassの効き目と注意点

Z prepassは、

BasePassのピクセル処理負荷を下げる代わりに。。。

Z prepassでもジオメトリを投入します。

ポリゴン数が多いシーンでは、

逆にZ Prepassが処理負荷につながるケースもあります、

こちらをOn/Offしてみて、

採用の判断をしていただければと思います。

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

Z prepass

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

Custom Depth/Stencilちょっと脱線。。

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

CustomDepth / Stencil

25 (3)16:55

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

Custom Depth/ Stencil

特定のメッシュのDepthだけを別バッファに書き出す機能とそのバッファ名

本来のDepthBuffer もう一つ別のDepthBuffer

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

Custom Depth/ Stencil

Project SettingのRendering項目にある、“Custom Depth-Stencil Pass”をONにしてください。

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

Custom Depth/ Stencil

各メッシュのRender CustomDepth Passにチェックをいれる

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

Custom Depth/ Stencil

試しにキャラクター全部のカスタムDepthをONにしてみる。

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

Alweiさん(@aizen76) の上記のブログでもToon ShadingのマスキングのためにCustom Depthを使用

http://unrealengine.hatenablog.com/entry/2016/05/30/220000

Custom Depthなし Custom DepthありCustom Depth

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

らりほまさん(@rarihoma) の上記のブログではD言語君のマスクとしてCustom Depthを使用

http://rarihoma.xvs.jp/2015/02/22/1/#customdepth-

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

Custom Depth/ Stencil

Q. Custom Depth を作成するのは重たいでしょうか?

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

Custom Depth/ Stencil

A. Custom Depth を描くオブジェクトが増えれば増えるほど、重たくなります。

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

Custom Depth/ Stencil

先ほどのシーンでプロファイルしてみます。

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

Custom Depth/ Stencil処理負荷比較

Custom Depthもほぼ同等の負荷がかかります

BasePassのキャラクターレンダリング負荷

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

Custom Depth/ Stencil

Custom Depth / Stencilにチェックを入れたオブジェクトは、もう一度オブジェクトがGPUに投入されて計算されます。

その分GPUコストにつながるので、ちゃんとプロファイリングして使ってください

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

Custom Depth/Stencilちょっと脱線。。

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

CustomDepth / Stencil

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

Pre-LightingDecal & AO

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

28(5)16:58

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

Decal Ambient Occlusion

テクスチャをプロジェクションする。弾痕や血しぶきとか。。

疑似的なライティング遮蔽情報物体の接地感やディティールの増幅に

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

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

後のLighting等で使われるので、前もって処理しておく必要がある

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

DecalをUE4コミュニティの方達の資料を用いて紹介したいと思います。

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

http://konabe.blog.jp/archives/33883823.html

栗坂こなべさん(@kurisaka_konabe)の記事を参照させて頂きます。

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

インクが付くようなエフェクト、右の図の様にプレーンを置くとなると、ぎりぎり面の上に置かなければいけないし、

壁際のコーナーなどでは不具合が生じる

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

Decalはボックス形状で、プロジェクションするので、複雑なオブジェクトにも対応しています。

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

Decalは便利なのですが。。。事前に焼き付けたライティングの干渉など、

ライティングの問題が多いです。

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

ずしさん(@shiba_zushi)のツイートを参考させて頂きます。

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

https://twitter.com/shiba_zushi/status/736443001820454912

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

https://twitter.com/shiba_zushi/status/736443290791202816

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

https://twitter.com/shiba_zushi/status/736443563806838785

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

アンコウさん (@dgtanaka) もこの問題について取り組んでいます「スカイライトを配置するとデカールが透ける問題調査」

https://trello.com/c/fkJo51iu/12--

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

UE4もくもく会 = (ソースコードリーディング会)

にて資料を公開してくれています

https://trello.com/c/fkJo51iu/12--

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

このライティングの不具合を解消するために

D-Bufferという解決策をUE4は提供しています。

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

Project Settings / Rendering内にあるD-Buffer DecalsをONにすることにより、この問題を解決できます。

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

https://twitter.com/shiba_zushi/status/736446424028569602

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

D-Bufferデカールの具体的な仕組みや負荷など、詳細に記述してくれています。

https://twitter.com/shiba_zushi/status/736443563806838785

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

Pre-LightingDecal & AO

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

Lighting

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

33(7)17:03

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

LightのMobilityのおさらい

事前計算なしライト

全てRuntimeで計算

LightMap生成用ライト

全て事前計算

ShadowMap事前計算ライト

Runtime:

Lighting

事前計算: 静的オブジェクトのShadow Map

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

LightのMobilityのおさらい

事前計算なしライト

全てRuntimeで計算

LightMap生成用ライト

全て事前計算

ShadowMap事前計算ライト

Runtime:

Lighting

事前計算: 静的オブジェクトのShadow Map

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

ライティング事前計算機能: Lightmass

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

ライティング事前計算機能: Lightmass

たった数時間で。

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

ライティング事前計算機能: Lightmass

この計算をエディタの裏でしているのがLightmassです

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

ライティング事前計算機能: Lightmass

先月に、Lightmass専門の勉強会を行いました。資料や情報がForumにあがっていますので、参考にしてください

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

建築ビジュアリゼーションの真茅健一さんが、ルイスバラガン邸をUE4で再現し、

その制作フローを講演してくれています

@torashami

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

LightのMobilityのおさらい

事前計算なしライト

全てRuntimeで計算

LightMap生成用ライト

全て事前計算

ShadowMap事前計算ライト

Runtime:

Lighting

事前計算: 静的オブジェクトのShadow Map

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

LightのMobilityのおさらい

事前計算なしライト

全てRuntimeで計算

LightMap生成用ライト

全て事前計算

ShadowMap事前計算ライト

Runtime:

Lighting

事前計算: 静的オブジェクトのShadow Map

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

Stationary Lightのメインの制約

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

Stationary Lightのメインの制約

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

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

Stationary Lightのメインの制約

“Stationary Light Overlap”でStationary Lightの重なり具合を確認できます。

処理負荷が読めなくなるので、赤は基本的になしにしてください!

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

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

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

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

LightのMobilityのおさらい

事前計算なしライト

全てRuntimeで計算

LightMap生成用ライト

全て事前計算

ShadowMap事前計算ライト

Runtime:

Lighting

事前計算: 静的オブジェクトのShadow Map

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

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

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

範囲の小さいMovable Lightを100個

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

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

Light ComplexityLightingの負荷を大まかに見積もる機能

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

範囲の小さいMovable Lightを100個

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

Light Complexityでの比較(青->緑->赤と高負荷を示す)

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

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

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

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

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

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

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

発展編

Q. Static LightはRuntimeに影響受けないでしょうか?

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

発展編Q. Static LightはRuntimeに影響受けないでしょうか?

いいえ

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

発展編Q. Static LightはRuntimeに影響受けないでしょうか?

試しにStatic Lightを3000個置いてみる。

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

発展編Q. Static LightはRuntimeに影響受けないでしょうか?

CPU プロファイラで見ると、“Init Dynamic Setup”に処理負荷が。

UE4ではStatic Lightに何か変更があった際(Dirtyフラグが立った場合)、自動で動的ライトに切り替える機能があります。

そのために、Static Lightのデータを、ランタイム上でも一度チェックします

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

発展編Q. Static LightはRuntimeに影響受けないでしょうか?

いいえ

CPU(Render Thread)の負荷になります

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

発展編Q. Static LightはRuntimeに影響受けないでしょうか?

UE- 31804で対応しています。

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

バグトラックが公開されました。

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

UE4のWebサイトからISSUESを選択してください。

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

このバグはまだ公開されていなかったorz

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

LightのMobilityのおさらい

各種設定とその特徴を理解して、正しく使いましょう。

「とりあえずStationary 」はご法度

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

Lighting

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

Reflection

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

40(3)17:10

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

Reflection Probe

事前計算で静的シーンのReflectionMapを作成

Screen Space Reflection

動的に反射を作成、画面に見えない反射は

表現できない

Planar Reflection

平面限定だが、完璧に動的に反射を表現重たいので映像向け

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

ドキュメントと、専用のサンプルまでと非常に充実している

Reflection

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

Reflections Sample

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

静的なReflection

エディタ内部で事前にキャプチャするか、特定のCubeMapを指定できる。

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

静的なReflection

Project SettingsでCaptureするCubeMapのサイズを変更できる。

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

静的なReflection

複数のReflection Probeの混ざり方

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

静的なReflection

複数のReflection Probeの混ざり方

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

Reflection Captureの数は処理負荷につながる?

一個だけのReflectionCapture: 0.17ms

200個のReflectionCapture: 0.22ms

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

Reflection Captureの数は処理負荷につながる?

200個のReflectionCapture: 0.48ms

Radius = 200

200個のReflectionCapture: 2.01ms

Radius = 1000

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

静的なReflection: 配置方法

Reflection Probeの処理負荷は“Reflection Environment Compute Shader XXXX”に出てきます

Lightingパスのライトと同様、Probeの数よりも、それらが寄与するピクセル数が多いほど処理負荷が高い。

よって、不用意に半径を大きくすべきではない。

(しかし、ライト程負荷が跳ね上がることはないので、そこまでここがボトルネックになることはなさそう。。。)

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

静的なReflection: 配置方法

UE4 documentationに記載されている配置方法。

全体を覆う赤:

Reflectionがシーン全体でなくならないようにする

部屋単位で覆う青:

メイン。大まかな整合性はここで定義

オブジェクトのディティールとしての緑:

Reflectionが映える特殊なオブジェクトにのみ配置

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

動的なReflectionScreen Space Reflection

長所

• 完全に動的にReflectionを生成事前計算なし

短所

• 画面範囲外の反射は取得できない

• ノイズが多い

• 半透明の映り込みが正しくない

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

Planar Reflection

4.12から生まれた機能、平面のみ可能、非常に高負荷で、シーンを二回レンダリングしているようなもの

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

Planar Reflection vs Screen Space Reflection

SSRはあくまで画像範囲内の疑似的なReflection

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

Reflection

Reflectionには静的なものと動的なものを組み合わせて実現します。

静的なものは配置方法を、動的なものはクオリティと処理負荷を、それぞれ意識して使用してください。

ReflectionはUE4 Docで詳細が沢山記載されているので、そちらも併せて参考にしてください。

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

Reflection

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

半透明

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

43(9)17:13

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

半透明は

UE4に限らず

現代のリアルタイムレンダリングの最大の課題の一つ

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

半透明の問題とUE4上の対策

1. Depth描画をしない

2. 描画負荷

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

Eeffectをシーンに置いてみる

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

Depthは何も書かれていない

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

半透明の問題とUE4上の対策

Depthを描画しないため Depthを用いるエフェクトで問題が起こる

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

Depth Of Fieldをかけてみる

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

この不一致を解決するために

Separate Translucency

という機能をUE4は用意しています。

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

LightingPost Processそれまでの

パス半透明描画

パス Depth Of Field

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

LightingPost Processそれまでの

パス Depth Of Field

Separate Translucency Pass

半透明描画パス

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

Separate Translucency = ON

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

Separate Translucency

ONOFF

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

Project 単位でSeparate Translucencyの設定Project Settings / Rendering内

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

マテリアル単位で、どちらのパスで描画できるかも設定可能

(マテリアルのTranslucencyタブ内)

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

Separate Translucency = ON

本来、遠くの煙にはボケてほしい。

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

LightingPost Processそれまでの

パス半透明描画

パス Depth Of Field

Separate Translucency Pass

Separate Translucency のパスはDepth Of Fieldがかからない

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

UE4 フォーラムでスレッドがあります。「半透明描画とDOFを両立させる方法について」

より良いアイディアがあれば、是非議論していければと思います。

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

マテリアル単位で、Depth Of Fieldのパラメータを取得できる“Depth Of Field Function”ノード

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

DOF Functionなし DOF Functionあり

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

半透明の問題とUE4上の対策

1. Depth描画をしない

2. 描画負荷

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

どちらが重たいでしょう??

画面全体の色を変えるPostEffect 煙のエフェクト一個

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

ピクセル描画の主な負荷

=

各ピクセル描画の重たさ * ピクセル数

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

半透明描画では、透明でも沢山のピクセルを描画している可能性がある

煙のエフェクト一個ワイヤーフレーム表示

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

たった一個のエフェクトでも、描画するピクセル数が増えれば、PostEffect以上の負荷に簡単に跳ね上がる。

画面全体の色を変えるPostEffect 煙のエフェクト一個

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

重なり具合を確認できる Debug View

Shader Complexity

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

ピクセル描画の主な負荷

=

各ピクセル描画の重たさ * ピクセル数

どのように処理ピクセルを減らすか?

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

UE4でのピクセル描画負荷対策

1: Separate Translucencyの解像度削減

2: Particle Cut Out

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

LightingPost Processそれまでの

パス半透明描画

パス Depth Of Field

Separate Translucency Pass

このバッファの解像度を減らすことで描画ピクセルを減らすr.SeparateTranslucencyScreenPercentage コマンド

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

Resolution = 100% : 0.44ms

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

Resolution = 50% : 0.32ms

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

Resolution = 10% : 0.2ms

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

Separate Translucencyをお使いの場合r.SeparateTranslucencyScreenPercentage コマンドで、

クオリティと処理負荷を比較してみてください

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

UE4でのピクセル描画負荷対策

1: Separate Translucencyの解像度削減

2: Particle Cut Out

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

UV-Animationによるスプライト表示では、透明部分が不要に出てきてしまう場合が多い

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

”Particle CutOut”Particleの透明部分を、自動でポリゴン分割してくれる機能

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

ポリゴン数は少し増えるが、大幅なピクセル描画負荷を削減Paragonではこれでエフェクトの描画負荷が3分の1に。

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

mokoさんの上記ブログで、詳細な設定方法を説明して頂いております

http://effect.hatenablog.com/entry/2016/07/04/015542

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

半透明の問題とUE4上の対策

1. Depth描画をしない

2. 描画負荷

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

半透明

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

Post Process

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

52(5)17:22

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

Post Process なし

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

Post Process あり

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

Post Process ありPost Process なし

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

Post Process ありPost Process なし

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

Post Processの設定は位置(Volume内)、カメラ、それぞれに設定可能

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

どちらもPost Process Volume内で自身のポストエフェクトの設定を調整可能。

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

各々のPriorityとBlend Weightでそれぞれの設定をシームレスに変更することができる。

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

様々なポストプロセスがあり、個別の効果はUE4 Docを参照してください

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

UE4のPost Processingは順序が定まっています。

Depth

Of

Field

Motion

BlurBloom

Tone

Mapping

マテリアルエディターなどで自由にパスを入れ替えることはできません。その中で、各エフェクトに関してパラメータを設定できます

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

ProfileGPUPost Process 設定

不一致

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

ProfileGPUは、具体的な実装に近い要素を記述しています。

どこがどこまでかわからない場合は、エンジニアに相談してください。

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

さらに詳細に調整したい場合、、エディタに出ていないコマンドで様々な設定ができます。

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

Bloomの設定、沢山パラメータがあるが、コンソールコマンドでも設定できる項目がある。

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

r.BloomQuality 5r.BloomQuality 0 r.BloomQuality 1

r.BloomQualityコマンドでBloomの広がりが変更され。。。

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

r.BloomQuality 5r.BloomQuality 0 r.BloomQuality 1

さらに ProfileGPUで見える処理のフローも変わる。

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

コマンドの意味は、いままではソースコードのコメントを読むしかなかったが。。

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

4.13からConsole Variablesのヘルプをローカルに保存する機能が。

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

英語のみだが、各コマンドの意味を検索できるようになっている

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

Post Processing まとめ

UE4のPost Processingのパスは固定です。

Profileの”Post Process”項目は、Post Process Volumeの項目と違います。

しかも、設定によって処理の中身や負荷ががらりと変わることもあります。

ポストプロセスボリュームの設定項目だけじゃなく、r.XXXXXというコマンドで様々な設定ができます。

処理見積もりがしやすい場所でもあります。エンジニアと相談しつつ、早めに計測しましょう。

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

Post Process

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

おわりに

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

57(3)17:27

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

かけ足でしたが、UE4のレンダリングフローを見ながら、要所でのTipsを説明していきました。

BasePass

Lighting TransparencyZ PrePass

PostProcess

ReflectionPre-

Lighting

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

まとめ

レンダリングの中身をしることで、クオリティとパフォーマンスを両立することができます

そのために、UE4は様々なツールを用意しています。エンジニアと協力しつつ、色々な検証をしてみてください。

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

UE4はソースコードを公開しています。(最近はバグトラッカーまで公開されました!)

そしてありがたい事に、UE4コミュニティには沢山の優秀な人々がいます。

多くの方がオープンに情報を公開し、議論して頂き、素晴らしい情報が日々蓄積されています。

今日、ご紹介できなかった方々や、自分も把握し切れてない多くの方々に日々支えられております。

本当に感謝しております。ありがとうございます。

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

ご清聴ありがとうございました

Special Thanks!!

ロブさんも、アセット貸してくれてありがとうございます。

アンケートにご協力ください!また、今日出せてない情報が沢山ありますので、それらは、UE4 Forumで是非ポストモーテムできればと思います。