| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "Uniforms.frag"
- #include "Samplers.frag"
- #include "Lighting.frag"
- #include "Fog.frag"
- varying vec2 vTexCoord;
- #ifdef VERTEXCOLOR
- varying vec4 vColor;
- #endif
- varying vec4 vLightVec;
- #ifdef SPECULAR
- varying vec3 vEyeVec;
- #endif
- #ifndef NORMALMAP
- varying vec3 vNormal;
- #endif
- #ifdef SHADOW
- #if defined(DIRLIGHT)
- varying vec4 vShadowPos[4];
- #elif defined(SPOTLIGHT)
- varying vec4 vShadowPos;
- #else
- varying vec3 vShadowPos;
- #endif
- #endif
- #ifdef SPOTLIGHT
- varying vec4 vSpotPos;
- #endif
- #ifdef POINTLIGHT
- varying vec3 vCubeMaskVec;
- #endif
- void main()
- {
- #ifdef DIFFMAP
- vec4 diffColor = cMatDiffColor * texture2D(sDiffMap, vTexCoord);
- #else
- vec4 diffColor = cMatDiffColor;
- #endif
- #ifdef VERTEXCOLOR
- diffColor *= vColor;
- #endif
- vec3 lightColor;
- vec3 lightDir;
- vec3 finalColor;
- float diff;
- #ifdef NORMALMAP
- vec3 normal = DecodeNormal(texture2D(sNormalMap, vTexCoord));
- #else
- vec3 normal = normalize(vNormal);
- #endif
- #ifdef DIRLIGHT
- #ifdef NORMALMAP
- lightDir = normalize(vLightVec.xyz);
- #else
- lightDir = vLightVec.xyz;
- #endif
- diff = GetDiffuseDir(normal, lightDir);
- #else
- diff = GetDiffusePointOrSpot(normal, vLightVec.xyz, lightDir);
- #endif
- #ifdef SHADOW
- #if defined(DIRLIGHT)
- vec4 shadowPos = GetDirShadowPos(vShadowPos, vLightVec.w);
- diff *= min(GetShadow(shadowPos) + GetShadowFade(vLightVec.w), 1.0);
- #elif defined(SPOTLIGHT)
- diff *= GetShadow(vShadowPos);
- #else
- diff *= GetCubeShadow(vShadowPos);
- #endif
- #endif
- #if defined(SPOTLIGHT)
- lightColor = vSpotPos.w > 0.0 ? texture2DProj(sLightSpotMap, vSpotPos).rgb * cLightColor.rgb : vec3(0.0, 0.0, 0.0);
- #elif defined(CUBEMASK)
- lightColor = textureCube(sLightCubeMap, vCubeMaskVec).rgb * cLightColor.rgb;
- #else
- lightColor = cLightColor.rgb;
- #endif
- #ifdef SPECULAR
- #ifdef SPECMAP
- vec3 specColor = cMatSpecColor.rgb * texture2D(sSpecMap, vTexCoord).g;
- #else
- vec3 specColor = cMatSpecColor.rgb;
- #endif
- float spec = GetSpecular(normal, vEyeVec, lightDir, cMatSpecColor.a);
- finalColor = diff * lightColor * (diffColor.rgb + spec * specColor * cLightColor.a);
- #else
- finalColor = diff * lightColor * diffColor.rgb;
- #endif
- #ifdef AMBIENT
- finalColor += cAmbientColor * diffColor.rgb;
- gl_FragColor = vec4(GetFog(finalColor, vLightVec.w), diffColor.a);
- #else
- gl_FragColor = vec4(GetLitFog(finalColor, vLightVec.w), diffColor.a);
- #endif
- }
|