Skip to content

Commit 63ede13

Browse files
TMHSDigitalclaude
andcommitted
fix(showcase): give water-trough rippled water, bolted clipped straps, pegs and a bung
Earlier passes changed only materials. The water was still one flat quad on a U prism and read flat, and the iron straps wrap the hull's underside, where the hero camera never sees them. Changes to the geometry: - water lofted along X (22 stations x 10 strips) under two crossing standing waves (2.75 mm half-amplitude) damped to zero at the staves, with a 4 mm meniscus up the wall; the water is the one smooth-shaded material - each strap carries five domed carriage-bolt heads and ends in a clip hooked over the stave rim, so the straps read from above - six trestle pegs: one through each leg across the stretcher tenon and one down each side stretcher - a drain bung low in the right end New budget: bolt seat. Each of exactly 10 bolt heads must have its deepest vertex inside its strap (signed depth; a BVH gap cannot separate a sunk head from one resting proud). The new falsifier --float-bolts lifts the heads 0.015 m and exits 21. Budget changes, justified in the script and README: - Base triangle band 2800-3500 -> 4300-5200 around the new 4792. - Outer AABB (1.093, 0.552, 0.5055) -> (1.111, 0.552, 0.512): the bung adds 18 mm in X, the rim clips 7 mm in Z. - The collider hulls the trough without its sub-2 cm hardware (bolts, pegs, bung): 76 tris, ceiling 80 unchanged. - --float-strap now lifts the straps STRAP_FLOAT 0.012 m (was 0.040). The bolt heads and clips riding on the floated strap widened the AABB past tolerance, so the probe hit exit 8 before the strap seat. It measures a 0.0117 m gap and exits 18 again. Evidence (live runs, local): - .scratch/blender-5.2.1-windows-x64/blender.exe (Blender 5.2.1 LTS) and .scratch/blender-4.5.11-windows-x64/blender.exe (Blender 4.5.11 LTS): default exit 0 on both: base_tris 4792, LOD ratios 0.5000/0.2199, faces wood/metal/water 1656/420/476, bbox (1.1112, 0.5520, 0.5123), collider 76, hygiene all 0, water_gap 0.00249, containment 0 of 120 rays missed, bolt_bite 0.00347. - Falsifiers, identical on both versions: --skip-decimate 9, --stray-vert 15, --lift-z 16, --short-legs 16, --box-ends 17, --float-strap 18, --narrow-hull 19, --open-ends 18 (119 of 120 miss), --slab-ends 20, --float-bolts 21 (bite -0.01153). tests/check_falsifier_targets.py static plus --run --only water-trough pass on both binaries. - Framing (4.5.11 --output): fill y 0.789, margins l .306 r .222 b .050 t .161. - Contact sheet: luma 0.181 / stage 0.179 / warmth +0.072 / sat 0.137. - Asset sheet (docs/gallery/asset-sheets/water-trough.webp): clipped straps, pegged legs and glinting water read. The trough is not the least-designed object (the hydrant is simpler). - 5.1.2 was not run. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent b495655 commit 63ede13

8 files changed

Lines changed: 277 additions & 46 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
123123
<a href="showcase/park-bench/"><img src="showcase/park-bench/preview.webp" width="24%" alt="Park bench: a wrought-iron bench whose round-bar legs curl into scrolled feet, with wooden slats and a reclined back, 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>
125125
<a href="showcase/anvil/"><img src="showcase/anvil/preview.webp" width="24%" alt="Anvil: a forged-steel London-pattern anvil with a hammer-polished face on a hooped timber stump, a hammer at its foot" /></a>
126-
<a href="showcase/water-trough/"><img src="showcase/water-trough/preview.webp" width="24%" alt="Water trough: a watertight wooden trough with plank ends, rippled water, rust-streaked iron straps and trestle legs on a dark studio floor" /></a>
126+
<a href="showcase/water-trough/"><img src="showcase/water-trough/preview.webp" width="24%" alt="Water trough: a staved wooden trough on pegged trestle legs, iron straps bolted and clipped over the rim, rippled water inside and a bung in one end" /></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, a cross-arm on two knee braces with iron end caps, iron bands wrapped around it, two hitching rings and a nailed horseshoe on a dark studio floor" /></a>
128128
<a href="showcase/grindstone/"><img src="showcase/grindstone/preview.webp" width="24%" alt="Grindstone: a sandstone wheel dipping into a water-filled trough on a timber A-frame, with iron axle, hubs and a crank turned toward the viewer, on a dark studio floor" /></a>
129129
<a href="showcase/hand-pump/"><img src="showcase/hand-pump/preview.webp" width="24%" alt="Hand pump: a green-enamelled cast-iron village pump with a fluted barrel, ball finial and counterweighted handle on a stepped wooden plinth, a hooped wooden bucket under its spout" /></a>
748 Bytes
Loading
1.36 KB
Loading
486 Bytes
Loading

‎showcase/gallery.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@
195195
"name": "water-trough",
196196
"dir": "showcase/water-trough",
197197
"teaches": "A procedural watertight water trough through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
198-
"alt": "A staved wooden water trough with half-round ends built of three boards, on crossed trestle legs, half full of rippled dark water.",
198+
"alt": "A staved wooden water trough on pegged trestle legs, iron straps bolted and clipped over its rim, half full of rippled dark water, a bung in one end.",
199199
"witnessesFix": "Recomputed: 3316 tris, three materials with 1482 wood, 156 metal and 29 water faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.093x0.552x0.5055 m, zmin 0, four shoes planted, each end three lapped boards, end rim span 21 mm, strap BVH gap 0, water-hull gap 2.6 mm, water contained on 66 of 66 rays, hull 1.045x0.466 m, LOD ratios in band, convex collider 68 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-legs 16; --box-ends 17; --float-strap/--open-ends 18; --narrow-hull 19; --slab-ends 20.",
200200
"hero": "docs/gallery/assets/water-trough-hero.webp",
201201
"preview": "showcase/water-trough/preview.webp",

‎showcase/water-trough/README.md‎

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Water trough
22

33
A showcase piece, not an example. Procedural staved water trough on a
4-
timber stand (watertight U-hull, board-built ends, contained water, iron
5-
straps, trestle legs) then the shipped pipeline: unique-cell UVs, Cycles
4+
timber stand (watertight U-hull, board-built ends with a drain bung,
5+
contained water with a rippled surface and meniscus, iron straps
6+
through-bolted and clipped over the rim, pegged trestle legs) then the shipped pipeline: unique-cell UVs, Cycles
67
high-to-low normal bake, LOD chain, convex collider, Unity glTF export.
78

89
The hull, ends, straps and water all sample the same YZ arc. Each end
@@ -23,31 +24,41 @@ witness an API contract. "It rendered without error" is not a check.
2324
Hygiene combinatorics match `examples/mesh-hygiene-audit` (copied, not
2425
imported).
2526

26-
Intended size: 1.08 m tray length, 0.44 m across the U, 0.50 m overall
27-
height; outer AABB 1.093 × 0.552 × 0.5055 m.
27+
Intended size: 1.08 m tray length, 0.44 m across the U, 0.51 m overall
28+
height; outer AABB 1.111 × 0.552 × 0.512 m (the bung adds 18 mm in X, the
29+
rim clips 7 mm in Z).
2830

2931
## Budgets
3032

3133
Declared as named constants; every gate **recomputes** from the mesh,
3234
materials, UVs, evaluated LOD, collider, or export file.
3335

34-
| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) |
36+
| Axis | Declared | Measured (4.5.11 / 5.2.1) |
3537
| --- | --- | --- |
36-
| Base triangles | 2800–3500 | 3316 / 3316 / 3316 |
37-
| LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 |
38-
| LOD2 ratio | 0.10–0.35 of base | 0.2195 / 0.2195 / 0.2195 |
39-
| Materials | exactly 3 distinct; ≥24 wood, ≥24 metal, ≥6 water | 3 slots; 1482 / 156 / 29 |
38+
| Base triangles | 4300–5200 | 4792 / 4792 |
39+
| LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 |
40+
| LOD2 ratio | 0.10–0.35 of base | 0.2199 / 0.2199 |
41+
| Materials | exactly 3 distinct; ≥24 wood, ≥24 metal, ≥6 water | 3 slots; 1656 / 420 / 476 |
4042
| UVs | in `0..1`, AABB overlap ≤ 1e-5 | in range, overlap 0 |
41-
| Outer AABB | (1.093, 0.552, 0.5055) m ± 0.01 | (1.0932, 0.5520, 0.5055), zmin 0 |
42-
| Collider tris | ≤ 80 | 68 |
43-
| Export | written, size > 0 | 242240 / 242240 / 242224 bytes |
43+
| Outer AABB | (1.111, 0.552, 0.512) m ± 0.01 | (1.1112, 0.5520, 0.5123), zmin 0 |
44+
| Collider tris | ≤ 80 | 76 |
45+
| Export | written, size > 0 | 355404 / 355388 bytes |
4446

4547
Base triangles rose from **2484 to 3700** in the first quality pass: box
4648
end slabs and a single extruded U became ten jittered staves, U end-caps,
4749
continuous straps offset from the legs, and stretchers that meet the
4850
inner faces. The second pass took them to **3124**: the open U-band ends
4951
became solid end boards, which close the section with fewer faces. The
50-
third pass took them to **3316**: each end became three boards.
52+
third pass took them to **3316**: each end became three boards. The
53+
fifth pass took them to **4792**: the water became a lofted, rippled
54+
volume (~900 triangles; it was one flat quad on a U prism), and the
55+
straps gained ten bolt heads and four rim clips, the trestles six pegs,
56+
and the right end a bung. The band moved from 2800–3500 to 4300–5200, the
57+
same ~±10 % slack around the measured count. The collider hulls the
58+
trough without the sub-2 cm hardware (bolts, pegs, bung): detail that
59+
small carries no collision meaning. The rim clips are 47 mm wide and
60+
stay in it. The 5.1.2 column was dropped with this change: the new model
61+
was measured on 4.5.11 and 5.2.1 only.
5162

5263
DECIMATE COLLAPSE triangle counts are **not** identical across series —
5364
the gate is a ratio band, not an exact count. Bake pixels are
@@ -82,9 +93,10 @@ Recomputed from the generated mesh, not asserted about the script.
8293
| --- | --- | --- |
8394
| End-cap rim Z-span (union of an end's boards) | ≤ 0.080 m | 0.0208 |
8495
| Strap-to-hull BVH gap | ≤ 0.008 m | 0.00000 |
85-
| Water-to-hull BVH gap | ≤ 0.008 m | 0.00260 |
86-
| Water contained by the end boards | 0 misses over 66 outward rays | 0 of 66 |
96+
| Water-to-hull BVH gap | ≤ 0.008 m | 0.00249 |
97+
| Water contained by the end boards | 0 misses over 120 outward rays | 0 of 120 |
8798
| **End boards** per end | ≥ 3 | 3 |
99+
| Bolt bite: each of the 10 bolt heads' deepest vertex inside its strap (signed depth) | ≥ 0.002 m, exactly 10 bolts | 0.00347 |
88100

89101
### Why the ends are solid boards
90102

@@ -100,8 +112,8 @@ hull; nothing asked whether anything held it in at the ends.
100112
along X, from the face's perimeter vertices and from points drawn 50% and
101113
90% of the way in from the centroid, so the middle of the section is
102114
tested and not only the rim a band would cover. Every ray must hit
103-
timber within `1.5 × END_T`. `--open-ends` restores the U-bands: all 66
104-
rays miss, and the piece exits 18.
115+
timber within `1.5 × END_T`. `--open-ends` restores the U-bands: 119 of
116+
the 120 rays miss, and the piece exits 18.
105117

106118
### Why each end is three boards
107119

@@ -138,12 +150,23 @@ The third pass darkened the grazing tint from a pale grey-blue (0.20,
138150
the surface near grazing, where that tint wins, and it read as a
139151
painted slab.
140152

153+
The fifth pass made the surface geometry. The water is lofted along X,
154+
`WATER_NX` stations with `WATER_NY` strips across each, under two crossing
155+
standing waves of `RIPPLE_AMP` that damp to zero at the staves, and a
156+
`MENISCUS_H` meniscus that climbs the wall over `MENISCUS_W`. The water is
157+
the one smooth-shaded material, so the key light runs along the crests.
158+
The straps were invisible from the hero camera, which looks over the rim
159+
while the straps wrap the hull's underside. Each strap now ends in a clip
160+
hooked over the rim and carries five domed carriage-bolt heads. The
161+
trestle legs are pegged through their stretcher tenons, and a drain bung
162+
sits low in the right end.
163+
141164
The fourth pass made the surface read as liquid rather than as a teal panel: larger ripples (noise scale 22 to 7) under a stronger bump (0.08 to 0.30) at roughness 0.03 catch the key as glints, and the render path turns on EEVEE screen-space raytracing (4.2+) so the staves mirror in the water. The iron gets vertically stretched rust runs that dull its metallic response. A lower camera was tried to show the hull straps and rejected: the water surface dropped out of view.
142165

143166
### Falsifiers
144167

145-
Each violates one named budget. All nine were run on 4.5.11, 5.1.2 and
146-
5.2.1 and returned the same code on each.
168+
Each violates one named budget. After the fifth pass all ten were re-run
169+
on 4.5.11 and 5.2.1 and returned the same code on each.
147170

148171
| Flag | Budget violated | Exit |
149172
| --- | --- | --- |
@@ -152,10 +175,11 @@ Each violates one named budget. All nine were run on 4.5.11, 5.1.2 and
152175
| `--lift-z` | bounding box `zmin` is 0 | 16 |
153176
| `--short-legs` | named shoe supports at Z=0 | 16 |
154177
| `--box-ends` | end-cap rim span | 17 |
155-
| `--float-strap` | strap-to-hull gap | 18 |
178+
| `--float-strap` | strap-to-hull gap (straps lifted `STRAP_FLOAT` 0.012 m: gap 0.01169) | 18 |
156179
| `--narrow-hull` | hull plan vs stated size | 19 |
157180
| `--open-ends` | water contained by the end boards (restores the open U-band ends) | 18 |
158181
| `--slab-ends` | end boards per end (restores the one-piece D board; measures 1) | 20 |
182+
| `--float-bolts` | bolt bite (heads lifted 0.015 m off the strap: −0.01153) | 21 |
159183

160184
`--short-legs` lifts the shoes and stretches each leg's foot down to the
161185
floor, so AABB `zmin` stays 0 (the legs still plant) and the
@@ -164,6 +188,12 @@ whole piece re-ground on the legs. That shrank the AABB by ~10 mm, 0.4 mm
164188
inside the bounding-box tolerance, and a 1.5 mm model change in this pass
165189
tipped it to exit 8. With the feet stretched, the envelope moves 1.6 mm.
166190

191+
`--float-strap` lifted the straps 0.040 m until the fifth pass. With bolt
192+
heads and rim clips riding on the straps, that widened the AABB past its
193+
tolerance and the probe hit exit 8 before the strap-seat budget it exists
194+
for. It now lifts them `STRAP_FLOAT` (0.012 m), still a 0.0117 m gap
195+
against the 0.008 m budget.
196+
167197
## Run
168198

169199
```bash
@@ -177,6 +207,7 @@ blender --background --python water_trough.py -- --float-strap
177207
blender --background --python water_trough.py -- --narrow-hull
178208
blender --background --python water_trough.py -- --open-ends
179209
blender --background --python water_trough.py -- --slab-ends
210+
blender --background --python water_trough.py -- --float-bolts
180211
blender --background --python water_trough.py -- --output trough.png
181212
```
182213

@@ -186,7 +217,7 @@ Smoke passes no flags.
186217

187218
File-local. `9` is a valid check code. `10` is reserved for
188219
`gallery_framing.check_framing` on the `--output` path. `15`–`19` are the
189-
hygiene and joint-fit family.
220+
hygiene and joint-fit family; `20`–`21` are file-local.
190221

191222
| Code | Meaning |
192223
| --- | --- |
@@ -211,3 +242,4 @@ hygiene and joint-fit family.
211242
| 18 | Seat: strap or water BVH gap (`--float-strap`), or water not contained by the end boards (`--open-ends`) |
212243
| 19 | Hull length or width off the stated real-world size (`--narrow-hull`) |
213244
| 20 | An end is fewer than three boards (`--slab-ends`) |
245+
| 21 | Bolt seat: a bolt head not inside its strap, or not exactly ten (`--float-bolts`) |

‎showcase/water-trough/preview.webp‎

1.4 KB
Loading

0 commit comments

Comments
 (0)