适当的计算照明方式

时间:2012-05-25 04:59:06

标签: graphics 3d lighting

我正在3D引擎中实现照明,并且在我计算照明的方式中发现了一个缺陷。在合并着色器中,我得到了漫反射颜色和光照计算。

return diffuseColor * (diffuseLight + ambient);

据我所知,这是做事的标准方式。 但是,例如,如果颜色是0,1,0,那么光是1.0,0。 (在此示例中忽略环境) 结果将是0,0,0。但在现实生活中,如果我得到一张纯绿色的纸,并在上面涂上有色的红光,它应该变成黄色。或者至少不是黑色。

其他游戏如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

绿纸会吸收红光并呈现黑色而非黄色。 增加意味着你用红色和绿色光照亮白纸。然后纸张显示为黄色。

http://www.physics.wisc.edu/museum/Exhibits-2/Light_Optics/ColorObj/Color_index.html

答案 1 :(得分:0)

应该是(对于每个RGB组件)

return (diffuseColor * diffuseLight) + ambient;

环境分量是恒定的,在完成所有其他光照计算后添加,并且不依赖于光线方向或观察方向。

正如Julio所说,绿色纸在红灯下看起来是黑色的。

当某些东西看起来是绿色的时候,这是因为它吸收了光谱中的所有其他颜色,并且反射了剩下的东西(即绿色)。如果你发出红光,就没有绿色可以被反射。