1 #import "Common/ShaderLib/Optics.glsllib" 2 3 uniform float m_Shininess; 4 5 varying vec2 texCoord; 6 varying vec4 AmbientSum; 7 varying vec4 DiffuseSum; 8 varying vec4 SpecularSum; 9 10 varying float vDepth; 11 varying vec3 vNormal; 12 13 #ifdef DIFFUSEMAP 14 uniform sampler2D m_DiffuseMap; 15 #endif 16 17 #ifdef SPECULARMAP 18 uniform sampler2D m_SpecularMap; 19 #endif 20 21 #ifdef PARALLAXMAP 22 uniform sampler2D m_ParallaxMap; 23 #endif 24 25 #ifdef NORMALMAP 26 uniform sampler2D m_NormalMap; 27 varying mat3 tbnMat; 28 #endif 29 30 vec2 encodeNormal(in vec3 n){ 31 vec2 enc = normalize(n.xy) * (sqrt(-n.z*0.5+0.5)); 32 enc = enc*vec2(0.5)+vec2(0.5); 33 return enc; 34 } 35 36 void main(){ 37 vec2 newTexCoord = texCoord; 38 float height = 0.0; 39 #if defined(PARALLAXMAP) || defined(NORMALMAP_PARALLAX) 40 #ifdef PARALLAXMAP 41 height = texture2D(m_ParallaxMap, texCoord).r; 42 #else 43 height = texture2D(m_NormalMap, texCoord).a; 44 #endif 45 float heightScale = 0.05; 46 float heightBias = heightScale * -0.5; 47 height = (height * heightScale + heightBias); 48 #endif 49 50 51 // *********************** 52 // Read from textures 53 // *********************** 54 #if defined(NORMALMAP) && !defined(VERTEX_LIGHTING) 55 vec4 normalHeight = texture2D(m_NormalMap, newTexCoord); 56 vec3 normal = (normalHeight.xyz * vec3(2.0) - vec3(1.0)); 57 normal.y = -normal.y; 58 59 normal = tbnMat * normal; 60 #else 61 vec3 normal = vNormal; 62 #if !defined(LOW_QUALITY) && !defined(V_TANGENT) 63 normal = normalize(normal); 64 #endif 65 #endif 66 67 #ifdef DIFFUSEMAP 68 vec4 diffuseColor = texture2D(m_DiffuseMap, newTexCoord); 69 #else 70 vec4 diffuseColor = vec4(1.0); 71 #endif 72 73 #ifdef SPECULARMAP 74 vec4 specularColor = texture2D(m_SpecularMap, newTexCoord); 75 #else 76 vec4 specularColor = vec4(1.0); 77 #endif 78 79 diffuseColor.rgb *= DiffuseSum.rgb; 80 specularColor.rgb *= SpecularSum.rgb; 81 82 gl_FragData[0] = vec4(diffuseColor.rgb, 1.0); 83 gl_FragData[1] = vec4(encodeNormal(normal), 0.0, 0.0); 84 /*encodeNormal(vNormal));*/ 85 gl_FragData[2] = vec4(specularColor.rgb, m_Shininess / 128.0); 86 } 87