Light Map是一個比較經典的技術,目前來說應該是一般遊戲引擎中的標配,它很好的在一種擬全局光效果的質量和效率上做了中和。不過目前用的更多、質量更好的應該是Directional Light Map,它是原始LM的增強版,通過在預處理與實時還原中考量場景中表面的法向量進而增強效果。DLM的基本操作方法如下:
- 在採樣點處把其半球空間中的輻射照度用某種方法進行採集並保存(比如離線的光線跟蹤);
- 以某種方法存儲額外的、與該輻射照度相關的法線信息到光照貼圖中;
- 實時渲染中通過光照貼圖對像素上的場景輻照度進行還原(結合光照信息與方向信息)。
目前常用的DLM實現方法主要有三種:
Radiosity Normal Maps
該方法最早是在Valve的Source引擎中用的一種模式,它的原理應該是一種擬信號壓縮與重建的方法:
- 在採樣點處選取三個正交的採樣方向作爲基方向,採樣得到這些方向上的光照信息並保存(壓縮);
- 實時渲染中通過三個方向及其上的光照值做爲基函數,對實際表面法向上的光照值進行還原(重建)。
其中的三個基方向(表面法向所在的局部切空間,如下圖示)分別爲:
對應的還原計算爲:
Valve的這種方法應該說還是很不錯的,雖然數學理論依據不太充分,但至少看起來效果很不錯,而且實現簡單,效率較高。不過其也會出現一些問題,那就是當法線的方向與採樣光照的主方向夾角較大(即與採樣切平面的夾角較小時)容易出現一些不太正確的光照還原。
Dominant Directional Irradiance
該方法的原理可以是看作將採樣點半球空間中的輻照信息處理爲一個方向光(Directional Irradiance),這樣在實時渲染中就可以使用反射模型進行快速還原;其中的Dominant axis就可以看作是指該平行光的方向。其操作如下:
- 外理採樣點外部輻照信息爲:方向光(方向:L,顏色:CL);
- 渲染中直接反射模型模型來還原 。
Spherical Harmonics
該方法與Radiosity Normal Map的方法類似(同樣與Light Probe的原理類似),只不過這裏使用了理論與數學依據更爲充分的球諧函數來實現外部輻射照度信息的壓縮與重建:
- 把光照函數使用球諧函數進行變換存儲(壓縮);
- 實時渲染中使用時直接利用SH重建進行還原即可(還原)。
這種方法比上述兩種方法都更爲高級,一般來說對於任意Normal上的照度信息都能正確還原,而且適應性較強,較爲靈活;但同時有很大的缺點那就是存儲空間較大(其LM中每個Pixel中存儲的數據量相當於一個Light Probe對應的存儲的內容),因而其應用範圍就有所限制。
下述是LM與DLM的簡單效果對比,差異還是相當明顯的: