Skip to content

Commit 16259fc

Browse files
feat: add mesh-hygiene-audit example (#101)
* feat: add mesh-hygiene-audit example Ship the engine-ingest topology checklist as a runnable dual-panel gallery example so prop pipelines can prove tris/quads, manifold edges, winding, and Euler 2 before hull/LOD/export. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: bump README badge example count to 35 Validate-counts greps for the contiguous '35 examples' substring in the header badge; the prose '35 runnable examples' alone does not match. Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent a5b96f5 commit 16259fc

12 files changed

Lines changed: 1382 additions & 4 deletions

File tree

.cursor-plugin/plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"examples/image-pixels-testcard",
7979
"examples/light-link-studio",
8080
"examples/lod-decimate-chain",
81+
"examples/mesh-hygiene-audit",
8182
"examples/parent-inverse-orrery",
8283
"examples/png-exr-alpha",
8384
"examples/shader-node-group",

.github/workflows/blender-smoke.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,3 +496,12 @@ jobs:
496496
# 8→55 deg brightens zenith (rise gate ≥ 1.25). Exits non-zero on failure.
497497
xvfb-run -a "$BLENDER" --background \
498498
--python examples/sky-texture-sun-elevation/sky_texture_sun_elevation.py --
499+
500+
- name: Shipped example - mesh hygiene audit (topology ingest checklist)
501+
run: |
502+
set -euo pipefail
503+
# Check only (no render): stepped utility pedestal; asserts no ngons,
504+
# no loose verts, manifold edges (exactly 2 faces), no zero-area faces,
505+
# positive signed volume, Euler V-E+F == 2. Exits non-zero on failure.
506+
xvfb-run -a "$BLENDER" --background \
507+
--python examples/mesh-hygiene-audit/mesh_hygiene_audit.py --

README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</p>
1919

2020
<p align="center">
21-
<strong>12 skills</strong> &nbsp;&bull;&nbsp; <strong>6 rules</strong> &nbsp;&bull;&nbsp; <strong>2 templates</strong> &nbsp;&bull;&nbsp; <strong>17 snippets</strong> &nbsp;&bull;&nbsp; <strong>34 examples</strong>
21+
<strong>12 skills</strong> &nbsp;&bull;&nbsp; <strong>6 rules</strong> &nbsp;&bull;&nbsp; <strong>2 templates</strong> &nbsp;&bull;&nbsp; <strong>17 snippets</strong> &nbsp;&bull;&nbsp; <strong>35 examples</strong>
2222
</p>
2323

2424
<p align="center">
@@ -36,7 +36,7 @@
3636

3737
## Overview
3838

39-
This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 34 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support.
39+
This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 35 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support.
4040

4141
The content is consumed by AI coding agents (Cursor, Claude Code, any MCP-capable client) when working on Blender add-ons, geometry nodes scripts, batch pipelines, or animation tooling. There is no build step. Edit the markdown and Python files directly.
4242

@@ -537,7 +537,7 @@ portable path is `radius`.
537537
</details>
538538

539539
<details>
540-
<summary><strong>Game asset pipeline</strong> — 7 examples</summary>
540+
<summary><strong>Game asset pipeline</strong> — 8 examples</summary>
541541

542542
<table>
543543
<tr>
@@ -664,6 +664,24 @@ quantization (1.407e-04, not float-exact). Documents the legacy
664664
`shade_auto_smooth` operator trap: CANCELLED headless on 4.5, FINISHED
665665
with the Smooth-by-Angle modifier on 5.1.
666666

667+
</td>
668+
</tr>
669+
<tr>
670+
<td width="46%" valign="middle">
671+
<a href="examples/mesh-hygiene-audit/"><img src="examples/mesh-hygiene-audit/preview.webp" alt="Mesh hygiene audit: dual-panel dirty vs clean street electrical pedestal — left orange emissive wireframe with loose-vert bead and DIRTY placard, right teal CLEAN manifold — proving the engine-ingest topology checklist" /></a>
672+
</td>
673+
<td valign="middle">
674+
675+
### [mesh-hygiene-audit](examples/mesh-hygiene-audit/)
676+
677+
The mesh-cleanliness contract a prop pipeline relies on before engine ingest:
678+
no ngons, no loose vertices, every edge bordering exactly two faces, no
679+
zero-area faces, positive signed volume, and Euler `V − E + F == 2` for a
680+
closed solid (measured 24/44/22, volume 0.989248). Companion to
681+
[`collision-hull-proxy`](examples/collision-hull-proxy/) (hull watertightness)
682+
and [`bmesh-gear`](examples/bmesh-gear/) (parametric closed solids). Dual-panel
683+
still: DIRTY (injected boundary + loose vert) vs CLEAN.
684+
667685
</td>
668686
</tr>
669687
</table>

ROADMAP.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
120120
- Volumetric scatter optical-depth witness: Volume Scatter density → Beer–Lambert transmittance along a known path (Cycles; Stage deviation)
121121
- Freestyle SVG / line-set witness: Freestyle line set on a silhouette (full render pass; prefer Line Art first)
122122
- prop-origin-transform witness — origin to base center, `transform_apply` through the data API, delta transforms, `matrix_parent_inverse` so parented children do not teleport; closed forms: post-apply scale exactly (1,1,1), local bbox min Z == 0, world bbox unchanged (builds on `parent-inverse-orrery`, does not duplicate it)
123-
- mesh-hygiene-audit witness — the engine-ingest checklist as executable contract: no ngons, no loose vertices, no non-manifold edges, no zero-area faces, consistent outward winding; closed forms via Euler characteristic and exact edge-face incidence counts
123+
- ~~mesh-hygiene-audit witness~~ **SHIPPED** as `examples/mesh-hygiene-audit/` — engine-ingest topology checklist on a stepped street electrical pedestal: no ngons, no loose verts, manifold edges (exactly 2 faces), no zero-area faces (`min_area` printed), positive signed volume, Euler `V−E+F==2` (24/44/22, volume 0.989248); byte-identical on 4.5.11 and 5.1.2; dual-panel dirty vs clean still
124+
- UV atlas pack witness — lightmap/unique UV island packing with non-overlap + utilization closed forms (deferred behind hygiene/origin; overlaps `uv-layer-grid` / `triangulate-tangents` / `gltf-export-roundtrip` UV arc)
124125

125126
## Future (uncommitted)
126127

936 KB
Loading
39.9 KB
Loading

docs/gallery/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ <h1>Examples Gallery</h1>
187187
<button class="chip" data-tag="depsgraph" type="button">depsgraph</button>
188188
<button class="chip" data-tag="drivers" type="button">drivers</button>
189189
<button class="chip" data-tag="export" type="button">export</button>
190+
<button class="chip" data-tag="game-pipeline" type="button">game-pipeline</button>
190191
<button class="chip" data-tag="geometry-nodes" type="button">geometry-nodes</button>
191192
<button class="chip" data-tag="grease-pencil" type="button">grease-pencil</button>
192193
<button class="chip" data-tag="images" type="button">images</button>
@@ -584,6 +585,17 @@ <h2><a href="gp-lineart-contour/">gp-lineart-contour</a></h2>
584585
<a class="card-link" href="gp-lineart-contour/">View example <span aria-hidden="true">&rarr;</span></a>
585586
</div>
586587
</article>
588+
<article class="card" data-tags="bmesh mesh game-pipeline">
589+
<a class="card-media" href="mesh-hygiene-audit/" aria-label="mesh-hygiene-audit example detail page">
590+
<img src="assets/mesh-hygiene-audit-hero.webp" alt="mesh-hygiene-audit — Engine-ingest mesh hygiene as executable topology checks on a stepped street electrical pedestal (plinth, cabinet, drip cap)." loading="lazy" decoding="async" />
591+
</a>
592+
<div class="card-body">
593+
<h2><a href="mesh-hygiene-audit/">mesh-hygiene-audit</a></h2>
594+
<p class="teaches">Engine-ingest mesh hygiene as executable topology checks on a stepped street electrical pedestal (plinth, cabinet, drip cap). Gates: no ngons, no loose verts, every edge borders exactly 2 faces, no zero-area faces (min_area printed), positive signed volume, Euler V-E+F==2 (24/44/22, volume 0.989248). Dual-panel dirty vs clean still marks defects.</p>
595+
<p class="witnesses"><span class="tag">witnesses</span> AI pipelines that skip topology gates ship ngons, loose verts, open boundaries, inverted winding, or non-sphere Euler into engine ingest. Injecting one defect class at a time exits non-zero (ngon=3, loose=4, boundary=5, zero-area=6, flip=7); the clean solid recovers hygiene_ok on both 4.5.11 and 5.1.2.</p>
596+
<a class="card-link" href="mesh-hygiene-audit/">View example <span aria-hidden="true">&rarr;</span></a>
597+
</div>
598+
</article>
587599
</div>
588600
</main>
589601
<footer>

0 commit comments

Comments
 (0)