Skip to content

fix(examples): redesign gn-modifier-inputs as three GN spiral staircases - #274

Merged
TMHSDigital merged 2 commits into
mainfrom
fix/hero-gn-modifier-inputs
Sep 26, 2026
Merged

TMHSDigital merged 2 commits into
mainfrom
fix/hero-gn-modifier-inputs

Conversation

@TMHSDigital

@TMHSDigital TMHSDigital commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

What changed and why

The gallery review judged the gn-modifier-inputs hero programmer art: three plain cubes (teal/orange/pink), the largest one cropped and flat-lit. This is a redesign, not a touch-up.

The shared Geometry Nodes tree now builds a parametric spiral staircase from its one Float input (renamed Scale → Height; the identifier is still Socket_1):

  • step count = round((Height − 0.3) / 0.1), and the riser is re-derived so the top tread lands exactly
  • the carrier mesh (one bevelled oak tread with its brass baluster) is instanced up a helix at 22.5° per step (Mesh Line → Instance on Points → Realize)
  • a teal enamel newel post, base plate and collar that span exactly [0, Height]
  • a brass helical handrail (Spiral → Curve to Mesh, reversed so it follows the baluster tops)

Heights 1 / 2 / 3 m give 7 / 17 / 27 treads. The three staircases read left to right as one design at three settings of one input. All three share one tree and one set of materials, so the modifier input is the only thing that differs. A lost write drops a staircase back to the 7-step default, which the render would show.

Stage: the default dark studio. The key has a 36° spread and the rim sits high behind the stairs, so the foreground floor stays dark (the old low rim was washing it blue). There are no labels.

Before / after

Gate numbers (5.2.1 LTS, EEVEE)

gate value
framing fill x 0.653, y 0.850 (band 0.70–0.90) ok
margins left 0.191, right 0.156, bottom 0.111, top 0.039 (min 0.020) ok
contact sheet luma / stage / warmth / sat candidate 0.221 / 0.209 / +0.084 / 0.173
calibration armature-bend 0.279 / 0.213 / −0.428 / 0.144; damped-track-aim 0.151 / 0.145 / +0.277 / 0.231; bmesh-gear 0.236 / 0.177 / +0.303 / 0.250
asset floors (SpiralStair.H3) parts 1, materials 2 on the carrier mesh (3 on the evaluated staircase), edge90 0.112
hero drift mean_abs 0.00356, verdict matches
hero / preview size 36.6 KB / 33.7 KB

Contact-sheet verdicts:

  • Stage darkness: pass. Stage 0.209 falls inside the calibration range (0.145–0.213).
  • Wedge warmth: pass, on the cool side. The warm pool sits on the back wall. At +0.084 the candidate is between armature-bend (−0.43) and the warm pair (~+0.29).
  • Subject fill: pass. 0.85 vertical.
  • Saturation: pass. 0.173 is within 0.144–0.250. Teal, oak and brass are complementary.
  • Thumbnail legibility: pass. At 427×240 the three helices and the step progression read immediately.

Mean luma is 0.221, against a calibration range of 0.151–0.279.

Asset sheet verdict: pass. The tall staircase is small in its panel because it is a tall, thin subject. With named parts, three materials, bevelled treads and a continuous rail, it is not the least-designed object beside the hydrant, drone, well, wheelbarrow and shelf. I added a SELECT row in scripts/asset_sheet.py for it.

Check runs (proven by live run)

Each binary reports its version via --version:

binary reports smoke (run_example.py) --same-height --same-scale --api dict --api rna
E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe Blender 5.2.1 LTS PASS exit 7 exit 7 exit 5 TypeError: … id properties not supported for this type exit 0
…\blender-5.1.2-windows-x64\blender.exe Blender 5.1.2 PASS exit 7 exit 7 exit 0 exit 5 AttributeError: 'NodesModifier' object has no attribute 'properties'
…\blender-4.5.11-windows-x64\blender.exe Blender 4.5.11 LTS PASS exit 7 exit 7 exit 0 exit 5 (same AttributeError)

--same-height fails with readback 1.0 != written 2.0 on SpiralStair.H2.

Falsifier for the geometry-bearing check (exit 8): I set RAIL_H = -0.5 via an import probe, which makes the treads climb 0.5 m past the newel post. It fails on both 5.2.1 and 4.5.11 with exit 8: evaluated Z-extent 1.934334 != height 1.0 on SpiralStair.H1. Nothing was changed in the file; the probe was a scratch script.

The check contract itself is unchanged: shared node_group (4), per-version write and read (5/6), readback (7), extent == written value (8), zmin == 0 (9), distinct extents (11).

Proven by live run vs established by inspection only

  • Proven by live run: the check-only path on all three binaries; every falsifier row above; the framing gate; the render; the contact sheet and asset sheet; hero drift matches; build_gallery.py. I also read the generated <img alt> in docs/gallery/index.html and docs/gallery/gn-modifier-inputs/index.html and the witnesses callout.
  • Established by inspection only: the 7 / 17 / 27 tread counts. They follow from the tree's math, are visible in the render, and match the evaluated vertex counts (1588 / 3668 / 5748 = 132 + 208·n). No check asserts the tread count directly. Rendering was only tested on 5.2.1; 4.5 and 5.1 ran check-only.

🤖 Generated with Claude Code

TMHSDigital and others added 2 commits September 25, 2026 22:35
The gallery review judged the hero programmer art: three plain cubes of
different size and colour, the largest cropped and flat-lit. The shared
Geometry Nodes tree now builds a parametric spiral staircase from its one
Float input (renamed Scale -> Height; still Socket_1): step count =
round((Height - 0.3) / 0.1), oak treads with brass balusters instanced up
a helix, a teal newel post and a brass helical handrail. Heights 1/2/3 m
give 7/17/27 treads, so the three modifiers on one tree read left to right
as one design at three settings of one input. A lost write collapses a
tall staircase to the 7-step default, which the render would show.

The check contract is unchanged: shared node_group, per-version write
path (dict on 4.5/5.1, mod.properties.inputs on 5.2), readback, evaluated
Z-extent == written value (the newel post spans exactly [0, Height]),
zmin == 0, distinct extents. --same-height is the falsifier flag;
--same-scale stays as an alias. Lighting: shaped key (36 deg spread) and a
high rim so the foreground floor stays dark. Adds an asset-sheet SELECT row.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
Union of asset-sheet SELECT rows; generated gallery pages regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 26, 2026
@TMHSDigital
TMHSDigital merged commit dbd327e into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-gn-modifier-inputs branch September 26, 2026 03:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant