对于光线跟踪折射/反射,透射率+反射率不应该是1?

时间:2013-04-28 18:37:24

标签: graphics physics raytracing

在这段代码心灵文章http://www.codermind.com/articles/Raytracer-in-C++-Depth-of-field-Fresnel-blobs.html中,关于反射/折射的部分有一些情况,它检查是否传输或反射光线。

对于0到1范围内的rand_num:

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

我的印象是反射率+透射率= 1,因此其他声明将毫无用处。如果不是1-反射,透光率应该是多少?

2 个答案:

答案 0 :(得分:1)

在如此简单的模型中,入射光会发生四种情况:1)定向反射2)漫反射3)吸收4)透射率

一些(理想化的)例子:

  • 镜子:只有定向反射
  • 白色:只有漫反射
  • 黑色:只吸收
  • 防反射玻璃:仅透光率

通过将三个系数的总和设置为小于1的值来隐式处理吸收。

在实践中还有一些额外的效果,例如只有在理想方向上的反射,平均偏差取决于材料,自身发光的材料,不定向的反射效果或改变颜色......

答案 1 :(得分:0)

它基本上给出了代码中注释的答案:

光线被传输,反射或漫反射。物理上后两者是相同的,但在光线追踪中,两者的处理方式不同。

第一个像镜子一样产生高光和实际反射,而漫反射部分对于像橡胶这样与镜子非常不同的表面很重要。