光线跟踪中阴影的正确模型

时间:2011-01-03 16:05:57

标签: graphics shader raytracing

我想知道计算几种不同光源和环境光产生的阴影的最准确方法。 环境光是存在于整个“世界”中的光,具有相同的强度而没有特定的方向,漫射光是由点光源直接照射而发生的光照。

鉴于Ka是表面环境反射率的系数,Ia是环境光的强度,Kd是表面漫反射率,Ip1是强度在第一个(相应的)点光源中,N是表面法线,而L1是光(相应的第一个源)方向。

根据我的参考资料,现场颜色的强度应为:

I=Ka.Ia+Kd(Ip1(N.L1)+Ip2(N.L2)) 其中“.”是点积。

但根据我的理解,真实的光强度应该在光源之间进行某种平均,而不仅仅是将它们加起来,这样如果只有两个光源,方程应该如下:

I=Ka.Ia+Kd(Ip1(N.L1)+Ip2(N.L2))/2

并且如果有3个光源,但是第三个被阻挡并且不直接照亮表面:

I=Ka.Ia+Kd(Ip1(N.L1)+Ip2(N.L2))/3 (如果有一个所有3个灯都有贡献的地方,它会变得更亮。

我的假设是对的吗?

3 个答案:

答案 0 :(得分:6)

嗯,不,光不应该是平均的。想一想。如果你只有一个强大的光源,并且你添加另一个非常微弱的光线,那么物体的颜色会减少吗?例如,强光有强度10,颜色(假设方向垂直于法线,没有环境光,为简单起见)将为10.然后在你添加第二个微弱的光后,用强度为0.1的颜色将是(10 + 0.1)/ 2,即5.05。因此,添加更多光线会使物体看起来更暗。这没有意义。

答案 1 :(得分:4)

在现实世界中,光增添了色彩。它也应该在你的光线追踪器中。

答案 2 :(得分:1)

亮度不是光强度的线性函数。换句话说,两个相同的光源瞄准一个光点并不像一个光那样被视为“亮”的两倍。 (亮度是一个模糊的术语 - 亮度是一个更好的术语,意味着人类视觉加权的辐射)。

当你知道各种像素的强度时,你可以做些什么作为校正要在显示器上观看的图像的近似值,gamma correction