export declare const vertexShader = "\n varying vec2 vUv;\n varying vec3 vPos;\n\n void main() {\n vUv = uv;\n vPos = position;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n }\n"; export declare const fragmentShader = "\n varying vec2 vUv;\n varying vec3 vPos;\n\n uniform sampler2D uTexture;\n uniform float uTime;\n\n void main() {\n float time = uTime * 0.5;\n vec2 repeat = -vec2(12., 3.);\n // To repeat the uvs we need to multiply them by a scalar\n // and then get the fractional part of it so they from 0 to 1\n // To move them continuously we have to add time\n // to the x or y component, to change the direction\n vec2 uv = fract(vUv * repeat - vec2(time, 0.)); // The sign of time change direction of movement\n\n // Fake shadow \u2014 vPos is object-space; large parts of the knot can have vPos.z <= 0,\n // so clamp(vPos.z/5,0,1) is often 0 and the whole surface reads as black (no GL error).\n float shadow = max(0.2, clamp(vPos.z / 5., 0., 1.));\n\n vec3 texture = texture2D(uTexture, uv).rgb;\n // texture *= vec3(uv.x, uv.y, 1.); // To help visualize the repeated uvs\n\n gl_FragColor = vec4(texture * shadow, 1.);\n }\n";