在我理解时,通过从光的角度渲染场景来创建深度映射来完成影子映射。然后从摄像机的POV重新渲染场景,以及在场景中的每个点(GLSL中的片段)您计算从那里到光源的距离;如果它与暗影图中有什么相匹配,那么它就在光明中,否则它在阴影中。

我只是通过本教程来了解如何使用暗影映射点/全向光。

在第12.2.2条下说:

我们使用单一的荫映射为所有光源

然后低于12.3.6它说:

1)从电流像素到光源计算平方距离。
......
4)将计算的距离值与获取的阴影映射值进行比较,以确定我们是否在阴影中。

大致我在上面所述。

我没有得到的是,如果我们把我们所有的灯都烘烤到一个阴影地图中,那么我们需要哪个光线比较距离?烘焙到地图中的距离不应对应于任何东西,因为它是所有灯的混合,不是吗?

我相信我错过了一些东西,但希望有人可以向我解释这一点。


此外,如果我们使用单一的阴影图,我们如何为所有光源混合它?

对于单个光源,阴影映射仅将最近物体的距离存储到光线(即,深度图),但对于多个光源,它会包含什么?

有帮助吗?

解决方案

你已经过早剪了句子:

我们使用单一的阴影贴图进行所有光源,创建图像 使用多双赞成渲染并为每个光线执行一次通行证 来源。 因此,阴影贴图包含一次单个光源的数据,但它们只使用一个地图,因为它们一次只渲染一个光。

我认为这进入你的第二个问题 - 光线是附加的,所以你只需将它们加入了多个灯光的结果即可。在GPU宝石的情况下,他们直接在帧缓冲区中加入,毫无疑问,因为当时GPU上可用的存储纹理采样器数量相对有限。如今,您可能希望在帧缓冲区中并直接在片段着色器中进行组合。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top