Skip to content

fix(examples): redesign lod-decimate-chain rocket and show LOD density - #266

Merged
TMHSDigital merged 1 commit into
mainfrom
fix/hero-lod-decimate-chain
Sep 26, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
fix/hero-lod-decimate-chain

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Why

The gallery review found three near-identical primitive rockets (cone, cylinder, flat fins) with tiny floor labels nobody could read at card size. The LOD drop didn't show, and #257 demoted the rocket from the asset reference set as the least-designed object in the lineup.

What changed

Asset. The rocket is now one closed-form mesh with these parts:

  • hollow nozzle bell with a sooted interior
  • brass collar
  • red skirt
  • two recessed panel seams with 48 rivets
  • raised brass shoulder band
  • tangent-ogive nose with a brass finial and antenna
  • four swept fins with chamfered, brass-trimmed rims (mitred insets, so the bevel faces are planar)
  • a flanged porthole with a domed emissive glass

It uses six materials and has smooth shading with sharp edges past 40°.

Proof made visible. A dark triangle wireframe sits over each LOD. The overlay object shares the LOD's mesh and applies the same Decimate, then Triangulate and Wireframe, so it draws exactly the triangles the check counts: the overlay's input measured 4784 / 2392 / 860 faces, identical to the check (probe). Reading left to right, the mesh goes from fine (LOD0) to large facets (LOD2), and the porthole flange collapses to an octagon. The silhouettes stay identical, which is contract 3 made visible. Each LOD has one large label showing the evaluated triangle count from the check (4784 tris / 2392 tris / 860 tris). The labels are readable at 427x240.

Render path now calls gallery_framing.check_framing (exit 10) and gallery_asset_quality.check_asset_quality (exit 11). "No file" moves from 10 to 12, and the README exit table is updated.

Check logic is unchanged. The closed-form counts and bbox now follow the new geometry. The fin layout comes from the bbox contract: with three oblique fins, a collapse at 0.18 shaved a plate corner by 4.7e-3 (exit 9). So the four fins sit on the local axes and end in a straight tip cap and a flat foot, which makes every bbox extreme a mid-rim vertex on a straight edge. The render turns the rocket −45° so the porthole faces the camera. The check reads local coordinates.

Evidence

Gates (5.2.1 LTS)

  • Framing: fill x=0.788, y=0.717; margins L 0.106, R 0.106, B 0.072, T 0.122. Passes.
  • Asset quality: no default names; 6 materials; edge90 0.010 (48/4868). Passes.
  • Contact sheet, per criterion:
    • Luminance: 0.2465, inside the calibration spread (armature-bend 0.2787, damped-track-aim 0.1511, bmesh-gear 0.3024).
    • Stage darkness: stage 0.2131, level with armature-bend (0.2132).
    • Wedge warmth: +0.035. The warm pool is visible top right but weaker than damped-track-aim and bmesh-gear.
    • Saturation: 0.143, level with armature-bend (0.144).
    • Subject fill: in band.
    • Thumbnail legibility: passes. At 427x240 the coarsening mesh and the labels both read.
  • Asset sheet verdict: not the least-designed. The rocket now reads as more detailed than the hydrant (trim, rivets, seams, porthole flange, finial). It is still below the drone, well, wheelbarrow and shelf, so it sits in the lower half of the lineup. Floors: parts 1, materials 6, edge90 0.010.
  • Hero drift: measure_hero_drift.py --only lod-decimate-chain reports matches (mean_abs 0.00559, luma 0.2465/0.2461).
  • build_gallery.py re-run after rebasing onto main. I read the generated <img alt> and witnesses callout in docs/gallery/index.html and docs/gallery/lod-decimate-chain/index.html; both carry the new text in full.

Check runs (tests/smoke/run_example.py --forbid-skip)

binary reported version result
.scratch/blender-5.2.1-windows-x64/blender.exe Blender 5.2.1 LTS PASS
.scratch/blender-5.1.2-windows-x64/blender.exe Blender 5.1.2 PASS
.scratch/blender-4.5.11-windows-x64/blender.exe Blender 4.5.11 LTS PASS

All three print the same values: 2511 verts / 2488 faces / 4784 tris; ratio 0.5 gives 2392 tris (dev 0.00%); ratio 0.18 gives 860 tris (dev 0.13%); bbox_dev ≤ 2.6e-10. The --output render path also passed framing and asset quality on 4.5.11.

Falsifiers (5.2.1; each break observed failing, then restored)

probe exit measured
--no-decimate (also on 4.5.11) 6 evaluated tris 4784 >= base 4784
modifier applied into obj.data 7 original datablock changed
second Decimate stacked 8 1196 tris, 50.0% off target 2392
LOD2 ratio 0.02 8 126 tris, 31.7% off target 96
three oblique fins (90/210/330) 9 bbox drift 0.0047 > 1e-3
mesh scaled by 1.001 after build 4 base bbox deviates 3.4e-3 from closed form
closed form off by one nose ring 3 (2511, 2488) != (2559, 2536)

Proven by live run

  • Everything under Evidence: gates, check runs on three binaries, falsifiers, the overlay-equals-LOD triangle probe, asset sheet, contact sheet and hero drift.

Established by inspection only

  • The asset-sheet verdict and my critique of the render.
  • The docs/VISUAL-STYLE.md calibration row "lod-decimate-chain (former reference)" still records the old asset's floors (3 / 4 / 0.019). I left it as the record behind the demotion. The new asset measures 1 part / 6 materials / 0.010 if you'd rather update it.

🤖 Generated with Claude Code

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>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 26, 2026
@TMHSDigital
TMHSDigital merged commit 0989aca into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-lod-decimate-chain branch September 26, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant