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