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

Ján*_*zki 5 c++ directx directx-11 shadow

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

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

如果有人曾经遇到过这个问题,请帮助我实现阴影痤疮零偏.

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

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

Ján*_*zki 2

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