我几乎按照 John Chapman 的教程在这里使用 SSAO ,事实上,使用 Sascha Willems Vulkan 示例。一个区别是片段位置与线性深度一起直接保存到 G-Buffer(因此有 x、y、z 和 w 坐标,w 是线性深度,在 G-Buffer 着色器中计算。深度计算如下这个:
float linearDepth(float depth)
{
return (2.0f * ubo.nearPlane * ubo.farPlane) / (ubo.farPlane + ubo.nearPlane - depth * (ubo.farPlane - ubo.nearPlane));
}
我的场景通常由一个大而平坦的地板组成,中间有一个模型。大我的意思是比远剪辑距离大得多。
在高深度值下(即在我的示例中的地平线处),SSAO 会在本应没有遮挡的地方生成遮挡 - 除了完全平坦的表面之外什么都没有。除了这种遮挡,还有一些条带。
关于如何防止这些遮挡发生的任何想法?