Shot types (normative)#
How the camera’s shot value determines the scale of a figure in the panel.
The unit: head-heights#
Figures are measured in head-heights, the standard figure-drawing unit. An adult is
conventionally about 7.5 heads tall. Every puppet declares units_per_head and a set of vertical
landmarks measured downward from head_top, so the compiler can reason about anatomy without
knowing anything about the artwork.
Why not “60% of panel height”#
A tempting shortcut is to define each shot as a fixed fraction of panel height. It is wrong, because what a shot type actually names is where the frame cuts the body — the waist, the chest, the shoulders. The fraction of the panel that a figure then occupies falls out of that crop, and differs between a child and an adult, or between a standing and a seated pose. Encoding the fraction instead of the crop line bakes in one body and one pose.
So a shot type is defined by two things: a crop landmark, and a headroom fraction — the empty space above the head that stops the figure colliding with the top edge.
Resolution#
visible_height_native = landmark[crop].y - landmark[head_top].y
available_height = panel_height * (1 - headroom - footroom)
scale = available_height / visible_height_native
The scaled figure is then anchored so its crop line meets the bottom of the available area.
footroom defaults to 0.0; a panel may raise it to lift figures off the lower edge.
Table#
|
Crop landmark |
Headroom |
Reads as |
|---|---|---|---|
|
|
0.60 |
Figure small in its environment |
|
|
0.05 |
Whole body, environment secondary |
|
|
0.08 |
Body language, hands visible |
|
|
0.10 |
The conversational default |
|
|
0.10 |
Emphasis on the speaker |
|
|
0.08 |
Emotion; face dominates |
|
|
0.05 |
Intensity |
|
|
0.00 |
Crops through the face deliberately |
Aliases are exact synonyms and resolve to the same values.
The table is monotonic: reading down it, the figure never gets smaller. That is what
makes it a ladder, and it is enforced by a test rather than left to inspection –
long_shot and full_shot crop at the same landmark, so only headroom separates them,
and having those two the wrong way round inverted the ladder at its widest end without
anything noticing.
A limitation worth stating: with no environment to show, long_shot and full_shot can
differ only by headroom, so the gap between them is necessarily modest. In film the
distinction is mostly about how much of the world is in frame, which this compiler does
not yet model.
Angle#
angle selects where the eye-line sits vertically within the panel:
|
Eye-line |
Effect |
|---|---|---|
|
Lower third |
Figure looms; viewer looks up |
|
Upper third |
Neutral (default) |
|
Upper edge |
Figure diminished; viewer looks down |
Current limitation: angle shifts the eye-line only. It does not yet apply true perspective projection or foreshortening, so extreme angles will read as vertical repositioning rather than as a genuine change of viewpoint. This is a known gap, not an oversight.