Skip to content
Docs
Open Promoeyes
ui-maps

ui-maps

UI → every material map. Thirty scenes, one map (or one combo) each, always the SAME dashboard so the maps compare like for like.

Read the rig's notes
The twin of html-maps.promo. `source(factory="ui/scene" …)` is accepted under
ANY `<slot>_from`, so one ui stage can be the colour map, the emissive, the
roughness, the bump, the parallax height, the cut-out, the lacquer mask, the
sheen tint… of one material. Devices take the same blocks as children of the
tag (`laptop > roughness_map_from > source`) plus `screen-<prop>` scalars.

Where html and ui part company: an `html` under a slot can be RE-RASTERED as
data (`relief=luma|alpha|ao|depth|normal`), so the one colourful page drives
every slot. A ui stage has no such derivation — so each data map here is
AUTHORED as its own stage, drawn from the same layout: a grayscale twin for
height, a black/white block mask for "cards vs page", an accents-only stage
for emissive, a layered-gray stage for depth, and a real tangent-space
normal map (flat #8080ff, bevelled edges) for scene 03. That is the ui
idiom: the data map is a design, not a derivation.

Scenes 21–22 substitute an explicit `light(type=area)` for html's `emit=<n>`
(a ui stage is not a RectAreaLight source) — the light is sized and coloured
to the panel it stands in for, which is what `emit` computes.

  01 bump          02 displacement    03 normal          04 roughness
  05 metalness     06 emissive        07 alpha cut-out   08 ao
  09 clearcoat     10 clearcoat rough 11 sheen colour    12 transmission
  13 thickness     14 iridescence     15 anisotropy      16 specular int.
  17 specular col. 18 light map       19 parallax (POM)  20 layered depth
  21 area light·3d 22 area light·page 23 laptop combo    24 ipad parallax
  25 iphone irid.  26 imac etched     27 chrome glass    28 iphone velvet
  29 laptop lacquer 30 iphone everything

Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/ui/ui-maps.promo`
Preview: /packages/runtime/index.html?project=promos/primitives/uis/ui/ui-maps.promo
Topic
uis
Scenes
30
Kind
reference rig
//
    UI → every material map. Thirty scenes, one map (or one combo) each, always
    the SAME dashboard so the maps compare like for like.

    The twin of html-maps.promo. `source(factory="ui/scene" …)` is accepted under
    ANY `<slot>_from`, so one ui stage can be the colour map, the emissive, the
    roughness, the bump, the parallax height, the cut-out, the lacquer mask, the
    sheen tint… of one material. Devices take the same blocks as children of the
    tag (`laptop > roughness_map_from > source`) plus `screen-<prop>` scalars.

    Where html and ui part company: an `html` under a slot can be RE-RASTERED as
    data (`relief=luma|alpha|ao|depth|normal`), so the one colourful page drives
    every slot. A ui stage has no such derivation — so each data map here is
    AUTHORED as its own stage, drawn from the same layout: a grayscale twin for
    height, a black/white block mask for "cards vs page", an accents-only stage
    for emissive, a layered-gray stage for depth, and a real tangent-space
    normal map (flat #8080ff, bevelled edges) for scene 03. That is the ui
    idiom: the data map is a design, not a derivation.

    Scenes 21–22 substitute an explicit `light(type=area)` for html's `emit=<n>`
    (a ui stage is not a RectAreaLight source) — the light is sized and coloured
    to the panel it stands in for, which is what `emit` computes.

      01 bump          02 displacement    03 normal          04 roughness
      05 metalness     06 emissive        07 alpha cut-out   08 ao
      09 clearcoat     10 clearcoat rough 11 sheen colour    12 transmission
      13 thickness     14 iridescence     15 anisotropy      16 specular int.
      17 specular col. 18 light map       19 parallax (POM)  20 layered depth
      21 area light·3d 22 area light·page 23 laptop combo    24 ipad parallax
      25 iphone irid.  26 imac etched     27 chrome glass    28 iphone velvet
      29 laptop lacquer 30 iphone everything

    Capture: `nx run tools:capture:webgl -- --project promos/primitives/uis/ui/ui-maps.promo`
    Preview: /packages/runtime/index.html?project=promos/primitives/uis/ui/ui-maps.promo
promo#ui-maps
  // =====================================================================
  // 01 · bump_map_from
  // =====================================================================
  scene#m01-bump(duration=7 transition=none)
    camera(type=perspective fov=32 near=1 far=8000 position="0 120 700" look_at="0 0 0")
      position
        0 -160 160 700
        3.5 easeInOutSine 160 100 660
        7 easeInOutSine -160 160 700
    background(top=#14141a bottom=#050507)
    lights
      light(type=ambient color=#ffffff intensity=0.22)
      light#m01-bump-rake(type=directional color=#ffffff intensity=2.2 position="-700 220 500")
        position
          0 0 0 0
          3.5 easeInOutSine 1400 60 0
          7 easeInOutSine 0 0 0
      light(type=directional color=#9ab0ff intensity=0.7 position="500 -100 300")
    environment(hdr="studio_small_04_2k" as_background=false exposure=1.0 blurriness=0.35 intensity=0.6)
    postprocessing
      step(name=render)
      step(name=unreal_bloom strength=0.14 radius=0.45 threshold=0.9)
      step(name=film_grain grain=0.03 scanlines=0 vignette=0.22 vignette_start=0.5 output_transform=1 exposure=1.0)
    haze#m01-bump-hz(opacity=0.5 color=#22232a size="3600 2400" pulse=0 decay=0 position="-500 500 -1200")
    text#m01-bump-title(text="01 · bump_map_from — per-pixel edge shading from an authored grayscale twin · no geometry" kind=layer size=600 worldHeight=14 color=#8ea3c8 weight=600 align=center position="0 230 0")
    primitive#m01-bump-pl(position="0 0 0" rotation="-18 0 0")
      geometry(type=plane width=600 height=340)
      material(ref=physical color=#ffffff metalness=0.1 roughness=0.45 bump-scale=2.4)
        map_from(flip_y=false)
          source(factory="ui/scene" width=600 height=340)
            card(x=0 y=0 w=600 h=340 r=0 fill=#0b0d14 shadow=false)
            card(x=22.2