Skip to content

Commit 5bbf13e

Browse files
TMHSDigitalclaude
andcommitted
fix: anvil quality pass, a forged waist instead of a turned funnel
The waist was lofted from ellipses and read as a funnel; it is now a squared superellipse section flaring foot to pinch to body (waist form, exit 19, --round-waist). Dark forged steel, per-piece wood, 60 m stage, 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 e5ac96d commit 5bbf13e

8 files changed

Lines changed: 487 additions & 63 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
122122
<a href="showcase/cart/"><img src="showcase/cart/preview.webp" width="24%" alt="Cart: a two-wheel wooden cart with spoked wheels, slatted bed, and shafts on a dark studio floor" /></a>
123123
<a href="showcase/park-bench/"><img src="showcase/park-bench/preview.webp" width="24%" alt="Park bench: a wrought-iron bench with scrolled legs and wooden slats on a dark studio floor" /></a>
124124
<a href="showcase/wheelbarrow/"><img src="showcase/wheelbarrow/preview.webp" width="24%" alt="Wheelbarrow: a wooden tray with walls of stacked boards and iron straps, a spoked wheel, rear legs, and handles on a dark studio floor" /></a>
125-
<a href="showcase/anvil/"><img src="showcase/anvil/preview.webp" width="24%" alt="Anvil: a London-pattern anvil on a hooped timber stump on a dark studio floor" /></a>
125+
<a href="showcase/anvil/"><img src="showcase/anvil/preview.webp" width="24%" alt="Anvil: a dark forged-steel London-pattern anvil with a flared, squared waist on a hooped timber stump on a dark studio floor" /></a>
126126
<a href="showcase/water-trough/"><img src="showcase/water-trough/preview.webp" width="24%" alt="Water trough: a watertight wooden trough with plank ends, contained water, and trestle legs on a dark studio floor" /></a>
127127
<a href="showcase/hitching-post/"><img src="showcase/hitching-post/preview.webp" width="24%" alt="Hitching post: a square timber post with a pyramidal cap, cross-arm, iron bands wrapped around it, and two hitching rings on a dark studio floor" /></a>
128128
<a href="showcase/grindstone/"><img src="showcase/grindstone/preview.webp" width="24%" alt="Grindstone: a stone wheel on a timber A-frame with an iron axle, hubs, crank, and tray on a dark studio floor" /></a>
@@ -165,7 +165,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
165165

166166
[`wheelbarrow`](showcase/wheelbarrow/) — procedural wheelbarrow with board-built tray walls, a spoked wheel, iron straps, legs, and handles through the same pipeline. Falsifiers `--skip-decimate` exits 9, `--wide-seams` exits 17.
167167

168-
[`anvil`](showcase/anvil/) — procedural London-pattern anvil on a timber stump through the same pipeline. Falsifier `--skip-decimate` exits 9.
168+
[`anvil`](showcase/anvil/) — procedural London-pattern anvil on a timber stump through the same pipeline. Falsifiers `--skip-decimate` exits 9, `--round-waist` exits 19.
169169

170170
[`water-trough`](showcase/water-trough/) — procedural watertight water trough on a timber stand through the same pipeline. Falsifier `--skip-decimate` exits 9.
171171

‎docs/gallery/anvil/index.html‎

Lines changed: 237 additions & 32 deletions
Large diffs are not rendered by default.
1020 Bytes
Loading
364 Bytes
Loading

‎showcase/anvil/README.md‎

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ materials, UVs, evaluated LOD, collider, or export file.
2828

2929
| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) |
3030
| --- | --- | --- |
31-
| Base triangles | 2500–4500 | 2988 / 2988 / 2988 |
31+
| Base triangles | 2500–4500 | 3052 / 3052 / 3052 |
3232
| LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 |
3333
| LOD2 ratio | 0.10–0.35 of base | 0.2195 / 0.2195 / 0.2195 |
34-
| Materials | exactly 2 distinct; ≥400 wood, ≥400 metal faces | 2 slots; 1040 / 822 |
34+
| Materials | exactly 2 distinct; ≥400 wood, ≥400 metal faces | 2 slots; 1040 / 854 |
3535
| UVs | in `0..1`, AABB overlap ≤ 1e-5 | in range, overlap 0 |
3636
| Outer AABB | (0.621, 0.414, 0.489) m ± 0.015 | (0.6210, 0.4137, 0.4890), zmin 0 |
3737
| Collider tris | ≤ 280 | 134 |
38-
| Export | written, size > 0 | 244052 / 244052 / 244036 bytes |
38+
| Export | written, size > 0 | 248532 / 248532 / 248516 bytes |
3939

4040
Base triangles dropped from **6616 to 2988** in the quality pass:
4141
overlapping face boxes and a beveled superellipse horn became one
@@ -45,8 +45,9 @@ the waste.
4545
DECIMATE COLLAPSE triangle counts are **not** identical across series —
4646
the gate is a ratio band, not an exact count. Bake pixels are
4747
stochastic; the gate is `has_data` plus operator `FINISHED`, not
48-
byte-identity. Stave-width jitter uses fixed seed 17. Export byte counts
49-
differ by 16 B on 5.2.1 (glTF serializer), not a gated axis.
48+
byte-identity. Stave-width jitter uses fixed seed 17, and the per-piece
49+
wood tone its own seed. Export byte counts differ on 5.2.1 (glTF
50+
serializer), not a gated axis.
5051

5152
### Hygiene
5253

@@ -63,6 +64,7 @@ Recomputed from the generated mesh, not asserted about the script.
6364
| Grounded: `zmin` | within 1e-4 of 0 | 0.0000 |
6465
| Named supports: 16 staves | each `zmin` ≤ 0.001 | 16, stave_z 0.00000 |
6566
| Body plan | 0.621 m long × 0.180 m high ± 0.05 | 0.6210 × 0.1800 |
67+
| **Waist form** | corner reach at the pinch ≥ 0.80 (an ellipse is 0.707) | 0.8572 |
6668

6769
### Joint fit and seat
6870

@@ -71,9 +73,23 @@ Recomputed from the generated mesh, not asserted about the script.
7173
| Foot-on-head BVH gap | ≤ 0.006 m | 0.00300 |
7274
| Hoop bite (host r − inner hoop r) | 0.0012–0.008 m | 0.00300 |
7375

76+
### Waist, steel and stump
77+
78+
The waist was lofted from ellipses, so under the rectangular face it read
79+
as a turned funnel, not a forged anvil. It is now a superellipse section
80+
(exponent 4.5) through five stations that flare from the foot in to a
81+
pinch and out to the body. **Waist form** measures corner reach at the
82+
narrowest ring: how far a section vertex fills its bounding rectangle's
83+
corner. `--round-waist` restores the ellipse and exits 19 (0.7071).
84+
85+
The steel was satin (metallic 0.92, roughness 0.32) and read as chrome;
86+
it is now dark forged steel with rust. Staves and head carry their own
87+
wood tone and grain. The stage grid grew from 14 to 60 m. The temp `.glb`
88+
is removed after its size is measured.
89+
7490
### Falsifiers
7591

76-
Each violates one named budget. All six were run on 4.5.11, 5.1.2 and
92+
Each violates one named budget. All seven were run on 4.5.11, 5.1.2 and
7793
5.2.1 and returned the same code on each.
7894

7995
| Flag | Budget violated | Exit |
@@ -84,6 +100,7 @@ Each violates one named budget. All six were run on 4.5.11, 5.1.2 and
84100
| `--short-staves` | named stave supports at Z=0 | 16 |
85101
| `--float-anvil` | foot-on-head gap | 17 |
86102
| `--round-band` | hoop bite band | 18 |
103+
| `--round-waist` | waist form | 19 |
87104

88105
## Run
89106

@@ -95,6 +112,7 @@ blender --background --python anvil.py -- --lift-z
95112
blender --background --python anvil.py -- --short-staves
96113
blender --background --python anvil.py -- --float-anvil
97114
blender --background --python anvil.py -- --round-band
115+
blender --background --python anvil.py -- --round-waist
98116
blender --background --python anvil.py -- --output anvil.png
99117
```
100118

@@ -127,4 +145,4 @@ hygiene and joint-fit family.
127145
| 16 | Not grounded: bounding box `zmin` off 0, or a named stave floats |
128146
| 17 | Joint fit: foot-on-head gap (`--float-anvil`) |
129147
| 18 | Seat: hoop bite band (`--round-band`) |
130-
| 19 | Body length or height off the stated real-world size |
148+
| 19 | Body length or height off the stated real-world size, or waist form (`--round-waist`) |

0 commit comments

Comments
 (0)