diff --git a/README.md b/README.md index 98383282..f535ce9a 100644 --- a/README.md +++ b/README.md @@ -866,7 +866,7 @@ Y-up and the differ check exits 9. Neighbor of -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 +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 @@ -875,9 +875,10 @@ Y-up and the differ check exits 9. Neighbor of One recognizable asset at three LODs via `DECIMATE` modifiers evaluated through the depsgraph. Asserts the reduction is non-destructive (the original datablock keeps its closed-form counts), each LOD's evaluated triangle count lands within -5% of `ratio x base` (measured 0.0–0.44%), and the silhouette-critical bbox -survives within 1e-3 — with the aggressive-ratio nose-tip collapse documented -as the caught failure mode. +5% of `ratio x base` (measured 0.00–0.13%), and the silhouette-critical bbox +survives within 1e-3 — with a stacked Decimate and an oblique fin's shaved +plate corner as the caught failure modes. A wireframe of each evaluated mesh +makes the density drop visible. diff --git a/ROADMAP.md b/ROADMAP.md index 9f2ffa29..6d48b3cc 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -165,7 +165,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo - ~~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 - ~~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`) - ~~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 -- ~~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 +- ~~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 - ~~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 - ~~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 - 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**) diff --git a/docs/gallery/asset-sheets/lod-decimate-chain.webp b/docs/gallery/asset-sheets/lod-decimate-chain.webp index 419cd047..bdf375bd 100644 Binary files a/docs/gallery/asset-sheets/lod-decimate-chain.webp and b/docs/gallery/asset-sheets/lod-decimate-chain.webp differ diff --git a/docs/gallery/assets/lod-decimate-chain-hero.webp b/docs/gallery/assets/lod-decimate-chain-hero.webp index 6e7d7c45..9779df6d 100644 Binary files a/docs/gallery/assets/lod-decimate-chain-hero.webp and b/docs/gallery/assets/lod-decimate-chain-hero.webp differ diff --git a/docs/gallery/contact-sheets/lod-decimate-chain-contact-sheet.webp b/docs/gallery/contact-sheets/lod-decimate-chain-contact-sheet.webp index f7954bd2..14edb11f 100644 Binary files a/docs/gallery/contact-sheets/lod-decimate-chain-contact-sheet.webp and b/docs/gallery/contact-sheets/lod-decimate-chain-contact-sheet.webp differ diff --git a/docs/gallery/index.html b/docs/gallery/index.html index 464cfaba..dc6dbf57 100644 --- a/docs/gallery/index.html +++ b/docs/gallery/index.html @@ -629,12 +629,12 @@

export-preset-axis

lod-decimate-chain

-

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.

-

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

+

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.

+

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

View example lod-decimate-chain
diff --git a/docs/gallery/lod-decimate-chain/index.html b/docs/gallery/lod-decimate-chain/index.html index 12a45f2f..34085579 100644 --- a/docs/gallery/lod-decimate-chain/index.html +++ b/docs/gallery/lod-decimate-chain/index.html @@ -4,25 +4,25 @@ lod-decimate-chain — Examples — Blender Developer Tools - + - + - + - + - +