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
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -677,10 +677,10 @@ with the Smooth-by-Angle modifier on 5.1.
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
closed solid (measured 66/136/72, volume 0.652001). 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.
still: DIRTY through-hole + loose-vert bead vs CLEAN manifold (same brass).

</td>
</tr>
Expand All @@ -695,9 +695,10 @@ still: DIRTY (injected boundary + loose vert) vs CLEAN.
The origin / scale-apply / MPI contract a prop pipeline relies on before
engine ingest: data-API scale bake to exactly `(1,1,1)`, local bbox
`min.z == 0` (origin at base), world AABB unchanged across the bake, and
`matrix_parent_inverse` so a bolted accessory does not teleport. Extends
[`parent-inverse-orrery`](examples/parent-inverse-orrery/) without retreading
orbits. Dual-panel still: TRAP (bare parent) vs MPI KEEP.
`matrix_parent_inverse` so a flanged conduit stays on its mount socket.
Extends [`parent-inverse-orrery`](examples/parent-inverse-orrery/) without
retreading orbits. Dual-panel still: TRAP (bare parent — empty socket +
teleported flange) vs MPI KEEP.

</td>
</tr>
Expand Down
Binary file modified docs/gallery/assets/mesh-hygiene-audit-hero.webp
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/prop-origin-transform-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.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 6 additions & 6 deletions docs/gallery/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -589,23 +589,23 @@ <h2><a href="gp-lineart-contour/">gp-lineart-contour</a></h2>
</article>
<article class="card" data-tags="bmesh mesh game-pipeline">
<a class="card-media" href="mesh-hygiene-audit/" aria-label="mesh-hygiene-audit example detail page">
<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" />
<img src="assets/mesh-hygiene-audit-hero.webp" alt="mesh-hygiene-audit — Engine-ingest mesh hygiene on an octagonal street valve: no ngons, no loose verts, manifold edges, no zero-area faces, positive signed volume, Euler V-E+F==2." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="mesh-hygiene-audit/">mesh-hygiene-audit</a></h2>
<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>
<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>
<p class="teaches">Engine-ingest mesh hygiene on an octagonal street valve: no ngons, no loose verts, manifold edges, no zero-area faces, positive signed volume, Euler V-E+F==2. Dual-panel still shows a through-hole and loose-vert bead derived from live mesh incidence — same brass on both so color alone cannot carry the proof.</p>
<p class="witnesses"><span class="tag">witnesses</span> Pipelines that skip topology gates ship open boundaries, loose verts, or non-sphere Euler into engine ingest. The still makes the boundary hole and loose vert readable; ngon / zero-area / full winding invert remain check-only.</p>
<a class="card-link" href="mesh-hygiene-audit/">View example <span aria-hidden="true">&rarr;</span></a>
</div>
</article>
<article class="card" data-tags="transform parenting game-pipeline">
<a class="card-media" href="prop-origin-transform/" aria-label="prop-origin-transform example detail page">
<img src="assets/prop-origin-transform-hero.webp" alt="prop-origin-transform — Street pedestal origin-to-base-center + data-API scale apply + matrix_parent_inverse for a bolted accessory." loading="lazy" decoding="async" />
<img src="assets/prop-origin-transform-hero.webp" alt="prop-origin-transform — Street pedestal origin-to-base-center + data-API scale apply + matrix_parent_inverse for a flanged conduit accessory." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="prop-origin-transform/">prop-origin-transform</a></h2>
<p class="teaches">Street pedestal origin-to-base-center + data-API scale apply + matrix_parent_inverse for a bolted accessory. After bake: scale exactly (1,1,1), local min.z==0, world AABB delta 0. Bare parent jumps the accessory (~0.43 m); MPI restores world location (~3e-8). view_layer.update() before reading matrix_world.</p>
<p class="witnesses"><span class="tag">witnesses</span> AI code parents with child.parent = parent alone (accessory teleports), skips view_layer.update() before matrix_world, or leaves non-uniform scale / centered origin for engine ingest. Skipping apply, origin bake, or MPI each fails a closed-form gate.</p>
<p class="teaches">Street pedestal origin-to-base-center + data-API scale apply + matrix_parent_inverse for a flanged conduit accessory. After bake: scale (1,1,1), local min.z==0, world AABB unchanged. Bare parent jumps the accessory off an empty mount socket; MPI keeps it seated.</p>
<p class="witnesses"><span class="tag">witnesses</span> Bare child.parent = parent teleports accessories off their mounts; skipping view_layer.update() before matrix_world, or leaving non-uniform scale / centered origin, breaks engine ingest placement.</p>
<a class="card-link" href="prop-origin-transform/">View example <span aria-hidden="true">&rarr;</span></a>
</div>
</article>
Expand Down
Loading
Loading