2012-03-28 164 views
5

我目前正在嘗試瞭解由Kevin Beason開發的光線追蹤器(smallpt:http://www.kevinbeason.com/smallpt/),如果我正確理解代碼,他會隨機選擇反射或折射射線(如果表面既是反射又是折射)。光線追蹤:僅使用單光線代替反射光線和折射光線

行71-73:

return obj.e + f.mult(depth>2 ? (erand48(Xi)<P ? // Russian roulette 
radiance(reflRay,depth,Xi)*RP:radiance(Ray(x,tdir),depth,Xi)*TP) : 
radiance(reflRay,depth,Xi)*Re+radiance(Ray(x,tdir),depth,Xi)*Tr); 

可有人請解釋的只是在投放的單一射線,而不是兩者的缺點是什麼?我從來沒有聽說過這種技術,並且我很好奇這種交換是什麼,因爲它會導致複雜度大大降低。

+2

您是否看過[此演示文稿](https://docs.google.com/open?id=0B8g97JkuSSBwUENiWTJXeGtTOHFmSm51UC01YWtCZw)解釋所有內容,並明確鏈接到該網站? – KillianDS 2012-03-28 11:18:11

+0

是的,我已閱讀演示文稿,它很棒!我正在尋找的是一個更深入的解釋,說明如何只投射單個射線影響算法的效率。爲什麼他決定對於深度達到2的兩個射線應該進行評估,但不要事後(即是否有任何推理背後爲什麼它恰好是2或者是或多或少是隨機的?)。 – crapper 2012-03-30 01:09:50

+0

或多或少是隨機的,但這個想法可能是,你會從你的前幾次反射和吸收中獲得最多的顏色強度。你反映/折射的越深,應該是更微不足道的貢獻。 – KillianDS 2012-03-30 11:58:28

回答

3

這是一個蒙特卡羅射線示蹤劑。它的優點是不會產生數量呈指數級增長的光線 - 這可能會出現在一些簡單的幾何圖形中。不利的一面是您需要對大量樣本進行平均。通常情況下,您要進行抽樣,直到與真實值的預期偏差「足夠低」。計算需要多少個樣本需要一些統計數據 - 或者您只需要抽取大量樣本。

2

推測他依賴於超級採樣像素,並相信平均顏色將大致正確地工作,雖然不夠準確。

即通過一個像素髮射4個光線並且平均2個被反射,2個被折射。
將它們組合起來,可以近似反射和折射一條光線。

+0

從查看代碼,這看起來正確看到(評論)線83,84。 – 2012-03-28 11:08:48