#ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif varying vec2 v_TexCoords; varying vec3 v_Normal; varying vec3 v_ScreenCoords; varying vec2 v_ScreenTexCoords; uniform sampler2D maskTex; uniform float u_Alpha; uniform float u_Time; uniform float lightU; uniform float lightV; void main() { //init variables vec2 screenUV = v_ScreenCoords.xy/v_ScreenCoords.z*.5+.5; float alpha = texture2D( maskTex, v_TexCoords ).r; vec3 lightDir = normalize( vec3(-1, 0.015, 0.65) ); vec3 lightDir2 = normalize( vec3(1, -0.2, 0.1) ); float rim = clamp(dot(v_Normal, lightDir), 0.0, 1.0) * 0.8 + // left clamp(dot(v_Normal, lightDir2), 0.0, 1.0); // right rim = pow(rim, 3.0);// - pow(rim, 25.0); vec2 uvDiff = vec2(lightU, lightV) - screenUV; uvDiff.y *= 1.7; //fix aspect ratio uvDiff *= 1.5; //scale smaller float falloff = clamp( 1.-sqrt(uvDiff.x*uvDiff.x+uvDiff.y*uvDiff.y ), 0., 1. ) * alpha * rim * u_Alpha; // falloff = alpha * rim * u_Alpha * 0.75; gl_FragColor = vec4( falloff ); // gl_FragColor = vec4( vec3(alpha), 1.0 ); }