本篇是關於”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的地方。