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

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

[光線追蹤] 03 -- 蒙特卡洛積分

2022-05-24 13:10 作者:nyasyamorina  | 我要投稿

上一篇專欄里描述了兩種渲染模型 -- 半球模型和面積模型,? 兩種模型都給出了包含積分項的式子,? 那么渲染實際上就是求積分的近似值.? 那么這篇專欄就來討論如何求解這個積分.


蒙特卡洛積分

在深入講解積分內(nèi)包含求解量的復(fù)雜積分前,? 首先來看看最簡單的積分?I%3D%5Cint_a%5Ebf(x)dx.

如果這個積分無法直接求出,? 那么有很多方法可以求得這個積分的近似值,? 但是這里不會介紹?Gauss–Kronrod 求積之類復(fù)雜的東西.

首先回顧積分的定義可以知道:?I%3D%5Clim_%7Bn%5Crightarrow%2B%5Cinfty%7D%5Cfrac%7Bb-a%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5Enf%5Cleft(%5Cfrac%7Bb-a%7D%7Bn%7Di%5Cright),? 在學(xué)習(xí)積分時,? 常把積分看作一噸長方形面積相加,? 上式的 f%5Cleft(%5Cfrac%7Bb-a%7D%7Bn%7Di%5Cright)?作為長方形的高,? %5Cfrac%7Bb-a%7D%7Bn%7D?作為底.? 但是可以把符號進行重新解釋:? x_i%3D%5Cfrac%7Bb-a%7D%7Bn%7Di?作為某種均勻分布在 %5Ba%2Cb%5D?上的采樣,? 并且?x? 的概率密度函數(shù)為 p(x)%3D%5Cfrac%7B1%7D%7Bb-a%7D,? 那么積分定義可以改寫為 I%3D%5Clim_%7Bn%5Crightarrow%2B%5Cinfty%7D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5En%5Cfrac%7Bf(x_i)%7D%7Bp(x_i)%7D.

蒙特卡洛積分 (下面簡稱 MC 積分) 與上式的形式相同,? 但 x? 不再是依賴于下標 i 的數(shù)值,? 而是符合 p 分布的隨機數(shù).? 那么 MC 積分為?%5Cleft%5Clangle%20I%5Cright%5Crangle%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5En%5Cfrac%7Bf(x_i)%7D%7Bp(x_i)%7D%2C%5C%2Cx_i%20%0A%5Csim%20p.

例子:? ?f(x)%3Dx%2Bx%5E2,? 積分區(qū)間為?%5B0%2C1%5D,? 使用兩種分布展示 MC 積分的正確性:? 均勻分布 和 正態(tài)分布(σ=0.5,?μ=1.),? 如下圖所示

使用 10^5 采樣數(shù)的結(jié)果如下:

可以看到兩種分布都可以收斂至準確答案附近.


誤差 & 重要性采樣

在 MC 積分里,? 選取合適的分布函數(shù)可以使得積分計算快速收斂.? 為了量化累加收斂的速度,? 需要計算累加項的誤差:??%5Csigma%5E2%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_i%5Cleft(%5Cfrac%7Bf(x_i)%7D%7Bp(x_i)%7D-%5Clangle%20I%5Crangle%5Cright)%5E2,? 當 σ 值越小時說明收斂速度越快.

在給定 f 時,? σ 的值與分布 p 相關(guān).? 為了降低 σ,? 應(yīng)該使每一項?%5Cfrac%7Bf(x_i)%7D%7Bp(x_i)%7D?與?%5Clangle%20I%5Crangle 接近,? 當 σ 取最小值 0 時有?%5Cfrac%7Bf(x)%7D%7Bp(x)%7D%3D%5Clangle%20I%5Crangle,? 也就是當分布 p 為 f 本身時使得誤差最小.? 但絕大部分情況下,? f 分布是很難或不能求出的,? 所以應(yīng)該選取與 f 盡可能接近的分布 p,? 這就叫做重要性采樣.

例子:? f(x) = x + x2,? 積分區(qū)間 [0, 1],? 考慮 3 個積分:? 均勻分布,? 正態(tài)分布?(σ=.5,?μ=1)?和 正態(tài)分布?(σ=.5,?μ=0),? 如下圖所示

使用 10^5 采樣數(shù)計算誤差為:

可以看到誤差與分布形狀相關(guān),? 分布形狀越接近 f 的誤差越小.

另外有一個可取的"捷徑",? 如果需要計算積分?I%3D%5Cint_a%5Ebf(x)p(x)dx,? 由 MC 積分給出: %5Clangle%20I%5Crangle%3D%5Cfrac%7BN_p%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5Enf(x_i)%2C%5C%2Cx_i%5Csim%20p,? 其中 N? 是 p 的歸一化因子?N_p%3D%5Cint_a%5Ebp(x)dx,? 這種方法可以化簡計算.


上面例子使用的程序如下 (julia)

MC 積分在光追里的應(yīng)用

MC 積分比起其他類型的積分有一個優(yōu)勢,? 就是 MC 積分是依賴于采樣方法進行的,? 也就是說高維積分,? 比如半球面上的?%5Cint_%7B2%5Cpi%5E%2B%7Df(%5Comega)d%5Comega,? 如果存在直接從半球面上生成采樣的方法 (見采樣方法的兩篇專欄: 1?和 2),? 那么 MC 積分就可以如同一維積分一樣直接進行計算,? 而其他方法還需要對高維積分下的每個變量進行積分計算.

對于半球模型 (符號就不寫完整了, 并且忽略 L?):?L_o%3D%5Cint_%7B2%5Cpi%5E%2B%7Df_rL_o%5Ccos%5Ctheta_id%5Comega_i,? 可以看到積分里有兩個描述分布的項: f_r?和 %5Ccos%5Ctheta_i,? 由 MC 積分給出求解:?%5Clangle%20L_o%5Crangle%3D%5Cfrac%7BN%7D%7Bn%7D%5Csum_iL_o%2C%5C%2C%5Comega_i%5Csim%20f_r%5Ccos%5Ctheta.? 當分布 f?cosθ 不能給出時,? 可以計算 %5Clangle%20L_o%5Crangle%3D%5Cfrac%7B%5Cpi%7D%7Bn%7D%5Csum_if_rL_o%2C%5C%2C%5Comega_i%5Csim%5Ccos%5Ctheta,? 其中 cosθ 分布即是集中度為 1 的半球分布,? 半球采樣已經(jīng)在之前的專欄里討論過了.? 使用 cosθ 分布求解光追的收斂速度盡管沒有使用 f?cosθ 的那么快,? 但也比半球的均勻分布更好,? 下面是使用 cosθ 分布 (上) 和均勻分布 (下) 的渲染結(jié)果 (64個采樣)


對于面積模型:??L_o%3D%5Cint_Af_rL_ov(%5Cvec%20p%2C%5Cvec%20q)%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),? 因為入射方向是由 q 確定的,? 所以這里是不能使用?f? 或 cosθ 作為分布去計算積分,? 因為 q 是分布在物體上的,? 所以對物體進行均勻采樣,? 那么面積模型的求解為?%5Clangle%20L_o%5Crangle%3D%5Cfrac%7BA%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5Enf_rL_ov(%5Cvec%20p%2C%5Cvec%20q)%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%7D,? 其中 A 是物體的表面積.? 看上去面積模型并不能使用 MC 積分化簡計算,? 但在實際使用里是用面積模型去化簡半球模型 (見下).


渲染模型的混合使用

在常見場景里,? 發(fā)光物體的數(shù)量是遠遠少于不發(fā)光物體的數(shù)量,? 并且光源的直接照射對 L? 的貢獻是很大的,? 所以在計算 L? 時對每個光源單獨計算積分可以使收斂速度大大加快.? 所以對算符形式的渲染模型?L_o%3DL_e%2BK%5Ccirc%20L_o?進行修改,? 把發(fā)光物體和不發(fā)光物體分離得到?L_%7Bo%2C%5Cmathrm%7Bobj%7D%7D%3DK_h%5Ccirc%20L_%7Bo%2C%5Cmathrm%7Bobj%7D%7D%2BK_s%5Ccirc%20L_%7Bo%2C%5Cmathrm%7Blight%7D%7D,? 其中 L?,obj 代表不發(fā)光物體表面的出射輻照度,? L?,light 代表發(fā)光物體表面的出射輻照度,? K? 表示半球渲染,? K? 表示面積渲染,? 那么這個渲染模型實際為

另外,? 因為 light 已經(jīng)在 K?°L? 項計算過了,? 所以如果出現(xiàn) K?°L? 指向 light 時,? 應(yīng)該返回 0 輻照度,? 否則意味著 light 會被渲染兩次.

最后,? 為了化簡模型,? 可以大膽假設(shè)光源不反射任何光線,? 即是?L_%7Bo%2C%5Cmathrm%7Blight%7D%7D%3DL_e.? 看上去這個假設(shè)非常牽強,? 但實際上渲染出的圖像仍然是足夠真實的,? 因為在 LDR 渲染里,? 光源光線的輻照度可以到 50 以上,? 而對比物體的反射光線最大只有 1?左右,? 所以這個假設(shè)并不是無稽之談.? 但在 HDR 渲染里,? 為了渲染真實場景,? 部分光源(比如太陽)的輻照度可能到幾萬以上,? 反射光線的輻照度會大于普通光源的輻照度,??這時的這個假設(shè)就會造成無法正確渲染了,? 但實際上把光源的反射光線算上并不會對模型造成過大的更改.


光追的數(shù)學(xué)模型到這里就基本上固定下來了,? 下一篇專欄對光追程序的結(jié)構(gòu)進行一個簡述,? 然后就可以開始構(gòu)建光追的實際程序了.


封面pid:?94213121

[光線追蹤] 03 -- 蒙特卡洛積分的評論 (共 條)

分享到微博請遵守國家法律
桦甸市| 彭泽县| 祁阳县| 茶陵县| 灵台县| 凌海市| 卢氏县| 石门县| 汝南县| 黑水县| 台东县| 满城县| 南通市| 马鞍山市| 唐河县| 蓝山县| 伊宁县| 大名县| 交城县| 南皮县| 霍林郭勒市| 江安县| 彝良县| 江津市| 广州市| 周口市| 彭泽县| 新安县| 禄丰县| 阿勒泰市| 横山县| 洪江市| 垫江县| 绥德县| 昭平县| 焦作市| 治县。| 麻栗坡县| 河北区| 南京市| 保康县|