Skip to content

fix(examples): redesign degenerate-bevel-weld as rugged cases with a traced collapse seam - #270

Merged
TMHSDigital merged 2 commits into
mainfrom
fix/hero-degenerate-bevel-weld
Sep 26, 2026
Merged

TMHSDigital merged 2 commits into
mainfrom
fix/hero-degenerate-bevel-weld

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

What changed and why

The gallery review judged the degenerate-bevel-weld hero weak. It showed two near-identical teal slabs, shot front-on, which hid the one face the collapse changes. The tiny orange dots and floor labels could not be read at card size, so at thumbnail the two slabs looked like the same object.

This is a redesign:

  • Designed prop whose bevel matters. Each shell is one of the check's meshes, beveled_box(DIMS, 0.10) and beveled_box(DIMS, 0.20), built out as a rugged hard-shell equipment case. Fittings: a D-handle on pivots, twin draw latches with anodized levers, a lid seam, hasps, a molded reinforcement frame, ribs, a purge valve, an ID plate and rubber feet. That is 22 named parts in 6 materials. Every fitting sits inside the front land that survives both offsets, so the bevel is the only difference between the two cases.
  • The collapse reads as silhouette. Both cases turn their end panels to the camera. On the left, a flat end panel is framed by clean chamfer bands. On the right, the end and top lands are gone and the band rolls into a knife ridge at mid-depth.
  • Hot highlight from live data. A red emissive seam traces every edge of every face under 1e-6 area on the degenerate shell: 16 thin faces, 32 segments. An orange bead sits on each of the 12 zero-area faces the check counts. Change the offset and the overlay moves or disappears.
  • Labels removed.
  • Stage turns, not the props. Every root object is rotated by -CASE_YAW after staging. The image does not change (mean abs diff 0.019/255 against the un-turned build), and the cases stay axis-aligned in world space, which is what the asset-sheet panel's three-quarter camera expects. A first attempt with rotated cases produced a cropped end-on panel.
  • The render path now also runs gallery_asset_quality.check_asset_quality (exit 11) on the clean case. scripts/asset_sheet.py gains the degenerate-bevel-weld SELECT row (^CaseSafe\.).
  • Updated: README render-as-proof section and exit-code table, the examples/gallery.json teaches/alt, and the root README gallery-row alt. Gallery regenerated.

The check path is unchanged: check(), the constants and the exit codes 3–8 are untouched.

Gates (Blender 5.2.1 LTS, E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe)

  • Framing: fill x=0.778, y=0.689 (band 0.70–0.90). Margins: left 0.081, right 0.141, bottom 0.111, top 0.200. framing_ok.
  • Asset quality: naming ok, materials n=6 (dominant [email protected]), edge90 0.008, compactness 17.5 (informational). aq_ok.
  • Hero drift (measure_hero_drift.py --only degenerate-bevel-weld): mean_abs 0.00345, gt2pct 0.95 %, verdict matches.
  • Hero webp is 29.8 KB and preview webp 27.2 KB, both written by render_hero.py.

Contact sheet: docs/gallery/contact-sheets/degenerate-bevel-weld-contact-sheet.webp

tile luma stage warmth sat
degenerate-bevel-weld 0.1937 0.2066 −0.2607 0.2487
armature-bend 0.2787 0.2132 −0.4279 0.1436
damped-track-aim 0.1511 0.1448 +0.2772 0.2305
bmesh-gear 0.2358 0.1772 +0.3027 0.2495

Verdicts:

  • Stage darkness: pass. Stage is 0.207, within the calibration range 0.145–0.213.
  • Wedge warmth: pass, on the cool side. The warm wedge pool is on the back wall. The metric is negative because the brightest tenth of pixels is dominated by the blue polymer highlights, as with armature-bend's cool subject (−0.43).
  • Subject fill: pass. Measured fill is 0.778 in x.
  • Saturation: pass. 0.249 matches bmesh-gear (0.250).
  • Thumbnail legibility: pass. At 427×240 the left case reads as a box with a flat end, and the right reads as a rounded case wrapped by a red seam.
  • Mean luminance: 0.194, against a calibration mean of 0.222 (range 0.151–0.279).

Asset sheet: docs/gallery/asset-sheets/degenerate-bevel-weld.webp

Lineup: the candidate (the clean case, CaseSafe.*), then collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow and apothecary-shelf, read from CLAUDE.md on main.

Verdict: ships, but it is among the simpler objects in the lineup. It reads as a manufactured object with assembled hardware, treated edges and a real material split. It is on a par with the hydrant for form complexity and below the drone, wheelbarrow and shelf. It is not clearly identifiable as the least-designed object in the lineup.

Check runs (python tests/smoke/run_example.py, check-only path)

binary reported version result
.scratch\blender-5.2.1-windows-x64\blender.exe 5.2.1 LTS PASS: collapse 12f/16v ships 32 degenerate tris in the GLB
.scratch\blender-5.1.2-windows-x64\blender.exe 5.1.2 PASS (same counts)
.scratch\blender-4.5.11-windows-x64\blender.exe 4.5.11 LTS PASS (same counts)

The render path (--output) also ran clean on 4.5.11 LTS: render_defects thin_faces=16 zero_area_faces=12 seam_segments=32, framing_ok, aq_ok.

Falsifiers

  • Existing check (unchanged): --both-safe on 5.2.1 exits 4 with ERROR: degenerate bevel produced 0 zero-area faces, closed form 12.
  • Overlay: no new gated check was added. The seam and the beads are counted from the same mesh data. At the safe offset the thin-face set is empty, so the overlay disappears; --both-safe stops at exit 4 before any render.

Proven by live run

  • All three check-only runs listed above, and the --both-safe exit 4.
  • On 5.2.1: the framing and asset-quality gates, the render_hero.py regeneration, the contact sheet, the asset sheet and the drift check.
  • The render path on 4.5.11.
  • build_gallery.py after the rebase onto main. The generated <img alt> in docs/gallery/index.html and docs/gallery/degenerate-bevel-weld/index.html was read back and is the new one-sentence alt (181 chars).

Established by inspection only

  • That the turned stage is equivalent to rotated props: measured as a pixel diff on one pair of renders, not proven in general.
  • The asset-sheet verdict and thumbnail legibility are visual judgements.

🤖 Generated with Claude Code

TMHSDigital and others added 2 commits September 25, 2026 21:37
…traced collapse seam

The gallery review found the hero unreadable: two near-identical teal
slabs shot front-on (which hides the only face the collapse changes),
tiny orange dots and floor labels too small to read at card size.

The shells are now the check's two meshes, beveled_box(DIMS, 0.10) and
beveled_box(DIMS, 0.20), dressed as hard-shell equipment cases (handle,
draw latches, molded frame, purge valve, ID plate, feet) with every
fitting inside the front land both offsets keep. The cases turn their
end panels to the camera so the difference is silhouette: a flat end
framed by chamfer bands versus a rim rolled into a knife ridge. The
collapsed seam is traced in hot red from live mesh data (edges of faces
under 1e-6 area) with a bead on each of the 12 zero-area faces the check
counts. Labels removed. The stage turns instead of the props, so the
cases stay axis-aligned for the asset sheet.

The render path now also runs the asset-quality floors (exit 11) on the
clean case; asset_sheet.py gains its SELECT row. Check path unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
Union of asset-sheet SELECT rows; generated gallery pages regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Signed-off-by: TMHSDigital <[email protected]>
@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 a0b4a70 into main Sep 26, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/hero-degenerate-bevel-weld branch September 26, 2026 02:24
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