Unity

【Unity】ForwardレンダリングとDeferredレンダリングの違いを軽くまとめてみた

More than 1 year has passed since last update.

はじめに

レンダリングに関する理解を深めるため、ForwardレンダリングとDeferredレンダリングの違いを自分なりに軽くまとめてみました。

Forwardレンダリング

Forwardレンダリングでは、基本的に以下のようにレンダリングが実行されます。

image.png

オブジェクトごとにライティング計算が実行されます。

Deferredレンダリング

Deferredレンダリングでは、基本的に以下のようにレンダリングが実行されます。

image.png

スクリーン上の必要なピクセルのみにライティング計算が実行されます。

ForwardとDeferredの比較

Forwardレンダリングではオブジェクトごとにライティング計算が実行されます。

それに対してDeferredレンダリングでは、スクリーン上のピクセルに対してライティング計算が実行されます。
そのため、DeferredレンダリングではForwardと比較してピクセルシェーダーの負荷が軽くなります。

補足

G-Buffer

G-Bufferは、深度情報(Z値)、アルベド値、スペキュラ値、法線情報などのことを指します。
DeferredレンダリングではG-Bufferを使ってZテストやライティング計算が行われます。

UnityではBuiltinRenderTextureType.GBuffer0あたりを参照するとG-Bufferをとってくることができます。

参考URL

なぜなにリアルタイムレンダリング
https://www.slideshare.net/SatoshiKodaira/ss-69311865

西川善司の3Dゲームファンのための「KILLZONE 2」グラフィックス講座(前編)
PS3のハイクオリティグラフィックスはDeferred Shadingでキマリ!?
http://game.watch.impress.co.jp/docs/series/3dcg/125909.html

THE RENDERING TECHNOLOGY OF KILLZONE 2
https://www.guerrilla-games.com/read/the-rendering-technology-of-killzone-2

レンダリングパス
https://docs.unity3d.com/jp/540/Manual/RenderingPaths.html

Forward vs Deferred vs Forward+ Rendering with DirectX 11
https://www.3dgep.com/forward-plus/