如何将单个阴影贴图用于多点光源



据我所知,阴影贴图是通过从灯光的角度渲染场景来创建深度贴图的。然后,从摄影机的POV重新渲染场景,并为场景中的每个点(GLSL中的片段)计算从那里到光源的距离;如果它与阴影贴图中的匹配,则它在灯光中,否则它在阴影中。

我只是在阅读本教程,了解如何使用点/全向光进行阴影贴图。

第12.2.2节规定:

我们对所有光源使用单一阴影贴图

然后根据12.3.6,它说:

1) 计算从当前像素到光源的距离的平方

4) 将计算的距离值与提取的阴影贴图值进行比较,以确定我们是否处于阴影中。

这大致就是我上面所说的。

我不明白的是,如果我们把所有的光都烤成一个阴影贴图,那么我们需要将距离与哪种光进行比较?烘焙到地图中的距离不应该与任何东西相对应,因为它是所有灯光的混合体,不是吗?

我肯定我错过了什么,但希望有人能向我解释。


此外,如果我们使用一个阴影贴图,如何将其混合到所有光源中?

对于单个光源,阴影贴图仅存储最接近灯光的对象的距离(即深度贴图),但对于多个光源,它将包含什么?

您过早地缩短了句子:

我们对所有光源使用一个阴影贴图,创建一个图像使用多通道渲染,并对每个灯光执行一个通道来源

因此,阴影贴图一次包含单个光源的数据,但它们只使用一个贴图,因为它们一次只渲染一个灯光。

我认为这就引出了你的第二个问题——光是相加的,所以你只需将多个光的结果相加就可以将它们组合在一起。在GPU Gems的情况下,它们直接在帧缓冲区中相加,这无疑是因为当时GPU上可用的存储纹理采样器数量相对有限。现在,您可能希望在帧缓冲区和直接在片段着色器中进行组合。

由于浮点舍入误差累积,您通常还应用"如果像素小于或等于阴影缓冲区中的距离加一点点,则像素点亮"的测试,而不是完全相等。

相关内容

  • 没有找到相关文章

最新更新