From 272624f27aa911a4914b3fceada02529179a78d6 Mon Sep 17 00:00:00 2001 From: Sam Hellawell Date: Fri, 22 Mar 2024 02:04:31 +0000 Subject: [PATCH] Better per-pixel lighting ambient term --- files/shaders/lib/light/lighting.glsl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/files/shaders/lib/light/lighting.glsl b/files/shaders/lib/light/lighting.glsl index 8bb6ba148f..535fe22182 100644 --- a/files/shaders/lib/light/lighting.glsl +++ b/files/shaders/lib/light/lighting.glsl @@ -42,8 +42,21 @@ void doLighting(vec3 viewPos, vec3 viewNormal, float shininess, out vec3 diffuse shininess = max(shininess, 1e-4); vec3 sunDir = normalize(lcalcPosition(0)); - diffuseLight = lcalcDiffuse(0) * calcLambert(viewNormal, sunDir, viewDir); + vec3 sunColor = lcalcDiffuse(0); + float sunIntensity = calcLambert(viewNormal, sunDir, viewDir); + diffuseLight = sunColor * sunIntensity; + +#if PER_PIXEL_LIGHTING + ambientLight = mix( + gl_LightModel.ambient.xyz, + mix(sunColor, gl_LightModel.ambient.xyz, shadowing), + sunIntensity * 0.5 + ); +#else ambientLight = gl_LightModel.ambient.xyz; +#endif + + specularLight = lcalcSpecular(0).xyz * calcSpecIntensity(viewNormal, viewDir, shininess, sunDir); #if PER_PIXEL_LIGHTING diffuseLight *= shadowing;