Which shot when, for a lab with a presenter in it. More...
| Import Statement: | import Clayground.Lab |
The rig knows how to compose a picture (OrbitCamera3D.fit); a flow knows what is being said. Neither knows the grammar between the two - when to be wide, when to be close, when to move and when to hold still - and every lab with a professor was writing that grammar for itself, differently. This is the grammar, written once. Its conventions are science television's, because that is the genre a lab lesson is in: a presenter, a bench, and a viewer who has to be able to see what is being pointed at.
| verb | what is in the picture | when |
|---|---|---|
| wide | the bench, nobody in it | establishing the situation |
| establish | the whole new setup, wide, under a title | the setup changed - the board was replaced, the scene is a different one, and the eye needs a beat and a name before the presenter moves |
| journey | where the presenter stands, where it is going and what it will talk about, all at once | the presenter is on its way somewhere. The walk is watched, not cut around; a follow keeps the presenter in the picture should the limits hold the frame short |
| twoShot | presenter and subject | a point or a present: a finger and the thing it indicates have to share a picture or the gesture is noise |
| portrait | the presenter alone, level with its face | explanation, which is delivered to a face and not to a board |
| cutaway | one thing on its own, for a moment | the insert: the LED as it lights, the reading as it changes - then back |
Three rules hold across all of them. A shot change is one glide, never two writes. Everything that matters is inside the safe area, because the chrome is not picture. And a presenter that is moving is never cut around - the camera goes with it. None of this is a mode: every verb composes from the scene as it stands, so a lab can call any of them at any time and a flow guide can call them in order.
CameraDirector {
id: director
rig: rig // the OrbitCamera3D
presenter: prof // anything with stand, standHeight, travelling
safe: ({ top: 0.1, bottom: 0.18 })
}
director.twoShot([partPos]) // presenter + the part
director.portrait() // the presenter, to the reader
See also OrbitCamera3D and Flow.
cutMs : int |
How long a change of shot glides. -1 takes the rig's travelMs.
followSlack : real |
Handed to the rig's follow while a journey runs.
girth : real |
Half-width of the presenter's frame box, as a factor of standHeight. Arms out, a hoverboard, a bit of ground.
headroom : real |
How much taller than the presenter its frame box is, as a factor of standHeight. Room for a speech bubble.
Framing to the top of the head puts the head at the top of the window, and a bubble that hangs above it and is sized in pixels goes off the edge. 2.2 keeps it inside at any distance.
pad : real |
Air around a wide shot and a two-shot, as a factor on the fitted distance. 1 is edge to edge.
portraitLimits : var |
The rig limits a portrait is allowed to relax: {minPitch, minHeight}.
A rig's floors exist for bench work - a learner orbiting the board must not skim it. A portrait is the opposite regime, so it lowers them for as long as it lasts; every other shot restores the rig's own values, captured the first time this director moves it.
portraitPitch : real |
The angle a portrait is taken from: level with the face.
The camera has to come down, or the shot looks at the crown and the eyes and the mouth - which is what carries the explanation - are gone.
presenter : var |
Who is in the picture. Duck-typed: stand (a vector3d on the ground), standHeight, travelling and present.
The professor kit's Professor is one; so is anything else that stands somewhere and says how tall it is.
rig : var |
The OrbitCamera3D to direct. Null does nothing at all.
safe : var |
What is NOT picture: {top, bottom, left, right}, fractions of the frame. The flow bar, the hint strip, the cards.
Handed to every fit. Where a lab used to extend its frame box below the ground to push the subject up out of the flow bar, this says what the bar is and lets the rig do the arithmetic.
shot : string |
The shot in force: "wide", "journey", "two", "portrait", "cutaway" or "" before the first one.
shotPoints : var |
The world points the current shot was composed around. What a check reads back through rig.covers().
title : string |
The scene title an establish is showing; "" otherwise.
The director draws nothing itself. A lab binds a LabBanner (or whatever card it likes) to this, so the title sits in the lab's own chrome rather than in a scene node.
widePitch : real |
The angle a wide shot and a two-shot are taken from.
Low enough that a figure standing on the board reads as a figure rather than as a hat seen from above, high enough that the parts on the board keep their layout.
cut(string shot) |
Note: The corresponding handler is onCut.
bool cutaway(var points, int holdMs) |
An insert: points on their own for holdMs, then the shot before comes back. Default hold 2500 ms.
Sparingly. A cutaway that shows the thing the sentence is about at the moment it changes teaches; one every step is noise.
bool establish(var points, string title, int holdMs) |
A new scene: the whole of points, wide, under title for holdMs (default 2200), before anything else happens.
The cut television makes when the setup changes - and the one the lessons were missing: a board replaced under the presenter in one frame, followed straight away by a walk and a two-shot, reads as the same scene gone wrong rather than as a different scene. The title is what says "this is somewhere else now"; the hold is what gives the eye time to take the new layout in. title carries the text for the duration.
bool journey(var to, var subject) |
The walk: the presenter where it is, where it is going (to) and what it is going to talk about (subject), held in one frame, and the presenter followed until it lands.
Call it as the presenter sets off. The follow is dropped the moment presenter.travelling turns false; whoever ordered the walk then orders the shot on arrival, usually a twoShot.
bool portrait() |
The presenter alone, level with its face, for explanation.
var presenterPoints(var at) |
void release() |
Drops the follow, restores the rig's own limits, forgets the shot.
For the end of a lesson: the camera is the learner's again.
bool twoShot(var subject) |
Presenter and subject in one picture, from widePitch.
The deictic shot. Called when the presenter points at or presents something; subject is that something as one or more world points.
bool wide(var points, real pad) |
The establishing shot: points and nothing else.