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 } }