Skip to content

Commit 5f398ec

Browse files
TMHSDigitalclaude
andcommitted
fix(showcase): rebuild wall-torch so it reads as a lit torch, not programmer art
The hero showed a grey tile slab with the flame above it, three clipped yellow cones, a smooth orange dowel and a copper-looking cup. - Flame: six tongues lathed along curved spines (lathe_spine), swelling from a buried root and curling back to a point; emission graded by a Heat vertex layer root-to-tip and core-to-rim, alpha fading at the rim, colours below 1.0 so Standard no longer clips. - Plaque: six irregular courses (0.40 -> 0.50 m) so the flame burns in front of the stones; seeded per-stone recess and in-plane tilt (stones behind the plate stay on the face), per-stone tint, soot over the flame. - Iron: stepped, chamfered plate with dome bolts, beaded cup, round-bar brace into the drip boss; rust sharpened into patches. - Haft/rag: wandering girth, darker grain charring toward a wound pitch rag with embers near the flame. - Render: warm point light between flame and stones so the torch lights its own wall (street-lantern/campfire precedent). Budgets re-declared from measurement: base tris 3600-4300 (3912), outer AABB 0.304x0.328x0.524. Default plus all nine falsifiers (9, 15-22) exit as declared on 4.5.11, 5.1.2 and 5.2.1 (30/30); measurements identical across series except glTF byte count. Contact sheet: luma 0.171 vs calibration ~0.24 (fire siblings 0.18-0.22), warmth +0.137. Asset sheet: not the least-designed object beside the reference set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent dccca5d commit 5f398ec

10 files changed

Lines changed: 529 additions & 148 deletions

File tree

2.94 KB
Loading
964 Bytes
Loading
2.34 KB
Loading
3.6 KB
Loading

‎docs/gallery/index.html‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,15 +1093,15 @@ <h2><a class="stretch" href="wooden-bucket/">Wooden Bucket</a></h2>
10931093
<span class="card-link" aria-hidden="true">View showcase piece &rarr;</span>
10941094
</div>
10951095
</article>
1096-
<article class="card" data-tags="mesh export showcase" data-kind="showcase" data-category="village" data-name="wall-torch" data-search="wall torch wall-torch a procedural wall-mounted torch sconce: an iron plate bolted to the stone face, a level arm, an open cup holding a leaning haft with a pitch wrap and upright flames, through uvs, bake, lod, collider, and unity gltf, asserting recomputed budgets rather than an api contract. mesh export showcase village">
1096+
<article class="card" data-tags="mesh export showcase" data-kind="showcase" data-category="village" data-name="wall-torch" data-search="wall torch wall-torch a procedural wall-mounted torch sconce: a forged plate bolted to six hand-laid stone courses, a level arm and braced cup holding a leaning haft whose pitch rag burns with graded flame tongues, through uvs, bake, lod, collider, and unity gltf, asserting recomputed budgets rather than an api contract. mesh export showcase village">
10971097
<div class="card-media">
1098-
<img src="assets/wall-torch-hero-640.webp" srcset="assets/wall-torch-hero-640.webp 640w, assets/wall-torch-hero.webp 1280w" sizes="(min-width: 900px) 340px, (min-width: 560px) 50vw, 100vw" alt="A wall torch: a dark-jointed stone plaque with a round iron plate and level arm holding a cup, from which a leaning wooden torch with a pitch-wrapped head burns above the cornice." width="1280" height="720" loading="lazy" decoding="async" />
1098+
<img src="assets/wall-torch-hero-640.webp" srcset="assets/wall-torch-hero-640.webp 640w, assets/wall-torch-hero.webp 1280w" sizes="(min-width: 900px) 340px, (min-width: 560px) 50vw, 100vw" alt="A wall torch on warm-lit stone: a black iron plate, level arm and curved brace hold a cup, from which a leaning charred haft rises to a cluster of orange flame tongues." width="1280" height="720" loading="lazy" decoding="async" />
10991099
</div>
11001100
<div class="card-body">
11011101
<h2><a class="stretch" href="wall-torch/">Wall Torch</a></h2>
11021102
<p class="slug">wall-torch</p>
1103-
<p class="teaches">A procedural wall-mounted torch sconce: an iron plate bolted to the stone face, a level arm, an open cup holding a leaning haft with a pitch wrap and upright flames, through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1104-
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 2004 tris, five materials with 540 stone, 318 metal, 50 wood, 180 flame and 60 pitch faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.304×0.322×0.485 m at zmin 0, LOD ratios in band, convex collider 90 tris, non-empty glTF. Hygiene all zero. Arm level 0.000°, plate 13 mm proud of the stones and 3 mm into them, arm-to-cup gap 0.07 mm, plaque width 0.280 m, bake 27.7 texels per UV cell. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-arm 17; --float-plate 18; --skinny-plaque 19; --droop-arm 20; --sink-plate 21; --low-bake 22.</p>
1103+
<p class="teaches">A procedural wall-mounted torch sconce: a forged plate bolted to six hand-laid stone courses, a level arm and braced cup holding a leaning haft whose pitch rag burns with graded flame tongues, through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1104+
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 3912 tris, five materials with 864 stone, 582 metal, 96 wood, 480 flame and 120 pitch faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.304×0.328×0.524 m at zmin 0, LOD ratios in band, convex collider 90 tris, non-empty glTF. Hygiene all zero. Arm level 0.000°, plate 13 mm proud of the stones and 3 mm into them, arm-to-cup gap 0.07 mm, plaque width 0.280 m, bake 20.0 texels per UV cell. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-arm 17; --float-plate 18; --skinny-plaque 19; --droop-arm 20; --sink-plate 21; --low-bake 22.</p>
11051105
<span class="card-link" aria-hidden="true">View showcase piece &rarr;</span>
11061106
</div>
11071107
</article>

‎docs/gallery/wall-torch/index.html‎

Lines changed: 18 additions & 16 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
@@ -307,9 +307,9 @@
307307
"name": "wall-torch",
308308
"dir": "showcase/wall-torch",
309309
"category": "village",
310-
"teaches": "A procedural wall-mounted torch sconce: an iron plate bolted to the stone face, a level arm, an open cup holding a leaning haft with a pitch wrap and upright flames, through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
311-
"alt": "A wall torch: a dark-jointed stone plaque with a round iron plate and level arm holding a cup, from which a leaning wooden torch with a pitch-wrapped head burns above the cornice.",
312-
"witnessesFix": "Recomputed: 2004 tris, five materials with 540 stone, 318 metal, 50 wood, 180 flame and 60 pitch faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.304×0.322×0.485 m at zmin 0, LOD ratios in band, convex collider 90 tris, non-empty glTF. Hygiene all zero. Arm level 0.000°, plate 13 mm proud of the stones and 3 mm into them, arm-to-cup gap 0.07 mm, plaque width 0.280 m, bake 27.7 texels per UV cell. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-arm 17; --float-plate 18; --skinny-plaque 19; --droop-arm 20; --sink-plate 21; --low-bake 22.",
310+
"teaches": "A procedural wall-mounted torch sconce: a forged plate bolted to six hand-laid stone courses, a level arm and braced cup holding a leaning haft whose pitch rag burns with graded flame tongues, through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.",
311+
"alt": "A wall torch on warm-lit stone: a black iron plate, level arm and curved brace hold a cup, from which a leaning charred haft rises to a cluster of orange flame tongues.",
312+
"witnessesFix": "Recomputed: 3912 tris, five materials with 864 stone, 582 metal, 96 wood, 480 flame and 120 pitch faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.304×0.328×0.524 m at zmin 0, LOD ratios in band, convex collider 90 tris, non-empty glTF. Hygiene all zero. Arm level 0.000°, plate 13 mm proud of the stones and 3 mm into them, arm-to-cup gap 0.07 mm, plaque width 0.280 m, bake 20.0 texels per UV cell. --skip-decimate exits 9; --stray-vert 15; --lift-z 16; --float-arm 17; --float-plate 18; --skinny-plaque 19; --droop-arm 20; --sink-plate 21; --low-bake 22.",
313313
"hero": "docs/gallery/assets/wall-torch-hero.webp",
314314
"preview": "showcase/wall-torch/preview.webp",
315315
"tags": [

‎showcase/wall-torch/README.md‎

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,34 @@
11
# Wall torch
22

3-
A showcase piece, not an example. A procedural wall-mounted torch sconce: a
4-
running-bond dressed-stone plaque with dark mortar joints, an iron wall
5-
plate bolted to the stones, a level iron arm, an open iron cup, a leaning
6-
wooden haft with a pitch wrap, and upright emissive flames. Then the shipped
7-
pipeline: unique-cell UVs, a Cycles high-to-low normal bake, an LOD chain, a
8-
convex collider and a Unity glTF export.
9-
10-
The plaque back sits on the wall plane Y=0 with zmin at 0. The plate's seat
3+
A showcase piece, not an example. A procedural wall-mounted torch sconce: six
4+
irregular courses of hand-laid stone on a dark mortar slab, a forged iron
5+
plate bolted to the stones, a level iron arm with a round-bar brace under
6+
it, an open beaded iron cup, a leaning wooden haft with a wound pitch rag,
7+
and six graded flame tongues. Then the shipped pipeline: unique-cell UVs, a
8+
Cycles high-to-low normal bake, an LOD chain, a convex collider and a Unity
9+
glTF export.
10+
11+
The plaque back sits on the wall plane Y=0 with zmin at 0. Each stone is set
12+
back up to 3 mm from the face and turned up to 1.2° in the wall plane
13+
(seeded); the stones behind the plate stay on the face. The plate's seat
1114
comes from the face of the facing stones (`stone_face_y()`), a named bite
1215
into it. The cup's mid-height is the arm's height, so the arm is level by
13-
construction. It runs from inside the plate into the cup's wall. The cup
14-
sits on the haft's axis, which leans 15° out from the wall. The haft stands
15-
on the cup's floor and runs up into the wrap. The flames stand upright from
16-
the wrap, whatever the haft does.
16+
construction. It runs from the plate's mid-plane into the cup's wall. The
17+
brace leaves the plate below the arm, sags, and rises into the cup's drip
18+
boss. The cup sits on the haft's axis, which leans 15° out from the wall.
19+
The haft stands on the cup's floor and runs up into the wrap. The flames
20+
stand upright from the wrap, whatever the haft does: each tongue is a tube
21+
along a curved spine (`lathe_spine`) that swells from a buried root, drifts
22+
out and curls back to a point.
23+
24+
A `Heat` vertex layer (0..1 along each part) drives the shaders: the flame
25+
grades from a pale core at the root to deep red at the tips and toward the
26+
rim, whose alpha fades to nothing; embers wake in the top turns of the rag;
27+
the haft chars toward the wrap. Stones carry a per-stone tint from cool grey
28+
to warm buff and a soot smudge on the upper courses. The render adds a small
29+
warm point light between the flame and the stones, so the torch lights its
30+
own wall (the `street-lantern` and `campfire` precedent); the house key is
31+
turned down to let it lead.
1732

1833
It asserts **budget conformance** of the generated result. It does not
1934
witness an API contract. "It rendered without error" is not a check.
@@ -27,9 +42,9 @@ witness an API contract. "It rendered without error" is not a check.
2742
Hygiene combinatorics match `examples/mesh-hygiene-audit` (copied, not
2843
imported).
2944

30-
Intended size: a 0.28 m wide, 0.40 m tall plaque; the cup centre 0.24 m out
31-
from the wall; the flame tip 0.48 m above the floor. Outer AABB
32-
0.304 × 0.322 × 0.485 m.
45+
Intended size: a 0.28 m wide, 0.50 m tall plaque; the cup centre 0.24 m out
46+
from the wall; the flame tip 0.52 m above the floor, in front of the top
47+
courses. Outer AABB 0.304 × 0.328 × 0.524 m.
3348

3449
## Budgets
3550

@@ -38,14 +53,25 @@ mesh, materials, UVs, evaluated LOD, collider or export file.
3853

3954
| Axis | Declared | Measured (4.5.11 / 5.1.2 / 5.2.1) |
4055
| --- | --- | --- |
41-
| Base triangles | 1800–2250 | 2004 / 2004 / 2004 |
56+
| Base triangles | 3600–4300 | 3912 / 3912 / 3912 |
4257
| LOD1 ratio | 0.32–0.62 of base | 0.5000 / 0.5000 / 0.5000 |
43-
| LOD2 ratio | 0.10–0.35 of base | 0.2196 / 0.2196 / 0.2196 |
44-
| Materials | exactly 5 distinct; ≥24 stone, ≥24 metal, ≥8 flame, ≥10 pitch | 5 slots; 540 stone, 318 metal, 50 wood, 180 flame, 60 pitch |
58+
| LOD2 ratio | 0.10–0.35 of base | 0.2198 / 0.2198 / 0.2198 |
59+
| Materials | exactly 5 distinct; ≥24 stone, ≥24 metal, ≥8 flame, ≥10 pitch | 5 slots; 864 stone, 582 metal, 96 wood, 480 flame, 120 pitch |
4560
| UVs | in `0..1`, AABB overlap ≤ 1e-5 | in range, overlap 0 |
46-
| Outer AABB | (0.304, 0.322, 0.485) m ± 0.015 | (0.3040, 0.3218, 0.4845), zmin 0 |
61+
| Outer AABB | (0.304, 0.328, 0.524) m ± 0.015 | (0.3040, 0.3278, 0.5240), zmin 0 |
4762
| Collider tris | ≤ 180 | 90 |
48-
| Export | written, size > 0 | 163468 / 163468 / 163460 bytes (4.5.11 / 5.1.2 / 5.2.1) |
63+
| Export | written, size > 0 | 299868 / 299868 / 299860 bytes (4.5.11 / 5.1.2 / 5.2.1) |
64+
65+
Base triangles rose from **2004 to 3912** in the third quality pass, and the
66+
band moved from 1800–2250 to 3600–4300. The hero read as programmer art: a
67+
grey tile slab with the flame above it, three clipped yellow cones, a smooth
68+
orange dowel and a copper-looking cup. The plaque grew from four courses to
69+
six irregular ones (0.40 m to 0.50 m tall) so the flame burns in front of
70+
the stones instead of above them. The flame became six graded,
71+
alpha-fading tongues (480 faces, was 180). The plate gained a stepped boss
72+
and dome bolts, the cup a rolled bead, the haft a wandering girth, the
73+
wrap bulging turns, and a brace now carries the cup. The envelope grew to
74+
0.328 m deep and 0.524 m tall.
4975

5076
Base triangles rose from **1528 to 2004** in the second quality pass, and the
5177
band moved from 1400–1700 to 1800–2250. The solid cup became an open, walled
@@ -58,8 +84,8 @@ DECIMATE COLLAPSE triangle counts are **not** identical across series. The
5884
gate is a ratio band, not an exact count. Bake pixels are stochastic; the
5985
gate is `has_data` plus operator `FINISHED`, not byte-identity. Construction
6086
is closed-form and stone tones are seeded, so repeated runs on one binary
61-
print identical measurements. Export byte counts differ by 24 B on 5.2.1
62-
(glTF serializer), not a gated axis.
87+
print identical measurements. Export byte counts differ by a few bytes
88+
across series (glTF serializer), not a gated axis.
6389

6490
### Hygiene
6591

@@ -80,11 +106,11 @@ Recomputed from the generated mesh, not asserted about the script.
80106
| Axis | Declared | Measured (all three) |
81107
| --- | --- | --- |
82108
| Arm-to-cup BVH gap | ≤ 0.008 m | 0.00007 |
83-
| Plate-to-stone BVH gap | ≤ 0.008 m | 0.00057 |
109+
| Plate-to-stone BVH gap | ≤ 0.008 m | 0.00000 |
84110
| Plaque width vs `WALL_W` | ± 0.04 m | 0.2800 vs 0.280 |
85111
| Arm level (exit 20): the arm shell's long axis against horizontal | ≤ 1.0° | 0.000° |
86112
| Plate seat (exit 21): plate front proud of the facing stones / plate back into their face | ≥ 0.008 m / 0.001–0.005 m | 0.01300 / 0.00300 |
87-
| Bake texel density (exit 22): smallest UV cell in baked texels | ≥ 12 px | 27.71 px (1024 px bake) |
113+
| Bake texel density (exit 22): smallest UV cell in baked texels | ≥ 12 px | 20.04 px (1024 px bake) |
88114

89115
The plate-to-stone gap is measured to any stone shell. The plate is bolted to
90116
the face of the stones, not to the backing slab behind them, as it was in the
@@ -103,9 +129,9 @@ returned the same code on each.
103129
| `--float-arm` | arm-to-cup BVH gap | 17 |
104130
| `--float-plate` | plate-to-stone BVH gap (measured 0.07700) | 18 |
105131
| `--skinny-plaque` | plaque width vs `WALL_W` | 19 |
106-
| `--droop-arm` | arm level (the old 20 mm drop; measured 9.580°) | 20 |
132+
| `--droop-arm` | arm level (the old 20 mm drop; measured 9.908°) | 20 |
107133
| `--sink-plate` | plate seat (the first build's seat; measured proud −0.00400, seat 0.02000) | 21 |
108-
| `--low-bake` | bake texel density (256 px bake; measured 6.93 px) | 22 |
134+
| `--low-bake` | bake texel density (256 px bake; measured 5.01 px) | 22 |
109135

110136
`--float-arm` shortens the tube to 55 % of the plate-to-cup station vector,
111137
and the cup stays put. `--float-plate` moves only the plate off the stones;

‎showcase/wall-torch/preview.webp‎

2.49 KB
Loading

0 commit comments

Comments
 (0)