What a camera controls

A camera is a control surface with a recorded cause for every frame. Across 495 renders with their camera parameters attached, which measured coordinates does it actually move, and which ones stay where they are?

Parallax Metrology · 12 September 2026 · analysis of the VTL Camera Observatory runs, read from copies · plan fixed before results in ANALYSIS_PLAN.md

Renders analysed
495
17 runs, 38 coordinates
Camera-controlled
25
of 38, using the full camera state
Beyond reach
1
only one stays at chance
Constant
1
identical in all 528 renders
Strongest control
focal length
0.40 median slope, roll 0.07
Survives tone control
84%
median, full camera state
The camera controls almost everything these instruments measure, and it does so mostly through geometry rather than through light: structural coordinates keep 84% of their response when the tonal channels are removed. Colour coordinates are the exception, and they are the ones that ride on tone. Two earlier conclusions of this same analysis were wrong, and section 8 shows how an under-specified model of the camera produced them.

1. The setup

The observatory renders a scene from sampled camera states, runs the Image Structure Reader and colour kernel on each render, and writes one row per frame joining the camera parameters to about forty measured coordinates. 528 renders exist across 21 runs; 495 in 17 runs have enough frames to fit (twelve or more). Three kinds of run appear: two controlled 48-camera sweeps of a generated scene, several sweeps of a staged Blender scene, and frames sampled from three animated films where the camera moves as the film moves.

Renders are deterministic, so there is no sampler spread to divide by. The comparable unit is the step: the median change in a coordinate between nearest-neighbour camera states, measured in standardised camera space. One step is what a small camera move already does.

2. Dose-response

Four camera controls against coordinates they plausibly drive, in the first controlled sweep. Azimuth moves horizontal placement cleanly. Focal length drives the colour coordinates hardest. Elevation's effect on vertical placement is weak.

Six renders along the orbit

azimuth 217° · placement -0.063
azimuth 236° · placement +0.062
azimuth 256° · placement -0.068
azimuth 279° · placement +0.110
azimuth 299° · placement +0.146
azimuth 322° · placement +0.142

The same scene at six azimuths, with the measured horizontal placement beneath each. This is what a control surface with authority looks like: turn the knob, the number follows.

3. The control map

Standardised slope of each coordinate on each camera control, median of the two controlled sweeps. Red is positive, blue negative. Values under 0.25 are left unlabelled.
ControlMedian |standardised slope| across coordinates
focal length0.398
azimuth0.193
elevation0.166
distance0.149
roll0.072

Focal length is the dominant knob by a factor of two over anything else, and roll barely registers. That is worth stating plainly because focal length is the parameter a director thinks of as "look" rather than "blocking", while the parameters that feel like composition, where you stand and how high you are, move these numbers less.

What is controlled

CoordinateR²Range (steps)Keeps after tone controlDominant control
colour beta0.8510.624%focal_length_mm
colour coupling0.808.617%focal_length_mm
midtone mass0.807.8n/afocal_length_mm
colour independence0.788.726%focal_length_mm
mass/colour alignment0.788.726%focal_length_mm
hue entropy0.754.618%focal_length_mm
mass dispersion0.735.512%focal_length_mm
orientation stability0.659.584%elevation_deg
diagonal energy0.656.774%elevation_deg
highlight mass0.647.5n/afocal_length_mm
saliency concentration0.638.142%elevation_deg
structural thickness0.586.036%focal_length_mm
edge/colour coupling0.557.174%azimuth_deg
packing density0.546.740%focal_length_mm
tonal hierarchy0.545.838%focal_length_mm

R² and retention in this table come from the pre-registered five-parameter linear fit. Section 7 gives the corrected figures under the full camera state.

What looked pinned

CoordinateR²Range (steps)
primary focal dominance0.064.3
focal dominance0.077.1
compliance difference0.074.4
scanpath restlessness0.132.6
radial displacement0.155.0
off-centre force0.165.4
saliency divergence0.167.7
cohesion0.185.2
stance VCLI0.1820.7

Nine coordinates sit below 0.2 explained variance under the pre-registered fit. That result does not survive. Section 7 shows that the threshold sat below the chance floor and that the fit omitted where the camera was aimed; with the aim included, all but one of these move into reach. The table is kept as recorded, and corrected below.

4. What runs through light, and what does not

Camera-explained variance before and after removing the three tonal mass channels, using the full camera state. The gap is the share of the camera's leverage that travels through light.

Median retention is 84%. The structural coordinates keep nearly all of their response: vertical placement 97%, off-centre force 94%, orientation stability 91%, the Default Gravity Index 87%, horizontal placement 86%, dispersion 84%. The camera moves these by moving geometry, which is what one would hope.

The exceptions are the colour coordinates, and they are consistent: mass dispersion keeps 24%, hue entropy 33%, colour beta 51%, colour independence and mass/colour alignment 58% each. A camera move aimed at one of those is, in effect, a lighting change. If the lighting is fixed by the shot, they will be much harder to reach than their raw numbers suggest.

An earlier version of this section said the opposite, reporting that four fifths of the camera's authority ran through tone. That came from fitting only five camera parameters and leaving out where the camera was aimed. With part of the cause missing, tone stood in for it, and removing tone removed the proxy. Section 8 documents the correction.

5. One coordinate cannot move at all

field.void_fraction reads exactly 0.7200 in all 528 renders, across three scenes and three films. It is not a property of the scenes. In the vendored instrument, the active mask is defined as

active = mass >= np.percentile(mass, 72)
void_fraction = 1.0 - active.mean()

which returns 1 − 0.28 for any image whatsoever. The instrument's own documentation says so, in the notan module: "the blend's percentile void_fraction is a fixed ~0.72 on every work". The measure was superseded there, and the replacement, notan.field_void, sits in the same table and does move (R² 0.33 under the camera). The point is not that anyone was deceived: it is that a column which cannot vary was still exported per render, where every consumer of that table would reasonably read it as a measurement. Checking whether a coordinate can move at all costs one line and belongs at the top of any analysis.

6. Predictions

#PredictionVerdictDetail
P1adistance back raises void fractionuntestablethe coordinate is a constant (see section 5)
P1bdistance back lowers mass dispersionHELDslope -0.29, rank correlation -0.33, R² 0.73
P2azimuth moves horizontal placementHELDslope +0.63, rank correlation +0.66, R² 0.46
P3elevation moves vertical placementnoslope -0.16, rank correlation -0.14, R² 0.23
P4focal length opposes distance on void fractionuntestablethe coordinate is a constant (see section 5)
P5roll drives orientation stabilitynoslope +0.08, rank correlation +0.07, R² 0.65
P6the Default Gravity Index is strongly camera-controllednoR² 0.24, classified weak
P7some coordinates are unreachable by cameraHELD9 pinned coordinates

The one that matters most is P6. The Default Gravity Index, the composite that sounds most like composition, is only weakly camera-controlled: R² 0.24 across the controlled sweeps, against 0.85 for colour beta. Where you put the camera is not what mostly determines it.

lowest Default Gravity: 30.7
azimuth 272° · elevation 15° · distance 11.0 · focal 81mm
highest Default Gravity: 62.3
azimuth 222° · elevation 38° · distance 11.0 · focal 36mm

The lowest and highest Default Gravity frames in the first sweep, with their camera parameters. The index differs by more than thirty points; the camera parameters do not differ in any simple way that predicts it.

7. Robustness, and two corrections

Three checks were run after the pre-registered analysis. Two of them overturned its conclusions, and both failures are the same species: a model of the cause that was too small.

The threshold was below chance

With 48 rows and five predictors, R² is not zero under the null. A permutation test puts the chance mean at 0.11 and the 95th percentile at 0.23. The plan called anything under 0.20 "pinned", which is below the chance ceiling, so that class could not mean what it said. Ten coordinates sat within chance under the original fit.

The camera's aim was missing

The sampler jitters the point the camera looks at, and that is part of the camera state. Adding the three aim coordinates, and quadratic terms for curved responses, changes the classification of 16 of 38 coordinates:

ClassificationPre-registered (5 parameters, linear)Full camera state (aim + curvature)
controlled1525
weak1412
at or below chance91

Off-centre force goes from 0.16 to 0.55 once the aim is included; radial displacement from 0.15 to 0.54. Only scanpath focal dominance remains indistinguishable from chance under the full model. The honest statement is therefore the opposite of the one the pre-registered analysis produced: almost nothing these instruments measure is beyond the camera's reach, and the apparent "pinned" set was mostly an artifact of describing the camera with five numbers instead of eight.

Roll barely turned

Prediction P5 asked whether roll drives orientation stability, and the answer was no. The sweep rolls through 9 degrees against 105 degrees of azimuth, so that prediction was underpowered rather than refuted. Orientation stability is strongly camera-controlled (R² 0.84 under the full state); it simply responds to other controls.

What survives unchanged

The dose-response relationships, the dominance of focal length, the constant coordinate in section 5, and the scene-specificity below are unaffected by these refits.

8. The map is scene-specific

GroupCoordinates comparedSame class as the controlled sweepsShare
scene sweeps (staged Blender scene)381642%
film intervals (Spring, Charge, Sprite Fright)38924%

Carrying the classification from the controlled sweeps to the staged scene holds for 42% of coordinates, and to film frames for 24%. That is a limit worth stating loudly: "the camera controls X" is a statement about a scene, not about images. In the films the camera is not an independent variable at all, since content changes with every cut and move, so those runs can only corroborate or contradict.

9. What this says

  1. The camera is a real control surface. Coordinates follow the knobs monotonically, with rank correlations up to 0.82 in a single sweep, and 25 of 38 coordinates are controlled under the full camera state.
  2. Its strongest single knob is focal length, not position: twice the median influence of azimuth, five times that of roll.
  3. The control is mostly geometric. Structural coordinates keep 84% of their response with tone removed. Colour coordinates are the ones that ride on light, losing a third to a half.
  4. Almost nothing is beyond reach, once the camera's aim is counted as part of the camera. One coordinate out of 38 stays at chance.
  5. One exported coordinate is a constant. Check that a number can move before analysing what moves it.
  6. Chance is not zero. With 48 samples and five predictors, a null coordinate scores 0.11 on average. Thresholds have to be set above the noise floor, and mine was not.
  7. The map does not transfer between scenes without re-measurement.

Limits

The pre-registered classification used five camera parameters and a linear fit; the corrected one adds the aim point and quadratic terms. Neither is the true functional form, so both are descriptions rather than models of the renderer. The controlled sweeps are one generated scene, so "camera-controlled" means controlled in that geometry. Four runs with fewer than twelve frames were excluded, leaving 495 of 528 renders; the constant-coordinate check used all 528. Film frames are temporally correlated and their camera is not manipulated, so no significance is claimed for them. Removing the tonal channels is a statistical control, not an intervention: it estimates how much of the camera's effect travels with tone in this data, and cannot prove a causal path. Measurements are read as the observatory recorded them, using the vendored instrument at version 0.8; nothing was re-measured here. All statements are about coordinates, not about whether an image is good.

Method

Per run, camera parameters and coordinates are standardised, each coordinate is fitted on the five camera parameters by ordinary least squares, and the multiple R², the standardised slopes and Spearman correlations are recorded. Runs are pooled by taking medians across runs, never by pooling rows. The step is the median absolute change between nearest-neighbour camera states in standardised camera space. Tone control refits each coordinate after regressing out the three tonal mass channels. Classification thresholds, predictions and the exclusion rule were fixed in ANALYSIS_PLAN.md before any result was computed. Data copies, scripts, per-run results and the figures are kept in the project archive.