はじめに
レンダリングに関する理解を深めるため、ForwardレンダリングとDeferredレンダリングの違いを自分なりに軽くまとめてみました。
Forwardレンダリング
Forwardレンダリングでは、基本的に以下のようにレンダリングが実行されます。
オブジェクトごとにライティング計算が実行されます。
Deferredレンダリング
Deferredレンダリングでは、基本的に以下のようにレンダリングが実行されます。
スクリーン上の必要なピクセルのみにライティング計算が実行されます。
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/