From 4a9f45b6eff79be6ea2b8499a699e31e15ce9371 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 1 Oct 2025 11:25:43 +0200 Subject: [PATCH] fix: correct use of specular strength and shininess + opacity --- src/shaders/simple.fs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/shaders/simple.fs b/src/shaders/simple.fs index 673c33b..09e4cdc 100644 --- a/src/shaders/simple.fs +++ b/src/shaders/simple.fs @@ -17,7 +17,12 @@ uniform vec3 diffuseColor; uniform vec3 specularColor; uniform float ambientStrength; + uniform float specularStrength; +uniform float shininess; +uniform bool useSpecular; + +uniform float opacity; uniform sampler2D diffuseTex; uniform bool useTexture; @@ -33,18 +38,31 @@ void main() vec3 reflectDir = reflect(-lightDir, norm); // Phong components - float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32); - vec3 specular = specularStrength * spec * specularColor; + // float spec = pow(max(dot(viewDir, reflectDir), 0.0), clamp(shininess, 2, 256)); + // vec3 specular = (useSpecular) ? specularStrength * spec * specularColor : vec3(0.0); + + vec3 halfDir = normalize(lightDir + viewDir); + float spec = pow(max(dot(norm, halfDir), 0.0), clamp(shininess, 2.0, 256.0)); + vec3 specular = (useSpecular) ? specularStrength * spec * specularColor : vec3(0.0); float diff = max(dot(norm, lightDir), 0.0); vec3 diffuse = diff * diffuseColor; vec3 ambient = ambientStrength * ambientColor; + float distance = length(lightPos - vertexPos); + float attenuation = 1.0 / (1.0 + 0.09 * distance + 0.032 * (distance * distance)); + // tweak 0.09 and 0.032 for range/falloff + + // diffuse *= attenuation; + // specular *= attenuation; + // ambient *= attenuation; // optional, sometimes left constant + vec3 texColor = (useTexture) ? texture(diffuseTex, TexCoords).rgb : diffuseColor; vec3 result = (ambient + diffuse + specular) * texColor; - FragColor = vec4(result, 1.0); + + FragColor = vec4(result, opacity); } \ No newline at end of file