Graphics 对于光线跟踪折射/反射,应为';t透射率+;反射率=1?

Graphics 对于光线跟踪折射/反射,应为';t透射率+;反射率=1?,graphics,physics,raytracing,Graphics,Physics,Raytracing,在这篇代码文章中,关于反射/折射的部分有几个案例,它检查是传输还是反射光线 它表示rand_num在0到1之间: if(rand_num<=reflectance){ //reflect a ray }else if(rand_num<=reflectance+transmittance){ //transmit a ray through surface }else{ //diffuse calculation } if(rand_num它基本上在代码中的

在这篇代码文章中,关于反射/折射的部分有几个案例,它检查是传输还是反射光线

它表示rand_num在0到1之间:

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

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

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


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

在这样一个简单的模型中,入射光有四种情况:1)定向反射2)漫反射3)吸收4)透射

几个(理想化的)例子:

  • 镜像:仅定向反射
  • 白色:仅漫反射
  • 黑色:只有吸收
  • 防反射玻璃:仅透过率
通过将三个系数之和设置为小于一的值来隐式处理吸收


实际上,还有一些额外的效果,例如仅反射,其仅大致沿理想方向移动,平均偏差取决于材料,材料本身发光,定向反射或改变颜色的异常反射效果…

入射光有四种情况:1)定向反射2)漫反射3)吸收4)透射,因此我认为方向反射的情况是反射率=1.0f,透射=0.0f。然后,透射比为透射比=1.0f,反射率=0.0f。那么其他两种情况是什么呢?到codermind的链接不再起作用。我不知道发生了什么事,我相信。我的问题是,如果rand_num在0到1的范围内,并且reflect+transmit=1,那么永远不会调用else语句。Rand_num必须小于或等于reflect+Transmission。“Reflective”在这里特别指镜面反射(镜面反射)。所以当你说Reflective时,你指的是表面brdf中的一个系数。就像有人说,任何反射光线都需要乘以这个“反射”常数。但这与菲涅耳方程计算的反射率不同?