找不到合适的阴影贴图深度偏差?

时间:2013-06-24 23:34:11

标签: c++ directx shadow directx-11

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

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

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

更新:此图像显示平坦四边形上的不均匀阴影(痤疮应该在整个四边形上均匀,因为它在XNA的地形上): uneven acne

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

2 个答案:

答案 0 :(得分:2)

如果没有正确设置'SlopeScaledDepthBias'属性(也是D3D11_RASTERIZER_DESC的一部分),我也遇到了类似的问题。

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

答案 1 :(得分:2)

好的,坡度缩放偏差是自阴影痤疮的解决方案,但不是我问题的正确解决方案。 我发现我的视口设置有问题。所有这些我已经填写了深度为0.1f深度和1.0f远深度的描述,因为我不知道它是什么确切并且工作正常,但深度缓冲不均匀,在阴影附近获得更高的精度眼睛和精度进一步下降。 我将阴影贴图渲染深度模板视图的视口描述更改为近平面上的0.0f,最后它工作,所以现在整个场景均匀地获得深度信息,就像之前在XNA中一样。