diff --git a/shaders/ssao.frag b/shaders/ssao.frag index 2df64fd..548aab6 100644 --- a/shaders/ssao.frag +++ b/shaders/ssao.frag @@ -38,6 +38,7 @@ void main() float sampleDepth; // Значение глубины образца выборки vec3 samplePos; // Выборка, ориентированная в пространстве вида камеры vec4 sampleCoord; // Выборка, преобразованная к текстурным координатам + float rangeCheck; // Проверка диапазона // Проинициализируем значение счетчика и запустим цикл по выборкам occlusion = 0; @@ -53,7 +54,8 @@ void main() // Получаем значение глубины по образцу выборки sampleDepth = (camera.view * vec4(texture(gPosition, sampleCoord.xy).rgb, 1)).z; - occlusion += (sampleDepth >= samplePos.z + ssao.bias ? 1.0 : 0.0); + rangeCheck = smoothstep(0.0, 1.0, ssao.radius / abs(fragPos.z - sampleDepth)); + occlusion += (sampleDepth >= samplePos.z + ssao.bias ? 1.0 : 0.0) * rangeCheck; } occlusion = 1 - (occlusion / ssao.size);