Hotel Bed at Dawn
Hotel Bed at Dawn
A white-on-white hotel bed at dawn: one low warm sun rakes the linen while a half-open foldable shows a sunrise alarm on its cover display.
A hotel bedroom at dawn with a soft duvet, three pillows, a padded headboard, a cup on its saucer and glass doors, lit by one low warm sun that leaves deep soft shadows in the linen folds. One unhurried 13 s take in four beats: a low macro slide across the folds, a close hold, a rise over the cup with long shadows, then a pull out and drift.
- Length
- 13 s
- Scenes
- 1
- Device
- iphone-fold
- Style
- realistic place
- Camera
- push in, ultra closeup, rack focus
//
REALISM HOTEL — "Hotel bed at dawn" (see SCENE.md)
The white-on-white member of the realism series: a hotel bed at dawn, one low warm sun through the
glass doors, almost everything in frame white — the duvet, three pillows, the headboard, a cup on its
saucer — so the tests are cloth sheen at a grazing sun, deep (never black) shadows in the folds,
white-on-white bounce, a warm sun against a cool room, and a tone curve that keeps the whites apart.
WORLD cayley_interior_2k mounted as a grounded dome (height 1500, radius 6000): its glass doors sit
at +x, so every shot that looks +x has the window behind the bed.
SUN the HDR has no sun disc (an overcast morning), so the sun is ours: a directional light 11° up at
azimuth +20° (from +x toward +z) — inside the HDR's glass doors, which span about -45..+45°
round +x — direction (0.922, 0.191, 0.336). Shadows fall toward -x / -z: toward the camera.
LINEN built, not generated: linen/build_linen.py writes models/rh-linen.glb (folds, swells, a fine
wrinkle, the roll and the hanging drop; see its header). Props sit in the shallow dishes it
presses under them; linen/place.py prints every rest y below (y = the highest linen point
under the prop's underside, minus how far it sinks in).
PROPS TRELLIS returned no mesh (refused for the shared Runware balance, then 500 / 429 / timeouts
after the top-up: models.log), so the cup, pillow, glasses and lamp are built meshes from linen/build_props.py at their real sizes, scale 1; the
book and the key card are primitives. Two TRELLIS jobs landed late: the nightstand and the rolled duvet.
SCREEN Aubade, a fictional dawn alarm for travellers, on the cover display of the half-open fold
(realism-hotel.screens.html → scripts/html-screens.mts): 06:40 ringing, slid away at 4.2 s,
then "Good morning" and today's two things arriving in order. No idle pulse on the alarm: the
path tracer rebuilds its BVH on every frame a screen animates, and a pulse running from 0 s
exhausted its memory at frame 179 of the first traced export; the screen moves 4.2–6.5 s only.
TONE output tone_mapping=neutral, authored: the brief asks for whites kept apart, and the traced
render takes no `realism=tone`. PBR Neutral leaves values under ~0.8 alone (the screen holds)
and rolls the sunlit linen off instead of clipping it. No authored fog (it would flatten the
grounded dome in the path tracer); haze is the render-time `haze` word.
Preview: http://localhost:4444/runtime?project=projects/templates/realism-hotel/realism-hotel.promo
promo#realism-hotel(width=1920 height=1080 fps=30)
scene#dawn(duration=13 transition=none)
renderer(tone_mapping=None exposure=1 shadow_map=true shadow_map_type=pcf-soft)
// 50 mm full-frame (fov 27) for the close beats, 34 for the wide. Four beats:
// 0–2.8 s a low macro across the folds (100 mm over the linen: lower, the realism keyshadow word stair-steps the grazing foreground), sliding toward the standing fold
// 2.8–6.6 on the cover display, ~320 mm off its glass; the alarm is slid away at 4.2, the day arrives
// 6.6–9.4 rise and swing over the cup, the glasses and the key card: long shadows toward us
// 9.4–13 pull out to the wide — bed, pillows, nightstand, the window behind — and drift
// Focus follows the look-at, so the raster DOF stays on the subject.
camera(dof_pass=three type=perspective fov=27 near=10 far=90000 position="-960 700 250" look_at="-430 618 -120" dof_range=260 dof_blur=7)
properties
frame(smooth=0.3)
keyframes
kf(time=0 position="-960 700 250" look_at="-430 618 -120" fov=27 dof_range=260 dof_blur=7)
kf(time=2.8 position="-860 700 110" look_at="-410 634 -125" fov=27 dof_range=260 dof_blur=7 easing=easeInOutSine)