[光線追蹤] 02 -- 渲染模型
在上一篇專欄里面.? 認識了幾個輻射學名詞,? 定義了光線,? 以及了解了描述光在不透明物體表面?zhèn)鞑サ腂RDF.? 這篇專欄就簡述幾種不同的渲染模型.? 并且在專欄最后,? 略微討論一下光追的收斂性.

光線類
在上一篇專欄里定義了光線為 穿過無限小平面的平行光.? 這里需要對光線進行代碼實現(xiàn) (其實是上一篇忘記了).? 光線需要定義光的起點以及方向,? 盡管方向是立體角變量,? 但為了方便計算,? 方向還是使用一個 Vec3 類型表示,? 而不是兩個浮點數(shù) θ, φ.? 在給出了起點 p 和方向 d 后,? 光線上任意一點都可以由 p + t * d 給出,? 其中 t 是大于等于 0 的浮點數(shù).
另外不得不說的是,? 在一部分渲染模型里,? 運行?d 的模長不等于 1,? 這是因為模長可以被上式的 t 修正.? 但在我這里選用的模型里,? 因為經(jīng)常需要計算 d 與其他向量的點乘,? 如果模長不為 1 就會導致計算錯誤.? 盡管這里要求 d 的模長為 1,? 在構建光線類型時不會強制對輸入進行歸一化,? 方向的歸一化應該根據(jù)構建光線前的實際情況可選地進行 (因為歸一化非常吃性能).
如此,? 光線類為:

另外,? 光線不需要給出輻射度/顏色的原因是,? 在反向光追(見下)里,? 每條光線的顏色都依賴于下一條光線的顏色,? 在求得某條光線的顏色時,? 這條光線已經(jīng)沒有用了.

光線的傳播 -- 正向與反向
在現(xiàn)實里,? 光是從光源出發(fā)直接或間接地射入傳感器,? 從而產(chǎn)生所見的圖像.? 那么模擬光線從光源開始,? 在傳感器結束的渲染就叫做正向光線追蹤.? 正向光線追蹤的缺點就是,? 從光源開始的光線可能只有一小部分在傳感器處結束,? 而大部分會發(fā)散到開闊的空間里或終止于較深的光線迭代過程里,? 從而造成較大的性能浪費.
所以提出了反向光線追蹤:? 光線從傳感器開始,? 在光源結束.? 從傳感器開始確保了每條光線都對渲染都是有貢獻的,? 從而使性能不在這方面造成浪費.? 但反向光追的缺點也是顯而易見的:? 為了得到正確的渲染圖像,? 必須假設場景內(nèi)發(fā)生改變光線的事件都是可逆的,? 亦即幾何光學里的光路可逆,? 所以反向光追僅能渲染滿足幾何光學的圖像,? 而不能渲染滿足波動光學的圖像 (準確來說是不能渲染有關磁效應的波動光學圖像).? 接下來所有討論都是基于反向光追來討論.

渲染模型
確定需要使用的渲染模型就等于確定了渲染代碼的邏輯.? 光追里由常用兩種渲染模型:? 半球模型和面積模型.? 這里僅介紹一下兩種模型,? 至于何時選取合適的模型則留到下一篇專欄里講述.
在介紹模型前,? 首先確定數(shù)學符號.? 如同上面光線類里面所說,??方向可以使用立體角 (θ, φ) 或向量 (x,?y,?z) 表示.? 為了方便,? 方向統(tǒng)一使用全局坐標系的向量? 表示,? 但出現(xiàn)立體角符號 (主要是θ) 時,? 表示的是在局部坐標系下的方向.? 如下圖所示

為了確定場景里事件的位置,? 可以給幾乎全部的變量加上位置 p,? 并且 p 必定在物體表面上,? 那么點 p 處的 BRDF 可以寫為?,? 其中 ω?, ω? 是入射和出射光方向,? 并且兩個方向都是遠離 p 點的.? 相應的入射/出射光可以表示為?
?和
.
半球模型
半球模型是簡單建立在求解出射輻射度的式子上的.? 給式子加上物體表面的自發(fā)光輻射度?L?,? 那么出射輻射度為?.
不難知道,? 點 p 處的入射光必定是場景里另一個點的出射光 (天空可以看作無限遠處的半球物體).? 那么假設有一個函數(shù) h?返回場景里與光線碰撞的最近點,? 如下圖所示

那么有?,? 為了保證這條式子成立,? 必須假設光線傳播時不會衰減或發(fā)生散射.? 那么點 p 處的出射輻照度為?
.
這條式子即是半球渲染模型,? 在模型里僅有 L? 未知,? 并且 L? 同時也是求解項.
面積模型
對半球模型進行修改可以得到面積模型.? 在半球模型里,? 積分范圍是在點 p 處的上半球,? 而在面積模型里,? 積分范圍則是場景內(nèi)的全部物體表面.
由于從任意表面發(fā)出的光線,? 可能在到達 p 點前被阻擋.? 定義函數(shù)?,? 如果 p, q 兩點之間沒有任何物體阻擋,? v 返回 1,? 否則返回 0.? 實際上,? v 可以由 h 定義出來:??
,? 這里假定 true = 1,? false = 0.? 并且有立體角與單位面積的關系?
,? 那么可以把半球模型改寫為面積模型:
,? 其中?
,? 如下圖所示


光追的收斂性
從上面模型看出,? 最終的渲染圖像是無法通過直接解方程求出的.? 但因為求解項?L? 也依賴于 L? 自身,? 所以可以通過迭代步驟求出 L? 的近似解.? 這里需要討論一下求解?L? 的收斂性.
上面兩種模型都可以概述為?,? 其中 K 就是代表積分部分. 因為積分是線性算符, 所以有?
.? 所以最終 L? 可以由
給出.? 由泰勒級數(shù)知道,? 這條式子形式上等價于?
,? 并且級數(shù)收斂的條件為
.
上一篇專欄里給出了反射率 ρ,? 并且 ρ 與出射/入射方向無關.? 把 ρ 放進函數(shù)試驗空間里,? 并假定?,? 那么在指定了入射方向 ω? 后,? 反射率為
,? 這條式子代表了光線照射物體表面時,? 從表面射出的總能量與光線能量的比值,? 并且實際物體必定有?
.? 由光路可逆條件,? 以下式子也是成立的?
.
回到算符 K,? K 在半球模型里表述為?.? 可以觀察到,? K 在函數(shù)試驗空間里與上面的?
?等價,? 亦即?|K| < 1 的充分條件為?
.? 并且由于面積模型是半球模型的重新表達,? 所以面積模型也符合這個條件.? 由此得到了光追收斂性的充分條件:? 光線傳輸必須符合能量守恒 (算上被物體吸收能量).

下一篇專欄大概就是介紹實現(xiàn)光追的手段 -- Monte Carlo 積分了
最后例行宣傳一下 #閑聊 #澀圖 #弔圖 #不準建政 #關注或不關注各地新聞 #媽的群友不請我吃瘋狂星期四 群: 274767696
封面 pid:?