shots
The thirteen set-ups of *Standing Ovation*, as data — where the lens stands, what it is aimed at, how it moves across the shot, and which lens it is on.
camera.shots
The thirteen set-ups of Standing Ovation, as data — where the lens stands, what it is aimed at, how it moves across the shot, and which lens it is on.
Consumed by camera.filmCamera, which evaluates it every rendered frame off
the film clock and writes the FilmCamera's transform and fov. Nothing else
writes that camera.
What an entry holds
| key | meaning |
|---|---|
eye | world points. One = a locked-off camera. Two or more = keys the lens moves through. |
look | world points, the same shape. What the lens is aimed at. |
lookRel | an aim offset carried along with the lens, instead of look — a tracking shot that keeps looking the same way relative to itself. |
lookEntity | a leaf another slice owns. If it is in the world the aim follows it; if it is not, the aim falls back to look, so a shot never stops framing. |
ease | "smooth" (default) or "linear". |
breathe | metres of deterministic drift on a locked-off lens, a pure function of the shot's own local time. A held camera, not a rendered still. |
The lens is never restated here: Shots.fov(n) reads Film.SHOTS[n].fov.
The bookend
Shot 1 and shot 13 are the same station, the same aim and the same lens. They
do not hold two copies of the numbers — both entries carry Shots.STATION_I14
and Shots.AIM_I14 by reference, and Shots.check() asserts that with
rawequal so the two ends of the film cannot drift apart:
require("camera.shots").check()
--> { bookendSharesStation = true, bookendSharesAim = true,
-- bookendSharesLens = true, millimetres = 0, setups = 13 }
Calls
local Shots = require("camera.shots")
Shots.eval(n, u) --> ex, ey, ez, lx, ly, lz -- u is 0..1 across shot n
Shots.station(n) --> x, y, z -- the undrifted station
Shots.fov(n) --> vertical degrees
Shots.check() --> the bookend report above
Points other slices may want
Shots.STATION_I14 / Shots.AIM_I14 (the bookend), Shots.AISLE_LEFT /
Shots.AISLE_RIGHT (the two aisles cut through the stalls — the house has none
on its centre line, so shot 9 tracks up the house-left one),
Shots.PERFORMER (where shots 5, 6 and 7 compose on him: he comes on from
entryX, arrives at centreX, stands at standZ, and his head is at headY),
and Shots.ROW_G_SUBJECT (the one shot 10 watches).
Scoped to this part · feeds back into the world's score.