如何渲染多个光源照亮的场景

时间:2018-01-04 08:37:04

标签: opengl directx rendering shader light

我想渲染一个由多个灯点亮的场景。由于灯光数量没有预定义,我决定通过光线渲染光线。

我的问题是:在我生成几个RT-Textures包含不同灯光点亮的结果后,如何将它们组合起来生成最终结果?

有些文章表明灯光是添加剂。但是,例如,#define _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING 1 color_i的一个像素被light_i着色。最终颜色RT-Texture_i(根据附加属性)更容易饱和,我不认为这是正确的(与现实世界相比)。

修改

以下图像由两个光源渲染,一个来自正面,另一个来自顶面(场景)。

前脸灯:

Light from front-face

Top-Face Light:

Light from top-face

最终结果(加在一起):

Result

Shadow

在这里,花瓶上的影子非常不自然。是由于添加了两张图片引起的,我该如何解决?

PS:此演示基于XEffects完成。

1 个答案:

答案 0 :(得分:0)

  

最终颜色color_1 + color_2 + ... + color_n(根据附加属性)更容易饱和,我不认为这是正确的(与现实世界相比)。

这是正确的照明方式,是的,结果会饱和,所以如果使用r,g,b的浮点值,请记得将最终值钳位到最大值为1.0f计算。

此外,应使用

对灯光进行衰减,以使照明贡献减少,具体取决于与灯光的距离
float attenuation = 1.0 / (1.0 + k * pow(distanceToLight, 2));

其中' k'是根据您的口味调整的任意衰减因子。