Woods-Gebler

Demos

Fireworks

A 3d flight demo built entirely by Claude, driven by prompting

Music by SubStance

Music

Artist
SubStance
Module
otherworld.it
Licence
Attribution, non-commercial, no derivatives
Source
The Mod Archive

Notes

The camera is flown rather than positioned, and it is flown the way an aircraft is. A manoeuvre asks for rates of rotation about the aircraft’s own three axes and nothing else: roll about the nose, pitch about the wings, yaw about the mast. It works through a list of them. An aileron roll, an inside loop, a barrel roll, an outside loop, an immelmann, a knife edge held on one wing, a split S, with a little ordinary flying in between to get its breath back.

None of those need a special case. A loop is one sustained pitch rate and a roll is one sustained roll rate, and the reason that works is that the camera does not carry a heading, a pitch and a bank. Those three numbers only describe an orientation while the nose stays away from vertical, and a loop takes it straight through vertical twice. It carries its own three axes instead, which have no such problem and are perfectly happy upside down.

That is also why there is a ground. Without a horizon a bank is only the picture tilting for no reason, so there is a dark landscape below, a little haze along the horizon, and the lights of towns going past underneath.

There is an airliner up there too, laying a contrail across the sky with the moon on it. Four engines, so four filaments, distinct for the first few seconds and then wrapped together by the wake into one spreading band. It sits on the same far sphere as the stars, because at forty thousand feet nothing the camera does down here changes where it is.

Three shell shapes: a sphere, a tilted ring that reads as a line when it is edge on, and a willow that hangs and falls. Each shell keeps one colour the whole way through, which is what makes a burst read as one object instead of as confetti. The colours themselves are not the ones a firework actually burns. Real pyrotechnic salts give you sodium gold, strontium red and barium green, and together they look like a village fete.

What makes a burst look sharp is not the colour but the ejection speed, and specifically how little it varies. Spread it and the surface of the shell smears into a ball of fog; hold it tight and it stays a surface, which is what the eye reads as an edge. The sparks are thrown far harder than they need to travel and then held back by heavy drag, because that is what a shell does: it opens almost instantly and then hangs.

The fuse is short, and that turns out to matter more than anything else here. A shell has to be thrown at where the aircraft is going to be when it goes off, and there is no guessing where an aerobatic aeroplane will be in two and a half seconds. It may well be pointing the other way by then. On a long fuse every shell burst behind the camera and the display was simply never in shot.

Everything is fired from the music rather than at it. libopenmpt reports which order, pattern and row is playing, and the shells go up on the rows. How fast those rows tick is measured rather than assumed, so the firing grid stays on the beat whatever tempo a module runs at: singles on the beat, a salvo on the downbeat, and a wall of them whenever the song turns over into a new pattern. Loudness comes off an analyser and drives the things that should swell rather than trigger, which is the copper sky and the shake.