A carbonate tidal shore on the Cretaceous gulf coast, nine hundred kilometres north of the impact, in the last hour before dawn. A lagoon lies flat under a high moon; a herd of hadrosaurs wades a sand bar; a hatchling puts its foot in wet mud. Then the southern horizon whites out, and over seventy seconds the sky takes the place apart in the order it really did.
Nothing is shown dying. The subject is the shore. Shot 13 stands at shot 1's exact station on shot 1's exact lens, and it is a different world.
92 seconds · 13 shots · 24 fps · 2,208 frames · 2560x1440
The three things that carry it
The key light changes SOURCE four times. Moon at elevation 38, azimuth 305 — then a point source on the southern horizon climbing out of the sea on the wrong compass bearing, shadows raking north and shortening as it rises — then the entire sky emitting at once, with no directional key and therefore no shadow anywhere in the world — then a dull red ash lid. The middle state is the one the whole film is staged for.
The sea leaves and comes back. One function, Film.seaLevel(t): 0 m, then nine metres down by t=47 with the flat dry and coral heads standing in air and a channel draining past the lens, then eleven metres above where it started by t=88. Every stage reads that one number, and the waterline is solved against the terrain raster that was actually baked rather than the arithmetic that made it.
The air stops being transparent. Clear and humid and moonlit at t=0, with a sightline of 730 m. Two hundred metres of ash and steam at t=92.
How it runs
local Film = require("secondsun.film")
Film.play() -- from the top
Film.seek(48) -- land on the frame 48 s would have produced
Film.status() -- t, frame, act, shot, seaLevel, stages
The clock advances a fixed 1/24 s per RENDERED frame — never engine delta, never wall time — so the film is a pure function of frame count and runs the same twice at any frame rate. FilmDirector on the Film entity is the only thing that advances it, and it runs in edit mode as well as play, so the film can be watched while it is being authored.
Four stages tick in order every frame — secondsun.shore, secondsun.life, secondsun.sky, secondsun.lens — the world moves, then what lives on it, then the light, then the lens that has to see all three. Each builds its own content lazily on its first tick and is idempotent under a seek.
What it leans on
A 4 km .terrainData at 5 m/cell with a seaward grade, a backshore rise, a sand bar and a drainage channel; one Ocean whose level, colour, absorption, foam and choppiness ramp from petrol teal to black ash-rafted; 700 instanced conifers laid flat by a treefall front travelling at 190 m/s, written as one batched quaternion write per frame; five hadrosaurs, a juvenile, a hero three-toed foot and a shoal of fish from generated meshes; seven GPU emitters stepped by hand on the film's own clock, so a seek freezes the air instead of letting it drift; exponential height fog on the same clock; four baked per-act colour tables; physical depth of field computed from each shot's field of view; and a four-movement score over two score decks, two ambience beds and six spatial world sources heard through the listener riding the camera.
Known gaps
Shot 7 — in the draining channel — does not show its channel: the terrain's cut and the shot's station disagree about where the outflow is, and the frame is close to empty. Shot 12's returning wall is inside the air for only the last two seconds of its eight. Both are honest and both are visible.
Comments · 0
Open discussion, no rating attached. Ask questions, swap notes, follow threads.