我想呈现一个由多个灯点亮的场景。由于灯光数量没有预定义,我决定通过光线渲染光线。
我的问题是:在我生成几个RT-Textures包含不同灯光点亮的结果后,如何将它们组合起来生成最终结果?
一些文章表明灯是添加剂。但是,例如,color_i
上的light_i
为一个像素加上RT-Texture_i
阴影。最终的颜色color_1 + color_2 + ... + color_n
(根据附加属性)更可能是饱和的,我不认为这是正确的(与现实世界相比)。
编辑:
以下图像由两个光源渲染,一个来自正面,另一个来自顶面(场景)。
前脸灯:
顶面灯:
最后的结果(加在一起):
在这里,花瓶上的影子非常不自然。是由于添加了两张图片引起的,我该如何解决?
PS:这个演示是基于XEffects完成的。
最终颜色color_1 + color_2 + ... + color_n(根据附加属性)更可能饱和,我不认为这是正确的(与现实世界相比)。
这是照明的正确方法,是的,结果会饱和,所以如果你使用浮点值进行r,g,b计算,请记得将最终值钳位到最大值为1.0f。
此外,灯应该衰减,以便照明贡献减少取决于与灯的距离,使用
float attenuation = 1.0 / (1.0 + k * pow(distanceToLight, 2));
其中'k'是根据您的口味调整的任意衰减系数。