Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1092,7 +1092,7 @@ turns cream.
</tr>
<tr>
<td width="46%" valign="middle">
<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>
<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>
</td>
<td valign="middle">

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/gallery/assets/degenerate-bevel-weld-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
317 changes: 247 additions & 70 deletions docs/gallery/degenerate-bevel-weld/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/gallery/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -794,11 +794,11 @@ <h2><a href="attribute-domain-shear/">attribute-domain-shear</a></h2>
</article>
<article class="card" data-tags="bmesh mesh game-pipeline">
<a class="card-media" href="degenerate-bevel-weld/" tabindex="-1" aria-hidden="true">
<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" />
<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" />
</a>
<div class="card-body">
<h2><a href="degenerate-bevel-weld/">degenerate-bevel-weld</a></h2>
<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>
<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>
<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>
<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>
</div>
Expand Down
21 changes: 15 additions & 6 deletions examples/degenerate-bevel-weld/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,18 @@ future Blender changes triangulation — re-measure and update deliberately).
**Version witness:** output is byte-identical on Blender 4.5.11 LTS and
5.1.2 — same counts, same min_area values, same GLB triangle census.

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

## Run

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

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

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

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