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

问题描述 投票:0回答:1

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

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

一些文章表明灯是添加剂。但是,例如,color_i上的light_i为一个像素加上RT-Texture_i阴影。最终的颜色color_1 + color_2 + ... + color_n(根据附加属性)更可能是饱和的,我不认为这是正确的(与现实世界相比)。

编辑:

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

前脸灯:

Light from front-face

顶面灯:

Light from top-face

最后的结果(加在一起):

Result

Shadow

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

PS:这个演示是基于XEffects完成的。

opengl directx rendering shader light
1个回答
0
投票

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

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

此外,灯应该衰减,以便照明贡献减少取决于与灯的距离,使用

float attenuation = 1.0 / (1.0 + k * pow(distanceToLight, 2));

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

© www.soinside.com 2019 - 2024. All rights reserved.