frag = `
precision mediump float;
uniform sampler2D image;
uniform float progress;
varying vec2 uv;
void main() {
float distance = length(uv - vec2(0.5));
float maxDistance = length(vec2(0.5));
float normalizedDistance = distance / maxDistance;
float stickTo = normalizedDistance;
float stickProgress = min(2.*progress, 2.*(1. - progress));
float zProgress = clamp(.5*progress, 0.,1.);
gl_FragColor = mix(texture2D(image, uv), vec4(0.,0.,0.,1.), 2.*stickTo * stickProgress - zProgress);
}
`