Version: 2019.4
Forward rendering path
Legacy Deferred rendering path

Deferred Shading rendering path

This page details the Deferred Shading rendering path in Unity’s Built-in Render Pipeline. See Wikipedia: deferred shading for an introductory technical overview of deferred shading.

概要

ディファードシェーディングを使用する場合、オブジェクトに影響を与えることができる光の数に制限はありません。すべての光は、ピクセルごとに評価されます。つまり、それらがすべて法線マップ等と正しく相互作用することを意味します。さらに、すべての光は、クッキーと影を設定することができます。

ディファードシェーディングには、ライティングの処理オーバーヘッドは光が照らすピクセル数に比例するという利点があります。これはオブジェクトを照らす数に関係なく、シーンの中の光のボリュームのサイズによって決定されます。したがって、パフォーマンスは、明りを小さくすることによって向上します。また、ディファードシェーディングは非常に一貫性のある予測可能な動作をします。光の効果はピクセルごとに計算されるので、大きな三角形で失敗するライティングの計算はありません。

On the downside, deferred shading has no real support for anti-aliasing and can’t handle semi-transparent GameObjects (these are rendered using forward rendering). There is also no support for the Mesh Renderer’s Receive Shadows flag and culling masks are only supported in a limited way. You can only use up to four culling masks. That is, your culling layer mask must at least contain all layers minus four arbitrary layers, so 28 of the 32 layers must be set. Otherwise you get graphical artifacts.

要件

Multiple Render Targets (MRT)、Shader Model 3.0 (またはそれ以降)、デプスレンダーテクスチャへのサポートを伴うグラフィックカードが必要です。2006年以降に作られた GeForce 8xxx、Radeon X2400、Intel G45 などをはじめとする、ほとんどの PC グラフィックスカードはディファードシェーディングをサポートします。

モバイルでは、ディファードシェーディングは、最低 OpenGL ES 3.0 を実行するすべてのデバイスでサポートされます。

注意: ディファードレンダリングは、平行投影ではサポートされないため、設定されている場合は、カメラは常にフォワードレンダリングを使用します。

パフォーマンス考慮点

ディファードシェーディングでは、リアルタイムライトのレンダリングのオーバーヘッドは、光が照らすピクセル数に比例し、シーンの複雑さには依存しません 。そのため、小さな点やスポットライトをレンダリングするのは非常に軽量であり、それらが全部、または、部分的にシーンのオブジェクトによっておおわれる場合、さらに軽量になります。

もちろん、影のない光よりも影のある光がはるかに高価です。ディファードシェーディングでは、影を投影するオブジェクトは、影を投影するライトごとに一回以上レンダリングされる必要があります。さらには、影を適用するライティングシェーダーは、影を無効化した場合と比べて、レンダリングオーバーヘッドが大きくなります。

実装に関する詳細

ディファードシェーディングをサポートしないシェーダーを持つオブジェクトは、ディファードシェーディングが終了した後に フォワードレンダリング パスを使ってレンダリングされます。

ジオメトリバッファ(g-buffer) のレンダーターゲット (RT0 - RT4) のデフォルトレイアウトは、以下のとおりです。データタイプは各レンダーターゲットのさまざまなチャンネルに配置されます。括弧内に使用されるチャンネルを表示します。

  • RT0, ARGB32 format: Diffuse color (RGB), occlusion (A).
  • RT1, ARGB32 フォーマット: Specular color (RGB), roughness (A).
  • RT2, ARGB2101010 フォーマット: World space normal (RGB), unused (A).
  • RT3, ARGB2101010 (non-HDR) または ARGBHalf (HDR) フォーマット: Emission + lighting + lightmaps + reflection probes buffer.
  • Depth+Stencil バッファ.

だから、デフォルト g-buffer レイアウトは、160ビット/ピクセル (non-HDR) または、192ビット/ピクセル(HDR)があります。

If using the Shadowmask or Distance Shadowmask modes for Mixed lighting, a fifth target is used:

  • RT4, ARGB32 形式: ライトオクルージョン値 (RGBA)

したがって、g-buffer レイアウトは、192ビット/ピクセル (非 HDR) または、224ビット/ピクセル(HDR)です。

ハードウェアが 5 つのレンダーターゲットを同時にサポートしない場合は、シャドウマスクの使用がフォワードレンダリングパスの代案です。 カメラが HDR を使っていないとき、Emission とライティングバッファ(RT3)は、ARGB32 テクスチャで通常可能であるよりも大きなダイナミックレンジを提供するために対数的にコード化されます。

カメラが HDRレンダリングを使用するとき、エミッション + ライティングバッファ(RT3)のために別のレンダーターゲットは作成されません。代わりに、カメラがレンダリングするレンダーターゲットが RT3 として使用されます。

G-Buffer パス

G-buffer パスは、それぞれのオブジェクトを一度レンダリングします。Diffuse colors、specular colors、surface smoothness、world space normal と emission+ambient+reflections+lightmaps は、G-buffer テクスチャにレンダリングされています。G-buffer テクスチャはシェーダーにより、後のアクセスのためにグローバルシェーダーのプロパティーとして設定されています( CameraGBufferTexture0 から CameraGBufferTexture3 )。

Lighting パス

Lighting パスは、G-buffer やデプスに基づいてライティングを計算します。Lighting は、スクリーンスペースで計算するので、それを処理すために要する時間は、シーンの複雑さとは無関係です。Lighting は emission バッファに加えられます。

カメラにニアクリッププレーン(近い平面)を交差しないポイントライトやスポットライトは3D 図形としてレンダリングされ、シーンに対する Z バッファテストが有効化されます。これにより一部あるいは全体がオクルージョンされたポイントライトやスポットライトはレンダリングが非常に軽量です。ニアクリッププレーンを交差しない Directional Light(指向性ライト)およびポイントライト・スポットライトはフルスクリーンの四角形としてレンダリングされます。

ライトの影が有効化されている場合、それらもレンダリングされパスに適用されます。影をレンダリングするのにも処理がかかることに注意してください。shadow caster(影の投影)もレンダリングする必要があり、より複雑なライトシェーダーも適用する必要があります。

唯一のライティングモデルは Standard です。異なるモデルを使用したい場合は、ビルトインシェーダー の Internal-DeferredShading.shader ファイルの修正版を、Assets フォルダーの Resources という名前のフォルダーに配置して、ライティングパスシェーダーを変更できます。次に Graphics 設定 (Edit > Project Settings を選択し、Graphics カテゴリをクリック) を開きます。“Deferred” ドロップダウンを “Custom Shader” に変更します。次に、使用しているシェーダーに表示されるシェーダーオプションを変更します。


  • 2017–06–08 Page published

  • Light Modes (ShadowmaskDistance Shadowmask) 5.6 に追加

Forward rendering path
Legacy Deferred rendering path