首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阴影贴图,勾引技巧,深度剥离

阴影贴图,勾引技巧,深度剥离
EN

Stack Overflow用户
提问于 2013-07-09 01:24:02
回答 1查看 547关注 0票数 0

我正在尝试创建一个自阴影对象(opengl/glsl)。我所做的步骤如下:

1-从灯光渲染场景以获得深度贴图

2-从相机位置渲染并计算每个点到光源的距离,如果点到光的距离大于深度图中存储的深度,则该点处于阴影中。

但随之而来的是暗疮问题。因此,第二步如下所示:

2-偏置( abs(DISTANCE_OF_THE_POINT_TO_LIGHT - DEPTH_STORED_IN_THE_DEPTH_MAP) >...if)点在阴影中。

但是它仍然没有给我带来好的结果(没有合适的偏差值)。

因此,我实现了woo技巧(从光中找到第一个和第二个表面,然后将中点存储在深度缓冲区中)。为了做到这一点,我做了两次深度剥离。具体步骤如下:

1-像往常一样,从灯光渲染场景以获得第一个深度贴图。

2-从光渲染场景以获得第二个深度图,如果一个点到光的距离等于第一个深度图中的距离,则丢弃该点(即不渲染第一层)。

3-存储为最终的深度图(第一个深度图+第二个深度图)/2

4-从相机位置渲染并计算每个点到光源的距离,如果点到光的距离大于深度图中存储的深度,则该点处于阴影中。

问题现在出现在步骤2中,与我们之前遇到的问题相同:当第一层和第二层接近时,会出现舍入误差和某种类型的粉刺,并且也没有合适的偏置值。因此,我没有从woo算法中获得任何好处,它只是将问题转移到深度剥离部分。

你怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 11:02:31

我没有从woo算法中获得任何好处,它只是将问题转移到深度剥离部分。

在深度剥离和阴影贴图中都存在Z-fighting问题,但阴影贴图的情况更糟。

使用阴影贴图,您可以在摄影机空间中计算阴影贴图空间中的z值和采样位置(x,y)。问题是,通常情况下,阴影贴图空间中没有采样(x,y),因此采用与(x,y)最近的采样,然后将阴影深度与z值进行比较。

与阴影贴图不同,在深度剥离中,您将在完全相同的采样位置(相同的阴影贴图空间)比较z值。如果你负担得起,它实际上是对抗阴影伪影的一个很好的解决方案,但它不会在所有情况下都有帮助,例如:

如果你在屏幕上有一个大物体,我们可以说是一座房子。房屋在阴影贴图上的投影可能位于几个甚至单个样本(一个像素)内,在这种情况下,为房屋计算的所有z值都将与阴影贴图中相同的z值进行比较。相反,屏幕上的一个像素可以对应于阴影图中的一个巨大区域。

改善结果的建议:

确保DEPTH_STORED_IN_THE_DEPTH_MAP的计算方式与DISTANCE_OF_THE_POINT_TO_LIGHT完全相同。特别要注意隐藏固定流水线算法。要么在DEPTH_STORED_IN_THE_DEPTH_MAPDISTANCE_OF_THE_POINT_TO_LIGHT中使用它们,要么从不使用它们。

使用32位浮点纹理来存储深度。

尝试percentage closer filter PCF。

深度剥离为您提供了自适应偏差。您还可以使用自适应分辨率:Cascaded Shadow Maps

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17532523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档