varying vec2 uv; uniform sampler2D texture; uniform float age, time; varying vec3 n, v, norm; vec3 rangeUnpack(float t) { vec3 r; r.x = abs(mod(t + 0.33333,1.0) - 0.5) / 0.5; r.y = abs(mod(t + 0.66666,1.0) - 0.5) / 0.5; r.z = abs(mod(t + 1.0,1.0) - 0.5) / 0.5; return r; } void main() { vec3 sample = texture2D(texture,uv).rgb; sample = sample * rangeUnpack(mod(age * 15.0, 1.0)); float alpha = max(sample.x + sample.y + sample.z - 0.7, 0.0); alpha *= max(dot(normalize(norm), normalize(-v)), 0.0) * (1.0 - abs(n.y)) * (1.0 - age); alpha *= 20.0; if(alpha <= 0.0) discard; gl_FragColor.rgb = alpha * vec3(1.0, 0.7, 0.2); gl_FragColor.a = 1.0; }