From 73043162309ec9821f90335134387272c9197ca4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Mar 2026 14:12:58 +0000 Subject: [PATCH 1/2] Initial plan From d100e8db44bc4ce993ee19c722574b58ca3b9ab8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 22 Mar 2026 14:15:30 +0000 Subject: [PATCH 2/2] Fix SPTerrainLighting to sample SpecularMap like MultiPass shader Co-authored-by: riccardobl <4943530+riccardobl@users.noreply.github.com> Agent-Logs-Url: https://github.com/jMonkeyEngine/jmonkeyengine/sessions/a30c94c1-aa2a-41dd-b8cd-4059e44d7611 --- .../MatDefs/Terrain/SPTerrainLighting.frag | 21 +++++++++++++++++-- .../MatDefs/Terrain/TerrainLighting.j3md | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/SPTerrainLighting.frag b/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/SPTerrainLighting.frag index 426b665e94..6f7034baff 100644 --- a/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/SPTerrainLighting.frag +++ b/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/SPTerrainLighting.frag @@ -3,6 +3,9 @@ #import "Common/ShaderLib/Lighting.glsllib" uniform float m_Shininess; +#ifdef SPECULARMAP + uniform sampler2D m_SpecularMap; +#endif varying vec4 AmbientSum; varying vec4 DiffuseSum; @@ -615,6 +618,20 @@ void main(){ #endif + //----------------------- + // read shininess or specularColor from specularMap + //----------------------- + vec4 specularColor = vec4(1.0); + float finalShininessValue = m_Shininess; + #ifdef SPECULARMAP + vec4 specularMapColor = texture2D(m_SpecularMap, texCoord); + #ifdef USE_SPECULARMAP_AS_SHININESS + finalShininessValue = specularMapColor.r; //assumes that specularMap is a gray-scale reflectivity/shininess map + #else + specularColor = specularMapColor; + #endif + #endif + //----------------------- // lighting calculations //----------------------- @@ -646,9 +663,9 @@ void main(){ vec3 viewDir = normalize(-vPos.xyz); #endif - vec2 light = computeLighting(normal, viewDir, lightDir.xyz, lightDir.w * spotFallOff, m_Shininess); + vec2 light = computeLighting(normal, viewDir, lightDir.xyz, lightDir.w * spotFallOff, finalShininessValue); gl_FragColor.rgb += DiffuseSum.rgb * lightColor.rgb * diffuseColor.rgb * vec3(light.x) + - SpecularSum.rgb * vec3(light.y); + SpecularSum.rgb * specularColor.rgb * vec3(light.y); } } diff --git a/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/TerrainLighting.j3md b/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/TerrainLighting.j3md index 4eb9c8d7a2..1fa6ce69f6 100644 --- a/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/TerrainLighting.j3md +++ b/jme3-terrain/src/main/resources/Common/MatDefs/Terrain/TerrainLighting.j3md @@ -238,6 +238,7 @@ MaterialDef Terrain Lighting { DIFFUSEMAP_11_SCALE : DiffuseMap_11_scale USE_ALPHA : useDiffuseAlpha + USE_SPECULARMAP_AS_SHININESS : useSpecularMapAsShininess } }