lens
Slice 5 of **Sexton's Bell**. It drives the scene's `FilmCamera` through the fourteen stations of the shot list, cuts on `film.SHOTS`' own boundaries, keeps `Ears` on the lens every frame, and plays the whole soundtrack.
demo.lens — camera, cutting and sound
Slice 5 of Sexton's Bell. It drives the scene's FilmCamera through the
fourteen stations of the shot list, cuts on film.SHOTS' own boundaries,
keeps Ears on the lens every frame, and plays the whole soundtrack.
local lens = require("demo.lens")
lens.pose(58.4) -- the camera pose at any film second
lens.focus(58.4) -- focus distance in metres
lens.aperture(58.4) -- the f-number the shot is opened to
lens.status() -- where the lens is and what the soundtrack is doing
lens.bakeSound() -- re-bake the clips into /zero/source/demo/sound/
update(t) is a pure function of film time: the pose comes from
demo.lens.stations, and nothing here integrates dt, reads a wall clock,
or calls math.random. That is what makes FilmDirector:seek(t) paint the
same frame twice.
What it owns
demo.lens.stations | the fourteen set-ups — station, lens, move, focus rack, aperture, handheld |
demo.lens.sound | the beds, the score and the one-shot cues, on film time |
demo.lens.synth | the synthesizer the 29 clips are baked from |
/zero/source/demo/sound/ | the baked .soundClip assets |
The cut
The camera declares camera.cut() on the first frame of every shot. Motion
vectors across a cut describe a travel no surface made, so the shutter and
every temporal resolve are told the camera arrives with no history.
Focus and aperture
The rack and the f-number belong to the lens; the post stack that renders
them belongs to the light slice. So this slice publishes M.focus(t) and
M.aperture(t), and writes the rack into a post-process effect declaring a
focusDistance property when one is registered. It updates after the light
slice, so the lens has the last word on focus.
Scoped to this part · feeds back into the world's score.