From d75d6dc849566cf651211f77dc835301c543fca6 Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Thu, 11 May 2017 23:08:47 +0200 Subject: [PATCH] Faster conetrace --- .../deferred_indirect.frag.glsl | 2 +- Shaders/std/conetrace.glsl | 17 ++--------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/Shaders/deferred_indirect/deferred_indirect.frag.glsl b/Shaders/deferred_indirect/deferred_indirect.frag.glsl index 53d716d1..0149d127 100644 --- a/Shaders/deferred_indirect/deferred_indirect.frag.glsl +++ b/Shaders/deferred_indirect/deferred_indirect.frag.glsl @@ -80,7 +80,7 @@ void main() { fragColor.rgb = indirectDiffuse.rgb * 1.3 * albedo + indirectSpecular; // fragColor.rgb = max(vec3(1.0 - (indirectDiffuse.a / 2.0)), 0.05) * albedo; - fragColor.rgb *= 1.0 - (indirectDiffuse.a / 2.2); // Occ + fragColor.rgb *= 1.0 - indirectDiffuse.a; // Occ fragColor.rgb *= texture(ssaotex, texCoord).r * 0.5 + 0.5; // if (opacity < 1.0) fragColor.rgb = mix(indirectRefractiveLight(-v), fragColor.rgb); // Transparency diff --git a/Shaders/std/conetrace.glsl b/Shaders/std/conetrace.glsl index 014b8f8f..e87593d7 100755 --- a/Shaders/std/conetrace.glsl +++ b/Shaders/std/conetrace.glsl @@ -21,7 +21,7 @@ vec4 traceDiffuseVoxelCone(const vec3 from, vec3 direction) { vec4 acc = vec4(0.0); // Controls bleeding from close surfaces // Low values look rather bad if using shadow cone tracing - float dist = 0.1953125; + float dist = 0.1953125 / 9.0; const float SQRT2 = 1.414213; while (dist < SQRT2 && acc.a < 1.0) { vec3 c = vec3(from + dist * direction) * 0.5 + vec3(0.5); @@ -33,21 +33,8 @@ vec4 traceDiffuseVoxelCone(const vec3 from, vec3 direction) { dist += ll * VOXEL_SIZE * 2.0; } - vec4 occ = vec4(0.0); - dist = 0.1953125 / 9.0; - const float SQRT2a = 1.414213 / 9.0; - while (dist < SQRT2a && acc.a < 1.0) { - vec3 c = vec3(from + dist * direction) * 0.5 + vec3(0.5); - float l = (1.0 + CONE_SPREAD * dist / VOXEL_SIZE); - float level = log2(l); - float ll = (level + 1.0) * (level + 1.0); - vec4 voxel = textureLod(voxels, c, min(MAX_MIPMAP, level)); - occ += 0.075 * ll * voxel * pow(1.0 - voxel.a, 2.0); - dist += ll * VOXEL_SIZE * 2.0; - } - acc.rgb = pow(acc.rgb * 2.0, vec3(1.5)); - acc.a = occ.a; + acc.a /= 3.8; return acc; }