Skip to content
Docs
Open Promoeyes
realism2

realism2

Realism 2 — twenty more realism studies on the realism.promo kit (the scene list lives in scene-ideas.md; every idea from that file, in order). Same levers as realism.promo scene 1: renderer(shadow_map) + authored shadow cameras, mirror reflector-ground, HDR environments with steered rotation, rim/kicker lights, frame(smooth) shot programs with DOF riding the framed subject, onyx haze on every scene, restrained bloom + grain.

Read the rig's notes
THE RULE THIS FILE DEMONSTRATES: NO ABSOLUTE POSITIONING.
- Every world element lives in a flow container — ground contact is
  anchor=bottom align=end at y=0, and copy sits in gapped columns. Only
  the rig (camera, lights, haze lobes, the floor plate, container
  origins) carries a position.
- And no scene is ONE container: each composes 2–4 kinds, nested, so the
  shot has a structure instead of a queue. A container's own `position`
  is CANCELLED when it is nested (the parent's slot subtracts it), which
  is exactly why a mixed rig still stands on the mirror with no math.
- Every device screen is FLEX (layout=row/column + gap/padding/flex) —
  no x/y on any ui item.

Layout per scene — the composition, not the queue:
  s01 turntable     spinning row [column · imac · isle · phone] + floor wheel of marks
  s02 scale story   row of 4 columns (measurement card over each device) + word-cloud
  s03 night shift   column [grid of glowing panels · row of devices (one a column)]
  s04 sun pass      word-cloud + row [column · imac · sphere · isle]
  s05 fog reveal    isle [row · laptop · column] — depth is the story
  s06 glass totem   column [row of 2 plates · panel · panel]
  s07 panel wall    grid 3×3 backdrop + row hero
  s08 macro pass    row [sphere · stack of frosted swatches · column · imac]
  s09 handoff relay word-cloud + row of 4 columns (status card over each leg)
  s10 mirror-first  row of 3 isles (a field, not a line), middle isle holds a column
  s11 lonely hero   floor wheel of marks ringing a single-child column
  s12 app wheel     wheel of panels, one seat a column of two plates
  s13 archipelago   isle [row · glass · laptop · panel · imac]
  s14 shadow theater row [sphere · stack of slabs · phone · column]
  s15 two families  isle of two rows (devices front, dashboards behind)
  s16 wake-up call  STACK — z packing + shift-x cascade = a receding diagonal
  s17>s18 grade A/B row [grid of grade chips · column · sphere · phone] ×2
  s19 sphere gravity wheel arc (sweep 180) over the orb + row + column
  s20 through       row [column · imac (the door) · isle]
  s21 breathing room row gap=0 [phone · sliver · column · sliver · isle · sliver · imac]

ENGINE NOTES this file paid for (all verified by capture):
- A flow CONTAINER's animation channels need an explicit `properties`
  wrapper, and rotation keyframes there are DEGREES (converted at parse,
  like the attr). On a bare primitive/sphere the same channel is RADIANS.
- Camera `position` / `look_at` channels are ABSOLUTE world poses, not
  relative offsets — and a camera whose position animates keeps its
  original orientation unless a `look_at` channel re-aims it every frame
  (that is what makes s11's orbit orbit).
- On an ISLE/STACK, `align=end` grounds Y *and* right-aligns X: one align
  value serves every cross axis. Depth layers of unequal width therefore
  skew sideways — either equalise the layers or, as s16 does, use a
  `stack` whose shift-x cascade makes the stagger deliberate.
- A `wheel` centres every item's BOX on the ring, so mixed-height devices
  would float at different heights — rings carry uniform panels/chips
  here. `look-at=outward` also mis-solves the auto radius (it measures
  unrotated spans): author `radius=` explicitly.
- `perpendicular="0 1 0"` + `follow=1` lays wheel items FLAT on the
  mirror, facing up and radiating — the floor-marking idiom (s01, s11).
- Reflector floors need `envmap-intensity≈0.1` or the HDR washes them out.
- THE ONE THAT MATTERS FOR REFLECTIONS: `unlit=true`. Without it the
  reflection is modulated into the floor's ALBEDO, so scene lighting and
  haze multiply over the mirror image and bury it — a lit floor reads as a
  grey wash with no reflection at all. With `unlit=true` the reflection is
  added as EMISSIVE instead, and the lit albedo drops to `(1 - mirror)`
  (mesh-reflector-material.ts). So `mirror=1 unlit=true` is a true mirror
  with NO lit surface left — and therefore no visible cast shadow on the
  floor. Any scene that needs both (s14) keeps mirror under 1 so some
  diffuse survives for the shadow to darken. Sharpness is `blur` +
  `mixBlur`: 25/0.55 reads as polished stone, 60/1.0 loses the image.

Preview: /packages/runtime/index.html?project=promos/primitives/realism/realism2.promo
Topic
scenes
Scenes
21
Kind
reference rig
//
    Realism 2 — twenty more realism studies on the realism.promo kit (the
    scene list lives in scene-ideas.md; every idea from that file, in order).
    Same levers as realism.promo scene 1: renderer(shadow_map) + authored
    shadow cameras, mirror reflector-ground, HDR environments with steered
    rotation, rim/kicker lights, frame(smooth) shot programs with DOF riding
    the framed subject, onyx haze on every scene, restrained bloom + grain.

    THE RULE THIS FILE DEMONSTRATES: NO ABSOLUTE POSITIONING.
    - Every world element lives in a flow container — ground contact is
      anchor=bottom align=end at y=0, and copy sits in gapped columns. Only
      the rig (camera, lights, haze lobes, the floor plate, container
      origins) carries a position.
    - And no scene is ONE container: each composes 2–4 kinds, nested, so the
      shot has a structure instead of a queue. A container's own `position`
      is CANCELLED when it is nested (the parent's slot subtracts it), which
      is exactly why a mixed rig still stands on the mirror with no math.
    - Every device screen is FLEX (layout=row/column + gap/padding/flex) —
      no x/y on any ui item.

    Layout per scene — the composition, not the queue:
      s01 turntable     spinning row [column · imac · isle · phone] + floor wheel of marks
      s02 scale story   row of 4 columns (measurement card over each device) + word-cloud
      s03 night shift   column [grid of glowing panels · row of devices (one a column)]
      s04 sun pass      word-cloud + row [column · imac · sphere · isle]
      s05 fog reveal    isle [row · laptop · column] — depth is the story
      s06 glass totem   column [row of 2 plates · panel · panel]
      s07 panel wall    grid 3×3 backdrop + row hero
      s08 macro pass    row [sphere · stack of frosted swatches · column · imac]
      s09 handoff relay word-cloud + row of 4 columns (status card over each leg)
      s10 mirror-first  row of 3 isles (a field, not a line), middle isle holds a column
      s11 lonely hero   floor wheel of marks ringing a single-child column
      s12 app wheel     wheel of panels, one seat a column of two plates
      s13 archipelago   isle [row · glass · laptop · panel · imac]
      s14 shadow theater row [sphere · stack of slabs · phone · column]
      s15 two families  isle of two rows (devices front, dashboards behind)
      s16 wake-up call  STACK — z packing + shift-x cascade = a receding diagonal
      s17>s18 grade A/B row [grid of grade chips · column · sphere · phone] ×2
      s19 sphere gravity wheel arc (sweep 180) over the orb + row + column
      s20 through       row [column · imac (the door) · isle]
      s21 breathing room row gap=0 [phone · sliver · column · sliver · isle · sliver · imac]

    ENGINE NOTES this file paid for (all verified by capture):
    - A flow CONTAINER's animation channels need an explicit `properties`
      wrapper, and rotation keyframes there are DEGREES (converted at parse,
      like the attr). On a bare primitive/sphere the same channel is RADIANS.
    - Camera `position` / `look_at` channels are ABSOLUTE world poses, not
      relative offsets — and a camera whose position animates keeps its
      original orientation unless a `look_at` channel re-aims it every frame
      (that is what makes s11's orbit orbit).
    - On an ISLE/STACK, `align=end` grounds Y *and* right-aligns X: one align
      value serves every cross axis. Depth layers of unequal width therefore
      skew sideways — either equalise the layers or, as s16 does, use a
      `stack` whose shift-x cascade makes the stagger deliberate.
    - A `wheel` centres every item's BOX on the ring, so mixed-height devices
      would float at different heights — rings carry uniform panels/chips
      here. `look-at=outward` also mis-solves the auto radius (it measures
      unrotated spans): author `radius=` explicitly.
    - `perpendicular="0 1 0"` + `follow=1` lays wheel items FLAT on the
      mirror, f