2016-10-26 64 views
2

我有一個小路徑示蹤器,我試圖找出如何實現一些基本的BRDF。 這裏的管道我使用(不遞歸)的簡要說明:BRDF通常如何實施?

1) For each pixel: 
    1.1) For each sample: 
     1.1.1) I construct a path. 
     1.1.2) I calculate the contribution of this path. 
     1.1.3) I calculate the "probability" of this path. 
     1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path). 
    1.2) Take the sum of all samples' values and write it to the pixel. 

所以,我計算反射光線的方向在步驟1.1.1) I construct a path

現在,我已經實現了漫反射,鏡面反射,光澤反射,折射。 現在我想實現一個複雜的BRDF,讓我們說庫克託蘭斯BRDF。 我看到它包含幾個組件(漫反射和鏡面反射)。我應該如何追蹤這些光線以獲得組合?我應該隨機選擇diffuse_ray/specular_ray,然後像往常一樣累積這些值(乘以一些係數)(例如,如果隨機值大於0.5,則追蹤漫射射線,否則 - 鏡面)或者我應該追蹤多條射線從每個路口?

它通常在基於物理的渲染器中實現嗎?

P.S.如果有人知道關於這個話題的一些好文章,我會很高興看到他們。我試着讀pbrt,但對我來說似乎非常複雜和巨大。有些東西的實現方式不同,如相機型號和其他東西。

+0

在我的隨機跟蹤器中,我爲高光和漫反射生成了單獨的光線,但上面概述的方法使光線樹更小,並且應該減少計算複雜度。我曾考慮過使用這種方法,但我無法弄清楚如何使隨機係數具有「顏色」,以便漫反射和鏡面反射之間的分離可以根據表面顏色而變化(因爲我認爲這是發生在塑料和金屬材料上的) – Alnitak

回答

1

第一步可能是讓BRDF決定光線如何反彈。如果它是多種方法的組合,則將BRDF中的概率分配給每種方法,然後讓BRDF根據給定的概率選擇一個概率。

例如,假設您想要一個BRDF,它是鏡面反射和漫反射的組合。當你實例化BRDF時,你可能會告訴它你需要60%的鏡面反射和40%的漫反射。然後,當您的路徑追蹤器查詢BRDF以獲取反射光線方向時,BRDF可以在內部計算60%的時間內的鏡面光線和40%的時間內的漫射光線。

編輯 - 另一種可能更準確的方法是讓BRDF使用提供的概率通過在兩種方法之間進行插值來生成反射方向。在我們上面的例子中,當查詢時,BRDF爲每個交點計算鏡面光線和漫射光線,並返回一個新的光線,其方向是計算出的鏡面光線的60%和計算出的漫射光線的40%的線性插值。