我正在3D引擎中实现照明,并且在我计算照明的方式中发现了一个缺陷。在合并着色器中,我得到了漫反射颜色和光照计算。
return diffuseColor * (diffuseLight + ambient);
据我所知,这是做事的标准方式。 但是,例如,如果颜色是0,1,0,那么光是1.0,0。 (在此示例中忽略环境) 结果将是0,0,0。但在现实生活中,如果我得到一张纯绿色的纸,并在上面涂上有色的红光,它应该变成黄色。或者至少不是黑色。
其他游戏如何解决这个问题?
答案 0 :(得分:2)
绿纸会吸收红光并呈现黑色而非黄色。 增加意味着你用红色和绿色光照亮白纸。然后纸张显示为黄色。
http://www.physics.wisc.edu/museum/Exhibits-2/Light_Optics/ColorObj/Color_index.html
答案 1 :(得分:0)
应该是(对于每个RGB组件)
return (diffuseColor * diffuseLight) + ambient;
环境分量是恒定的,在完成所有其他光照计算后添加,并且不依赖于光线方向或观察方向。
正如Julio所说,纯绿色纸在纯红灯下看起来是黑色的。
当某些东西看起来是绿色的时候,这是因为它吸收了光谱中的所有其他颜色,并且反射了剩下的东西(即绿色)。如果你发出红光,就没有绿色可以被反射。