Ninety seconds, thirteen shots, 2560x1440 at 24 fps, on a fixed 1/24 s film clock.
The Odeon Marisol has been shut a long time. It is raining through a dome nobody has repaired and one sodium worklight is burning on the stage. A clown walks on and performs to an empty house — and the house does not stay empty.
Three things change between the first shot and the last, and nothing in the film states any of them:
- The room inverts. Stage occupied / house empty becomes house occupied / stage empty.
- The light source goes all the way round. One sodium worklight, then fourteen tungsten footlights from below, then one hard followspot through haze, then the chandelier and the house lights — and back to the worklight alone.
- The camera changes sides. Shot 1 looks from seat I-14 at a performance. Shot 13 is the same station, the same height and the same lens, and the white-gloved hands rising into the bottom of the frame are ours.
The horror is repetition. Nothing lunges at the lens. What is wrong is that there are 1,412 of the same face, that they are all doing the same thing, and that they get better at doing it together as the film goes on.
What it is made of
- The theatre is generated: a raked house, two aisles, a proscenium and its gilt plasterwork, a ribbed dome with its rain damage, a curved balcony, two tiers of boxes, and a black-boarded stage — one material per surface class, with the soot, damp, tarnish and aisle wear painted into the vertex colours.
- 1,412 seats as a hardware-instanced population over one matrix block, each yawed part of the way toward the proscenium so the plan reads as a fan, plus 27 tip-up pairs so the house can fold its seats row by row.
- 1,412 audience members, posed entirely on the GPU: one compute thread per figure writes four world matrices and four shader lanes from a static seed block and fourteen wave parameters. Four waves cross the house — occupancy, attention, rising, applause — each with per-member delay and rate, so they start apart and converge.
- Four light sources on the film clock, volumetric haze keyed per act, five GPU emitters stepped at exactly the film's own delta, and a post chain of bloom, ACES, a LUT per act, grain keyed to the film's frame number, vignette, per-shot depth of field and a bounded auto-exposure.
- Fifteen sound clips synthesised from noise and sine waves, mixed as eleven placed beds and five one-shot families against film time. Everything applausey is one clap grain stamped at event times; the only difference between a house that is together and one that is not is whether those times come off a grid.
Playing it
local Film = require("ovation.film")
Film.rewind()
Film.play()
The clock reads no wall time and no real frame delta — one fixed 1/24 s step per rendered frame — so the same build produces the same 2,160 frames on a fast machine and a slow one, under a recorder and without one.
Comments · 0
Open discussion, no rating attached. Ask questions, swap notes, follow threads.