gpt4 book ai didi

graphics - 如何对多个点光源使用单个阴影贴图?

转载 作者:行者123 更新时间:2023-12-03 06:35:19 31 4
gpt4 key购买 nike

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

我刚刚读完this tutorial了解如何使用点/全向光进行阴影贴图。

第 12.2.2 节规定:

We use a single shadow map for all light sources

然后在 12.3.6 下它说:

1) Calculate the squared distance from the current pixel to the light source.
...
4) Compare the calculated distance value with the fetched shadow map value to determine whether or not we're in shadow.

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

我不明白的是,如果我们将所有灯光烘焙到一张阴影贴图中,那么我们需要与哪个灯光比较距离?烘焙到 map 中的距离不应该与任何内容相对应,因为它是所有灯光的混合,不是吗?

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

<小时/>

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

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

最佳答案

你过早地缩短了句子:

We use a single shadow map for all light sources, creating an image with multipass rendering and performing one pass for each light source.

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

我认为这会引出你的第二个问题——光是相加的,因此你只需将多个光的结果相加即可将它们组合在一起。在 GPU Gems 的例子中,它们直接在帧缓冲区中相加,这无疑是因为当时 GPU 上可用的存储纹理采样器数量相对有限。现在,您可能想要在帧缓冲区中进行组合并直接在片段着色器中进行组合。

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

关于graphics - 如何对多个点光源使用单个阴影贴图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660959/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com