Deferred shading,rendering

最終更新日25 May 2017 13:37

deferred レンダリング、またはシェーディングは日本語で遅延レンダリングと呼ばれたり、
リアルタイムレンダリングの本[1]では繰り延べシェーディングと訳されています。
反対語はforward-rendering…従来タイプの手法は区別するためにこのように呼ばれる[2]

色々できるけど透過とアンチエイリアスが苦手

deferred renderingとはなにか?

可視サーフェイスが決まるまでシェーディングを行わない[1]
たとえば、最初のシーンのレンダリングをZバッファにだけ行う。
深度テスト後にシェーディングとテクスチャ処理を行う。
なのでシェーディングとテクスチャ処理をピクセルごとに1度しか行わない。

1回のドローコールでG-Buffer(Geometry Buffer)にモデルのジオメトリ、マテリアル情報を描き込む[2]。
この段階ではライティング・シェーディングは行わない。
すべてのメッシュをG-Bufferに描画した後にライティングを行う。
ジオメトリパスでライティング結果を求めず、遅延(Deferred)させてライティングを行うのでこう呼ばれる。

Deferredで実際にシェーディングをする時

G-Bufferで描き込み済みの、デプスやら法線やらの情報とライトの情報から計算を行う。
ライトの形状はあらかじめ描画しておいて、その範囲のみライト計算を行う。

Deferredレンダリングの良いところ

  • 光源の数を多く使用できる
  • ピクセルシェーダを軽くすることができる….無駄なライティング計算をしないから。

Deferredレンダリングの苦手なところ

  • 半透明描画
  • Multisample Anti-Aliasing(MSAA)アンチエイリアシング

Deferredレンダリングをするには?

マルチレンダーターゲット(MRT)が必要

Deferredの賢いライティングの計算の仕方

  • ライトの形状に合わせて、オブジェクトに影響するとこだけ計算する。
  • ステンシルマスクを使ってより影響範囲を正確に計算する


ファイル

サポートサイト Wikidot.com