NearsideCam
The one camera of *First Light: Nearside*. A camera behaviour: it sits on the local player's `CameraRig` beside the `Camera` component, where `Staging` puts it, so every joining peer gets it and nothing else in the scene has to know.
NearsideCam
The one camera of First Light: Nearside. A camera behaviour: it sits on the
local player's CameraRig beside the Camera component, where Staging puts
it, so every joining peer gets it and nothing else in the scene has to know.
It is the chase and every staged moment. The opening, the beat when the cargo starts to cook or to freeze, the swing onto the airlock and the fall away from a rover the light caught are all this rig on a different directive — which is why none of them can cut.
The framing is solved, not authored
A shoulder rig is a distance and a pitch, and where it puts the subject on screen depends on the shape of the window. This one is told where on the frame the rover goes and solves the pitch for it against the live field of view:
- the rover lands at
roverScreenYdown the frame — 0.76 on a tall screen, 0.72 on a wide one, blended by aspect between them; - at least
minTopSkydegrees of sky stay above the horizon, which is the band Earth hangs in; - the aim yaws a little toward the corridor's centre line, so the dome at the head of the route stays in shot when the rover runs wide.
A 3:4 phone held upright and a 21:9 monitor therefore get the same composition
out of different numbers. The anchors live in game.staging.shots.
Directives
Plain tables, never functions, so a reload of the director cannot leave the
camera holding something dead. Each one cross-fades from whatever pose was on
screen over its own blend.
kind | What it does |
|---|---|
follow | The chase. The default, and where every other directive returns to. |
pose | Stand at eye, aim at at, on fov. |
orbit | Circle center at radius and height, turning at yawRate, aiming between the rover and the centre by lookMix. The winning shot. |
pullback | Recede from the rover along its own heading, rising and drifting to the side at rate. The losing shot. |
Two modifiers ride on top of any of them: pushIn(strength, hold) bites the
frame in and narrows the lens, and shake(amp, seconds) knocks the eye about.
Reading it
local cam = NS.get("stagingCam")
cam.aim() -- eye, aim point, lens, push-in, and the framing they came from
cam.mode() -- "follow" | "pose" | "orbit" | "pullback"
Fields
follow · groundLag heightLag yawLag aimLag fovLag (seconds; the rig
covers about 63% of the distance to its solved pose in one) · distanceTrim
heightTrim screenYTrim (nudges on top of the solved framing) · pushRise
pushFall.
Scoped to this part · feeds back into the world's score.