Skip to content

Commit 7f1132a

Browse files
TMHSDigitalclaude
andcommitted
fix(showcase): sea-stack-arch quality pass — wave-cut platform, banded beds, seamless stage
The ground plate read as cracked concrete: it is now a stepped wave-cut platform with algal film, puddles and barnacles, a wet-to-dry sand cove with a shingle bank, and a new 70 mm grassy clifftop bank. The skirt shows uneven rock strata; fallen blocks break on deep fracture planes instead of reading as bricks. Each bed carries its own colour and grain with a dark shale parting, an intertidal wrack/barnacle/tar-lichen band, more varied bed relief (PROUD_GAIN 1.8) and a deeper notch (0.026 -> 0.034). Water gains a turquoise-to-deep depth ramp and white foam lace. The camera drops to the siblings' ~28 deg game-board view on a seamless stage, so the studio wall no longer shows. The deeper notch made three soft-bed facets coplanar with draped turf, so --tilt-beds exited 15; the coplanar-break pass now covers soft beds vs cover and --tilt-beds exits 22 again. Measured: 90422 tris and all face counts and outer box unchanged; collider 244 -> 252 (max 270); undercut 0.0158-0.0789 (band 0.008-0.085). Default exit 0 on 5.2.1 LTS, 5.1.2 and 4.5.11 LTS; all 16 falsifiers on 5.2.1 exit their documented codes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 3a1af10 commit 7f1132a

6 files changed

Lines changed: 279 additions & 126 deletions

File tree

4.31 KB
Loading
18.5 KB
Loading

‎showcase/gallery.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -939,9 +939,9 @@
939939
"name": "sea-stack-arch",
940940
"dir": "showcase/sea-stack-arch",
941941
"category": "terrain",
942-
"teaches": "A procedural coastal diorama tile — a fragment of a bedded sandstone headland at the sea's edge as one eroded mass: eighteen level hard and soft beds running on from the legs into the roof and the stack, jointed faces leaning back and battered and flared at the foot, one weathering field read on the face through every bed, fallen-out blocks and open joints, soft beds undercut to a wave-cut notch; two legs curving in on an ellipse to meet at the crown under a roof that steps down seaward; a tapering stack standing in the sea; the sea filling the tile to its rim with foam at the shore and round the feet, a wave-cut platform, tide pools and a shingle cove, fallen blocks, boulders and pebbles, and a draped turf mat with sea grass and thrift cushions — through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
943-
"alt": "A ragged bedded sandstone sea arch and a tapering sea stack standing in a sea that fills the tile to its rim, beside a wave-cut platform and a shingle cove, with thrift on the turfed tops.",
944-
"witnessesFix": "Recomputed: 90422 tris, eight materials with 46448 sandstone, 13438 shelf, 5546 water, 1966 foam, 2856 cobble, 5540 turf, 5331 grass and 3552 thrift faces, UVs in 0..1 with zero AABB overlap, outer AABB 2.840×1.960×1.465 m, zmin 0, hygiene 0 including zero coplanar cross-shell pairs across 43 bed shells, every soft bed's end rings inside the hard beds either side (41 joints, 0.0019–0.0163 m) with the roof's lowest bed biting both legs 0.015 m, the stack's mass centre 0.128 m inside its foot notch's footprint (min 0.100), both legs and the stack sealed in the ground in 8 of 8 sectors (worst 0.031 m, min 0.020), a clear aperture 0.264 m wide and 0.757 m high (min 0.22 × 0.68), all 21 hard bed tops level (0.00°) and continuous across the columns, the 22 soft beds undercut 0.013–0.079 m (band 0.008–0.085), the sea at 0.1050 m with a 0.0024 m ripple and both pools flat, every water rim 0.010 m under the shore or the tile's rim (min 0.008), the foam within 0.0043 m of the waterline with its land edge 0.005 m under the ground or in the rock, all 57 blocks, boulders and pebbles sealed in every sector and none overlapping, all 324 roots of grass and thrift 0.008–0.040 m in the turf or stone and none loose, 0.176 of the rock's walls squared to their column's axes (max 0.25), LOD ratios in band, five-hull collider 244 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --gap-lintel 17; --lean-stack 19; --cut-pillar 20; --close-arch 21; --tilt-beds 22; --flush-beds 23; --flat-sea 24; --short-sea 25; --lift-foam 26; --perch-talus 27; --pile-talus 28; --float-cover 29; --tidy-rock 31.",
942+
"teaches": "A procedural coastal diorama tile — a fragment of a bedded sandstone headland at the sea's edge as one eroded mass: eighteen level hard and soft beds running on from the legs into the roof and the stack, jointed faces leaning back and battered and flared at the foot, one weathering field read on the face through every bed, fallen-out blocks and open joints, soft beds undercut to a wave-cut notch; two legs curving in on an ellipse to meet at the crown under a roof that steps down seaward; a tapering stack standing in the sea; the sea filling the tile to its rim with foam at the shore and round the feet, a wave-cut platform whose planed beds outcrop as low steps, tide pools, a sandy cove with a shingle bank and a turf clifftop bank on the landward edge, the tile's skirt showing the beds in section, fallen blocks broken on slanting fracture faces, boulders and pebbles, and a draped turf mat with sea grass and thrift cushions — through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
943+
"alt": "Seen from above on a dark stage, a ragged sea arch of buff, rust and grey sandstone beds and a tapering sea stack stand in turquoise-to-deep-blue water ringed with white foam, beside a stepped wave-cut platform, a sandy cove with pebbles and a strip of turf clifftop, with pink thrift on the turfed tops.",
944+
"witnessesFix": "Recomputed: 90422 tris, eight materials with 46448 sandstone, 13438 shelf, 5546 water, 1966 foam, 2856 cobble, 5540 turf, 5331 grass and 3552 thrift faces, UVs in 0..1 with zero AABB overlap, outer AABB 2.840×1.960×1.465 m, zmin 0, hygiene 0 including zero coplanar cross-shell pairs across 43 bed shells, every soft bed's end rings inside the hard beds either side (41 joints, 0.0019–0.0163 m) with the roof's lowest bed biting both legs 0.015 m, the stack's mass centre 0.128 m inside its foot notch's footprint (min 0.100), both legs and the stack sealed in the ground in 8 of 8 sectors (worst 0.031 m, min 0.020), a clear aperture 0.272 m wide and 0.757 m high (min 0.22 × 0.68), all 21 hard bed tops level (0.00°) and continuous across the columns, the 22 soft beds undercut 0.016–0.079 m (band 0.008–0.085), the sea at 0.1050 m with a 0.0024 m ripple and both pools flat, every water rim 0.010 m under the shore or the tile's rim (min 0.008), the foam within 0.0043 m of the waterline with its land edge 0.005 m under the ground or in the rock, all 57 blocks, boulders and pebbles sealed in every sector and none overlapping, all 324 roots of grass and thrift 0.008–0.040 m in the turf or stone and none loose, 0.176 of the rock's walls squared to their column's axes (max 0.25), LOD ratios in band, five-hull collider 252 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --gap-lintel 17; --lean-stack 19; --cut-pillar 20; --close-arch 21; --tilt-beds 22; --flush-beds 23; --flat-sea 24; --short-sea 25; --lift-foam 26; --perch-talus 27; --pile-talus 28; --float-cover 29; --tidy-rock 31.",
945945
"hero": "docs/gallery/assets/sea-stack-arch-hero.webp",
946946
"preview": "showcase/sea-stack-arch/preview.webp",
947947
"tags": [

‎showcase/sea-stack-arch/README.md‎

Lines changed: 58 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,18 @@ it.
99
- **The tile.** A rounded square. The sea fills the right of it out to the
1010
edge, where the tile's rim stands 16 mm over the water and holds it, and
1111
runs through the arch to the back edge. The left is a wave-cut rock
12-
platform, crossed by wandering joint cracks, with two tide pools, and a
13-
shingle cove in front: grey and buff pebbles in dark sand, wet at the
14-
water's edge. The seabed falls away from the shore, so the water darkens
15-
with depth. The tile's skirt drops straight to a flat base, the beds in
16-
section.
12+
platform: the headland's own beds planed off, their edges outcropping as
13+
low dark-lipped steps between buff and rust treads, crossed by wandering
14+
joint cracks, with puddles, algal film, two tide pools, and weed and
15+
barnacles toward the water. In front is a sandy cove, dark and wet at
16+
the water and drying paler up the shore, with a bank of grey and buff
17+
shingle at its head. Along the landward edge a low clifftop bank rises
18+
70 mm over the platform on a raw soil-and-rock riser, turfed on top. The
19+
seabed falls away from the shore, so the water deepens from pale
20+
turquoise in the shallows to a deep blue-green. The tile's skirt drops
21+
straight to a flat base: the beds in section, uneven buff, rust and grey
22+
bands parted by thin dark shaly ones, pebbly in places, with soil and turf
23+
over the bank.
1724
- **One eroded mass.** Eighteen level beds, hard sandstone beds of uneven
1825
thickness (65–132 mm) over thin soft ones (18–35 mm), at one set of heights
1926
in every column, so the strata run on from the legs into the roof and the
@@ -42,19 +49,27 @@ it.
4249
round the feet. A foam line lies at the waterline along the shore, rim to
4350
rim, and round each foot in the water, its land edge tucked under the
4451
shore or into the rock.
45-
- **Loose rock.** Five fallen blocks (bed fragments cut by fracture planes),
52+
- **Loose rock.** Five fallen blocks (bed fragments broken on fracture
53+
planes cut well in, a corner or two knocked off, their top and foot at
54+
their own slants, so none reads as a sawn box),
4655
six rounded boulders and 46 pebbles on the shingle, sealed all round and
4756
held apart, and clear of the feet and the pools.
4857
- **The tops.** A turf mat over the roof's top bed and the stack's, draped
4958
over the edge as an overhanging lip (stopping short where it has eroded
5059
back) and tucked into the stone, with tufts of sea grass and cushions of
5160
sea thrift (a mound of leaves, pink heads on short stalks).
5261

53-
The littoral bands are in the materials: dark wet stone and green-black weed
54-
at the waterline, a barnacle crust over it, a black lichen band above, then
55-
orange and grey lichen high up, bird lime splashed on the high ledges and
56-
streaked down the seaward faces; each bed its own cast, so the strata band
57-
across the rock; overhangs stay dark and damp.
62+
The littoral bands are in the materials: olive wrack and green-black weed
63+
at the waterline over darkened wet stone, a pale barnacle crust over it, a
64+
black tar-lichen band above fraying out upward, then orange and grey lichen
65+
high up, bird lime splashed on the high ledges and streaked down the
66+
seaward faces. Each bed has its own cast (grey-green grit, pale cream,
67+
rust-red, buff, a dark iron-rich band) and grain, with pebbly lenses in the
68+
coarse beds, and the soft beds are dark plum-brown shale, so the strata band
69+
strongly across the rock; overhangs stay dark and damp. The beds stand
70+
proud or sit back from the face by a spread set-back (`PROUD_GAIN`, the
71+
seeded draws unchanged), so some form ledges and others shadowed bands,
72+
and the soft beds are cut back 34 mm (`NOTCH`) behind the hard ones.
5873

5974
Every seeded draw comes from `random.Random(SEED)` in `plan_scene()`, before
6075
anything is built: each face's drift and set-backs, the weathering fields,
@@ -70,12 +85,14 @@ so the bites are exact; a leg's top soft bed is also cast against the roof's
7085
lowest bed from the leg's own centre. The piece is a stack of flat beds, a
7186
coplanar hazard: each bed's walls batter by their own degree or two, arrises
7287
carry a sub-millimetre wear ray by ray, a pass draws any soft-bed facet still
73-
in another bed's plane 1.5 mm toward its own centroid, and blades, stalks,
88+
in another bed's plane, or in the plane of the turf and cover draped over
89+
the top bed, 1.5 mm toward its own centroid, and blades, stalks,
7490
heads and cushions landing in another shell's plane turn 3° about their root.
7591

7692
Rock is smooth-shaded with an 18° crease, so the arrises and fallen-out
7793
blocks stay crisp; grass and heads smooth. Eight materials: sandstone (the
78-
beds and fallen blocks), wave-cut shelf (platform, shingle, seabed, skirt),
94+
beds and fallen blocks), wave-cut shelf (platform, beach, clifftop bank,
95+
seabed, skirt),
7996
sea water, foam, cobble (boulders and pebbles), turf, grass (sea grass,
8097
thrift leaves and stalks), sea thrift.
8198

@@ -106,15 +123,16 @@ export file.
106123
| Materials | exactly 8 distinct; face floors sandstone ≥45000, shelf ≥13000, water ≥5380, foam ≥1900, cobble ≥2770, turf ≥5370, grass ≥5170, thrift ≥3440 | 8 slots; 46448 / 13438 / 5546 / 1966 / 2856 / 5540 / 5331 / 3552 |
107124
| UVs | in `0..1`, AABB overlap ≤ 1e-5 | in range, overlap 0 |
108125
| Outer AABB | (2.8400, 1.9600, 1.4649) m ± 0.01 | (2.8400, 1.9600, 1.4649), zmin 0 |
109-
| Collider tris (five hulls) | ≤ 270 | 244 |
110-
| Export | written, size > 0, removed after measuring | 9158084 bytes |
126+
| Collider tris (five hulls) | ≤ 270 | 252 |
127+
| Export | written, size > 0, removed after measuring | 9158708 bytes |
111128

112129
DECIMATE COLLAPSE triangle counts are not identical across Blender
113130
series, so the LOD gate is a ratio band, not an exact count. Bake pixels
114131
are stochastic, so the bake gate is `has_data` plus operator `FINISHED`,
115132
not byte-identity. The plan is seeded and nothing else is random; two
116133
default runs print identical measurements, and 4.5.11 and 5.1.2 print the
117-
same measurements as 5.2.1.
134+
same measurements as 5.2.1 (the glTF's size aside: 9158716 bytes there, a
135+
few bytes of exporter metadata).
118136

119137
### Hygiene
120138

@@ -149,18 +167,18 @@ measurement is then made on the shell's geometry.
149167
| Axis | Declared | Measured |
150168
| --- | --- | --- |
151169
| Beds bite: every soft bed's end ring, shallowest vertex inside the hard bed it runs into (ray-parity signed depth, majority of seven rays), the roof's lowest bed over each leg included | 0.001–0.030 m, 41 joints | 0.0019–0.0163; roof on the legs 0.0149, 0.0156 |
152-
| Stack plumb: the volume centroid of all its beds inside the convex footprint of its narrowest section (the foot notch's middle ring) | ≥ 0.100 m | 0.1276 |
170+
| Stack plumb: the volume centroid of all its beds inside the convex footprint of its narrowest section (the foot notch's middle ring) | ≥ 0.100 m | 0.1279 |
153171
| Feet sealed: for each leg and the stack, in each of 8 sectors round the lowest bed, its most-buried vertex under the ground straight above it | ≥ 0.020 m in 8 of 8 | worst 0.0307, 8 of 8 each |
154-
| Aperture: rays along +Y past every bed; clear height up the opening's centre line from the water, and the narrowest clear width over the 0.60 m above the water | width ≥ 0.22 m, height ≥ 0.68 m | width 0.2640, height 0.7570 |
172+
| Aperture: rays along +Y past every bed; clear height up the opening's centre line from the water, and the narrowest clear width over the 0.60 m above the water | width ≥ 0.22 m, height ≥ 0.68 m | width 0.2720, height 0.7570 |
155173
| Bedding level: a least-squares plane through every hard bed's top-cap vertices; its tilt, and per layer the spread of the fitted heights across the columns | tilt ≤ 0.8°, spread ≤ 0.004 m, 21 bed tops | tilt 0.0000°, spread 0.00000 |
156-
| Undercut: per soft bed, the median over its middle ring of how far the hard beds either side stand out past it, cast along its own outward normal at each host's face ring nearest it | 0.008–0.085 m, 22 soft beds | 0.0125–0.0786 |
174+
| Undercut: per soft bed, the median over its middle ring of how far the hard beds either side stand out past it, cast along its own outward normal at each host's face ring nearest it | 0.008–0.085 m, 22 soft beds | 0.0158–0.0789 |
157175
| Water: the median height of the sea's top sheet and its largest excursion from it; each pool's top flat | level 0.105 ± 0.0015 m; ripple 0.0015–0.0090 m; pools ≤ 0.0005 m | 0.10500; 0.00240; 0.0, 0.0 |
158176
| Water contained: the ground (the shore or the tile's rim) over every rim vertex and rim-edge midpoint of the sea's and each pool's top | ≥ 0.008 m, 544 points | 0.01007 |
159177
| Foam seated: every foam vertex off the water's level; its land edge's top under the ground or inside a foot | ≤ 0.006 m; ≥ 0.004 m, 3 lines | 0.00430; 0.00535 |
160178
| Loose rock sealed: per block, boulder and pebble, in each sector holding a vertex, its most-buried vertex under the ground | ≥ 0.003 m, 57 pieces | worst 0.0050 |
161179
| Loose rock apart: pairs of pieces whose BVH trees overlap | 0 | 0 |
162180
| Cover rooted: every blade's and stalk's base cap and every cushion's underside inside the turf or the top bed under it (the deeper of the two); every blade, stalk, head and cushion joined to its top | 0.004–0.050 m, 324 roots; none loose | 0.0075–0.0395; none loose |
163-
| Ragged: the share of the rock's walls (faces within 20° of vertical, by area) whose plan normal lies within 5° of its column's own axes | ≤ 0.25 | 0.1764 |
181+
| Ragged: the share of the rock's walls (faces within 20° of vertical, by area) whose plan normal lies within 5° of its column's own axes | ≤ 0.25 | 0.1763 |
164182

165183
The feet are bedded against the ground as built: each lowest bed's foot is
166184
set 30 mm under the lowest ground point beneath its widest ring, and kept
@@ -172,27 +190,30 @@ a few millimetres of the soft bed's ring.
172190
## Falsifiers
173191

174192
Each falsifier violates one named budget. Every one was run on 5.2.1 and
175-
4.5.11 and exited its declared code. The envelope and the triangle count
176-
were unchanged in every run.
193+
exited its declared code (after the visual pass that added the clifftop bank,
194+
the broken blocks, the spread set-backs and the deeper soft-bed recess; the
195+
pass before it also ran them all on 4.5.11). The triangle count was
196+
unchanged in every run and the envelope stayed inside its 0.01 m tolerance
197+
(`--tidy-rock` lowers the top 6 mm). The measured values below are 5.2.1's.
177198

178199
| Flag | Budget violated | Exit |
179200
| --- | --- | --- |
180201
| `--skip-decimate` | LOD1 ratio band (measured 1.0000) | 9 |
181202
| `--stray-vert` | loose vertex count is 0 (measured 1) | 15 |
182203
| `--lift-z` | bounding box `zmin` is 0 (measured 0.05000) | 16 |
183204
| `--gap-lintel` | beds bite (the left leg's top bed stopped 15 mm under the roof: −0.0150 m) | 17 |
184-
| `--lean-stack` | stack plumb (the stack sheared 0.50 m per metre of height toward the sea: 0.0571 m) | 19 |
205+
| `--lean-stack` | stack plumb (the stack sheared 0.50 m per metre of height toward the sea: 0.0595 m) | 19 |
185206
| `--cut-pillar` | feet sealed (the right leg's foot stopped 20 mm over the seabed: worst sector −0.0406 m, 0 of 8) | 20 |
186-
| `--close-arch` | aperture (the right leg's side of the opening narrowed to a tenth: width 0.2080 m) | 21 |
207+
| `--close-arch` | aperture (the right leg's side of the opening narrowed to a tenth: width 0.2160 m) | 21 |
187208
| `--tilt-beds` | bedding level (the interior bed boundaries turned 2.5° about a line across the fin: 2.530°) | 22 |
188-
| `--flush-beds` | undercut (every soft bed's middle rings 2 mm behind the hard beds, its bites unchanged: 0.0020–0.0065 m on the failing beds) | 23 |
209+
| `--flush-beds` | undercut (every soft bed's middle rings 2 mm behind the hard beds, its bites unchanged: 0.0014–0.0064 m on the failing beds) | 23 |
189210
| `--flat-sea` | water level and ripple (the sheet laid flat: ripple 0.00000 m) | 24 |
190211
| `--short-sea` | water contained (the rim stopped 50 mm short of the shoreline: −0.01925 m) | 25 |
191212
| `--lift-foam` | foam seated (the foam raised 20 mm: 0.02430 m off the water, land edge −0.01465 m) | 26 |
192-
| `--perch-talus` | loose rock sealed (each piece seated against the ground at its centre alone: −0.0420 m) | 27 |
213+
| `--perch-talus` | loose rock sealed (each piece seated against the ground at its centre alone: −0.0307 m) | 27 |
193214
| `--pile-talus` | loose rock apart (three blocks drawn together after the relaxation: 1 pair overlaps) | 28 |
194215
| `--float-cover` | cover rooted (every blade, stalk and cushion base raised 50 mm, its tip held: −0.0335 m, all 398 pieces loose) | 29 |
195-
| `--tidy-rock` | ragged (every bed squared to a box on its column's axes, leaning and battered as before but without weathering, fallen blocks, joints or the curved arch: 0.8314) | 31 |
216+
| `--tidy-rock` | ragged (every bed squared to a box on its column's axes, leaning and battered as before but without weathering, fallen blocks, joints or the curved arch: 0.8239) | 31 |
196217

197218
The roof's grass and thrift are the top of the envelope, so `--float-cover`
198219
holds every tip where it was and moves the bases alone. `--lean-stack`
@@ -229,12 +250,16 @@ blender --background --python sea_stack_arch.py -- --output arch.png
229250

230251
Smoke passes no flags.
231252

232-
The hero does not turn the piece (`HERO_YAW_DEG` 0) and looks at the fin
233-
from the front, 13° to the left of the arch's axis and a little above the
234-
roof, so the opening reads against the warm wedge on the wall behind it and
235-
the stack stands clear to its right. Framing measures fill x 0.816, y 0.861,
236-
margins left 0.119, right 0.066, bottom 0.056, top 0.083; the asset-quality
237-
floors pass.
253+
The hero does not turn the piece (`HERO_YAW_DEG` 0) and looks down on it
254+
as on a game board, like its terrain siblings: from the front, 13° to the
255+
left of the arch's axis and about 28° down (`CAM_DIST` 5.5 m back,
256+
`CAM_RISE` 2.65 m up), so the sea shows through the opening, the stack
257+
stands clear to its right, and the floor is the whole backdrop: the default
258+
stage's wall (pushed back to `WALL_Y` 8 m) never enters the frame, and the
259+
warm wedge pools on the floor behind the arch's landward side. The floor
260+
takes the terrain siblings' darker `(0.013, 0.014, 0.017)`. Framing measures
261+
fill x 0.684, y 0.872, margins left 0.172, right 0.144, bottom 0.078, top
262+
0.050; the asset-quality floors pass.
238263

239264
## Exit codes
240265

12.4 KB
Loading

0 commit comments

Comments
 (0)