回答:
遅延レンダリングの特徴は、シーンレンダリングの複雑さをO(geometry * lights)からO(geometry + lights)に本質的に変更することです。
これは、(少なくとも)position *、normal、diffuse色などの基本的な属性を出力するように設計されたシェーダーを使用して最初にシーンをレンダリングすることで実現されます。その他の属性には、ピクセルごとの鏡面反射値およびその他のマテリアルプロパティが含まれる場合があります。これらは、Gバッファと総称されるフルスクリーンレンダーターゲットに保存されます。
(*:深さを利用できることは他の多くの効果に役立つため、開発者はより一般的に深さを格納し、それを使用して位置を再構築することを選択することに注意する価値があります。)
Gバッファーが生成されると、BRDFをライトごとにピクセルごとに1回だけ解くことにより、画面上の任意のピクセルに対して完全に照らされた結果を計算することができます。言い換えると、それぞれが20のライトの影響を受ける20のメッシュがある場合、従来の(「フォワード」)レンダリングでは、各メッシュに影響する各ライトの結果を蓄積するために各メッシュを数回再レンダリングする必要があります。最悪の場合、これはライトごとのメッシュごとに1回の描画呼び出し、または合計400回の描画呼び出しになります!これらの描画呼び出しごとに、メッシュの頂点を重複して再変換します。また、実際にはライトの影響を受けないピクセルをシェーディングしたり、最終結果に表示されなかったりする可能性が高くなります(シーン内の他のジオメトリによって遮られるため)。これらはそれぞれ、無駄なGPUリソースになります。
遅延レンダリングと比較:Gバッファーにデータを入力するためにメッシュを一度レンダリングするだけです。その後、各ライトに対して、ライトの影響の範囲を表す境界形状をレンダリングします。ポイントライトの場合、これは小さな球体である場合があります。指向性ライトの場合、シーン全体が影響を受けるため、フルスクリーンクワッドになります。
次に、そのライトの境界ボリュームに対してピクセル/フラグメントシェーダーを実行するときに、Gバッファーテクスチャの適切な位置からジオメトリ属性を読み取り、それらの値を使用してライティング結果を決定します。最終結果で表示されるシーンピクセルのみがシェーディングされ、ライトごとに1回だけシェーディングされます。これにより、大幅に節約できる可能性があります。
ただし、欠点がないわけではありません。これは、透明なジオメトリを処理するために拡張するのが非常に難しいパラダイムです(深層剥離を参照)。実際、非常に難しいので、実質的にすべての遅延レンダリング実装は、シーンの透明部分のフォワードレンダリングにフォールバックします。遅延レンダリングは、大量のVRAMとフレームバッファー帯域幅も消費するため、開発者はGバッファー属性を可能な限り最小/最小のコンポーネントに巧みにパックおよび圧縮することになります。
遅延レンダリングとも呼ばれます。遅延レンダリングとは、中間結果をテクスチャに保存し、その後中間データをサンプリングすることでレンダリング方程式を完成させる可能なレンダリングパスの幅広いセットを指します。
ジオメトリバッファは初期の例で、シーンは、不透明なジオメトリの位置、法線、ベーステクスチャなどを含む一連のバッファにレンダリングされます。照明は適用されておらず、最終的な色は不明です。後続のパスでライトがレンダリングされ、ジオメトリバッファがサンプリングされます。これは、スクリーンピクセルに表示される可能性があるライトの固定コストで、多数のライトをレンダリングできることを意味します。従来のレンダリングでは、遮蔽されて画面に表示されなかった表面のすべての光源を評価していました。
たとえば光情報を最初にレンダリングするなど、多くのバリエーションがあります。
詳細については、 http ://en.wikipedia.org/wiki/Deferred_shading http://delicious.com/aancsiid/deferred-shadingを参照してください。
遅延レンダリングは、geomtryがすべてをシェーディングするための2回目のパスを実行する前の処理です。複雑さをO(pixels * light sources)に変更し、パフォーマンスにわずかな影響しか与えない複雑なシーンを使用できるため、便利です。
実装はかなり簡単です。最初のパスでは、少なくとも距離、法線、色をレンダリングする必要があります。より多くのテクスチャを追加して、メモリを犠牲にして、鏡面反射や位置のようにレンダリングできます。
それらをレンダリングしたら、それぞれの中心に一意の光源があるいくつかの球体をレンダリングし、光を一緒に追加し、シーン内のジオメトリにすべてをトリミングして、最後にフォールオフを適用します。
there's the correct complexity equation
本当です。しかし、それは些細なことだと思います。他の回答の編集としてそれを提案するか、十分な評判を得たらそれについてコメントを残すことができます。そのため新しい答えを出すのは少しやり過ぎです。it's much more concise
個人的にはそれは良いとは思わない。回答の詳細が有用であればあるほど良いのではないでしょうか?