"Reflective Shadow Maps"の概要
"Reflective Shadow Maps"の論文を読んだので, その概要について書きたいと思います.
- "Reflective Shadow Maps". Carsten Dachsbacher, Marc Stamminger. In Proceedings of the Symposium on Interactive 3D Graphics and Games, 203-231, 2005.
"Shadow Map" では, 点光源の位置からシーンを描画したときの深度情報をテクスチャとして保存します.
一方で, "Reflective Shadow Maps"では従来の "Shadow Map" を拡張して, 深度情報だけでなく, 以下の情報もテクスチャとして保存します.
- 深度情報 d_p
- ワールド座標 x_p
- 法線 n_p
- 反射した光束 Φ_p
そして, 点光源から他のジオメトリによって遮蔽されないpixelを全て, 表面を1回反射した小さい間接光を放射する光源とみなし, ピクセルシェーダでそれらの間接光の光源をサンプリングして, 間接光による照明の寄与を計算します.
法線が n である表面上の点 x への間接光による放射照度 E(x, n) は以下の数式(1)のように, 全ての間接光 E_p(x, n) からの寄与の和です.
次に, 間接光からの放射照度 E_p(x, n)についてですが, まず, 光源が無限に小さいと仮定すると, 単位立体角あたりの ω 方向の放射強度 I_p(ω) は, 数式(2)によって求めることができます.
ここで, Φ_p は単位ピクセルを通過する放射束に反射係数をかけたものです.
数式(2)を元に, 間接光 x_p (法線 n_p) から, 表面上の点 x (法線 n) に対して放射される放射照度 E(x, n) を数式(3)で計算します.
分母の距離の4乗は, 距離による減衰を表しています.
実際にリアルタイムに間接光の計算をピクセルシェーダで行うときには, 全ての間接光の光源を使わずに距離の2乗に反比例したサンプリング密度で, ピクセル付近の間接光をサンプリングして重みをかけて使うみたいです. また, カメラ視点からの Reflective Shadow Map を低解像度にしたり, 遅延シェーディングを使ったりするみたいです.