【发布时间】:2024-01-14 00:08:01
【问题描述】:
我想渲染一个由多个灯光照亮的场景。由于灯光数量没有预先定义,我决定逐个渲染灯光。
我的问题是:在我生成多个 RT-Textures 包含由不同灯光照亮的结果之后,我如何将它们组合起来生成最终结果?
一些文章表明灯光是相加的。但是,例如,一个像素在RT-Texture_i 上被light_i 着色color_i。最终的颜色color_1 + color_2 + ... + color_n(根据加法属性)更可能是饱和的,我认为这是不正确的(与现实世界相比)。
编辑:
以下图像由两个光源渲染,一个来自正面,另一个来自顶面(场景)。
前脸灯:
顶面光:
以及最终结果(相加):
在这里,花瓶上的阴影非常不自然。是不是加了两张图片造成的,怎么解决?
PS:本次演示是基于XEffects完成的。
【问题讨论】:
-
见How lighting in building games with unlimited number of lights works?。是的,灯光是附加的。饱和度可以通过钳位或使用曝光系数来处理(基于观察区域中光纹理的局部动态范围)。您也可以在 HDR 中渲染并在最终通道中选择它
-
@Spektre 上图,加色光看起来很不自然。有什么问题吗?
-
我看不到环境光,这可能是您觉得缺少的。您的灯光总和超过
1.0的强度,并且由于您没有 HDR 渲染,因此您的引擎正在夹紧。如果这不是您想要的尝试规范化结果light0 + light1 + ... light(n-1) / n
标签: opengl directx rendering shader light