Skip to content

Commit 15c1afb

Browse files
TMHSDigitalclaude
andcommitted
fix: iron-cauldron quality pass, bellied pot and a bail that threads 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>
1 parent 0ec8474 commit 15c1afb

8 files changed

Lines changed: 724 additions & 86 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
132132
<a href="showcase/wooden-bucket/"><img src="showcase/wooden-bucket/preview.webp" width="24%" alt="Wooden bucket: a coopered pail with a three-strand rope bail through iron ear rings and chord-lofted iron hoops on a dark studio floor" /></a>
133133
<a href="showcase/wall-torch/"><img src="showcase/wall-torch/preview.webp" width="24%" alt="Wall torch: a dressed stone plaque with an iron sconce, wooden haft, and flame on a dark studio floor" /></a>
134134
<a href="showcase/tavern-stool/"><img src="showcase/tavern-stool/preview.webp" width="24%" alt="Tavern stool: a round wooden seat on turned splayed legs with stretchers and iron ferrules on a dark studio floor" /></a>
135-
<a href="showcase/iron-cauldron/"><img src="showcase/iron-cauldron/preview.webp" width="24%" alt="Iron cauldron: a bulged iron pot hanging from a timber tripod on a dark studio floor" /></a>
135+
<a href="showcase/iron-cauldron/"><img src="showcase/iron-cauldron/preview.webp" width="24%" alt="Iron cauldron: a round-bellied cast-iron pot hanging by its bail from a timber tripod on a dark studio floor" /></a>
136136
<a href="showcase/wooden-ladder/"><img src="showcase/wooden-ladder/preview.webp" width="24%" alt="Wooden ladder: a raked timber ladder with six rungs and iron shoes on a dark studio floor" /></a>
137137
<a href="showcase/hay-bale/"><img src="showcase/hay-bale/preview.webp" width="24%" alt="Hay bale: a bound straw bale with two sisal twine belts on a dark studio floor" /></a>
138138
<a href="showcase/crate-stack/"><img src="showcase/crate-stack/preview.webp" width="24%" alt="Crate stack: three slatted shipping crates stacked and yawed, each with iron corner straps and runners, on a dark studio floor" /></a>
@@ -185,7 +185,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
185185

186186
[`tavern-stool`](showcase/tavern-stool/) — procedural tavern stool with turned legs, stretchers, and iron ferrules through the same pipeline. Falsifier `--skip-decimate` exits 9.
187187

188-
[`iron-cauldron`](showcase/iron-cauldron/) — procedural hanging iron cauldron on a timber tripod through the same pipeline. Falsifier `--skip-decimate` exits 9.
188+
[`iron-cauldron`](showcase/iron-cauldron/) — procedural round-bellied iron cauldron on a timber tripod through the same pipeline. Falsifiers `--skip-decimate` exits 9, `--pointed-pot` exits 19.
189189

190190
[`wooden-ladder`](showcase/wooden-ladder/) — procedural timber ladder with raked stiles, rungs, and iron shoes through the same pipeline. Falsifier `--skip-decimate` exits 9.
191191

-136 Bytes
Loading
-124 Bytes
Loading

‎docs/gallery/iron-cauldron/index.html‎

Lines changed: 351 additions & 44 deletions
Large diffs are not rendered by default.

‎showcase/gallery.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,9 @@
312312
{
313313
"name": "iron-cauldron",
314314
"dir": "showcase/iron-cauldron",
315-
"teaches": "A procedural hanging iron cauldron with a bulged open pot, bail, and timber tripod through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
316-
"alt": "A black iron cauldron hanging from a tripod of wooden poles.",
317-
"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.046 m, 3 coaxial ferrules at zmin 0, ferrule bite −0.00185 m, hook-bail join 0, mesh hygiene all zero, LOD ratios in band, convex collider 250 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-legs 16; --float-hook 17; --pipe-ferrule 18.",
315+
"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.",
316+
"alt": "A round-bellied black iron cauldron hanging by its bail from a tripod of wooden poles.",
317+
"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.",
318318
"hero": "docs/gallery/assets/iron-cauldron-hero.webp",
319319
"preview": "showcase/iron-cauldron/preview.webp",
320320
"tags": [

‎showcase/iron-cauldron/README.md‎

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Iron cauldron
22

3-
A showcase piece, not an example. Procedural hanging cauldron (lathed
4-
iron pot with a rolled rim, pipe bail through vertical ear rings, timber
3+
A showcase piece, not an example. Procedural hanging cauldron (a
4+
round-bellied iron pot on a small flat base with a rolled rim, a pipe
5+
bail threaded through flat ear rings, timber
56
tripod tenoned into a turned crown, iron ferrule cups coaxial with the
67
poles) then the shipped pipeline: unique-cell UVs, Cycles high-to-low
78
normal bake, LOD chain, convex collider, Unity glTF export.
@@ -34,8 +35,8 @@ materials, UVs, evaluated LOD, collider, or export file.
3435
| Materials | exactly 2 distinct; ≥80 wood, ≥200 metal faces | 2 slots; 224 / 1768 |
3536
| UVs | in `0..1`, AABB overlap ≤ 1e-5 | in range, overlap 0 |
3637
| Outer AABB | (0.987, 0.961, 0.860) m ± 0.015 | (0.9866, 0.9605, 0.8600), zmin 0 |
37-
| Collider tris | ≤ 280 | 250 |
38-
| Export | written, size > 0 | 287916 / 287916 / 287904 bytes |
38+
| Collider tris | ≤ 280 | 246 |
39+
| Export | written, size > 0 | 287380 / 287380 / 287368 bytes |
3940

4041
Base triangles rose from **3388 to 3664** in the quality pass: coaxial
4142
ferrule cups and a dual-wall lathe with a rolled rim replaced the old
@@ -55,25 +56,50 @@ Recomputed from the generated mesh, not asserted about the script.
5556
| Coplanar disjoint face pairs | 0 | 0 |
5657
| Grounded: `zmin` | within 1e-4 of 0 | 0.0000 |
5758
| Named supports: 3 ferrules | each `zmin` ≤ 1e-3 | 3, cup_z 0.00000 |
58-
| Pot size | 0.355 m dia × 0.334 m high ± 0.04 | 0.3545 × 0.3340 |
59-
| Pot–leg clearance | ≥ 0.04 m | 0.0464 |
59+
| Pot size | 0.355 m dia × 0.334 m high ± 0.04 | 0.3600 × 0.3340 |
60+
| **Pot form** | base radius ≥ 0.05 m; widest point in the lower 60% | 0.0750; at 0.420 of the height |
61+
| Pot–leg clearance | ≥ 0.04 m | 0.0528 |
6062

6163
### Joint fit and seat
6264

6365
| Axis | Declared | Measured (all three) |
6466
| --- | --- | --- |
6567
| Hook-bail BVH gap | ≤ 0.010 m | 0.00000 |
68+
| **Bail through the ears** | 2 rings; 0 ring vertices inside the bail; bail within the hole (< 0.0135 m of the ring centre) | 2; 0; 0.00641 |
6669
| Ferrule bite (pole r − inner wall, pole frame) | −0.006–0.000 m | −0.00185 |
6770

6871
DECIMATE COLLAPSE triangle counts are **not** identical across series —
6972
the gate is a ratio band, not an exact count. Bake pixels are
7073
stochastic; the gate is `has_data` plus operator `FINISHED`, not
71-
byte-identity. Construction uses no RNG. Export byte counts differ by
72-
12 B on 5.2.1 (glTF serializer), not a gated axis.
74+
byte-identity. Construction is closed-form; the only RNG is the seeded
75+
per-pole wood tone. Export byte counts differ on 5.2.1 (glTF
76+
serializer), not a gated axis.
77+
78+
### Pot, ears and surface
79+
80+
The pot was a quadratic profile from a 28 mm tip: an onion that ran to a
81+
point. It is now a superellipse belly from a 75 mm flat base out to
82+
0.180 m at 0.42 of the height, then a rounded shoulder in to a 0.128 m
83+
mouth. The inner wall is offset along the profile's normal, not
84+
sideways, so it keeps its thickness where the wall runs nearly flat.
85+
**Pot form** asserts it; `--pointed-pot` restores the old profile (base
86+
0.028 m, widest at 0.727 of the height) and exits 19.
87+
88+
The ear rings stood in the bail's own XZ plane, so the bail ran through
89+
the ring's tube rather than its hole, and its ends hung into the pot's
90+
mouth. The rings now lie flat, bite 2 mm into the rim's outer edge, and
91+
the bail (vertical where it passes) threads them. Past each ear the bail
92+
is mirrored about the ring, so its ends hook outward. **Bail through the
93+
ears** asserts it; `--edge-on-ears` restores the old rings (36 ring
94+
vertices inside the bail) and exits 17.
95+
96+
Cast iron is near-black and rough with rust in the pores; each pole has
97+
its own tone and grain along its axis. The temp `.glb` is removed after
98+
its size is measured.
7399

74100
### Falsifiers
75101

76-
Each violates one named budget. All seven were run on 4.5.11, 5.1.2 and
102+
Each violates one named budget. All nine were run on 4.5.11, 5.1.2 and
77103
5.2.1 and returned the same code on each.
78104

79105
| Flag | Budget violated | Exit |
@@ -84,6 +110,8 @@ Each violates one named budget. All seven were run on 4.5.11, 5.1.2 and
84110
| `--short-legs` | named ferrule supports at Z=0 | 16 |
85111
| `--float-hook` | hook-bail gap | 17 |
86112
| `--pipe-ferrule` | ferrule bite (pole starts above the well) | 18 |
113+
| `--pointed-pot` | pot form | 19 |
114+
| `--edge-on-ears` | bail through the ears | 17 |
87115

88116
## Run
89117

@@ -95,6 +123,8 @@ blender --background --python iron_cauldron.py -- --lift-z
95123
blender --background --python iron_cauldron.py -- --short-legs
96124
blender --background --python iron_cauldron.py -- --float-hook
97125
blender --background --python iron_cauldron.py -- --pipe-ferrule
126+
blender --background --python iron_cauldron.py -- --pointed-pot
127+
blender --background --python iron_cauldron.py -- --edge-on-ears
98128
blender --background --python iron_cauldron.py -- --output cauldron.png
99129
```
100130

@@ -125,6 +155,6 @@ hygiene and joint-fit family.
125155
| 14 | `--output` produced no file |
126156
| 15 | Mesh hygiene: loose, non-manifold, zero-area, doubles, n-gons, z-fight |
127157
| 16 | Not grounded: bounding box `zmin` off 0, or a named ferrule floats |
128-
| 17 | Joint fit: hook-bail gap |
158+
| 17 | Joint fit: hook-bail gap, or the bail not threading the ear rings |
129159
| 18 | Seat: ferrule bite band |
130-
| 19 | Pot diameter or height off the stated real-world size |
160+
| 19 | Pot diameter or height off the stated real-world size, or pot form (base radius, belly height) |

0 commit comments

Comments
 (0)