Skip to content
Docs
Open Promoeyes
realism

realism

Realism — a premium product shot built from authoring alone: a mirror floor at y=0 with a device family (imac, laptop, ipad, iphone) and the house gradient-glass sphere standing on it, every realism lever ON.

Read the rig's notes
The levers, and where each lives:
  - real cast shadows: renderer(shadow_map) + key light cast_shadow with
    an authored shadow camera sized to the lineup (the engine's default
    directional frustum is ±10 units — useless at mm scale). NOTE: on a
    strong mirror the diffuse term is mostly replaced by reflection, so
    shadows read faintly by physics; the floor albedo is lifted vs the
    materials.promo baseline so they have lit surface to darken.
  - standing on the ground is AUTHORED, not calculated: <row anchor=bottom
    align=end> at y=0 parks every child's measured bottom on the ground —
    device swaps keep the contact, no per-child height math.
  - live screens: analytics wall on the imac, render-queue dashboard on
    the laptop, task board on the ipad, lock screen on the iphone — their
    glow doubles in the mirror.
  - CAMERA FRAMINGS: the camera is a frame(smooth) shot program —
    framing=all opens wide on the whole family, then names p-imac, p-mac
    and p-phone for close-ups, and settles back on framing=all. Backdrops
    (the reflector floor) and haze are excluded from the solve by the
    engine; the titles are dropped with exclude= so they never widen the
    wide shots.
  - shallow DOF: framing IS focus — the camera carries a DOF rig
    (aperture/max_blur) with NO focus target of its own, so the focal
    plane rides each framed subject and racks between shots exactly like
    the camera does. (Grammar note: framing= only accepts the scene
    keywords; a NODE close-up is authored with node=<id>.)
  - rim light behind the lineup + environment_rotation_y_deg to steer the
    HDR speculars; HDR rides as scene background (as_background=true,
    dimmed) so the mirror reflects a real world.
  - linear fog past the lineup melts the floor horizon into the backdrop.
  - grade: restrained unreal_bloom + film_grain (output_transform=0 — the
    composer output is already display-referred) with a soft vignette;
    ACESFilmic tone mapping (also the engine default).

NOT here (needs engine plumbing): fresnel/distance reflection falloff
(MeshReflectorMaterial's depthScale/minDepthThreshold are not authorable
yet) and the ssr-pass mirrored-ground A/B.

Preview: /packages/runtime/index.html?project=promos/primitives/realism/realism.promo
Topic
scenes
Scenes
1
Kind
reference rig
//
    Realism — a premium product shot built from authoring alone: a mirror
    floor at y=0 with a device family (imac, laptop, ipad, iphone) and the
    house gradient-glass sphere standing on it, every realism lever ON.

    The levers, and where each lives:
      - real cast shadows: renderer(shadow_map) + key light cast_shadow with
        an authored shadow camera sized to the lineup (the engine's default
        directional frustum is ±10 units — useless at mm scale). NOTE: on a
        strong mirror the diffuse term is mostly replaced by reflection, so
        shadows read faintly by physics; the floor albedo is lifted vs the
        materials.promo baseline so they have lit surface to darken.
      - standing on the ground is AUTHORED, not calculated: <row anchor=bottom
        align=end> at y=0 parks every child's measured bottom on the ground —
        device swaps keep the contact, no per-child height math.
      - live screens: analytics wall on the imac, render-queue dashboard on
        the laptop, task board on the ipad, lock screen on the iphone — their
        glow doubles in the mirror.
      - CAMERA FRAMINGS: the camera is a frame(smooth) shot program —
        framing=all opens wide on the whole family, then names p-imac, p-mac
        and p-phone for close-ups, and settles back on framing=all. Backdrops
        (the reflector floor) and haze are excluded from the solve by the
        engine; the titles are dropped with exclude= so they never widen the
        wide shots.
      - shallow DOF: framing IS focus — the camera carries a DOF rig
        (aperture/max_blur) with NO focus target of its own, so the focal
        plane rides each framed subject and racks between shots exactly like
        the camera does. (Grammar note: framing= only accepts the scene
        keywords; a NODE close-up is authored with node=<id>.)
      - rim light behind the lineup + environment_rotation_y_deg to steer the
        HDR speculars; HDR rides as scene background (as_background=true,
        dimmed) so the mirror reflects a real world.
      - linear fog past the lineup melts the floor horizon into the backdrop.
      - grade: restrained unreal_bloom + film_grain (output_transform=0 — the
        composer output is already display-referred) with a soft vignette;
        ACESFilmic tone mapping (also the engine default).

    NOT here (needs engine plumbing): fresnel/distance reflection falloff
    (MeshReflectorMaterial's depthScale/minDepthThreshold are not authorable
    yet) and the ssr-pass mirrored-ground A/B.

    Preview: /packages/runtime/index.html?project=promos/primitives/realism/realism.promo
promo#realism
  materials
    gradient-glass#house(preset=frosted mapping=object frost=0.28 gloss=0.8 transmission=0.26 motion=1)
      field#amber(color=#ff9f1c)
      field#cyan(color=#2ec4ff)
  // =======================================================================
  // PREMIUM · device family on a mirror floor, framed shot by shot.
  // =======================================================================
  scene#premium(duration=18.5 transition=none)

    renderer(tone_mapping=None shadow_map=true)
    // The base pose only seeds the solver — the frame() program below drives
    // the camera. fov 28 compressed lens; DOF kept tiny (see header).
    camera(type=perspective fov=35 near=8.5 far=17000 position="0 220 2600" look_at="0 150 0" dof_range=562 dof_blur=4.86)
      properties
        frame(smooth=0.4)
          keyframes
            kf(time=0 framing=all fill=100 exclude="p-title p-k")
            kf(time=4.4 node=p-imac fill=80 easing=easeInOutCubic)
            kf(time=6.4 node=p-imac fill=80 easing=linear)
            kf(time=7.8 node=p-mac fill=85 side=front easing=easeInOutCubic)
            kf(time=9.6 node=p-mac fill=85 side=front easing=linear)
            kf(time=11 node=p-phone fill=65 side=front easing=easeInOutCubic)
            kf(time=12.6 node=p-phone fill=65 side=front easing=linear)