From 2c2c21846e57d1ecaf4350a5587ae5292947dd45 Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Thu, 24 Jun 2021 16:16:48 +0200 Subject: [PATCH] [#82] Minor brdf change to reduce aliasing --- projects/voxelization/resources/shaders/brdf.inc | 4 ++-- projects/voxelization/resources/shaders/shader.frag | 3 ++- projects/voxelization/resources/shaders/shadowMapping.inc | 8 ++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/projects/voxelization/resources/shaders/brdf.inc b/projects/voxelization/resources/shaders/brdf.inc index fc97b601..4cf334ea 100644 --- a/projects/voxelization/resources/shaders/brdf.inc +++ b/projects/voxelization/resources/shaders/brdf.inc @@ -14,14 +14,14 @@ vec3 fresnelSchlick(float cosTheta, vec3 f0){ float GGXDistribution(float r, float NoH){ float r2 = r * r; float denom = pi * pow(NoH * NoH * (r2 - 1) + 1, 2); - return r2 / max(denom, 0.000001); + return r2 / max(denom, 0.00001); } float GGXSmithShadowingPart(float r, float cosTheta){ float nom = cosTheta * 2; float r2 = r * r; float denom = cosTheta + sqrt(r2 + (1 - r2) * cosTheta * cosTheta); - return nom / max(denom, 0.000001); + return nom / max(denom, 0.00001); } float GGXSmithShadowing(float r, float NoV, float NoL){ diff --git a/projects/voxelization/resources/shaders/shader.frag b/projects/voxelization/resources/shaders/shader.frag index 2b356691..1065de2c 100644 --- a/projects/voxelization/resources/shaders/shader.frag +++ b/projects/voxelization/resources/shaders/shader.frag @@ -38,11 +38,12 @@ vec3 cookTorrance(vec3 f0, float r, vec3 N, vec3 V, vec3 L){ float NoH = clamp(dot(N, H), 0, 1); float NoL = clamp(dot(N, L), 0, 1); - float NoV = clamp(dot(N, V), 0, 1); + float NoV = clamp(abs(dot(N, V)), 0, 1); // abs to account for wrong visibility caused by normal mapping vec3 F = fresnelSchlick(NoH, f0); float D = GGXDistribution(r, NoH); float G = GGXSmithShadowing(r, NoV, NoL); + return (F * D * G) / max(4 * NoV * NoL, 0.000001); } diff --git a/projects/voxelization/resources/shaders/shadowMapping.inc b/projects/voxelization/resources/shaders/shadowMapping.inc index 4755e7ec..c4bcd94e 100644 --- a/projects/voxelization/resources/shaders/shadowMapping.inc +++ b/projects/voxelization/resources/shaders/shadowMapping.inc @@ -70,10 +70,10 @@ float reduceLightBleeding(float shadow, float amount) } float shadowTest(vec3 worldPos, LightInfo lightInfo, texture2D shadowMap, sampler shadowMapSampler, vec2 offset){ - vec4 lightPos = lightInfo.lightMatrix * vec4(worldPos, 1); - lightPos /= lightPos.w; - lightPos.xy = lightPos.xy * 0.5 + 0.5; - lightPos.xy += offset; + vec4 lightPos = lightInfo.lightMatrix * vec4(worldPos, 1); + lightPos /= lightPos.w; + lightPos.xy = lightPos.xy * 0.5 + 0.5; + lightPos.xy += offset; if(any(lessThan(lightPos.xy, vec2(0))) || any(greaterThan(lightPos.xy, vec2(1)))){ return 1; -- GitLab