我正在尝试实施this SAO algorithm。
我得到以下结果:
我无法弄清楚为什么我的鼻子在墙顶,这似乎是一个z缓冲问题。
以下是我的输入值:
const float projScale = 100.0;
const float radius = 0.9;
const float bias = 0.0005;
const float intensityDivR6 = pow(radius, 6);
我正在使用原始着色器而没有修改,除了我禁用深度缓冲区的mipmap使用。
我的深度缓冲区(在不同的场景,对不起):
答案 0 :(得分:2)
这应该是zbuffer线性化的问题,或者它不在-1和1之间。
答案 1 :(得分:1)
我还必须直接在投影矩阵中否定我的近和远平面值,以正确计算一些制服。
答案 2 :(得分:0)
我有一个类似的问题,视觉错误遮挡,与近/远相关联,所以我决定给你我做的修复它。
我之前的评论中描述了我遇到的问题。当相机靠近物体或半径实在太大时,我正在自我遮挡。
如果仔细查看从深度缓冲区值到相机空间值(g3d engine中的reconstructCSZ
函数)的转换,您会看到将深度替换为0将为您提供如果你在近/远处工作,那就近在咫尺。所以,这意味着每次你在模型外面得到一个水龙头时,你会得到一个等于近的z分量,这会给你一个z接近0的片段的错误遮挡。
您基本上必须丢弃位于近平面上的每个水龙头,以避免在计算完全贡献时将其考虑在内。