Reflective Shadow Maps
本篇是關於”Reflective Shadow Maps”這篇論文。
- 作者為 Carsten Dachsbacher, Marc Stamminger
- 發表於 2005 ACM SIGGRAPH Symposium
- 領域屬於 Interactive 3D Graphics and Games
- 論文連結
- 目前論文網站發布處為KIT(Karlsruhe Institute of Technology)的圖學研究可找到
論文概述
- RSM(Reflective Shadow Maps)用來處理One-bounce(一次反射)的indirect light(間接照明)
- 適用於diffuse的場景
- 擁有Real-time(即時)運算的速度
- 為許多遊戲引擎的演算法(LPV等等)的基礎
- 論文的結果展示(從圖中可看出雕像上有綠牆反射的綠光)
技術研究
Flow:
First pass, we render the scene from the view of the light source to generate a reflective shadow map.
以光源為視角計算整個場景,生成RSM。
Then each of the pixels as a small area light source that illuminates the scene.
對於每個RSM的pixel都是一個小光源,可間接照亮場景。Data:
在第一步中產生的RSM裡記錄了Depth、World space coordinates、Normal、Flux- Depth:跟Shadow Map紀錄的一樣,就是pixel light離光源的距離
- World space coordinates:pixel light的世界座標位置
- Normal:pixel light的法向量
- Flux:pixel light的可提供的輻射亮度
Render:
利用下列公式計算 Xp 或 Xq 給點 x 的貢獻,內積後除以距離平方,也就是乘上 cos 值。
最後再總和所有給點 x 的貢獻即可。
Sampling:
當我們從眼睛看到一個點x,我們必須將其投影在RSM中(s,t)的位置,並且對附近做Sampling。
論文中提到對所有RSM(512x512)上的pixel light做貢獻計算會花太久時間,
因此有特別的Sampling函式(詳見論文),產生的結果如下,離(s,t)越遠的密度越小、權重越大。Screen-Space Interpolation:
空間座標的線性內插
論文中提到為了加速而做了此方法,
一開始從眼睛看時採用低解析度(low-resolution),後來才開始計算完整解析度(full-resolution);
當計算完整解析度的點時會參考低解析度上附近的點,如果目標點的世界座標和法向量的變動不大,則會採用內插附近的點來取得indirect light的效果;反之則重新計算。
下圖紅線區域則是變動大需重新計算indirect light的地方。
希望這篇文章有幫助到您的開發之路!如果能給我一些按讚支持,我會非常感謝您的鼓勵!祝壞蟲遠離您!