《學一輩子光線追蹤》 三 光散射

蒙特卡洛光線追蹤技術系列 見 蒙特卡洛光線追蹤技術

這一小節全都是文字,但是比較重要。雖然之前在

三維渲染 光能輻射基礎

三維渲染 BRDF雙向反射分佈函數

三維渲染 相位函數

三維渲染 體照明模型

這幾個章節也都很詳細的描述過光學了,這裏從概率的方面再進行描述。

在這一章中,我們實際上不會實現任何東西。我們將在第四章中爲我們的節目設置一個大的燈光變化。

我們上一本書中的程序已經散射了表面或體積的光線。這是光與表面相互作用的常用模型。一種自然的建模方法是概率。首先,光線被吸收了嗎?

光散射概率:A

光被吸收的概率:1-A

這裏A代表albedo(拉丁文代表白色)。反照率在某些學科中是一個精確的技術術語,但在所有用途中,它都意味着某種形式的分數反射率。當我們在玻璃上實現時,反照率可能會隨着入射方向的變化而變化,並且會隨着顏色的變化而變化。在大多數基於物理的渲染器中,我們將使用一組波長作爲燈光顏色,而不是RGB。我們幾乎總是可以利用我們的直覺,把R、G和B看作特定的長、中、短波長。

如果光確實散射,它將具有方向性分佈,我們可以將其描述爲立體角上的pdf。我將其稱爲散射pdf:s(direction)。散射pdf也可以隨着入射方向的變化而變化,這一點你會注意到,當你觀察道路上的反射時,它們會變得像鏡子一樣。

根據這些數量,表面的顏色爲:

color = INTEGRAL A * s(direction) * color(direction)

即: color = \int A *s(direction)*color(direction)

請注意,A和s() 可能取決於視圖方向,因此顏色當然可以隨視圖方向而變化。A和s() 也可能隨表面或體內的位置而變化。

如果我們應用MC基本公式,我們得到以下統計估計:

Color = (A * s(direction) * color(direction)) / p(direction)

其中p(direction) 是我們隨機生成的任意方向的pdf。對於Lambertian曲面,我們已經隱式地實現了這個公式,用於p() 是餘弦密度的特殊情況。

注意該球產生的光線中很明顯theta角越小,產生光線的可能性更大:注意下圖,同樣大小的立體角中很明顯接近法線的立體角里產生的光線比重更大。

Lambertian曲面的 s() 與 cos(theta) 成正比,其中 theta 是相對於曲面法線的角度。記住,所有pdf都需要積分爲1。對於cos(θ)<1,我們有s(direction)=0,cos在半球上的積分是π(可以自己算算):

因此對於朗伯曲面,散射pdf爲:

s(direction) = cos(theta) / Pi

如果我們使用相同的pdf進行採樣,那麼p(direction) =cos(theta)/Pi,分子和分母會抵消,我們得到:

Color = A * color(direction)   (我強烈認爲書中是寫錯了,所以我在這裏寫的是我認爲的版本,當然也可能我的書版本比較老,所以錯誤比較多)

這正是我們在原始 color() 函數中得到的結果!但是我們現在需要概括一下,這樣我們就可以在一些重要的方向上,比如朝着燈光發射額外的光線。

上面的處理方法有點不標準,因爲我希望對曲面和體使用相同的數學方法。否則會生成一些難看的代碼。如果您閱讀文獻,您將看到雙向反射分佈函數(BRDF)描述的反射。它與我們的條款非常簡單:

BRDF = A * s(direction) / cos(theta)

例如,對於Lambertian曲面,BRDF=A/Pi。我們的術語和BRDF之間的轉換很容易。

對於參與介質(體積),我們的反照率通常稱爲散射反照率,我們的散射pdf通常稱爲相位函數。

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