据え置き照明を検討してください。簡単に言えば、遅延照明は、スクリーンシェードライトマップを計算するために遅延シェーディングの縮小バージョンを使用する手法です。2番目のパスでは、スクリーンスペースライトマップを照明情報として使用して、ジオメトリが再度レンダリングされます。
この手法は、必要な属性が少ないため、Gバッファーのサイズを小さくするために使用されます。また、G-Bufferとスクリーンスペースライトマップの解像度が画面よりも低くなるという利点もあります。
私は厳密なGLES 2.0ベースのレンダラー(実験的なものではありますが)を実装し、G-Bufferを1つのRGBAテクスチャにまとめることができました(はい、レンダーバッファーの代わりにtexture2Dを使用しました)。画面スペースの法線マップ+アルファチャネル内の深度バッファー(これまで覚えていた限り、対数を使用して圧縮されていました)が含まれていました。
位置属性(ここではワールドと呼ばれます)は、透視投影では.xyが.zによって提供されるという事実を使用して、ライティングパス中に計算できます。
x yfR U S 、T 、U 、M= x yW O R LのD/ zW O R LのD
以下を実行して、位置属性のxyを近似しました。
x yW O R LのD= x yfR U S 、T 、U 、M* zW O R LのD
注:投影マトリックスの設定に応じて、さらに調整する必要がありました。
また、注目に値するのは、法線ベクトルの.zコンポーネントを省略することができたことです。これは、法線ベクトルが次のように正規化されているため、.xyから.zを再構築できるためです。
バツ2+ y2+ z2−−−−−−−−−−√= 1バツ2+ y2+ z2= 1z2= 1 − (x2+ y2)z= 1 − (x2+ y2)−−−−−−−−−−−√
この手法を使用して、RGBA G-Buffer内の別のチャネルを解放し、これを使用して画面スペースのスペキュラーマップ(または、必要に応じて光沢)を保存しました。