Пытаюсь реализовать SSAO в моем приложении OpenGL. Но придумал какой-то странный артефакт. Как я могу решить эту проблему с черным sh? Вот фрагментный шейдер для SSAO
"int KERNEL_MAX = 128;"
"uniform vec3 kernel[128];"
"uniform mat4 P;"
"uniform sampler2D tex;"
"uniform sampler2D texPos;"
"uniform sampler2D texNormal;"
"uniform sampler2D texDepth;"
"uniform vec3 camPos;"
"void main () {"
" vec4 pixel_color = texture2D(tex, v_uv);"
" vec3 pixel_pos = texture2D(texPos, v_uv).rgb;"
" vec3 pixel_normal = texture2D(texNormal, v_uv).rgb;"
" float pixel_depth = texture2D(texDepth, v_uv).r;"
" float occlusion = 0.0;"
" for (int i = 0; i < KERNEL_MAX; ++i) {"
" vec3 sample_ray = pixel_pos + kernel[i] * sign(dot(pixel_normal, kernel[i])) * 0.1;"
" vec4 sample_pos = (P * vec4(sample_ray, 1.0));"
" sample_pos.xy /= sample_pos.w;"
" sample_pos.xy = sample_pos.xy * 0.5 - 0.5;"
" float sample_depth = texture2D(texDepth, sample_pos.xy).r;"
" if (sample_depth < pixel_depth) { occlusion += 1.0; }"
" }"