DirectX11和Rasterizer深度偏差

时间:2015-07-25 14:00:17

标签: directx-11 depth-buffer shadow-mapping

我在移动定向光投射阴影时遇到Z-fighting的问题。

渲染阴影贴图时,我正在尝试修改光栅化器配置。有三个与深度偏差相关的字段(DepthBias,SlopedScaleDepthBias,DepthBiasClamp),无论我如何修改它们都找不到合适的值 - 我不知道哪个值范围是合适的。

是否有适用于大多数场景的普遍接受/“标准”倾斜比例/偏差值?我意识到有极端情况,但我只是希望一般情况能够正常工作。

1 个答案:

答案 0 :(得分:1)

没有像标准的偏差值那样的东西。实施阴影贴图更像是艺术而非科学:)。

  • 第一个ACME源是阴影贴图精度。确保阴影投射光的近和远平面尽可能紧。近平面之前的所有物体都可以被平移,因为它们的确切深度并不重要。
  • 第二个ACME源是阴影贴图分辨率。对于阳光,你应该做至少3个1024x1012级联的级联阴影贴图,用于~100-200m的阴影距离。用一张具有均匀投影的阴影贴图很难覆盖相似的阴影距离。
  • 第三个ACME源是像PCF这样的宽阴影贴图过滤器,因为在宽内核上使用单个深度深度比较值是不够的。有很多方法可以修复它,但它们都不健壮。

总而言之,一个具有一些级联和一些偏差调整的紧凑平截头体足以使一般情况起作用。只有当基本阴影贴图足够强大时,才能通过禁用阴影过滤和调整进行过滤来开始调整。

还有一些其他有趣的方法,其中大部分都是在优秀的演示中实现的:Matt Pettineo - "A sampling of shadow techniques"

  • 在阴影贴图渲染过程中翻转剔除(这会换掉彼得平移的粉刺)。
  • 正常偏移阴影贴图确实存在偏差,但需要在着色期间使用顶点法线。
  • 基于方差的方法(ESM,VSM,EVSM)完全消除了偏差问题,但还有其他缺点(轻微泄漏和/或性能问题)。