5 uniform sampler2D tex0; // 1D distance
6 uniform sampler2D tex1; // background
7 uniform vec2 lightTexSize;
8 uniform vec2 mapPixSize;
12 #define SOFT_SHADOWS (1.0f)
15 // sample from the 1D distance map
16 //float sample (in vec2 coord, in float r) { return step(r, texture2D(tex0, coord).r); }
17 #define sample(cc_) step(r, texture2D(tex0, vec2(tc.x+(cc_)*blur, tc.y)).r)
21 vec2 vTexCoord0 = gl_TexCoord[0].xy;
22 //vec2 btxy = gl_FragCoord.xy/(100.0*8.0);
23 vec2 btxy = gl_FragCoord.xy/mapPixSize;
24 float ltsxi = 1.0/lightTexSize.x;
26 // rectangular to polar
27 vec2 norm = vTexCoord0.st*2.0-1.0;
28 float theta = atan(norm.y, norm.x);
29 float r = length(norm);
30 float coord = (theta+PI)/(2.0*PI);
32 // the tex0 coord to sample our 1D lookup texture
33 // always 0.0 on y axis
34 vec2 tc = vec2(coord, 0.0);
36 // the center tex0 coord, which gives us hard shadows
37 float center = step(r, texture2D(tex0, tc.xy).r); //sample(vec2(tc.x, tc.y), r);
39 // now we use a simple gaussian blur
41 // we multiply the blur amount by our distance from center
42 // this leads to more blurriness as the shadow "fades away"
43 float blur = ltsxi*smoothstep(0.0, 1.0, r);
46 float sum = sample(vec2(tc.x-4.0*blur, tc.y), r)*0.05;
47 sum += sample(vec2(tc.x-3.0*blur, tc.y), r)*0.09;
48 sum += sample(vec2(tc.x-2.0*blur, tc.y), r)*0.12;
49 sum += sample(vec2(tc.x-1.0*blur, tc.y), r)*0.15;
51 sum += sample(vec2(tc.x+1.0*blur, tc.y), r)*0.15;
52 sum += sample(vec2(tc.x+2.0*blur, tc.y), r)*0.12;
53 sum += sample(vec2(tc.x+3.0*blur, tc.y), r)*0.09;
54 sum += sample(vec2(tc.x+4.0*blur, tc.y), r)*0.05;
56 float sum = sample(-4.0)*0.05;
57 sum += sample(-3.0)*0.09;
58 sum += sample(-2.0)*0.12;
59 sum += sample(-1.0)*0.15;
61 sum += sample( 1.0)*0.15;
62 sum += sample( 2.0)*0.12;
63 sum += sample( 3.0)*0.09;
64 sum += sample( 4.0)*0.05;
66 // sum of 1.0 -> in light, 0.0 -> in shadow
67 float lit = mix(center, sum, SOFT_SHADOWS);
73 // multiply the summed amount by our distance, which gives us a radial falloff
74 // then multiply by vertex (light) color
76 //vec4 color = gl_Color*vec4(vec3(1.0), lit*smoothstep(1.0, 0.0, r));
77 lit = lit*smoothstep(1.0, 0.0, r);
78 vec4 bcolor = texture2D(tex1, btxy);
79 if (bcolor.a == 0.0) bcolor = vec4(0.0, 0.0, 0.0, 1.0);
81 if (gl_Color.a == 0.0) {
82 color = bcolor*vec4(vec3(1.0), lit);
85 //vec4 color = bcolor*vec4(vec3(1.0), lit);
86 //vec4 color = bcolor*vec4(vec3(1.0), lit);
87 //color += gl_Color*vec4(vec3(1.0), lit);
90 //color *= gl_Color*vec4(vec3(1.0), lit);
91 //color += bcolor*vec4(vec3(1.0), lit);
94 vec4 ltv = vec4(vec3(1.0), lit);
99 color = mix(color, bcolor, lit);
107 color = mix(bcolor, color, lit);
113 gl_FragColor = color;
114 //float intens = (0.2125*color.x)+(0.7154*color.y)+(0.0721*color.z);
115 //gl_FragColor = vec4(intens, intens, intens, color.w);
116 //gl_FragColor = color;