Skip to content

Commit a0b4a70

Browse files
TMHSDigitalclaude
andauthored
fix(examples): redesign degenerate-bevel-weld as rugged cases with a traced collapse seam (#270)
The gallery review found the hero unreadable: two near-identical teal slabs shot front-on (which hides the only face the collapse changes), tiny orange dots and floor labels too small to read at card size. The shells are now the check's two meshes, beveled_box(DIMS, 0.10) and beveled_box(DIMS, 0.20), dressed as hard-shell equipment cases (handle, draw latches, molded frame, purge valve, ID plate, feet) with every fitting inside the front land both offsets keep. The cases turn their end panels to the camera so the difference is silhouette: a flat end framed by chamfer bands versus a rim rolled into a knife ridge. The collapsed seam is traced in hot red from live mesh data (edges of faces under 1e-6 area) with a bead on each of the 12 zero-area faces the check counts. Labels removed. The stage turns instead of the props, so the cases stay axis-aligned for the asset sheet. The render path now also runs the asset-quality floors (exit 11) on the clean case; asset_sheet.py gains its SELECT row. Check path unchanged. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent fcefcf0 commit a0b4a70

11 files changed

Lines changed: 503 additions & 139 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ turns cream.
10921092
</tr>
10931093
<tr>
10941094
<td width="46%" valign="middle">
1095-
<a href="examples/degenerate-bevel-weld/"><img src="examples/degenerate-bevel-weld/preview.webp" alt="Degenerate bevel weld: two teal display trays side by side — left with a soft rounded bevel, right collapsed to a knife edge with orange seam markers at the zero-area face centroids, proving the half-dimension bevel collapse ships degenerate triangles" /></a>
1095+
<a href="examples/degenerate-bevel-weld/"><img src="examples/degenerate-bevel-weld/preview.webp" alt="Degenerate bevel weld: two blue hard-shell equipment cases — left with a flat end panel and clean chamfer bands, right with its rim rolled into a knife ridge traced by a glowing red seam and orange beads at the zero-area faces, proving the half-dimension bevel collapse ships degenerate triangles" /></a>
10961096
</td>
10971097
<td valign="middle">
10981098

56 KB
Loading
20 KB
Loading
8.26 KB
Loading

‎docs/gallery/degenerate-bevel-weld/index.html‎

Lines changed: 247 additions & 70 deletions
Large diffs are not rendered by default.

‎docs/gallery/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,11 +794,11 @@ <h2><a href="attribute-domain-shear/">attribute-domain-shear</a></h2>
794794
</article>
795795
<article class="card" data-tags="bmesh mesh game-pipeline">
796796
<a class="card-media" href="degenerate-bevel-weld/" tabindex="-1" aria-hidden="true">
797-
<img src="assets/degenerate-bevel-weld-hero.webp" alt="Two teal rounded slabs labelled BEVEL 0.10 and BEVEL 0.20 = min/2, the right one with orange weld markers at its corners." loading="lazy" decoding="async" />
797+
<img src="assets/degenerate-bevel-weld-hero.webp" alt="Two blue hard-shell cases: the left with a flat end panel and clean chamfer bands, the right with its rim rolled into a ridge traced by a glowing red seam and orange collapse beads." loading="lazy" decoding="async" />
798798
</a>
799799
<div class="card-body">
800800
<h2><a href="degenerate-bevel-weld/">degenerate-bevel-weld</a></h2>
801-
<p class="teaches">Bevel offset &gt;= half the min box dimension collapses the band into zero-area faces — and they ship: a stdlib GLB re-parse counts the degenerate triangles crossing the export boundary. Dual tray: rounded edge versus knife seam, markers from live mesh data.</p>
801+
<p class="teaches">Bevel offset &gt;= half the min box dimension collapses the band into zero-area faces — and they ship: a stdlib GLB re-parse counts the degenerate triangles crossing the export boundary. Two rugged cases whose shells are the check&#x27;s meshes: flat end panel versus a rolled knife ridge, the collapsed seam traced hot from live mesh data.</p>
802802
<p class="witnesses"><span class="tag">witnesses</span> At offset == min_dimension/2 the bevel band pinches to exactly 12 zero-area faces (4 edges x 3 segments); 32 degenerate triangles cross into the exported GLB, waiting for any merge-by-distance to weld them.</p>
803803
<a class="card-link" href="degenerate-bevel-weld/">View example<span class="sr-only"> degenerate-bevel-weld</span> <span aria-hidden="true">&rarr;</span></a>
804804
</div>

‎examples/degenerate-bevel-weld/README.md‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,18 @@ future Blender changes triangulation — re-measure and update deliberately).
3939
**Version witness:** output is byte-identical on Blender 4.5.11 LTS and
4040
5.1.2 — same counts, same min_area values, same GLB triangle census.
4141

42-
**Render as proof:** dual tray from the same `DIMS`/offsets the check
43-
asserts. Left keeps a soft rounded bevel; right collapses to a knife edge,
44-
with an emissive seam marker at every zero-area face centroid — the markers
45-
are placed from live mesh data, so a change in the data moves them. The
46-
broken state is in-frame by design.
42+
**Render as proof:** two rugged hard-shell equipment cases whose shells
43+
*are* the check's two meshes — `beveled_box(DIMS, 0.10)` and
44+
`beveled_box(DIMS, 0.20)` — with every fitting (handle, latches, molded
45+
frame, purge valve, ID plate, feet) kept inside the flat front land that
46+
survives both offsets, so the bevel is the only difference. The cases turn
47+
their end panels to the camera: the left keeps a flat end framed by clean
48+
chamfer bands; on the right the end and top lands are gone and the band
49+
rolls into a knife ridge at mid-depth. That collapsed seam is traced in hot
50+
red from live mesh data (every edge of every face thinner than 1e-6), with
51+
an orange bead on each of the 12 zero-area faces the check counts — change
52+
the offset and the overlay moves or disappears. The clean case is the
53+
designed asset and passes the asset-quality floors (exit 11).
4754

4855
## Run
4956

@@ -57,7 +64,8 @@ blender --background --python degenerate_bevel_weld.py -- --output bevel.png --e
5764
## Exit codes
5865

5966
Per-script sequential checks. `9` is a valid check code; there is no rule
60-
against it. `10` is the shared framing helper.
67+
against it. `10` is the shared framing helper, `11` the shared
68+
asset-quality helper.
6169

6270
| Code | Meaning |
6371
| --- | --- |
@@ -72,6 +80,7 @@ against it. `10` is the shared framing helper.
7280
| 8 | Degenerate GLB triangle or position count drifted |
7381
| 9 | `--output` produced no file |
7482
| 10 | Gallery framing violation |
83+
| 11 | Asset-quality floor violation (render path only) |
7584

7685
The `blender-smoke` workflow runs the check on Blender 5.2 LTS and 4.5 LTS
7786
(5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch).

0 commit comments

Comments
 (0)