Skip to content

Commit 25216dd

Browse files
TMHSDigitalclaude
andcommitted
fix(examples): redesign lod-decimate-chain rocket and show LOD density
The gallery review found three near-identical primitive rockets with unreadable floor labels: the LOD drop was invisible at card size, and the rocket was demoted from the asset reference set as the least-designed object (PR #257). The rocket is now a designed asset in one closed-form mesh: hollow nozzle bell, brass collar, red skirt, recessed panel seams with two rivet rows, raised brass shoulder band, tangent-ogive nose with brass finial and antenna, four swept fins with chamfered brass-trimmed rims, and a flanged porthole with a domed glass. Six materials. The render overlays a triangle wireframe of each LOD (same mesh, same Decimate, then Triangulate and Wireframe), so the density drop reads left to right while the silhouettes stay identical, and labels each LOD with the evaluated triangle count from the check. The render path now runs the gallery_framing and gallery_asset_quality gates. Check logic is unchanged; the closed forms follow the new geometry. The fins' layout comes from the bbox contract: three oblique fins let a collapse at ratio 0.18 shave a plate corner by 4.7e-3 (exit 9). So the fins sit on the local axes and end in a straight tip cap and flat foot. Measured bbox drift is now 2.6e-10. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
1 parent a217057 commit 25216dd

11 files changed

Lines changed: 815 additions & 398 deletions

File tree

‎README.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ Y-up and the differ check exits 9. Neighbor of
866866
</tr>
867867
<tr>
868868
<td width="46%" valign="middle">
869-
<a href="examples/lod-decimate-chain/"><img src="examples/lod-decimate-chain/preview.webp" alt="LOD decimate chain: three retro rockets side by side on a dark studio floor - cream body, red nose and fins, teal porthole - showing smooth LOD0, halved LOD1, and visibly crunched LOD2 with a hexagonal porthole" /></a>
869+
<a href="examples/lod-decimate-chain/"><img src="examples/lod-decimate-chain/preview.webp" alt="LOD decimate chain: three identical cream-and-red retro rockets with brass trim and a porthole on a dark studio floor, each under a dark triangle wireframe that coarsens left to right, labelled 4784, 2392 and 860 tris" /></a>
870870
</td>
871871
<td valign="middle">
872872

@@ -875,9 +875,10 @@ Y-up and the differ check exits 9. Neighbor of
875875
One recognizable asset at three LODs via `DECIMATE` modifiers evaluated through
876876
the depsgraph. Asserts the reduction is non-destructive (the original datablock
877877
keeps its closed-form counts), each LOD's evaluated triangle count lands within
878-
5% of `ratio x base` (measured 0.0–0.44%), and the silhouette-critical bbox
879-
survives within 1e-3 — with the aggressive-ratio nose-tip collapse documented
880-
as the caught failure mode.
878+
5% of `ratio x base` (measured 0.00–0.13%), and the silhouette-critical bbox
879+
survives within 1e-3 — with a stacked Decimate and an oblique fin's shaved
880+
plate corner as the caught failure modes. A wireframe of each evaluated mesh
881+
makes the density drop visible.
881882

882883
</td>
883884
</tr>

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
165165
- ~~Light-linking collection witness~~ **SHIPPED** as `examples/light-link-studio/` — the API is `obj.light_linking` on the light OBJECT (`ld.light_linking` is an AttributeError on both versions); linked ratio 4.0x at projected-center luminance samples, unlink raises the decoy 244–251% with 0.0% hero drift in the same two-render check; EEVEE Next honors linking too (5.5x on 4.5.11, 5.9x on 5.1.2), Cycles pinned for deterministic samples
166166
- ~~VSE sequences-to-strips witness~~ **SHIPPED** as `examples/vse-cut-list/` — `.sequences` removed on 5.x (4.5 bridges to `.strips`), `new_effect` end kwarg `frame_end=` (4.5) vs `length=` (5.x), `frame_final_*` deprecated in favor of `left_handle`/`right_handle`/`duration`, TRANSFORM effect type removed, GAMMA_CROSS clamps to the source overlap, effect strips consume inputs only when stacked above them, same-scene scene strips render transparent; save/reload round-trip + tiny-render pixel witness. **5.2 COLOR `width`/`height` bake** (not in the python_api notes) taught in `skills/vse-python/`; the example `--check-pixels` path is the witness (set scene resolution before `new_effect`)
167167
- ~~glTF export round-trip witness~~ **SHIPPED** as `examples/gltf-export-roundtrip/` — `export_yup` bakes `(x,y,z)→(x,z,−y)` into vertex data with no node rotation (probed identical on 4.5.11 and 5.1.2), `export_apply` ships the evaluated mesh (one disk vertex per evaluated loop), TEXCOORD_0 is V-flipped on disk, per-triangle material bindings survive; exporter/importer RNA signatures byte-identical between 4.5.11 and 5.1.2 (guarded against future renames); `Mesh.calc_normals()` removal on 5.x surfaced during authoring
168-
- ~~LOD decimate chain witness~~ **SHIPPED** as `examples/lod-decimate-chain/` — Decimate COLLAPSE evaluated through the depsgraph is non-destructive (obj.data keeps closed-form counts), evaluated tris hit `ratio × base` within 5% (measured 0.0–0.44%), silhouette bbox survives within 1e-3 (measured 7.7e-6); a stacked Decimate halves the effective ratio, an aggressive 0.02 ratio collapses the nose tip — both caught failure modes
168+
- ~~LOD decimate chain witness~~ **SHIPPED** as `examples/lod-decimate-chain/` — Decimate COLLAPSE evaluated through the depsgraph is non-destructive (obj.data keeps closed-form counts), evaluated tris hit `ratio × base` within 5% (measured 0.00–0.13%), silhouette bbox survives within 1e-3 (measured 2.6e-10); a stacked Decimate halves the effective ratio, an oblique fin's plate corner is shaved at ratio 0.18 — both caught failure modes
169169
- ~~Vertex weight limit witness~~ **SHIPPED** as `examples/vertex-weight-limit/` — the 4-influence engine cap enforced via the data API (`v.groups` + `VertexGroup.remove` + renormalize); unit sums (measured 3e-8), pose preserved (4.9e-3), exact LBS from the mesh's own deform layer (2.7e-7), Root mount pinned
170170
- ~~Triangulate + tangent-space witness~~ **SHIPPED** as `examples/triangulate-tangents/` — `calc_tangents` aborts on any ngon (back cap must be an explicit fan); mikktspace matches the edge/UV-delta formula within welding tolerance on smooth fields (2.3e-6 measured); planar UVs on a cylindrical wall collapse tangents onto normals (dot 0.998); `MeshUVLoopLayer` handle dangles across `calc_tangents()` on 4.5 (471 phantom flips, silent exit 0) while the mikktspace math is byte-identical on 4.5.11 and 5.1.2
171171
- UV-handle lifetime snippet: re-fetch attribute/UV layers by name after any CustomData-reallocating call (`calc_tangents`, `VertexGroup.add`, modifier edits) — held handles dangle silently on 4.5, survive by luck on 5.1 (found authoring `triangulate-tangents`; **confirmed harder authoring `lightmap-uv-channel`: iterating a held `MeshUVLoopLayer.data` after edit-mode UV ops segfaults 4.5.11 headless, EXCEPTION_ACCESS_VIOLATION 5/5, survives on 5.1.2**)
1.59 KB
Loading
58.2 KB
Loading
31 KB
Loading

‎docs/gallery/index.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -629,12 +629,12 @@ <h2><a href="export-preset-axis/">export-preset-axis</a></h2>
629629
</article>
630630
<article class="card" data-tags="depsgraph mesh">
631631
<a class="card-media" href="lod-decimate-chain/" tabindex="-1" aria-hidden="true">
632-
<img src="assets/lod-decimate-chain-hero.webp" alt="Three red and white rockets labelled LOD0, LOD1 and LOD2, each more coarsely faceted than the last." loading="lazy" decoding="async" />
632+
<img src="assets/lod-decimate-chain-hero.webp" alt="Three identical cream-and-red retro rockets with brass trim and a porthole, each covered in a dark triangle wireframe that grows coarser left to right, labelled 4784, 2392 and 860 tris." loading="lazy" decoding="async" />
633633
</a>
634634
<div class="card-body">
635635
<h2><a href="lod-decimate-chain/">lod-decimate-chain</a></h2>
636-
<p class="teaches">A retro rocket at LOD0/1/2 via the Decimate modifier evaluated through the depsgraph. The check proves the reduction is non-destructive, the triangle count hits ratio x base within bounds, and silhouette-critical dimensions survive.</p>
637-
<p class="witnesses"><span class="tag">witnesses</span> Evaluated-vs-original: the depsgraph carries the reduction while obj.data keeps the closed-form counts. A stacked Decimate halves the effective ratio (caught); an aggressive ratio collapses the nose tip (caught).</p>
636+
<p class="teaches">A retro rocket at LOD0/1/2 via the Decimate modifier evaluated through the depsgraph, with a wireframe of each evaluated mesh. The check proves the reduction is non-destructive, the triangle count hits ratio x base within bounds, and silhouette-critical dimensions survive.</p>
637+
<p class="witnesses"><span class="tag">witnesses</span> Evaluated-vs-original: the depsgraph carries the reduction while obj.data keeps the closed-form counts. A stacked Decimate halves the effective ratio (caught); a fin extreme on an oblique plate corner is shaved at ratio 0.18 (caught).</p>
638638
<a class="card-link" href="lod-decimate-chain/">View example<span class="sr-only"> lod-decimate-chain</span> <span aria-hidden="true">&rarr;</span></a>
639639
</div>
640640
</article>

0 commit comments

Comments
 (0)