Skip to content

fix: iron-cauldron, campfire, usd-export-evaluation-mode and gn-modifier-inputs quality pass - #234

Merged
TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-cauldron-campfire-examples
Sep 23, 2026
Merged

TMHSDigital merged 5 commits into
mainfrom
fix/quality-pass-cauldron-campfire-examples

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Quality pass: four items, two showcase (Track A) and two gallery examples (Track B). Every pathology/cross-version example (Track C) had already been reviewed. Everything below comes from live runs on .scratch/blender-{4.5.11,5.1.2,5.2.1}-windows-x64/blender.exe, which report 4.5.11 LTS / 5.1.2 / 5.2.1 LTS, unless it is labelled inspection. Baselines were taken on the pristine tree before any edit.

(The prompt asks for "four or five pieces" in its intro and "two or three items" in Step 2. This run takes four.)

A — showcase/iron-cauldron

Took 3 inspection rounds.

Defects

  1. The pot ran to a point: an onion, not a cauldron (round 0, every ortho, pot_bottom close-up). The profile was a quadratic from a 28 mm tip.
  2. The ear rings stood in the bail's own XZ plane, so the bail ran through each ring's tube instead of its hole (round 2, hook_bail close-up, top ortho).
  3. The bail's ends hung down into the pot's mouth (hook_bail and interior close-ups).
  4. The pot was satin grey metal and the poles were one flat tone (three-quarters, hero).
  5. The temp .glb export leaked.

Round 1 fixed 1 but overshot: the bellied pot read as a straight-sided pail, because the belly was only 24 mm wider than the mouth. Round 2 narrowed the mouth. Round 3 fixed 2 and 3.

Fixes, and why each is structural

  • 1: pot_profile is a superellipse belly from a stated 75 mm flat base (R_BOT) out to R_BELLY 0.180 m at BELLY_Z (0.42 of the height), then a rounded shoulder in to a 0.128 m mouth (R_TOP, was 0.148). The inner wall is offset along the profile's normal; a sideways offset would thin the wall to nothing where it runs flat under the belly.
  • 2, 3: the rings lie flat (hole along Z). They are positioned from the rim (R_TOP + RIM_OUT + EAR_MAJOR + EAR_MINOR − EAR_BITE), so each bites 2 mm into the rim's outer edge, and the bail, vertical where it passes, threads them. Past each ear the bail curve is mirrored about the ring, so the ends hook outward.
  • 4: cauldron_materials: near-black rough cast iron with rust in the pores, plus per-pole PlankTone/GrainDir wood (from shipping-crate).
  • 5: the export is removed after its size is measured.

New budgets, identical on 4.5.11, 5.1.2 and 5.2.1:

Budget Band Measured
Pot form (exit 19) base radius ≥ 0.05 m; widest point in the lower 60% of the height 0.0750; 0.420
Bail through the ears (exit 17) 2 rings; 0 ring vertices inside the bail (nearest-face normal); bail within the hole of each ring centre 2; 0; 0.00641

Triangles: 3664 → 3664 (same topology, new shape). Pot–leg clearance 0.0464 → 0.0528. Collider 250 → 246. Same-binary deterministic.

Falsifiers, all on all three binaries:

  • --pointed-pot restores the quadratic profile → 19 (base 0.028, widest at 0.727).
  • --edge-on-ears restores the old rings → 17 (36 ring vertices inside the bail). The envelope is unchanged (the tripod sets it).

Existing exit codes, before → after, identical on all three: default 0→0, --skip-decimate 9→9, --lift-z 16→16, --stray-vert 15→15, --short-legs 16→16, --float-hook 17→17, --pipe-ferrule 18→18.

Hero: check_framing without deviation=. Contact sheet: docs/gallery/contact-sheets/iron-cauldron-contact-sheet.webp, luma 0.177 (band 0.151–0.305), stage 0.172.

A — showcase/campfire

Took 1 inspection round plus a jitter adjustment checked in the hero.

Defects

  1. The ring was 28 identical curved bricks with flat tops, flat faces and one height. It read as a concrete kerb (every ortho, ring_top and ring_joint close-ups).
  2. Flat single-tone stone, wood and ash (three-quarters, hero).
  3. Stones were all nearly the same length (round 1 top ortho). Span jitter was 0.10.
  4. The temp .glb export leaked.

Fixes, and why each is structural

  • 1: add_stone lofts a chamfered octagon section along each stone's span. The section swells to a seeded belly mid-stone, pinches to END_PINCH and is capped at the ends, and has a seeded radial offset and outer-face wobble. Top-course stones get a seeded crown. Beds stay flat, and the bottom course's crown stays at bed height, so the course seat is unchanged (0.00000). stations = 3 + bevel_segments keeps the high/low bake pair distinct. The old add_wedge and stone bevel pass are removed.
  • 2: campfire_materials: fieldstone from stone-archway's recipe (isotropic mottling, speckle, pitting, per-stone PieceTone); wood with per-piece tone and grain along each stick; ash with sparse ember emission.
  • 3: STONE_JITTER 0.10 → 0.22.
  • 4: export removed after measuring.

New budget, identical on all three binaries:

Budget Band Measured
Stone variation (exit 20, file-local) per course, spread of stone outer radius, and of crown height on the top course, each ≥ 0.006 m 0.01269 (smallest spread)

Triangles: 2200 → 2760 (ceiling 3600). Collider 198 → 162. The stated ring height RING_H 0.156 → 0.176 m for the crowns (measured 0.1759). OUTER_SIZE unchanged; measured (0.8024, 0.8022, 0.4037). Same-binary deterministic.

Falsifier: --uniform-stones gives every stone the same draw → 20 on all three binaries (spread 0.00000). The first version zeroed every jitter and exited 8, because the ring shrank 15 mm. Following "keep a falsifier's envelope still", every jitter now sits at its upper bound instead: the stones are identical, and the envelope (0.8147) stays within tolerance.

Existing exit codes, before → after, identical on all three: default 0→0, --skip-decimate 9→9, --stray-vert 15→15, --lift-z 16→16, --short-stones 16→16, --float-logs 17→17, --gap-courses 18→18.

Hero: framing passes without deviation=. Contact sheet: docs/gallery/contact-sheets/campfire-contact-sheet.webp, luma 0.217, stage 0.178.

B — examples/usd-export-evaluation-mode

Presentation changes (render path only):

  • Grounding. Catmull-Clark pulls the surface inside the 2 m cage, so both balls hovered 0.160 m above the floor (measured). The render path now rests each one on z = 0 from its own evaluated vertices; measured zmin is 0.000000 for both. A first attempt used bound_box and did not move them; the probe caught it.
  • Key light 200 → 420 W; aim lowered to rebalance the frame.
  • README: the duplicated still paragraph is replaced by a staging note.

Contract unchanged. Before → after, identical on all three binaries: default 0 → 0, --evaluation-mode VIEWPORT 4 → 4, --subdivision BEST_MATCH 4 → 4.

Framing: check_framing in the render path passes (fill x 0.803, min margin 0.053). Contact sheet: docs/gallery/contact-sheets/usd-export-evaluation-mode-contact-sheet.webp, luma 0.188.

B — examples/gn-modifier-inputs

Presentation changes (layout and render only):

  • Interpenetration. XS was (−2.2, 0.15, 2.45), which overlapped the 2 m and 3 m cubes by 0.2 m, although the comment above it promised a clear gap. Now (−2.6, −0.6, 2.4), 0.5 m apart. The check reads only each cube's evaluated Z extent and zmin, never X.
  • Frontal, higher camera, so small to large reads left to right without occlusion. Softer key. Material metallic 0.35 → 0.1 and roughness 0.28 → 0.45, so the tops no longer blow out white.
  • README: staging note.

Contract unchanged. Before → after, identical on all three binaries: default 0 → 0, --same-scale 7 → 7.

Framing: check_framing passes (fill x 0.778, min margin 0.069). Contact sheet: docs/gallery/contact-sheets/gn-modifier-inputs-contact-sheet.webp, luma 0.219.

Also

  • showcase/README.md conventions: A ring is threaded across its hole, never in its plane; A vessel has a base and a belly; Stones are lumps, and no two match.
  • Gallery alts, teaches/witnessesFix text and root README alts and lines updated. Gallery regenerated, with the generated <img alt> and witness callouts read back.
  • Known gaps, not closed here:

🤖 Generated with Claude Code

TMHSDigital and others added 5 commits September 23, 2026 14:57
…its ears

The pot was a quadratic from a 28 mm tip; it is now a superellipse belly on
a flat base (pot form, exit 19, --pointed-pot). The ear rings stood in the
bail's plane so the bail ran through their tubes; they lie flat now and the
bail threads them, ends hooking outward (exit 17, --edge-on-ears). Cast
iron, per-pole wood, temp glb removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Each ring stone is a lofted chamfered lump with a seeded belly, offset and
crown; beds stay flat so the courses still seat. Stone variation budget
(exit 20, --uniform-stones). Fieldstone, wood and ember materials; temp glb
removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Render path only: both subdivided balls hovered 0.16 m above the floor;
each now rests on z = 0 from its evaluated vertices. Brighter key.
Contract and exit codes unchanged on 4.5.11, 5.1.2 and 5.2.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Layout and render only: XS overlapped the 2 m and 3 m cubes by 0.2 m; they
now stand 0.5 m apart. Frontal camera, duller finish. The check reads only
Z extents; contract and exit codes unchanged on 4.5.11, 5.1.2 and 5.2.1.
Also regenerates the gallery index for all four items.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
… stones

From the iron-cauldron and campfire passes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@TMHSDigital TMHSDigital added the needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. label Sep 23, 2026
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ showcase Budget-conformance props under showcase/ documentation Improvements or additions to documentation labels Sep 23, 2026
@TMHSDigital
TMHSDigital merged commit f91f50a into main Sep 23, 2026
13 checks passed
@TMHSDigital
TMHSDigital deleted the fix/quality-pass-cauldron-campfire-examples branch September 23, 2026 19:04
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/ needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. showcase Budget-conformance props under showcase/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant