You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e6a0d68
Browse filesBrowse the repository at this point in the historyBrowse files
The #202 asset sheet read iron-cauldron as the least-designed object in its
lineup: a smooth near-black pot on a bare rod under a turned wooden ball.
Model (still 2 materials, all budgets kept):
- a five-link chain (interlocked, alternating planes) replaces the hanging rod
- a forged iron tripod head replaces the turned wooden crown
- a raised casting band at the belly and three splayed stub feet on the pot
- cast-iron material: the wear noise goes through a contrast ramp, so rust
reads as blotches rather than a uniform tint, plus fine sand-cast pitting
(render only)
hook_bail_join now takes the lowest small iron shell as the hook; the chain
links are small iron shells too but only meet each other. --float-hook still
moves the hook and still lands on 17.
Budgets (identical on 4.5.11, 5.1.2, 5.2.1): base 4180 tris (ceiling 4200),
LOD1 0.5000 / LOD2 0.2196, collider 252 (<= 280), 2 materials (144 wood /
2116 metal faces), AABB unchanged, hygiene clean, pot clearance 0.0528.
The first trim landed at 4192, and --short-legs's 12-tri shim then tripped
the triangle budget (4) before the support check (16). The band was cut to
26 segments instead of widening the band.
Proof (local .scratch Blender): all 8 README falsifiers land on their
declared exits on 5.2.1 and 4.5.11 (check_falsifier_targets --run --only
iron-cauldron); framing fill 0.750 ok; aq_ok.
Hero, 640 card and preview regenerated with scripts/render_hero.py; contact
sheet luma 0.1785 / stage 0.1715 (was 0.1767 / 0.1715, so the darker-than-
calibration stage predates this change); asset sheet rebuilt: the pot now
carries rust, band, bail and chain. Thin tripod still the sparsest
silhouette in the lineup; judged a pass. Gallery alt text updated.
Refs #345
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
<articleclass="card" data-tags="mesh export showcase" data-kind="showcase" data-category="village" data-name="iron-cauldron" data-search="iron cauldron iron-cauldron a procedural hanging iron cauldron with a round-bellied pot, a bail threaded through flat ear rings, and a timber tripod through uvs, bake, lod, collider, and unity gltf, asserting recomputed budgets rather than an api contract. mesh export showcase village">
1101
1101
<divclass="card-media">
1102
-
<imgsrc="assets/iron-cauldron-hero-640.webp" srcset="assets/iron-cauldron-hero-640.webp 640w, assets/iron-cauldron-hero.webp 1280w" sizes="(min-width: 900px) 340px, (min-width: 560px) 50vw, 100vw" alt="A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles." width="1280" height="720" loading="lazy" decoding="async" />
1102
+
<imgsrc="assets/iron-cauldron-hero-640.webp" srcset="assets/iron-cauldron-hero-640.webp 640w, assets/iron-cauldron-hero.webp 1280w" sizes="(min-width: 900px) 340px, (min-width: 560px) 50vw, 100vw" alt="A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles." width="1280" height="720" loading="lazy" decoding="async" />
Copy file name to clipboardExpand all lines: docs/gallery/iron-cauldron/index.html
+8-8Lines changed: 8 additions & 8 deletions
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@
19
19
<metaproperty="og:image:alt" content="Four renders from the examples gallery: a red low-poly hatchback, a soccer ball, gold spikes aimed at a glowing sphere, and two spheres on pedestals labelled linked and unlinked" />
<metaname="twitter:image:alt" content="A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles." />
22
+
<metaname="twitter:image:alt" content="A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles." />
<metaname="twitter:description" content="A procedural hanging iron cauldron with a round-bellied pot, a bail threaded through flat ear rings, and a timber tripod through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
<buttonclass="detail-hero" id="heroZoom" type="button" aria-label="View full size: A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles.">
53
-
<imgsrc="../assets/iron-cauldron-hero.webp" alt="A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles." width="1280" height="720" fetchpriority="high" />
52
+
<buttonclass="detail-hero" id="heroZoom" type="button" aria-label="View full size: A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles.">
53
+
<imgsrc="../assets/iron-cauldron-hero.webp" alt="A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles." width="1280" height="720" fetchpriority="high" />
54
54
</button>
55
55
<pclass="zoom-hint">Rendered headless by the showcase piece itself. Select it to enlarge.</p>
56
56
<divclass="callout"><spanclass="tag">witnesses</span> Recomputed: 3664 tris, two materials with 224 wood and 1768 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.987×0.961×0.860 m, pot–leg clearance 0.053 m, pot base radius 0.075 m, 3 coaxial ferrules at zmin 0, ferrule bite −0.00185 m, hook-bail join 0, bail threads both ear rings, mesh hygiene all zero, LOD ratios in band, convex collider 246 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-legs 16; --float-hook/--edge-on-ears 17; --pipe-ferrule 18; --pointed-pot 19.</div>
@@ -62,19 +62,19 @@ <h1>Iron Cauldron</h1>
62
62
</div>
63
63
<navclass="jumpnav" aria-label="On this page"><spanclass="tag">jump to</span><ahref="#run">Run</a><ahref="#exit-codes">Exit codes</a><ahref="#source">Source</a><ahref="#related">Related</a></nav>
64
64
<sectionclass="detail-section md">
65
-
<p>A showcase piece, not an example. Procedural hanging cauldron (a round-bellied iron pot on a small flat base with a rolled rim, a pipe bail threaded through flat ear rings, timber tripod tenoned into a turned crown, iron ferrule cups coaxial with the poles) then the shipped pipeline: unique-cell UVs, Cycles high-to-low normal bake, LOD chain, convex collider, Unity glTF export.</p>
65
+
<p>A showcase piece, not an example. Procedural hanging cauldron (a round-bellied cast-iron pot with a rolled rim, a raised casting band at the belly and three stub feet, a pipe bail threaded through flat ear rings and hung by a five-link chain, a timber tripod seated in a forged iron head, iron ferrule cups coaxial with the poles) then the shipped pipeline: unique-cell UVs, Cycles high-to-low normal bake, LOD chain, convex collider, Unity glTF export.</p>
66
66
<p>Ferrules are lofted along the pole axis and shifted so the downhill rim sits at Z=0. A world-Z bucket lets a leaning pole slice the lip. <code>ferrule_bite</code> is measured in that same frame, and only samples wood inside the cup's own axis span — a pole hovering above the well cannot fake a seat.</p>
67
67
<p>It asserts <strong>budget conformance</strong> of the generated result. It does not witness an API contract. "It rendered without error" is not a check.</p>
68
68
<p><strong>Composes</strong> skills <code>mesh-editing-and-bmesh</code>, <code>bake-high-to-low</code>, <code>depsgraph-and-evaluated-data</code>, <code>engine-export-presets</code>, and snippets <code>bake_normal_high_to_low.py</code>, <code>setup_bake_target_image.py</code>, <code>lod_chain.py</code> / <code>decimate_to_budget.py</code>, <code>convex_hull_collider.py</code>, <code>export_preset_unity.py</code> (helpers copied, not imported as a package).</p>
69
69
<h2id="budgets">Budgets<aclass="anchor" href="#budgets" aria-label="Link to this section">#</a></h2>
70
70
<p>Declared as named constants; every gate <strong>recomputes</strong> from the mesh, materials, UVs, evaluated LOD, collider, or export file.</p>
<p>Base triangles rose from <strong>3388 to 3664</strong> in the quality pass: coaxial ferrule cups and a dual-wall lathe with a rolled rim replaced the old cone-tripod / overlapping-torus construction.</p>
<p>Base triangles rose from <strong>3388 to 3664</strong> in the quality pass: coaxial ferrule cups and a dual-wall lathe with a rolled rim replaced the old cone-tripod / overlapping-torus construction. The #345 remodel (the asset sheet read it as the least-designed object in the lineup) took it to <strong>4180</strong>: a five-link chain replaced the bare hanging rod, a forged iron head replaced the turned wooden crown, and the pot gained a casting band and three stub feet. The iron material breaks its rust into blotches and adds fine sand-cast pitting. 4180 leaves 20 triangles under the ceiling, enough for <code>--short-legs</code>'s 12-triangle shim to still land on the support check (16), not the triangle budget (4).</p>
73
73
<h3id="hygiene">Hygiene<aclass="anchor" href="#hygiene" aria-label="Link to this section">#</a></h3>
74
74
<p>Recomputed from the generated mesh, not asserted about the script.</p>
75
75
<divclass="table-wrap"><table><thead><tr><thscope="col">Axis</th><thscope="col">Declared</th><thscope="col">Measured (all three)</th></tr></thead><tbody><tr><td>Non-manifold edges</td><td>0</td><td>0</td></tr><tr><td>Loose verts / edges</td><td>0 / 0</td><td>0 / 0</td></tr><tr><td>Doubles merged at 1e-5</td><td>0</td><td>0</td></tr><tr><td>Zero-area faces</td><td>0</td><td>0</td></tr><tr><td>N-gons</td><td>0</td><td>0</td></tr><tr><td>Coplanar disjoint face pairs</td><td>0</td><td>0</td></tr><tr><td>Grounded: <code>zmin</code></td><td>within 1e-4 of 0</td><td>0.0000</td></tr><tr><td>Named supports: 3 ferrules</td><td>each <code>zmin</code> ≤ 1e-3</td><td>3, cup_z 0.00000</td></tr><tr><td>Pot size</td><td>0.355 m dia × 0.334 m high ± 0.04</td><td>0.3600 × 0.3340</td></tr><tr><td><strong>Pot form</strong></td><td>base radius ≥ 0.05 m; widest point in the lower 60%</td><td>0.0750; at 0.420 of the height</td></tr><tr><td>Pot–leg clearance</td><td>≥ 0.04 m</td><td>0.0528</td></tr></tbody></table></div>
76
76
<h3id="joint-fit-and-seat">Joint fit and seat<aclass="anchor" href="#joint-fit-and-seat" aria-label="Link to this section">#</a></h3>
77
-
<divclass="table-wrap"><table><thead><tr><thscope="col">Axis</th><thscope="col">Declared</th><thscope="col">Measured (all three)</th></tr></thead><tbody><tr><td>Hook-bail BVH gap</td><td>≤ 0.010 m</td><td>0.00000</td></tr><tr><td><strong>Bail through the ears</strong></td><td>2 rings; 0 ring vertices inside the bail; bail within the hole (< 0.0135 m of the ring centre)</td><td>2; 0; 0.00641</td></tr><tr><td>Ferrule bite (pole r − inner wall, pole frame)</td><td>−0.006–0.000 m</td><td>−0.00185</td></tr></tbody></table></div>
77
+
<divclass="table-wrap"><table><thead><tr><thscope="col">Axis</th><thscope="col">Declared</th><thscope="col">Measured (all three)</th></tr></thead><tbody><tr><td>Hook-bail BVH gap (the hook is the lowest small iron shell; the chain links above it only meet each other)</td><td>≤ 0.010 m</td><td>0.00000</td></tr><tr><td><strong>Bail through the ears</strong></td><td>2 rings; 0 ring vertices inside the bail; bail within the hole (< 0.0135 m of the ring centre)</td><td>2; 0; 0.00641</td></tr><tr><td>Ferrule bite (pole r − inner wall, pole frame)</td><td>−0.006–0.000 m</td><td>−0.00185</td></tr></tbody></table></div>
78
78
<p>DECIMATE COLLAPSE triangle counts are <strong>not</strong> identical across series — the gate is a ratio band, not an exact count. Bake pixels are stochastic; the gate is <code>has_data</code> plus operator <code>FINISHED</code>, not byte-identity. Construction is closed-form; the only RNG is the seeded per-pole wood tone. Export byte counts differ on 5.2.1 (glTF serializer), not a gated axis.</p>
79
79
<h3id="pot-ears-and-surface">Pot, ears and surface<aclass="anchor" href="#pot-ears-and-surface" aria-label="Link to this section">#</a></h3>
80
80
<p>The pot was a quadratic profile from a 28 mm tip: an onion that ran to a point. It is now a superellipse belly from a 75 mm flat base out to 0.180 m at 0.42 of the height, then a rounded shoulder in to a 0.128 m mouth. The inner wall is offset along the profile's normal, not sideways, so it keeps its thickness where the wall runs nearly flat. <strong>Pot form</strong> asserts it; <code>--pointed-pot</code> restores the old profile (base 0.028 m, widest at 0.727 of the height) and exits 19.</p>
<imgsrc="../assets/iron-cauldron-hero.webp" alt="A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles." />
145
+
<imgsrc="../assets/iron-cauldron-hero.webp" alt="A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles." />
Copy file name to clipboardExpand all lines: showcase/gallery.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -337,7 +337,7 @@
337
337
"dir": "showcase/iron-cauldron",
338
338
"category": "village",
339
339
"teaches": "A procedural hanging iron cauldron with a round-bellied pot, a bail threaded through flat ear rings, and a timber tripod through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
340
-
"alt": "A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles.",
340
+
"alt": "A rust-blotched cast-iron cauldron with a raised belly band, hanging by its bail and a short chain from a forged iron head atop a tripod of wooden poles.",
341
341
"witnessesFix": "Recomputed: 3664 tris, two materials with 224 wood and 1768 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.987×0.961×0.860 m, pot–leg clearance 0.053 m, pot base radius 0.075 m, 3 coaxial ferrules at zmin 0, ferrule bite −0.00185 m, hook-bail join 0, bail threads both ear rings, mesh hygiene all zero, LOD ratios in band, convex collider 246 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-legs 16; --float-hook/--edge-on-ears 17; --pipe-ferrule 18; --pointed-pot 19.",
0 commit comments