12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #version 120
- uniform sampler2D colourMap;
- uniform sampler2D normalMap;
- uniform sampler2D reflectMap;
- uniform sampler2D specularMap;
- uniform vec3 lightPosition = vec3(0.0);
- uniform vec3 lightColour = vec3(0.6, 0.6, 0.6);
- uniform float lightPower = 0.6;
- uniform vec4 lightSpecColour = vec4(0.6, 0.6, 0.6, 1.0);
- uniform float lightSpecPower = 0.08;
- uniform vec2 reflectOffset;
-
- uniform vec2 resolution = vec2(60.0, 102.0);
- uniform bool invertBumpY = true;
- void main()
- {
-
- vec2 coord = gl_TexCoord[0].xy;
- vec4 diffuseColour = texture2D(colourMap, coord);
- vec3 normalColour = texture2D(normalMap, coord).rgb;
-
-
- normalColour.g = invertBumpY ? 1.0 - normalColour.g : normalColour.g;
- vec3 normal = normalize(normalColour * 2.0 - 1.0);
-
-
- float blendVal = texture2D(normalMap, coord).a;
- coord = mod(reflectOffset, resolution) / resolution;
- coord.y = 1.0 - coord.y;
- vec3 reflectColour = texture2D(reflectMap, coord + (normal.rg * 2.0)).rgb;
- diffuseColour.rgb = mix(diffuseColour.rgb, reflectColour, blendVal);
-
-
- vec3 lightDir = vec3((lightPosition.xy - gl_FragCoord.xy) / resolution, lightPosition.z);
-
-
- float colourIntensity = max(dot(normal, normalize(lightDir)), 0.0);
- vec4 specular = vec4(0.0);
- vec4 diffuse = vec4(0.0);
- if(colourIntensity > 0.0)
- {
-
- vec3 halfVec = normalize(lightDir + vec3(0.5, 0.5, 0.5));
-
- vec4 specColour = vec4(texture2D(specularMap, gl_TexCoord[0].xy).rgb, 1.0);
- float specModifier = max(dot(normal, halfVec), 0.0);
- specular = pow(specModifier, lightSpecPower) * specColour * lightSpecColour;
- specular.a *= diffuseColour.a;
- diffuse = lightSpecColour * diffuseColour * colourIntensity;
- }
-
-
- diffuseColour.rgb += ((lightColour * lightPower) * colourIntensity);
- diffuseColour.rgb *= diffuseColour.rgb;
-
-
- gl_FragColor = clamp(specular + diffuse + diffuseColour, 0.0, 1.0);
- }
|