```glsl precision mediump float; uniform float u_time; uniform vec2 u_mouse; uniform vec2 u_resolution; varying vec2 v_uv; float sdfTunnel(vec3 p) { float t = atan(p.x, p.z); float r = length(p.xz); return abs(r - 2.0 + 0.5 * sin(t * 8.0 + u_time * 2.0)); } vec3 getColor(float t) { return 0.5 + 0.5 * cos(t + vec3(0.0, 2.0, 4.0)); } void main() { vec2 uv = (v_uv - 0.5) * vec2(u_resolution.y / u_resolution.x, 1.0); vec3 ro = vec3(0.0, 0.0, -4.0); vec3 rd = normalize(vec3(uv, 1.0)); float totalDist = 0.0; for (int i = 0; i < 100; i++) { vec3 p = ro + rd * totalDist; float dist = sdfTunnel(p); totalDist += dist; if (dist < 0.001 || totalDist > 10.0) break; } vec3 col = getColor(totalDist * 0.1); float mouseDist = distance(u_mouse, v_uv); col *= 1.0 + 0.5 * mouseDist; gl_FragColor = vec4(col, 1.0); #include <colorspace_fragment> } ```