🛸 Neon-Tunnel
Fliege endlos durch einen leuchtenden Neon-Tunnel — ein GPU-Fragment-Shader nutzt polares Tunnel-Mapping, um pulsierende Neon-Ringe und -Streifen mit einer farbwechselnden Kosinus-Palette zu erzeugen.
Über diese Simulation
Neon-Tunnel rendert einen endlosen Lichtkorridor vollständig innerhalb eines einzigen GLSL-Fragment-Shaders, der auf der GPU läuft. Es gibt keine 3D-Geometrie — nur ein bildschirmfüllendes Quad, dessen jeder Pixel durch eine Formel des polaren Tunnel-Mappings eingefärbt wird: der Winkel und der inverse Radius des Pixels definieren einen 2D-Tunnelraum, und eine Tiefenkoordinate t = 1/r + Zeit × Geschwindigkeit treibt die Illusion des Vorwärtsflugs an. Periodische Ring- und Streifenmuster, die auf diesen Raum gelegt werden, erzeugen zusammen mit einer Kosinus-Farbpalette das pulsierende Neon-Gitter, das du siehst. Dies ist reine generative Kunst: vollständig prozedural, ohne Texturen, ohne Meshes.
🔬 Was es zeigt
Die Simulation demonstriert Tunnel-Mapping mit Polarkoordinaten — eine klassische Fragment-Shader-Technik. In jedem Bild wandelt der Shader Bildschirm-UV-Koordinaten in Polarform um, wendet die Tiefentransformation t = 1/r an, um einen perspektivisch korrekten Fluchtpunkt zu erzeugen, und zeichnet dann Ringe (periodisch in t) und radiale Streifen (periodisch im Winkel), um das Neon-Gitter zu bilden. Ein Glühen im Zentrum und eine Randvignette fügen räumliche Tiefe hinzu, ganz ohne echtes 3D-Rendering.
🎮 Bedienung
Nutze Flug-Geschwindigkeit, um zu steuern, wie schnell du durch den Tunnel fliegst (0,1 – 4,0). Twist-Betrag verdreht die Korridorwände spiralförmig — probiere Werte über 1,5 für einen Korkenzieher-Effekt. Ringdichte legt fest, wie viele Neon-Streifen den Tunnelumfang unterteilen (2 – 24). Farbzyklus-Geschwindigkeit ändert, wie schnell die Kosinus-Palette durch die Farbtöne rotiert. Wechsle zwischen den drei Paletten (Neon Pink-Cyan, Green Matrix, Sunset) und drücke Boost für einen 2,5-fachen Geschwindigkeitsschub, der 1,2 Sekunden anhält.
💡 Wusstest du schon?
Die Formel der Kosinus-Farbpalette — Farbe = a + b·cos(2π(c·t + d)) — wurde von Inigo Quilez populär gemacht und kann praktisch jeden weichen Farbverlauf mit nur vier 3-komponentigen Vektoren darstellen. Indem die Phase der Palette langsam mit der Zeit fortschreitet (der Farbzyklus-Geschwindigkeit-Regler), verschiebt sich der gesamte Tunnel kontinuierlich durch das Spektrum — eine Technik, die häufig in Demoscene-Produktionen und Live-Coding-Visuals verwendet wird.
Häufig gestellte Fragen
Wie erzeugt polares Tunnel-Mapping eigentlich die Illusion von 3D-Tiefe?
Der Trick ist die inverse Radius-Transformation: t = 1/r bildet den Bildschirm so ab, dass Werte nahe der Mitte (kleines r) sehr große t-Werte ergeben, was große Tiefe simuliert, während Werte am Rand (großes r) kleine t-Werte ergeben, was die nahe Wand simuliert. Das gleichmäßige Fortschreiten von t mit der Zeit lässt alle Tiefenebenen gleichzeitig auf den Betrachter zu scrollen, was eine überzeugende Vorwärtsflug-Perspektive erzeugt — ganz ohne Kamera, Matrizen oder jegliche Geometrie.
Was ist eine Kosinus-Farbpalette und warum wirkt sie so weich?
Eine Kosinus-Palette erzeugt Farbe, indem sie a + b · cos(2π(c · t + d)) pro Farbkanal auswertet, wobei a, b, c, d vec3-Konstanten sind. Da der Kosinus stetig und zwischen −1 und 1 beschränkt ist, ergibt sich immer eine weiche, zyklische Farbkurve ohne abrupte Sprünge. Die drei eingebauten Paletten unterscheiden sich nur in ihren vier Konstantenvektoren: Neon Pink-Cyan nutzt gleiche Amplituden für einen psychedelischen Regenbogen, Green Matrix verschiebt die Amplitude Richtung Grün, und Sunset neigt zu warmen Rot- und Orangetönen.
Was verändert der Twist-Regler eigentlich im Shader?
Twist fügt dem Polarwinkel eine tiefenabhängige Rotation hinzu: a = Winkel + t × twist. Da t wächst, je näher man der Mitte kommt, werden tiefere Teile des Tunnels stärker gedreht als flachere Teile, wodurch die Gitterlinien spiralförmig statt gerade verlaufen. Bei twist = 0 sind die Streifen perfekt radial; bei twist ≈ 1,5 bilden sie eine sanfte Helix; jenseits von 2,5 wird der Korridor zu einer engen Korkenzieherform, die bei hoher Geschwindigkeit ziemlich desorientierend sein kann.
Warum gibt es einen kurzen Geschwindigkeitsschub, wenn ich auf Boost klicke?
Die Boost-Schaltfläche setzt die Fluggeschwindigkeit vorübergehend auf das 2,5-fache des aktuellen Reglerwerts (gedeckelt bei 10) für genau 1,2 Sekunden und stellt dann die ursprüngliche Geschwindigkeit wieder her. Es handelt sich um ein einfaches setTimeout in der JavaScript-Steuerungsebene — die Shader-Uniform uSpeed wird jeden Frame direkt geschrieben, es gibt also kein Easing oder Interpolieren; Anstieg und Rückkehr erfolgen sofort. Wenn du eine anhaltend hohe Geschwindigkeit möchtest, ziehe einfach den Flug-Geschwindigkeit-Regler nach oben.
Verwendet diese Simulation WebGL, Three.js oder rohes Canvas?
Sie verwendet Three.js als dünnen WebGL-Wrapper. Three.js übernimmt die Kontexterzeugung, ein bildschirmfüllendes PlaneGeometry-Quad und das ShaderMaterial, das die benutzerdefinierten GLSL-Vertex- und Fragment-Shader hostet. Der Vertex-Shader ist trivial (er gibt lediglich Clip-Space-Positionen durch); die gesamte visuelle Logik steckt im Fragment-Shader. Es sind keine Three.js-Geometrien, Lichter oder Post-Processing-Durchläufe beteiligt — Three.js wird rein der Bequemlichkeit halber genutzt, um die WebGL-Canvas und Uniforms zu verwalten.
Fliege endlos durch einen leuchtenden Neon-Tunnel aus pulsierenden Ringen. Fragment-Shader mit polarem Tunnel-Mapping.
3D · Three.js / WebGL-Renderer · 60 FPS Ziel · läuft vollständig clientseitig, keine Installation nötig