渲染方程和蒙特卡洛方法(一)
既然標題里有一,足以看出這次真的是開了一個大坑啊,這個地方也是我一直逃避的地方,可是總歸還是要把這里弄明白的,我自己的水平有限寫這個也只是為了鞏固自己的圖形學知識,這篇文章也是我對於GAMES101的學習筆記,若是有人能看到這篇文章,只建議自己做一個參考,希望能對你有所幫助。順帶一提:本文的公式,定理,圖片均來自於GAMES101,非常好的計算機圖形學入門課程,有興趣可以在B站找到官方的課程。
1 從渲染方程開始說起
首先讓我們先看看這個大名鼎鼎的渲染方程到底長什么樣子吧。
烏拉!!就是這個樣子,當然你現在可能一頭霧水,別着急下面我們來具體的看看這個公式。
1.1 輻射度量學(Radiometry)
別害怕,我們只會在這里介紹幾個物理定義
Radiant energy : Q [J = Joule(焦耳)]
the energy of electromagnetic radiation
Radiant flux(power) [W = Watt] [lm = lumen]
Energy per unit time
Radiant intensity
power per unit solid angle
Solid Angle
ratio of subtended area on sphere to radius squared
上面最難以理解的概念,大概就是固體角了吧。
首先我們從二維的角度去理解,弧長的定義為 => 圓形角的弧度 於是我們可以類比到三維,如上圖所示。三維情況下,弧長對應為面積,半徑則變為半徑的平方,於是我們就可以得到固體角的定義。具體的我們可以將固體角理解為圖中錐形區域的角度。
知道了固體角,下面我們繼續了解幾個概念。
1.1.1 Irradiance
Definition : The irradiance is the power per ( ) unit area incident on a surface point.
注意當平面法向和光線入射方向的夾角不同時,平面接受到的irradiance是不同的。Lambert`s Cosine Law解釋了這個不同情況下的irradiance是多少。
注意:當我們提到光的衰減的時候,我們往往指的是Irradiance的衰減而不是intensity的衰減,很簡單因為無論在某一方向上的光傳播到多遠,其固體角是不變的,但是單位面積上的power是在減少的也就是Irradiance是在減少的。
1.1.2 Radiance
Definition :The radiance (luminance) is the power emitted, reflected, transmitted or received by a surface, per unit solid angle, per projected unit area.
Radiance is the fundamental field quantity that describes the distribution of light in an environment
從定義上看,我們可以發現Radiance是在Irradiance的基礎上多除以了單位固體角(也可以看作是在Intensity的基礎上多除以了單位面積)這意味着Radiance比Irradiance多了方向性。
至此,我們所需了解到的單位就已經介紹完了,可能你現在還是一頭霧水,或者是已經有一些思路了,別慌,我們繼續往下看。
1.2 Bidirectional Reflectance Distribution Function (BRDF)
“哇,這么一大長串,這是什么啊?” 這是我第一次看到這一長串英文的反應,或許把它直譯成中文我們可能更有感覺“雙向反射分布函數”,好吧,感覺還是不知道什么意思(攤手)。簡單的來說BRDF就是當從某一方向打到點p的光,p點的BRDF決定了這束光朝某個方向該怎么反射。具體的來說:
The Bidirectional Reflectance Distribution Function (BRDF) represents how much light is reflected into each outgoing direction from each incoming direction
個人覺得比較難理解的是為什么是Radiance / Irradiance 而不是 Radiance / Radiance 這里就要從定義上去理解它,因為 Irradiance 是從單位面積上的power,我們要反映的是從這個方向傳過來給這個點上傳遞的單位面積的能量朝另一個方向上的單位面積反射多少能量所以這里我們要先將入射的Radiance轉化為Irradiance,再通過BRDF轉化為Radiance。
知道了這些知識,現在我們就可以回到剛開始我們的渲染方程了。
渲染方程其實就是基於真實的物理解釋了當一個點朝某一個方向出射的Radiance應該是多少。由於它是基於物理的,這個方程是絕對正確和毋庸置疑的。現在的基於物理渲染的光線追蹤其實都是在解渲染方程,不同的光追的技術,其實就是用不同的方法去求解渲染方程。那么我們應該怎么去求解它呢?——蒙特卡洛方法給出了一個簡單的答案。
嗯,就先寫到這里吧,下一節再專門解釋蒙特卡洛方法吧,bye~