2013-04-28 63 views
0

在這個代碼頭腦文章http://www.codermind.com/articles/Raytracer-in-C++-Depth-of-field-Fresnel-blobs.html中,關於反射/折射的部分有幾個它檢查是否傳輸或反射光線的情況。對於射線追蹤折射/反射,不應該透射率+反射率= 1?

它說,在範圍0到rand_num 1:

if(rand_num<=reflectance){ 
    //reflect a ray 
}else if(rand_num<=reflectance+transmittance){ 
    //transmit a ray through surface 
}else{ 
    //diffuse calculation 
} 

我是反射率+透射率= 1的印象,讓else語句會usesless。如果不是1反射率,透射率應該是多少?

+0

入射光有四種情況發生:1)定向反射2)漫反射3)吸收4)透射率 – CodesInChaos 2013-04-28 18:52:26

+0

所以我會設想方向反射將是反射= 1.0f和透射= 0.0f的情況。那麼透射率將是透射率= 1.0f和反射率= 0.0f的情況。那麼另外兩種情況是什麼? – 2013-04-28 18:57:53

+0

到codermind的鏈接不再有效。我不知道發生了什麼事。 – 2015-11-29 19:45:01

回答

0

它基本上是給在代碼中的註釋的答案:

的光線得到透射,反射或漫反射。在物理上,後兩者是相同的,但在光線追蹤中,兩者的處理方式不同。

第一個產生像鏡子一樣的高光和實際反射,而漫反射部分對於像橡膠那樣與鏡子非常不同的表面非常重要。

+0

我相信。我的問題是,如果rand_num的範圍是0到1,並總是反映+ transmit = 1,那麼這個else語句將永遠不會被調用。 Rand_num必須小於或等於反映+傳輸。 – 2013-04-28 18:54:19

+0

「反射」在這裏專指鏡面反射(鏡像)。 – 2013-04-28 19:02:49

+0

所以當你說反射率時,你是指表面的brdf係數。就像有人會說任何反射光線需要乘以這個「反射」常數。但這與計算菲涅耳方程的反射率有什麼不同? – 2013-04-28 19:08:20

1

在這種簡單的模型中,有這種情況發生於入射光四兩件事:1)定向反射2)擴散反射3)吸收4)透射率

少數(理想化的)例子:

  • 魔鏡:只有定向反射
  • 白:僅漫反射
  • 黑色:只吸收
  • 防反射玻璃:只有透過率

通過將三個係數的總和設置爲小於1的值來隱式處理吸收。

實際上還有一些額外的效果,如只反射只在理想方向上進行,平均偏差取決於材料,自身發光的材料,有方向性或改變顏色的不尋常反射效果。