# 3d retro graphics > 3d retro graphics is a free library of browser experiments. Each copies as a single HTML file (WebGL 1 or Canvas 2D) and is licensed CC0 1.0. Copy a demo, drop it on a page. Old workstation tricks, WebGL 1 or a 2D canvas. Licensed CC0. License: CC0 1.0. You can copy, modify, and ship the experiments commercially with no attribution. If WebGL is missing, a demo writes a message on the canvas. By default a demo holds a still frame under prefers-reduced-motion; "#motion=play" on a standalone file's URL animates it anyway and "#motion=still" holds a frame regardless. About: https://3d-retro.com/about Contact: mail@3d-retro.com ## How to fetch GET https://3d-retro.com/api/v1/experiments GET https://3d-retro.com/api/v1/experiments/{slug} (includes the full HTML string) GET https://3d-retro.com/examples/{slug}.html (standalone file) Accept: application/json on the API. CORS is open. ## Retro techniques Recreations of documented techniques and period looks. Each page names its reference, or says plainly that it is an interpretation of a style rather than a copy of one original. ### 01 Plasma Era: PC demoscene · early 1990s Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/plasma Source: https://3d-retro.com/examples/plasma.html API: https://3d-retro.com/api/v1/experiments/plasma APIs: WebGL 1, GLSL ES 1.0, requestAnimationFrame, matchMedia Tags: shader, demoscene The classic PC demoscene plasma: a sum of sine fields in the plane, sampled through a cycling palette. The 1990s versions added precomputed sine tables and drew through a 256-colour palette because a 386 could not afford a sine per pixel. This one is a modern reading of the look: a single WebGL 1 fragment shader evaluates about nine sines per pixel. Two triangles, a time uniform, no textures. Drop the file on a page and it fills the window. ### 02 Retro 3d starfield Era: Screensaver and demo staple · c. 1992 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/starfield Source: https://3d-retro.com/examples/starfield.html API: https://3d-retro.com/api/v1/experiments/starfield APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: canvas, particles 700 points in a unit cube, projected with a 1/z divide. Depth is decremented each frame; when a star passes the camera it is recycled at the far plane. Motion blur is a cheap trail fade on the 2D canvas. The look is the one every 1990s screensaver and demo intro had, Windows 3.1's Starfield Simulation included; no single original is reproduced. Move the pointer to shift the vanishing point. Interaction: Move the pointer over the preview to shift the vanishing point. ### 03 Retro torus Era: Flat-shaded workstation demo · c. 1990 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/lowpoly Source: https://3d-retro.com/examples/lowpoly.html API: https://3d-retro.com/api/v1/experiments/lowpoly APIs: WebGL 1, GLSL ES 1.0, Pointer Events, requestAnimationFrame, matchMedia Tags: webgl, 3d A torus tessellated into chunky triangles with per-face normals, lit by a mint key and a cool fill, over a ground grid. Edges are drawn as a second line pass. It is the flat-shaded, gridded-floor look of early 1990s graphics-workstation demos in general, not a port of any one demo reel. Matrix math is inline, no three.js. Drag to orbit. It auto-rotates until you take over. Interaction: Drag on the preview to orbit. Auto-rotation stops after the first drag. ### 04 Chrome blobs Era: Blinn · 1982 Reference: J. F. Blinn, "A Generalization of Algebraic Surface Drawing", ACM Transactions on Graphics 1(3), 1982 (https://doi.org/10.1145/357306.357310) Page: https://3d-retro.com/experiments/metaballs Source: https://3d-retro.com/examples/metaballs.html API: https://3d-retro.com/api/v1/experiments/metaballs APIs: WebGL 1, GLSL ES 1.0, requestAnimationFrame, matchMedia Tags: shader, raymarch Three spheres blended with a polynomial smooth-min, raymarched in the fragment shader. Normals come from the gradient of the field. Metaballs are Jim Blinn's 1982 blobby surfaces; the chrome finish is the 1990s demo treatment of them: a fake studio HDR of a horizon gradient plus two specular lights sampled along the reflected ray, with a Fresnel mix, and no cubemap. ### 05 Reflective spheres Era: Whitted · 1980 Reference: T. Whitted, "An Improved Illumination Model for Shaded Display", Communications of the ACM 23(6), 1980 (https://doi.org/10.1145/358876.358882) Page: https://3d-retro.com/experiments/raytracer Source: https://3d-retro.com/examples/raytracer.html API: https://3d-retro.com/api/v1/experiments/raytracer APIs: WebGL 1, GLSL ES 1.0, requestAnimationFrame, matchMedia Tags: shader, raytrace Each pixel shoots a primary ray, intersects a plane and three spheres, then follows reflections for two extra bounces. Shadows are shadow rays toward a point light. The chrome ball is almost pure metal. The red and mint balls mix diffuse with a little reflection. The whole scene is one GLSL fragment shader. ### 06 ASCII torus Era: donut.c · 2006 Reference: Andy Sloane, "Have a donut", a1k0n.net, 2006 (https://www.a1k0n.net/2006/09/15/obfuscated-c-donut.html) Page: https://3d-retro.com/experiments/ascii Source: https://3d-retro.com/examples/ascii.html API: https://3d-retro.com/api/v1/experiments/ascii APIs: Canvas 2D, requestAnimationFrame, matchMedia Tags: ascii, canvas Andy Sloane's donut.c, drawn on a 2D canvas instead of stdout. Two nested angle loops sample a torus, project with a 1/z perspective divide, and keep a per-cell z-buffer. Lighting is a simple Lambert term mapped onto .:-=+*#%@. Phosphor green on charcoal. ### 07 Wireframe globe Era: Wireframe sphere · vector-display era Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/globe Source: https://3d-retro.com/examples/globe.html API: https://3d-retro.com/api/v1/experiments/globe APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: wireframe, 3d A UV sphere as meridians and parallels, projected with a 1/z divide. Near edges are brighter than the far side, so the globe reads in depth without hidden-line removal. The equator and prime meridian are a touch hotter. It is the generic spinning wire globe of vector displays and early workstation demos, not a specific program. Drag to orbit. It keeps a slow auto-spin until you take over. Interaction: Drag on the preview to spin the globe. Auto-rotation stops after the first drag. ### 08 Fluid tank Era: Stam · 1999 Reference: J. Stam, "Stable Fluids", SIGGRAPH 1999; the solver follows his GDC 2003 paper "Real-Time Fluid Dynamics for Games" (https://doi.org/10.1145/311535.311548) Page: https://3d-retro.com/experiments/fluid Source: https://3d-retro.com/examples/fluid.html API: https://3d-retro.com/api/v1/experiments/fluid APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: sim, fluid Jos Stam's stable fluids on a 48x48 grid: diffuse, project (Jacobi pressure), advect. Density is a phosphor dye; velocity is splatted along the pointer stroke. An ambient vortex keeps the tank moving when nobody is stirring. The solver is the textbook Game Developer Conference version. Interaction: Move or drag on the preview to stir the dye. A slow vortex keeps it in motion on its own. ### 09 Flow field Era: Particle flow field · interpretation Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/flow Source: https://3d-retro.com/examples/flow.html API: https://3d-retro.com/api/v1/experiments/flow APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: particles, field Each particle integrates a procedural vector field: sines for the ambient flow, plus a moving singularity that acts as a slow cyclone. The pointer adds a second vortex wherever it sits. Trails are a cheap canvas fade. Flow-field particles are a generic generative-art idiom with no single origin; nothing historical is claimed. Interaction: Move the pointer over the preview to twist the field into a vortex. ### 10 Verlet fabric Era: Jakobsen · 2001 Reference: T. Jakobsen, "Advanced Character Physics", Game Developers Conference 2001 (https://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/Jakobsen.pdf) Page: https://3d-retro.com/experiments/fabric Source: https://3d-retro.com/examples/fabric.html API: https://3d-retro.com/api/v1/experiments/fabric APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: sim, cloth Thomas Jakobsen's Verlet cloth: a grid of points, distance constraints, gravity. Two corners are pinned. A slow sine is the wind. Drag any point and the rest of the mesh follows. Interaction: Drag a point on the cloth to tug it. ### 11 Wireframe terrain Era: Vector CRT look · c. 1980 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/terrain Source: https://3d-retro.com/examples/terrain.html API: https://3d-retro.com/api/v1/experiments/terrain APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: wireframe, 3d A height field of summed sines, projected with a 1/z divide, stroked as a mesh that recedes into phosphor fog. The camera flies forward. Move the pointer to yaw. It evokes vector-monitor games such as Atari's Battlezone (1980) and the wireframe flight simulators of the early 1980s; those drew objects and horizons rather than a full mesh terrain, so this is a look, not a port. Interaction: Move the pointer left or right to steer. ### 12 Wolfenstein raycaster Era: id Software · 1992 Reference: id Software, Wolfenstein 3D, 1992 (source released 1995); the per-column DDA raycast as described by Lode Vandevenne (https://lodev.org/cgtutor/raycasting.html) Page: https://3d-retro.com/experiments/wolfenstein Source: https://3d-retro.com/examples/wolfenstein.html API: https://3d-retro.com/api/v1/experiments/wolfenstein APIs: Canvas 2D, Keyboard Events, Pointer Events, requestAnimationFrame, matchMedia Tags: raycast, 3d Wolfenstein 3D's 2.5D engine: for each column, a ray steps a grid with DDA until it hits a wall, then a vertical strip is drawn at 1/distance. No polygons. Ceiling and floor are flats. A tiny map sits in the corner. It patrols the maze until you take over. Interaction: Click the preview first so it has keyboard focus. WASD or arrows to walk, A/D strafe, arrow keys turn. Move the pointer to glance; drag to turn. Walking follows the view. ### 13 Voxel Space Era: NovaLogic · 1992 Reference: NovaLogic, Comanche: Maximum Overkill, 1992; the Voxel Space column renderer as documented by Sebastian Macke (https://github.com/s-macke/VoxelSpace) Page: https://3d-retro.com/experiments/voxel Source: https://3d-retro.com/examples/voxel.html API: https://3d-retro.com/api/v1/experiments/voxel APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: voxel, 3d NovaLogic's Voxel Space: each screen column walks a height map, drawing a vertical strip whenever the terrain rises above what is already filled. Color comes from height and a cheap slope light. No polygons. The camera flies forward. Move the pointer to yaw. Interaction: Move the pointer left or right to steer. ### 14 Mode 7 floor Era: Super Famicom · 1990 Reference: Nintendo Super Famicom background Mode 7, 1990, as used for F-Zero's track (https://en.wikipedia.org/wiki/Mode_7) Page: https://3d-retro.com/experiments/mode7 Source: https://3d-retro.com/examples/mode7.html API: https://3d-retro.com/api/v1/experiments/mode7 APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: mode7, 3d For each scanline below the horizon, a distance is recovered from camera height and the line is a slice of a 2D texture. That is the SNES's Mode 7: no mesh, just a perspective divide on Y. The pylons are scaled billboards in the Space Harrier manner rather than anything Mode 7 did itself. Move the pointer to yaw. Interaction: Move the pointer left or right to steer. ### 15 PS1 affine warp Era: PlayStation · 1994 Reference: Sony PlayStation (1994): the GTE's integer vertex output and the GPU's affine, screen-space texture mapping (https://en.wikipedia.org/wiki/PlayStation_technical_specifications) Page: https://3d-retro.com/experiments/ps1 Source: https://3d-retro.com/examples/ps1.html API: https://3d-retro.com/api/v1/experiments/ps1 APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: raster, 3d The PlayStation's GPU interpolated texture coordinates in screen space, not 1/z, so large triangles swim, and its GTE handed over integer vertex positions, so edges wobble. This rasterizer does both on a 320-wide buffer. The floor is split into small cells because, like the original, it has no near-plane clipping: a triangle that reaches behind the eye is dropped whole. Drag to orbit. Auto-rotation stops after the first drag. Interaction: Drag on the preview to orbit. Auto-rotation stops after the first drag. ### 16 I, Robot polygons Era: Atari · 1984 Reference: Atari, I, Robot (arcade, 1984), the first arcade game with filled 3D polygons (https://en.wikipedia.org/wiki/I,_Robot_(video_game)) Page: https://3d-retro.com/experiments/irobot Source: https://3d-retro.com/examples/irobot.html API: https://3d-retro.com/api/v1/experiments/irobot APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: polygon, 3d I, Robot was the first arcade game to fill polygons in real time. Faces are sorted back-to-front and painted. No z-buffer, no textures: a platform of blocks and pyramids in primary colours on black, seen from above the way the cabinet framed it. The scene is an homage to the game's look, not a level from it. Drag to orbit. It keeps a slow auto-spin until you take over. Interaction: Drag on the preview to orbit. Auto-rotation stops after the first drag. ### 17 Utah teapot Era: Newell · 1975 Reference: M. Newell's teapot data set, University of Utah, 1975, as archived at cs.utah.edu/~natevm/newell_teaset and described in F. Crow, "The Origins of the Teapot", IEEE CG&A 7(1), 1987 (https://www.cs.utah.edu/~natevm/newell_teaset/newell_teaset.zip) Page: https://3d-retro.com/experiments/teapot Source: https://3d-retro.com/examples/teapot.html API: https://3d-retro.com/api/v1/experiments/teapot APIs: WebGL 1, GLSL ES 1.0, Pointer Events, requestAnimationFrame, matchMedia Tags: webgl, 3d Martin Newell's 1975 teapot, built from his original 306 control points and 32 bicubic Bézier patches rather than approximated. The patches are evaluated in JavaScript at load, with analytic normals, in Newell's own proportions (the 4/3 vertical squash some renderers apply is not used). Lighting is per-pixel Phong with two point lights that sit in the scene as little orbs. Move the pointer: the key light follows, the fill stays opposite. Ceramic, lamp, and fill colours are on the tweak row. Interaction: Move the pointer to drag the two lights around the teapot. ### 18 Dot/square tunnel Era: Dot tunnel · demoscene, early 1990s Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/tunnel Source: https://3d-retro.com/examples/tunnel.html API: https://3d-retro.com/api/v1/experiments/tunnel APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: demoscene, 3d Rings recede along Z. Each ring is a square outlined with dots, corners drawn as squares. A 1/z divide is the tunnel. Twist is a spin that grows with depth. Dot tunnels were a stock intro effect on the Amiga and PC around 1990 to 1993; this is the generic form, not a port of one. Move the pointer to drag the vanishing point. Interaction: Move the pointer to shift the vanishing point. ### 19 Palette fire Era: Palette fire · demoscene, early 1990s Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/fire Source: https://3d-retro.com/examples/fire.html API: https://3d-retro.com/api/v1/experiments/fire APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: demoscene, palette The 1990s fire: a low-res buffer, each pixel is the average of the three below it minus a cooling term, then a palette from black through the tweak colour into yellow and white. The bottom row is random sparks. The algorithm is the widely shared one from early-1990s PC demos and tutorials; its first author is not documented, so no single original is claimed. Move the pointer to poke the fire. Interaction: Move the pointer over the preview to feed the fire. ### 20 XY oscilloscope Era: Lissajous · 1857 Reference: J. A. Lissajous, "Mémoire sur l'étude optique des mouvements vibratoires", Annales de chimie et de physique, 1857; XY mode on an analogue oscilloscope (https://en.wikipedia.org/wiki/Lissajous_curve) Page: https://3d-retro.com/experiments/scope Source: https://3d-retro.com/examples/scope.html API: https://3d-retro.com/api/v1/experiments/scope APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: vector, crt X is one sine, Y is another. That is the XY mode on a scope, and the picture is a Lissajous curve. Persistence is a cheap canvas fade. Move the pointer to detune the Y frequency. Ratio is the second harmonic. Interaction: Move the pointer left or right to change the frequency ratio. ### 21 Boing ball Era: Amiga · 1984 Reference: Boing Ball, Amiga demo by Dale Luck and R. J. Mical, shown at CES January 1984 (https://en.wikipedia.org/wiki/Amiga#Boing_Ball) Page: https://3d-retro.com/experiments/boing Source: https://3d-retro.com/examples/boing.html API: https://3d-retro.com/api/v1/experiments/boing APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: amiga, 3d Commodore's 1984 show ball: a sphere with longitude/latitude checkers, Lambert-shaded, a flattened shadow on a perspective grid. It bounces with a little energy loss and rolls with its spin. Click to kick it. Interaction: Click the preview to kick the ball. ### 22 Slit-scan stargate Era: Trumbull · 1968 Reference: Douglas Trumbull's slit-scan Star Gate sequence in 2001: A Space Odyssey, 1968 (https://en.wikipedia.org/wiki/Slit-scan_photography) Page: https://3d-retro.com/experiments/stargate Source: https://3d-retro.com/examples/stargate.html API: https://3d-retro.com/api/v1/experiments/stargate APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: optical, 3d Douglas Trumbull's slit-scan: a one-dimensional strip of artwork is sampled while the camera dollies, so each pixel is a different moment. Here the slit is polar. Color streaks recede into a vanishing point. Move the pointer to shove the corridor. Interaction: Move the pointer to shift the vanishing point. ### 23 Rutt-Etra scan Era: Rutt/Etra · 1973 Reference: Rutt/Etra Video Synthesizer, Steve Rutt and Bill Etra, 1973 (https://en.wikipedia.org/wiki/Rutt/Etra_Video_Synthesizer) Page: https://3d-retro.com/experiments/ruttetra Source: https://3d-retro.com/examples/ruttetra.html API: https://3d-retro.com/api/v1/experiments/ruttetra APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: video, 3d The Rutt-Etra scan processor took a video signal and bent each scanline in Z by brightness. This one synthesizes a cheap 'video' of blobs and rings, then draws it as a wire mesh. Drag to orbit. It keeps a slow auto-spin until you take over. Interaction: Drag on the preview to orbit. Auto-rotation stops after the first drag. ### 24 Glenz vectors Era: Glenz vectors · Amiga demoscene, c. 1989 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/glenz Source: https://3d-retro.com/examples/glenz.html API: https://3d-retro.com/api/v1/experiments/glenz APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: demoscene, 3d Glenz vectors were the Amiga demo trick of drawing a solid with see-through faces so the back sides pile up as light. The original effect faked transparency with a purpose-built palette and bit-plane tricks on a 16- or 32-colour screen. This one does not: it is an icosahedron, painter-sorted and drawn with ordinary canvas alpha in additive mode, which gives the glow without the period technique. Magenta against cyan unless you change it. Drag to orbit. Interaction: Drag on the preview to orbit. Auto-rotation stops after the first drag. ### 25 Hopalong attractor Era: Martin · 1986 Reference: Barry Martin's hopalong map, as presented by A. K. Dewdney in Scientific American, September 1986 (https://en.wikipedia.org/wiki/Barry_Martin_(mathematician)) Page: https://3d-retro.com/experiments/hopalong Source: https://3d-retro.com/examples/hopalong.html API: https://3d-retro.com/api/v1/experiments/hopalong APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: attractor, plotter Barry Martin's hopalong: x' = y − sign(x)·√|bx − c|, y' = a − x. Plot the orbit and a shape appears. Move the pointer to detune a. Color is additive phosphor. Interaction: Move the pointer left or right to change the constant a. ### 26 Penrose tiling Era: Penrose · 1974 Reference: R. Penrose, "The role of aesthetics in pure and applied mathematical research", Bulletin of the IMA 10, 1974; Robinson-triangle subdivision (https://en.wikipedia.org/wiki/Penrose_tiling) Page: https://3d-retro.com/experiments/penrose Source: https://3d-retro.com/examples/penrose.html API: https://3d-retro.com/api/v1/experiments/penrose APIs: Canvas 2D Tags: tiling, geometry A pentagon of acute golden triangles, subdivided by Robinson's rule. Two rhombs, no period. Fat and thin take the two tweak colours. Depth rebuilds the mesh. Nothing moves and there is nothing to pan to, so the tiling is drawn once and again on resize. ### 27 Elite planet Era: Braben and Bell · 1984 Reference: Elite, David Braben and Ian Bell, Acornsoft 1984 (https://en.wikipedia.org/wiki/Elite_(video_game)) Page: https://3d-retro.com/experiments/elite Source: https://3d-retro.com/examples/elite.html API: https://3d-retro.com/api/v1/experiments/elite APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: wireframe, 3d Elite's worlds were wireframe circles with a line or a crater on a BBC Micro; the dotted sphere with a lit terminator and a ring here is how its planets are remembered rather than how they were drawn, so treat it as an interpretation. No textures. Drag to spin. It keeps a slow auto-rotate until you take over. Interaction: Drag on the preview to spin the planet. Auto-rotation stops after the first drag. ## Modern experiments Made in 2026 with the same single-file, retro-styled rendering. These illustrate recent mathematics and are not historical effects. ### 28 Spaghetti vortex Era: Illustration · 2026 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/vortex Source: https://3d-retro.com/examples/vortex.html API: https://3d-retro.com/api/v1/experiments/vortex APIs: WebGL 1, GLSL ES 1.0, Pointer Events, requestAnimationFrame, matchMedia Tags: webgl, 3d, particles Parametric helices scaled by the 2026 OpenAI paper's leading laws: radius follows tau^(1/2), height tau^(1/2−h), with illustrative h = 0.005 and tau = 1−t/T*. Both shrink; radius shrinks faster. Drag to orbit, scrub toward T*, or follow the core with a labeled uniform zoom. Color shows normalized radius. Oscillatory corrections are omitted. Illustration of the proposed blowup construction; not a numerical reproduction of the proof. Interaction: Drag to orbit; auto-rotation stops after the first drag. Play, pause, scrub the approach, or follow the core. ### 29 Dual tank Era: Stam 1999 solver · 2026 illustration Reference: J. Stam, "Stable Fluids", SIGGRAPH 1999, for the solver; the strained display on the right is a 2026 illustration (https://doi.org/10.1145/311535.311548) Page: https://3d-retro.com/experiments/dualtank Source: https://3d-retro.com/examples/dualtank.html API: https://3d-retro.com/api/v1/experiments/dualtank APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: sim, fluid Split screen, two copies of the GDC Stam solver. Left is the usual dye tank, labeled bounded. Right runs the same step, then a display-only strain: dye is sampled through an inward spiral and an axial stretch, and the false-color speed scale goes as 1/(T*−t). Orange is the boosted speed, teal is slow. The code on the right is still stable. The legend is not. Stir either side. T* is the horizon slider. Interaction: Move or drag on either half to stir that tank. Right-hand color scale grows as t approaches T*. ### 30 Spiral stretch Era: Illustration · 2026 Reference: Interpretation: this evokes a period look and does not reproduce one specific original. Page: https://3d-retro.com/experiments/spiralstretch Source: https://3d-retro.com/examples/spiralstretch.html API: https://3d-retro.com/api/v1/experiments/spiralstretch APIs: Canvas 2D, ImageData, Pointer Events, requestAnimationFrame, matchMedia Tags: attractor, crt No fluid solver. Each iterate is r ← k r, θ ← θ + ω, z ← z + c/r. Plot (r cos θ, r sin θ + z) and you get the cartoon of inward spiral plus axial stretch — the 2026 Navier–Stokes construction as a CRT orbit. Teal is early, orange is stretched. Pointer nudges k. When a walker's radius collapses it reseeds on the ring. Interaction: Move the pointer left or right to change how fast the radius shrinks. ### 31 Burgers shock Era: Hopf · 1950 · 2026 illustration Reference: E. Hopf, "The partial differential equation u_t + uu_x = μu_xx", Communications on Pure and Applied Mathematics 3, 1950 (https://doi.org/10.1002/cpa.3160030302) Page: https://3d-retro.com/experiments/burgers Source: https://3d-retro.com/examples/burgers.html API: https://3d-retro.com/api/v1/experiments/burgers APIs: Canvas 2D, Pointer Events, requestAnimationFrame, matchMedia Tags: pde, shock u_t + u u_x = 0 with u₀ = −amp sin(x). The most negative slope is −amp, so the classical solution ends at T* = 1/amp. Each particle keeps its speed; the x–t plot is those lines, and they cross at T*. ‖∂x u‖∞ = 1/(T*−t) until it leaves the top of the chart. After T* the parametric wave is multi-valued; the vertical mark is the entropy shock. This one actually blows up. Pointer sets the phase. Interaction: Move the pointer left or right to shift the phase of the sine.