11
varying vec2 vTextureCoord;
14
uniform vec3 depthInfo;
15
float ConvertDepth3(float d) { return (depthInfo.x*depthInfo.y)/(depthInfo.y-d*(depthInfo.y-depthInfo.x)); }
16
// transform range in world-z to 0-1 for near-far
17
float DepthRange( float d ) { return ( d - depthInfo.x ) / ( depthInfo.y - depthInfo.x ); }
21
uniform sampler2D colorMap;
26
uniform sampler2D bumpMap;
31
uniform sampler2D envSphereMap;
32
uniform float envAmount;
36
varying vec2 vEnvTextureCoord;
41
uniform sampler2D reflectMap;
45
uniform sampler2D normalMap;
51
uniform sampler2D ambientMap;
55
uniform sampler2D specularMap;
59
uniform sampler2D alphaMap;
62
#if lightPoint||lightDirectional||lightSpot||lightArea
71
uniform Light lights[loopCount];
72
varying vec3 lightDir[loopCount];
79
#if lightPoint||lightSpot
80
varying vec3 lightPos[loopCount];
86
varying vec4 vPosition;
88
uniform mat4 uPMatrix;
93
vec4 color = vec4(0.0,0.0,0.0,0.0);
96
float height = texture2D(bumpMap, vTextureCoord.xy).r;
97
float v = (height) * 0.05 - 0.04; // * scale and - bias
98
vec3 eye = normalize(eyeVec);
99
vec2 texCoord = vTextureCoord.xy + (eye.xy * v);
101
#if hasColorMap||hasBumpMap||hasNormalMap||hasAmbientMap||hasSpecularMap||hasAlphaMap
102
vec2 texCoord = vTextureCoord;
108
vec3 bumpNorm = vec3(texture2D(normalMap, texCoord));
110
n = (vec4(normalize(vNormal),1.0)).xyz;
111
bumpNorm = (bumpNorm-0.5)*2.0;
112
bumpNorm.y = -bumpNorm.y;
113
n = normalize((n+bumpNorm)/2.0);
115
n = normalize(vNormal);
120
#if !(lightPoint||lightDirectional||lightSpot||lightArea)
121
color = texture2D(colorMap, vec2(texCoord.s, texCoord.t)).rgba;
124
color = texture2D(colorMap, vec2(texCoord.s, texCoord.t)).rgba;
127
if (color.a<=0.9) discard;
129
color = vec4(mColor,1.0);
133
color.a = texture2D(alphaMap, texCoord).r;
134
if (color.a==0.0) discard;
142
//float envAmount = 1.0;
155
vec3 specTotal = vec3(0.0,0.0,0.0);
157
for (int i = 0; i < loopCount; i++) {
159
halfVector = normalize(vec3(0.0,0.0,1.0)+lightDir[i]);
161
dist = length(lightPos[i]-vPosition.xyz);
163
NdotL = max(dot(normalize(lightDir[i]),n),0.0);
167
att = clamp(((lights[i].lDist-dist)/lights[i].lDist), 0.0, 1.0)*lights[i].lInt;
169
accum += att * NdotL * lights[i].lDiff * mDiff;
171
NdotHV = max(dot(n, halfVector),0.0);
175
vec3 spec2 = lights[i].lSpec * texture2D(specularMap, vec2(texCoord.s, texCoord.t)).rgb * pow(NdotHV,mShine);
177
vec3 spec2 = lights[i].lSpec * mSpec * pow(NdotHV,mShine);
186
color.rgb += specTotal;
195
vec3 specTotal = vec3(0.0,0.0,0.0);
196
vec3 spec2 = vec3(0.0,0.0,0.0);
200
for (int i = 0; i < loopCount; i++) {
202
halfVector = normalize(vec3(0.0,0.0,1.0)-lightDir[i]);
204
NdotL = max(dot(normalize(-lightDir[i]),n),0.0);
207
accum += lights[i].lInt * mDiff * lights[i].lDiff * NdotL;
209
NdotHV = max(dot(n, halfVector),0.0);
212
spec2 = lights[i].lSpec * texture2D(specularMap, vec2(texCoord.s, texCoord.t)).rgb * pow(NdotHV,mShine);
214
spec2 = lights[i].lSpec * mSpec * pow(NdotHV,mShine);
222
color.rgb += specTotal;
227
float environmentAmount = texture2D( reflectMap, texCoord).r;
232
vec3 r = reflect( u, n );
233
float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + (r.z+1.0)*(r.z+1.0) );
236
coord.s = r.x/m + 0.5;
237
coord.t = r.y/m + 0.5;
240
color.rgb += mColor*accum*texture2D( envSphereMap, coord.st).rgb * environmentAmount;
242
color.rgb += mColor*accum*texture2D( envSphereMap, coord.st).rgb * envAmount;
247
color.rgb += mColor*accum*texture2D( envSphereMap, vEnvTextureCoord).rgb * environmentAmount;
249
color.rgb += mColor*accum*texture2D( envSphereMap, vEnvTextureCoord).rgb*envAmount;
258
#if lightPoint||lightDirectional||lightSpot||lightArea
259
color.rgb += texture2D(ambientMap, texCoord).rgb*(vec3(1.0,1.0,1.0)+mColor*mAmb);
261
color.rgb = color.rgb*texture2D(ambientMap, texCoord).rgb;
265
color.rgb += mColor*mAmb;
267
color.rgb += mAmb*texture2D(colorMap, texCoord).rgb;
274
float linear_depth = DepthRange( ConvertDepth3( gl_FragCoord.z ));
276
color.a = linear_depth;
280
gl_FragColor = clamp(color,0.0,1.0);
b'\\ No newline at end of file'