最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

[光線追蹤] 02 -- 渲染模型

2022-05-21 14:29 作者:nyasyamorina  | 我要投稿

上一篇專欄里面.? 認識了幾個輻射學名詞,? 定義了光線,? 以及了解了描述光在不透明物體表面?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)一使用全局坐標系的向量?%5Cvec%20%5Comega 表示,? 但出現(xiàn)立體角符號 (主要是θ) 時,? 表示的是在局部坐標系下的方向.? 如下圖所示

為了確定場景里事件的位置,? 可以給幾乎全部的變量加上位置 p,? 并且 p 必定在物體表面上,? 那么點 p 處的 BRDF 可以寫為?f_r(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i%2C%5Cvec%7B%5Comega%7D_o),? 其中 ω?, ω? 是入射和出射光方向,? 并且兩個方向都是遠離 p 點的.? 相應的入射/出射光可以表示為?L_i(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i)?和 L_o(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_o).


半球模型

半球模型是簡單建立在求解出射輻射度的式子上的.? 給式子加上物體表面的自發(fā)光輻射度?L?,? 那么出射輻射度為?L_o(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_o)%3DL_e(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_o)%2B%5Cint_%7B2%5Cpi%5E%2B%7Df_r(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i%2C%5Cvec%7B%5Comega%7D_o)L_i(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i)%5Ccos%5Ctheta_i%20d%5Cvec%7B%5Comega%7D_i.

不難知道,? 點 p 處的入射光必定是場景里另一個點的出射光 (天空可以看作無限遠處的半球物體).? 那么假設有一個函數(shù) h?返回場景里與光線碰撞的最近點,? 如下圖所示

那么有?L_i(%5Cvec%20p%2C%20%5Cvec%7B%5Comega%7D_i)%3DL_o%5Cleft(%5Cvec%20h(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i)%2C-%5Cvec%7B%5Comega%7D_i%5Cright),? 為了保證這條式子成立,? 必須假設光線傳播時不會衰減或發(fā)生散射.? 那么點 p 處的出射輻照度為?L_o%5Cleft(%5Cvec%20p%2C%20%5Cvec%7B%5Comega%7D_o%5Cright)%3DL_e%5Cleft(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_o%5Cright)%2B%5Cint_%7B2%5Cpi%5E%2B%7Df_r%5Cleft(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i%2C%5Cvec%7B%5Comega%7D_o%5Cright)L_o%5Cleft(%5Cvec%20h%5Cleft(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i%5Cright)%2C-%5Cvec%7B%5Comega%7D_i%5Cright)%5Ccos%5Ctheta_id%5Cvec%7B%5Comega%7D_i.

這條式子即是半球渲染模型,? 在模型里僅有 L? 未知,? 并且 L? 同時也是求解項.


面積模型

對半球模型進行修改可以得到面積模型.? 在半球模型里,? 積分范圍是在點 p 處的上半球,? 而在面積模型里,? 積分范圍則是場景內(nèi)的全部物體表面.

由于從任意表面發(fā)出的光線,? 可能在到達 p 點前被阻擋.? 定義函數(shù)?v(%5Cvec%20p%2C%5Cvec%20q),? 如果 p, q 兩點之間沒有任何物體阻擋,? v 返回 1,? 否則返回 0.? 實際上,? v 可以由 h 定義出來:??v(%5Cvec%20p%2C%5Cvec%20q)%3D%5Cleft%7C%5Cvec%20h(%5Cvec%20p%2C%5Cfrac%7B%5Cvec%20q-%5Cvec%20p%7D%7B%7C%5Cvec%20q-%5Cvec%20p%7C%7D)-%5Cvec%20p%5Cright%7C%5Cmathrm%7B%5C%20is%5C%20equal%5C%20to%5C%20%7D%7C%5Cvec%20q-%5Cvec%20p%7C,? 這里假定 true = 1,? false = 0.? 并且有立體角與單位面積的關系?d%5Comega%3Dd%5E%7B-2%7D%5Ccos%5Ctheta%20dA,? 那么可以把半球模型改寫為面積模型:

L_o%5Cleft(%5Cvec%20p%2C%20%5Cvec%7B%5Comega%7D_o%5Cright)%3DL_e%5Cleft(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_o%5Cright)%2B%5Cint_Af_r%5Cleft(%5Cvec%20p%2C%5Cvec%7B%5Comega%7D_i%2C%5Cvec%7B%5Comega%7D_o%5Cright)L_o%5Cleft(%5Cvec%20q%2C-%5Cvec%7B%5Comega%7D_i%5Cright)v%5Cleft(%5Cvec%20p%2C%20%5Cvec%20q%5Cright)%5Cfrac%7B%5Ccos%5Ctheta_%7Bi%2C%5Cvec%20p%7D%5Ccos%5Ctheta_%7Bo%2C%5Cvec%20q%7D%7D%7B%7C%5Cvec%20q-%5Cvec%20p%7C%5E2%7DdA(%5Cvec%20q),? 其中?%5Cvec%7B%5Comega%7D_i%3D%5Cfrac%7B%5Cvec%20q-%5Cvec%20p%7D%7B%7C%5Cvec%20q-%5Cvec%20p%7C%7D,? 如下圖所示

光追的收斂性

從上面模型看出,? 最終的渲染圖像是無法通過直接解方程求出的.? 但因為求解項?L? 也依賴于 L? 自身,? 所以可以通過迭代步驟求出 L? 的近似解.? 這里需要討論一下求解?L? 的收斂性.

上面兩種模型都可以概述為?L_o%3DL_e%2BK%5Ccirc%20L_o,? 其中 K 就是代表積分部分. 因為積分是線性算符, 所以有?K%5Ccirc%20L_o%3DK%5Ccirc(L_e%2BK%5Ccirc%20L_o)%3DK%5Ccirc%20L_e%2BK%5E2%5Ccirc%20L_o.? 所以最終 L? 可以由 L_o%3DL_e%2BK%5Ccirc%20L_e%2BK%5E2%5Ccirc%20L_e%2B%5Ccdots%3D%5Csum_%7Bn%3D0%7D%5E%7B%2B%5Cinfty%7DK%5En%5Ccirc%20L_e 給出.? 由泰勒級數(shù)知道,? 這條式子形式上等價于?L_o%3D(1-K)%5E%7B-1%7D%5Ccirc%20L_e,? 并且級數(shù)收斂的條件為 %7CK%7C%3C1.

上一篇專欄里給出了反射率 ρ,? 并且 ρ 與出射/入射方向無關.? 把 ρ 放進函數(shù)試驗空間里,? 并假定?L_i(%5Comega)%3D%5Cdelta(%5Comega-%5Comega_i)%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%2B%5Cinfty%2C%5C%2C%5Comega%3D%5Comega_i%5C%5C0%2C%5C%2C%5Comega%5Cneq%5Comega_i%5Cend%7Bmatrix%7D%5Cright.,? 那么在指定了入射方向 ω? 后,? 反射率為 %5Crho_%7B%5Comega_i%7D%3D%5Cint_%7B2%5Cpi%5E%2B%7Df_r%5Cleft(%5Comega_i%2C%5Comega_o%5Cright)%5Ccos%5Ctheta_od%5Comega_o,? 這條式子代表了光線照射物體表面時,? 從表面射出的總能量與光線能量的比值,? 并且實際物體必定有?%5Crho_%7B%5Comega_i%7D%3C1.? 由光路可逆條件,? 以下式子也是成立的?%5Crho_%7B%5Comega_o%7D%3D%5Cint_%7B2%5Cpi%5E%2B%7Df_r(%5Comega_i%2C%5Comega_o)%5Ccos%5Ctheta_id%5Comega_i%3C1.

回到算符 K,? K 在半球模型里表述為?%5Cint_%7B2%5Cpi%5E%2B%7Df_r(%5Comega_i%2C%5Comega_o)L_o%5Ccos%5Ctheta_id%5Comega_i.? 可以觀察到,? K 在函數(shù)試驗空間里與上面的?%5Crho_%7B%5Comega_o%7D?等價,? 亦即?|K| < 1 的充分條件為?%5Crho_%7B%5Comega_o%7D%3C1.? 并且由于面積模型是半球模型的重新表達,? 所以面積模型也符合這個條件.? 由此得到了光追收斂性的充分條件:? 光線傳輸必須符合能量守恒 (算上被物體吸收能量).


下一篇專欄大概就是介紹實現(xiàn)光追的手段 -- Monte Carlo 積分了


最后例行宣傳一下 #閑聊 #澀圖 #弔圖 #不準建政 #關注或不關注各地新聞 #媽的群友不請我吃瘋狂星期四 群: 274767696

封面 pid:?

[光線追蹤] 02 -- 渲染模型的評論 (共 條)

分享到微博請遵守國家法律
晋州市| 兰州市| 满洲里市| 曲沃县| 新郑市| 洱源县| 襄垣县| 涟水县| 洪湖市| 黄平县| 墨玉县| 鸡西市| 石柱| 炉霍县| 泰顺县| 南充市| 虎林市| 博白县| 射阳县| 扎兰屯市| 梁山县| 陆丰市| 盈江县| 湄潭县| 许昌市| 繁昌县| 宁河县| 杨浦区| 浦东新区| 平山县| 永兴县| 平南县| 昌平区| 商南县| 海阳市| 龙里县| 盖州市| 仙居县| 花垣县| 南澳县| 夹江县|