From 0d0350c2acb52466a87269a513e3caf92fa6ef67 Mon Sep 17 00:00:00 2001 From: past-due <30942300+past-due@users.noreply.github.com> Date: Thu, 7 Sep 2023 12:13:40 -0400 Subject: [PATCH] Terrain High shader: Use Blinn-Phong lighting Co-Authored-By: MaNGusT- --- data/base/shaders/terrain_combined_high.frag | 7 ++++--- data/base/shaders/vk/terrain_combined_high.frag | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/data/base/shaders/terrain_combined_high.frag b/data/base/shaders/terrain_combined_high.frag index 63ad133b7ae..1deedb89ed5 100644 --- a/data/base/shaders/terrain_combined_high.frag +++ b/data/base/shaders/terrain_combined_high.frag @@ -123,11 +123,12 @@ vec4 doBumpMapping(BumpData b, vec3 lightDir, vec3 halfVec) { float lambertTerm = max(dot(b.N, L), 0.0); // diffuse lighting // Gaussian specular term computation vec3 H = normalize(halfVec); - float exponent = acos(dot(H, b.N)) / 0.33; - float gaussianTerm = exp(-(exponent * exponent)); + float blinnTerm = clamp(dot(b.N, H), 0.f, 1.f); + blinnTerm = lambertTerm != 0.0 ? blinnTerm : 0.0; + blinnTerm = pow(blinnTerm, 16.f); float visibility = getShadowVisibility(); - vec4 res = b.color*(ambientLight + visibility*diffuseLight*lambertTerm) + visibility*b.gloss*b.gloss*specularLight*gaussianTerm*lambertTerm; + vec4 res = b.color*(ambientLight + visibility*diffuseLight*lambertTerm) + visibility*b.gloss*b.gloss*specularLight*blinnTerm*lambertTerm; return vec4(res.rgb, b.color.a); } diff --git a/data/base/shaders/vk/terrain_combined_high.frag b/data/base/shaders/vk/terrain_combined_high.frag index fb987889de0..2b128b6c5cf 100644 --- a/data/base/shaders/vk/terrain_combined_high.frag +++ b/data/base/shaders/vk/terrain_combined_high.frag @@ -65,11 +65,12 @@ vec4 doBumpMapping(BumpData b, vec3 lightDir, vec3 halfVec) { float lambertTerm = max(dot(b.N, L), 0.0); // diffuse lighting // Gaussian specular term computation vec3 H = normalize(halfVec); - float exponent = acos(dot(H, b.N)) / 0.33; - float gaussianTerm = exp(-(exponent * exponent)); + float blinnTerm = clamp(dot(b.N, H), 0.f, 1.f); + blinnTerm = lambertTerm != 0.0 ? blinnTerm : 0.0; + blinnTerm = pow(blinnTerm, 16.f); float visibility = getShadowVisibility(); - vec4 res = b.color*(ambientLight + visibility*diffuseLight*lambertTerm) + visibility*b.gloss*b.gloss*specularLight*gaussianTerm*lambertTerm; + vec4 res = b.color*(ambientLight + visibility*diffuseLight*lambertTerm) + visibility*b.gloss*b.gloss*specularLight*blinnTerm*lambertTerm; return vec4(res.rgb, b.color.a); }