camera-framing-dof
camera-framing-dof
- Topic
- camera
- Scenes
- 2
- Kind
- reference rig
promo#camera-framing-dof
// =======================================================================
// SCENE 01 · INTO A WEBSITE — a page dived into from the side, on DOF
// =======================================================================
scene#d01-login(duration=20 transition=match-move transition-duration=0.8)
// The vocabulary aimed at ONE shot: go from the whole browser window down
// to the pixels of a single button, at a grazing angle, and let depth of
// field carry the distance.
// 0.0 to 1.4 the establishing pose, nearly deep focus
// 3.0 to 5.2 the whole window, from the side — offset parks it right
// 7.0 to 9.2 the sign-in card
// 11.0 to 13.0 the password row
// 14.8 to 16.6 the button — 90 mm out, on a 50° lens
// 18.2 to 20 back out to the window
camera(type=perspective fov=34 near=8.5 far=17000 position="0 -15 1100" look_at="0 -15 0" dof_pass=three dof_depth=scene focus=500 dof_range=200 dof_blur=22)
properties
frame(smooth=0.24)
keyframes
kf(time=0 position="0 -15 1100" look_at="0 -15 0" fov=34 dof_range=1000 dof_blur=32.4 easing=easeInOutCubic)
kf(time=0.5 position="0 -15 1100" look_at="0 -15 0" fov=34 dof_range=100 dof_blur=34)
kf(time=3.0 node=d01-web side=world fill=72 offset="-40 0 0" fov=40 dof_range=136 dof_blur=32.4 easing=easeInOutCubic)
kf(time=5.2 node=d01-web side=world fill=72 offset="-40 0 0" fov=40 dof_range=200 dof_blur=32.4 easing=linear)
kf(time=7.0 node=d01-signin side=world fill=60 fov=42 dof_range=1000 dof_blur=34.6 easing=easeInOutCubic)
kf(time=9.2 node=d01-signin side=world fill=60 fov=42 dof_range=119 dof_blur=34.6 easing=linear)
kf(time=11.0 node=d01-pw side=world fill=95 fov=42 dof_range=60 dof_blur=36.7 easing=easeInOutCubic)
kf(time=13.0 node=d01-pw side=world fill=95 fov=42 dof_range=60 dof_blur=36.7 easing=linear)
kf(time=14.8 node=d01-btn side=world fill=95 fov=50 dof_range=49 dof_blur=36.7 easing=easeInOutCubic)
kf(time=16.6 node=d01-btn side=world fill=95 fov=50 dof_range=49 dof_blur=36.7 easing=linear)
kf(time=18.2 node=d01-web side=world fill=72 offset="-40 0 0" fov=40 dof_range=136 dof_blur=32.4 easing=easeInOutCubic)
kf(time=20 node=d01-web side=world fill=72 offset="-40 0 0" fov=40 dof_range=136 dof_blur=32.4 easing=linear)
// The auto-injected DOF pass is appended to the END of this chain, and the
// generic promo composer has no OutputPass — a chain that terminates in a
// raw ShaderPass hits the canvas LINEAR and the whole frame reads far too
// dark (measured here: a #0f151f page came back as rgb 1,2,3). film_grain
// carries the ACES + linear→sRGB transform itself, so it does the output
// duty. This reel needs a <postprocessing> block BECAUSE of the DOF.
// DOF scenes lose MSAA (the composer target is non-multisampled), so FXAA.
background(top=#0b1020 bottom=#05070f)
lights
light#amb(type=ambient color=#8fb2ff intensity=0.9)
light#key(type=directional color=#ffffff intensity=1.9 position="340 680 510")
light#fill(type=directional color=#7aa2ff intensity=0.8 position="-510 170 340")
// Sized so the radial falloff is IN frame at the establishing distance — a
// lobe wider than the shot only ever shows its core, which reads as a flat
// colour wash rather than haze.
haze#hz0(match=hz0 blend=add opacity=0.5 position="-620 320 -900" color=#2563EB size="2600 2100" pulse=0 decay=0)
haze#hz1(match=hz1 blend=add opacity=0.42 position="640 -300 -900" color=#8B5CF6 size="2900 2300" pulse=0 decay=0)
haze#hz2(match=hz2 blend=add opacity=0.3 position="60 40 -1100" color=#00C8FF size="2200 1800" pulse=0 decay=0)
text#d01-title(text="into the screen" kind=layer size=200 worldHeight=44 color=#e8eefc weight=700 align=center position="0 300 0")