Lightmass分析(五) 光照評估

Intro

Lightmass分析 系列文章前言及目錄

在之前的文章中, 我們已經計算出了 IrradiancePhotonsMap 中有效光子的 Irradiance. 接下來我們便需要利用這些光子來評估場景中各個物體表面的全局光照.

這部分的主要工作是: 使用 Ray Tracing, Final Gather 等方法對物體表面進行光照評估

直接光照

Lightmass 的直接光照和陰影默認是使用 RayTracing 的方式求解的. 與光線最終略有區別的是 Lightmass 直接遍歷物體表面上的每一個點, 不需要使用攝像機發射 View Ray 與場景做相交測試(烘焙階段本身也沒有所謂的攝像機)
RayTracing在計算陰影的時候, 爲了產生半影效果, 我們會爲一個頂點採樣多條 Shadow Ray, 這些 Shadow Ray 由場景中光源的表面樣本(LightSurfaceSample)產生. 如果這些 Shadow Ray 全都被場景阻擋則說明當前頂點完全處於陰影範圍內. 如果這些 Shadow Ray 全都不被場景阻擋則說明當前頂點完全處於陰影範圍外. 如果一部分被阻擋一部分沒有被阻擋則說明當前頂點處於半影範圍內.

當判斷出當前頂點處於半影範圍內時, Lightmass 會對這個頂點再進行一次針對半影 Shadow Ray 測試, 求解出更精確的半影係數. 基於只有非常少的頂點會落入狹小的半影區域內的事實, 所以這部分額外的計算消耗是可以接受的.

半影的產生

Final Gather (FG)

基礎的光子照度評估方式在光子數量不充分的情況下會存在大量的低頻噪聲, 渲染出來的圖像質量不太高. FG拋棄了直接使用評估點附近K鄰近估計的方式進行照度估算, 轉而在每個FG採樣點的上半球區域向所有方向上發射大量FG採樣射線, 利用這些射線和場景求交併獲取交點處的照度併疊加到FG的照度中並做均值處理, 從而估算出該FG點的照度值.
Final Gather

間接光照

Lightmass 使用 Final Gather 方法進行間接光照的求解. 但是單純的 FG 計算量過大, 考慮到我們的場景表面光照一般都是連續且緩慢變化的, 所以我們可以計算出適量的 FG Sample Cache, 然後在利用這些樣本緩存通過插值的方式計算最終的間接光照(CachePointIncomingRadiance).

Lightmass 的 FG 使用自適應採樣去評估 incident radiance (IncomingRadianceAdaptive). Lightmass 首先將半球空間劃分爲均勻的格子, 然後根據事先生成的半球空間採樣射線爲每一個 Grid 計算 Radiance. 我們之前緩存的 SurfaceCacheLighting 在這裏起作用(CalculateExitantRadiance), 可以直接提供目標位置的光照信息. 然後所有的樣本經過 Filter(濾波) 之後就完成了對當前 FG Sample 的光照評估. 最後 Lightmass 根據之前生成的 FG Sample Cache, 經過插值生成完整的 Lightmap.

所謂"自適應"體現在當發現相鄰Grid的光照信息發生劇烈變化的時候, Lightmass 會將這個 Grid 拆分成 4 個 Sub Grid 進行進一步的光照評估. 如此往復直至觸發中止條件.
自適應採樣FG Sample
另外 FG 本身也需要發射很多條射線才能達到比較好的效果(一般大於128條), 這對計算能力又是一個比較大的挑戰. Lightmass 使用 Irradiance Gradient 技術在較少的樣本下達到更好的效果. Irradiance Gradient 在此不再展開, 感興趣的話可以閱讀論文 《Irradiance Gradients》 Gregory J. Ward, Paul S. Heckbert

Irradiance Gradient

參考文獻

Jiff:Lightmass分析之 經典Photon Mapping算法介紹
Jiff:LightMass源碼分析之光子追蹤實現
Jiff:LightMass源碼分析之光照評估

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章