diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 4aaecf3..e8be334 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -78,6 +78,7 @@ "examples/image-pixels-testcard", "examples/light-link-studio", "examples/lod-decimate-chain", + "examples/mesh-hygiene-audit", "examples/parent-inverse-orrery", "examples/png-exr-alpha", "examples/shader-node-group", diff --git a/.github/workflows/blender-smoke.yml b/.github/workflows/blender-smoke.yml index e8f38bf..366473e 100644 --- a/.github/workflows/blender-smoke.yml +++ b/.github/workflows/blender-smoke.yml @@ -496,3 +496,12 @@ jobs: # 8→55 deg brightens zenith (rise gate ≥ 1.25). Exits non-zero on failure. xvfb-run -a "$BLENDER" --background \ --python examples/sky-texture-sun-elevation/sky_texture_sun_elevation.py -- + + - name: Shipped example - mesh hygiene audit (topology ingest checklist) + run: | + set -euo pipefail + # Check only (no render): stepped utility pedestal; asserts no ngons, + # no loose verts, manifold edges (exactly 2 faces), no zero-area faces, + # positive signed volume, Euler V-E+F == 2. Exits non-zero on failure. + xvfb-run -a "$BLENDER" --background \ + --python examples/mesh-hygiene-audit/mesh_hygiene_audit.py -- diff --git a/README.md b/README.md index 1b5888c..8c425f5 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@

- 12 skills  •  6 rules  •  2 templates  •  17 snippets  •  34 examples + 12 skills  •  6 rules  •  2 templates  •  17 snippets  •  35 examples

@@ -36,7 +36,7 @@ ## Overview -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. +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. 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. @@ -537,7 +537,7 @@ portable path is `radius`.

-Game asset pipeline — 7 examples +Game asset pipeline — 8 examples @@ -664,6 +664,24 @@ quantization (1.407e-04, not float-exact). Documents the legacy `shade_auto_smooth` operator trap: CANCELLED headless on 4.5, FINISHED with the Smooth-by-Angle modifier on 5.1. + + + + +
+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 + + +### [mesh-hygiene-audit](examples/mesh-hygiene-audit/) + +The mesh-cleanliness contract a prop pipeline relies on before engine ingest: +no ngons, no loose vertices, every edge bordering exactly two faces, no +zero-area faces, positive signed volume, and Euler `V − E + F == 2` for a +closed solid (measured 24/44/22, volume 0.989248). Companion to +[`collision-hull-proxy`](examples/collision-hull-proxy/) (hull watertightness) +and [`bmesh-gear`](examples/bmesh-gear/) (parametric closed solids). Dual-panel +still: DIRTY (injected boundary + loose vert) vs CLEAN. +
diff --git a/ROADMAP.md b/ROADMAP.md index 5ac1e95..fce6d62 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -120,7 +120,8 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo - Volumetric scatter optical-depth witness: Volume Scatter density → Beer–Lambert transmittance along a known path (Cycles; Stage deviation) - Freestyle SVG / line-set witness: Freestyle line set on a silhouette (full render pass; prefer Line Art first) - 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) -- 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 +- ~~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 +- 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) ## Future (uncommitted) diff --git a/docs/gallery/assets/mesh-hygiene-audit-hero.webp b/docs/gallery/assets/mesh-hygiene-audit-hero.webp new file mode 100644 index 0000000..3756513 Binary files /dev/null and b/docs/gallery/assets/mesh-hygiene-audit-hero.webp differ diff --git a/docs/gallery/contact-sheets/mesh-hygiene-audit-contact-sheet.webp b/docs/gallery/contact-sheets/mesh-hygiene-audit-contact-sheet.webp new file mode 100644 index 0000000..c680f01 Binary files /dev/null and b/docs/gallery/contact-sheets/mesh-hygiene-audit-contact-sheet.webp differ diff --git a/docs/gallery/index.html b/docs/gallery/index.html index 42f69f3..4689182 100644 --- a/docs/gallery/index.html +++ b/docs/gallery/index.html @@ -187,6 +187,7 @@

Examples Gallery

+ @@ -584,6 +585,17 @@

gp-lineart-contour

View example +
+ + mesh-hygiene-audit — Engine-ingest mesh hygiene as executable topology checks on a stepped street electrical pedestal (plinth, cabinet, drip cap). + +
+

mesh-hygiene-audit

+

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.

+

witnesses 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.

+ View example +
+