5

各位程序员,您好,我发现了改进阴影映射的另一个障碍。问题是我正在做一些阴影贴图,但找不到任何合适的深度偏差。前段时间在我的 XNA 项目中,当我第一次做它时,我可以在地形上很好地设置它,并且可以很快找到合适的偏差,因为如果没有设置偏差,就会出现这样的粉刺:暗影粉刺 我一直在调整偏差,直到阴影看起来不错,据我所知,这就是它背后的基本思想。这就是我想要的结果。现在转到 DirectX 11,稍后设置一个小场景,并完成一些 PCF 阴影映射。然后,在没有设置偏差的情况下,没有这样的粉刺,但是阴影断开了,例如这样(对于丑陋的纹理,对不起):断开的阴影 地面上应该有粉刺,盒子的阴影连接到盒子的边缘,但它是断开的。当降低偏差(负值)时,间隙开始减小,但很快整个阴影贴图在达到最佳间隙距离之前变暗。

我使用与 XNA 上相同的着色器代码(仅通过 pcf 过滤扩展),所以我假设它更多地与 api 有关。检查 xna 代码,我什至看不到渲染到纹理格式是什么,因为它们是隐藏的(我猜)。

如果有人以前遇到过这个问题,请帮助我以零偏差实现阴影粉刺。

更新:这张图片显示了一个平坦的四边形上的不均匀阴影(痤疮应该均匀地分布在整个四边形上,就像它在 XNA 中的地形上一样): 不均匀的痤疮

UPDATE2:我尝试在深度渲染过程中切换剔除模式以剔除正面,这样阴影可以调整得更好一些,因为如果修改偏差,没有渲染的地板会变暗,但阴影仍然很不均匀。单个网格的阴影可以调整为看起来不错,但其他网格的阴影会变得混乱。 个人看起来不错 不知何故,我认为深度缓冲区分布非常不均匀,因为靠近远平面的物体会得到更好的结果。我认为,即使我的剪裁距离也不差。阴影投影设置为 1-2000 深度分布(在我的场景中,1 米大约是 200 个单位),但不知何故,精度差得很远。我尝试过 R32_FLOAT 和 D24_S8_UNORM 的深度纹理格式。

4

2 回答 2

2

当没有正确设置“SlopeScaledDepthBias”属性(也是 D3D11_RASTERIZER_DESC 的一部分)时,我看到了类似的问题。

正如这里所解释的,SlopeScaledDepthBias 是深度偏差计算的重要组成部分,确保它被初始化为有意义的东西。

于 2013-07-19T16:42:01.233 回答
2

好的,斜率缩放偏差是解决自我阴影痤疮的方法,但不是解决我的问题的正确方法。我发现我的视口设置有问题。一直以来,我都将其深度的描述填写为 0.1f 近深度和 1.0f 远深度,因为我不知道它的确切用途并且工作正常,但是深度缓冲区不均匀,在阴影附近获得了更高的精度眼睛和失去精度走得更远。我将阴影贴图渲染深度模板视图的视口描述更改为近平面上的 0.0f,最后它起作用了,所以现在整个场景都可以均匀地获取深度信息,就像之前在 XNA 中一样。

于 2013-07-27T10:43:33.570 回答