1

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

return diffuseColor * (diffuseLight + ambient);

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

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

4

2 回答 2

2

绿纸会吸收红光并呈现黑色,而不是黄色。加法意味着你用红光和绿光照亮一张白纸。然后纸张出现黄色。

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

于 2012-05-25T08:25:54.037 回答
0

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

return (diffuseColor * diffuseLight) + ambient;

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

正如胡里奥所说,绿色的纸在红光下看起来是黑色的。

当某些东西看起来是绿色时,这是因为它吸收了光谱中的所有其他颜色,而剩下的(即绿色)被反射了。如果你用红灯照它,就不会反射出绿色。

于 2012-05-25T09:35:03.907 回答