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