A shared vocabulary of six camera roles. Numeric values differ per lab bench, but each role's pedagogical reason is constant: orient, work, read a flat surface, read an instrument, observe a phenomenon, compare results.
Presets only set the starting vantage at each authored moment; the student can freely rotate, zoom, and pitch (mouse wheel / arrows / right-click drag) between them.
Vocabulary — 6 roles · Rules — 7 · Applied examples — 3Opening establishing shot. Whole bench in frame so the student can orient.
pitch 25–35° · distance 2–3 mHands-on vantage for drag, placement, connection. Most steps live here.
pitch 45–65° · distance 0.5–0.9 mNear top-down. Flat surfaces — paper drawings, field maps — where perspective distortion hurts legibility.
pitch 70–85° · distance 0.4–0.7 mTight on a single readout — digital scale, thermometer scale, ruler tick. Pitch matches the readout's face normal so digits read head-on.
pitch 10–70° (follows face normal) · distance 0.15–0.4 m ·orbit_target override
Tight on a region being observed — compass cluster settling, thermometer stabilising. Typically time-paused.
pitch matches phenomenon · distance 0.2–0.5 m ·orbit_target override
Two artifacts framed side-by-side, equal weight. Neither dominates; often overhead or steep working angle.
pitch 60–85° · distance tuned to fit both · tightfov ~40°
Every authored vantage has a pedagogical reason.
Don't add a preset because "the scene looks nicer from there". Add one because there is a specific thing the student must see. If you can't answer what must be visible in one sentence, the preset isn't earned.
Pitch is chosen by the face being observed.
Match the camera's pitch to the readout's face normal so the student reads it head-on: flat/top-facing surfaces (paper, top-facing digital scales) want steep pitch 70°+; volumetric objects (cups, coils) want medium 45°–65° for depth cues during drag; vertical-face readouts (thermometer scales, upright dials) want shallow 10°–25° — a thermometer standing in a cup is unreadable from above. Working steps stay above 25° for desk context.
Distance is chosen by the legibility requirement.
If digits or needles must be read, distance must make them legible without
further zoom. If an object must be grabbed, distance must make it grab-size.
Ballpark: intro 2–3 m, working 0.5–0.9 m,
instrument / phenomenon 0.15–0.5 m.
Override orbit_target only for off-centre framing.
Unity owns the orbit target by default. Override it only when the thing framed sits away from the scene centre — an instrument cluster, a paper corner, one compass out of four. The camera snapshots the previous target on override so it can restore on exit; don't rely on the next preset to also override.
Lerp durations communicate intent.
Step-to-step: 300–400 ms, trackable.
Opening intro → working: 1000–1500 ms, cinematic.
Reading zoom-ins: 400–600 ms, slightly slow so the student
registers their action caused it. Exits back to working:
250–350 ms, snap-back feel.
Readings that would be illegible at a shared vantage get their own step.
If two instruments are too far apart — or too small at one zoom — to read
together, split them into separate steps. Each uses instrument
or phenomenon, with Continue or Unpause. Exit lerps back to
working before the next step's preset takes over. Full rule in
the authoring-patterns section.
Student freedom is never suspended.
After a preset lerps into place, the student can rotate, zoom, and tilt —
even during paused_reading. Time is frozen, the camera isn't.
The wide shot the student sees on load. Orientation, not interaction — the camera lerps inward to a working angle on step 1.
Why this zoom
distance 2.77 m fits coil, battery, four compasses and every
clip with breathing room. pitch 27° reads as "standing at the
desk" — physically present, not schematic — priming a hands-on expectation.
{ yaw: 90.3, pitch: 27.1, distance: 2.768, fov: 55 }
initial_camera; step 1 lerps into
setup_view over 1.2 s.
The "doing work" angle — clip connections, compass placement. The camera rests here after the opening lerp and returns here after every observation.
Why this zoom
distance 0.70 m makes the coil and clip targets grab-sized
(1:1 drag feel) while the far end of the coil stays in frame — no mid-task
rotation needed. pitch 58° gives depth cues for clip placement
while still revealing the flat desk for compass positioning.
{ yaw: 89.7, pitch: 57.9, distance: 0.698, fov: 50 }
reading_view returns to on Unpause (steps 9, 15).
Active only on reading steps, when the circuit is closed and compass needles align. The only preset that recentres the orbit target — onto the compass cluster rather than the coil, because the needles are the object of study.
Why this zoom
distance 0.42 m: each compass face fills a chunk of screen
so needle direction is legible with no further zoom. pitch 65°
(steeper than working) minimises perspective skew across four faces at
different depths — at shallow angle their needles would skew unevenly.
{ orbit_target: [0.019, 0.770, -0.104], yaw: 89.4, pitch: 65.4, distance: 0.424, fov: 50 }
paused_reading steps 9 and 15. Transient — on
Unpause the camera lerps back to setup_view over 300 ms.
instrument
Dominated by numeric readings — mass on a scale, temperature on a
thermometer — repeated across trials. Both readouts are small and sit in
different places, so working can't serve them alone. The
camera zooms into each instrument individually and returns to
working between.
The mixture-temperature phase is time-dependent (digits keep changing until
equilibrium). That's the one reading that uses phenomenon
with time paused; everything else uses instrument with Continue.
| Procedure moment | Role | Notes |
|---|---|---|
| Investigation load | intro | Wide shot of cups, scale, thermometer, baths. |
| Fill cups, place on scale | working | Medium pitch — see fill depth. |
| Read scale mass | instrument → Continue | Top-facing digital display — angled-down camera, pitch 50–70°, orbit target on scale. |
| Read starting temp (each cup) | instrument → Continue | Vertical thermometer face — near-horizontal camera, pitch 10–25°, orbit target on the scale's middle tick. One step per probe (R6). |
| Mix + insert probe | working | Back to the bench for the pour. |
| Watch temperature stabilise | phenomenon → Unpause | Same shallow-pitch framing as the starting-temp read — the thermometer is still vertical. Time paused until equilibrium. |
| Repeat trial | re-uses above | New condition, same camera sequence. |
| Compare trial values | compare | Side-by-side framing of the two recorded readouts. |
instrument / phenomenon case.
ui: button (description-only) covers this; the investigation
can be authored against it.
compare at the end
The whole activity happens on butcher paper — flat surface, perspective
distortion would undermine the learning. overhead dominates;
students drop to slight perspective only for pushing pins. Measurements and
shape comparisons need near-top-down so circles read as circles.
| Procedure moment | Role | Notes |
|---|---|---|
| Investigation load | intro | Wide shot of paper, pins, ruler, string loops. |
| Tape paper, gather tools | working | Slight perspective for tactile setup. |
| Place pin, trace circle | overhead | Near top-down so the circle reads true. |
| Measure radius with ruler | instrument → Continue | Tight on ruler tick. One step per measurement (R6). |
| Calculate eccentricity | (UI side) | No camera change; widget interaction. |
| Place two pins, trace ellipse | overhead | Same vantage; watch the ellipse form symmetrically. |
| Measure major axis, foci distance | instrument → Continue | One step per measurement. |
| Label features, add arrows | overhead | Student draws; camera fixed. |
| Compare circular vs elliptical | compare | Both drawings together, overhead, equal weight. |
phenomenon role needed — nothing
time-dependent. Pattern: setup → overhead for construction →
repeated instrument measurements → compare for
the pedagogical payoff.
When an investigation has multiple readings too far apart — or too small at any shared vantage — to be legible at once. Collapsing forces the student to zoom around (breaks flow) or squint (breaks trust). Split each reading into its own step.
The rulepaused_reading) when the
value would keep changing if time ran.
setup_view before the next step's preset,
giving a clean breathing moment between readings.
ui: paused_reading (Unpause) +
ui: button (Continue, description-only) cover both
variants.