#import "Common/ShaderLib/Optics.glsllib" | |
uniform float m_Shininess; | |
varying vec2 texCoord; | |
varying vec4 AmbientSum; | |
varying vec4 DiffuseSum; | |
varying vec4 SpecularSum; | |
varying float vDepth; | |
varying vec3 vNormal; | |
#ifdef DIFFUSEMAP | |
uniform sampler2D m_DiffuseMap; | |
#endif | |
#ifdef SPECULARMAP | |
uniform sampler2D m_SpecularMap; | |
#endif | |
#ifdef PARALLAXMAP | |
uniform sampler2D m_ParallaxMap; | |
#endif | |
#ifdef NORMALMAP | |
uniform sampler2D m_NormalMap; | |
varying mat3 tbnMat; | |
#endif | |
vec2 encodeNormal(in vec3 n){ | |
vec2 enc = normalize(n.xy) * (sqrt(-n.z*0.5+0.5)); | |
enc = enc*vec2(0.5)+vec2(0.5); | |
return enc; | |
} | |
void main(){ | |
vec2 newTexCoord = texCoord; | |
float height = 0.0; | |
#if defined(PARALLAXMAP) || defined(NORMALMAP_PARALLAX) | |
#ifdef PARALLAXMAP | |
height = texture2D(m_ParallaxMap, texCoord).r; | |
#else | |
height = texture2D(m_NormalMap, texCoord).a; | |
#endif | |
float heightScale = 0.05; | |
float heightBias = heightScale * -0.5; | |
height = (height * heightScale + heightBias); | |
#endif | |
// *********************** | |
// Read from textures | |
// *********************** | |
#if defined(NORMALMAP) && !defined(VERTEX_LIGHTING) | |
vec4 normalHeight = texture2D(m_NormalMap, newTexCoord); | |
vec3 normal = (normalHeight.xyz * vec3(2.0) - vec3(1.0)); | |
normal.y = -normal.y; | |
normal = tbnMat * normal; | |
#else | |
vec3 normal = vNormal; | |
#if !defined(LOW_QUALITY) && !defined(V_TANGENT) | |
normal = normalize(normal); | |
#endif | |
#endif | |
#ifdef DIFFUSEMAP | |
vec4 diffuseColor = texture2D(m_DiffuseMap, newTexCoord); | |
#else | |
vec4 diffuseColor = vec4(1.0); | |
#endif | |
#ifdef SPECULARMAP | |
vec4 specularColor = texture2D(m_SpecularMap, newTexCoord); | |
#else | |
vec4 specularColor = vec4(1.0); | |
#endif | |
diffuseColor.rgb *= DiffuseSum.rgb; | |
specularColor.rgb *= SpecularSum.rgb; | |
gl_FragData[0] = vec4(diffuseColor.rgb, 1.0); | |
gl_FragData[1] = vec4(encodeNormal(normal), 0.0, 0.0); | |
/*encodeNormal(vNormal));*/ | |
gl_FragData[2] = vec4(specularColor.rgb, m_Shininess / 128.0); | |
} |