Home | History | Annotate | Download | only in Light
      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