chore(gates): raise the asset-sheet reference bar and commit its renderer - #257
Merged
Merged
Conversation
…erer A gallery review found three of the four asset references were among the least-designed assets in the gallery: lod-decimate-chain's primitive rocket, custom-normals-shade's jerry can and vertex-weight-limit's cylinder-stack arm. The gate asks "is the candidate the least-designed object in the lineup?", so a weak lineup lets weak candidates through. The references are now the hydrant, the survey drone, the stone well, and the wheelbarrow and apothecary shelf from the showcase. The panel renderer lived only in uncommitted scratch scripts, so no sheet could be reproduced. scripts/asset_sheet.py (host) and asset_sheet_panel.py (Blender side) commit it, read the reference set from CLAUDE.md so the tool cannot disagree with the gate, and print each isolated asset's floors for the calibration table. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…nce set Adds the car's SELECT row to scripts/asset_sheet.py (body, wheels and the fitted parts; stage excluded) and regenerates the asset sheet with the committed tool against the reference set pinned in CLAUDE.md after #257: collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf. The old-car panel from the scratch sheet is dropped. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…h measured axis gizmos (#262) * fix(examples): redesign export-preset-axis as a banded radio mast with measured axis gizmos The review judged the hero weak: dim olive-on-grey, a thin undesigned pole with a box, and the Godot copy lying sideways read as "fell over" rather than as an axis convention. - The source is now a modelled radio mast: stepped chamfered concrete footing, bolted flange, tapered mast in red/white aviation bands with steel collars, three sector panels, a shrouded microwave dish on a raked arm, an equipment cabinet, and a red obstruction lamp under a lightning rod whose point is the witnessed tip vertex. Eight materials. - Each re-import gets a modelled X/Y/Z gizmo. The frame is measured, not placed: the render path picks the axis-aligned rotation mapping source vertices onto the re-import (fit_err printed; exit 12 above 1 mm). Unity shows blue Z up; Godot shows green Y up and blue Z along the lying mast. - The camera looks along +X so the lying mast shows its full length. - The render path now runs gallery_asset_quality (exit 11). The check contract is unchanged; the same checks pass on 4.5.11, 5.1.2 and 5.2.1, and --same-axis still exits 9. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * chore(gates): export-preset-axis asset sheet against the raised reference set Adds the RadioMast.Unity selector to scripts/asset_sheet.py and regenerates the asset sheet and contact sheet after rebasing onto the new reference set (#257) and the new bmesh-gear calibration hero (#258). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…e new reference set Adds a SELECT row for the buckler to scripts/asset_sheet.py. It matches the Buckler lathe mesh and Buckler.Rivets only. The walnut stand and kickstand strut are display staging, not part of the asset, so they are excluded. The asset sheet is re-rendered with the committed tooling against the reference set from #257 (collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…ed hatchback (#260) * fix(examples): redesign car-mirror-symmetry as a smooth-shaded stylized hatchback The gallery review flagged a pink streak on the hood, sticker headlamps, a faceted body that read unfinished, and dull windows. The streak was investigated first: a camera ray cast maps it to one authored face (station 4, ring segment 5) on the mirrored half at |x| 0.11-0.38, far from the plane, with every weld check passing. It was not a seam defect but a sliver facet where the old ring's greenhouse points collapsed onto the hood, flat-shaded and facing the key almost head on (n . -key = 0.967). The loft is rebuilt: 52 placed stations x 13-point rings that lerp a hood layout into a cabin layout (no slivers), round arches seated on the wheels, flared arch cladding, a character line, and smooth shading with sharp edges by angle and material set on the authored half (Mirror only in the stack, so every count stays closed-form). Lamps, grille, door mirrors and handles are chrome-bezelled pods seated on the skin by BVH ray cast; glass ramps toward steel blue at grazing angles; wheels carry five recessed spokes. The grille is authored as a half across the plane and welded by the merge, so the part check now takes a per-part weld count (2n - weld, on-plane verts == weld) and falsifies both ways (merge off -> exit 14, end point off the plane -> exit 13). The render path now runs the shared framing and asset-quality gates, remapped to 17 and 18 because 10 and 11 are already check codes here. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix(examples): car-mirror-symmetry asset sheet against the new reference set Adds the car's SELECT row to scripts/asset_sheet.py (body, wheels and the fitted parts; stage excluded) and regenerates the asset sheet with the committed tool against the reference set pinned in CLAUDE.md after #257: collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf. The old-car panel from the scratch sheet is dropped. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…eld (#261) * fix(examples): rebuild triangulate-tangents buckler as a machined shield The gallery review judged the hero weak. The face was covered in wobbly ring ripples that read as a shading bug, which is the worst look for an example about tangent-space correctness. The object also read as a dish or speaker cone with a murky grey interior. The ripples came from a Generated- coordinate wave texture with distortion 3.0, so they were never UV-driven. The open ring at the apex also rendered as a black hole. The buckler is now one closed lathe mesh: a pointed turned boss, a flange, a cosine dome, a cut groove and a rolled rim. An apex fan closes the top and is counted in the closed-form triangle count (4992). The mesh is smooth-shaded with sharp edges at the machined breaks, so mikktspace now really welds frames. The measured weld is 3.27e-02, inside the unchanged 0.15 tolerance. Materials are assigned per ring: brass boss and rim, blued-steel flange, turned-steel dome, leather back, plus steel rivets. The lathe grooves are a bump read straight off UV v, so they are exact circles. The anisotropic streak follows the UV-map Tangent node. The shield is turned three-quarter so the boss projects and the dome reads convex. The render path now also runs the asset-quality floors (exit 11). Every check is unchanged and passes, with identical numbers on 4.5.11, 5.1.2 and 5.2.1. The falsifiers were re-proven on the new geometry. The VISUAL-STYLE numeric-only precedent sentence now states the actual mechanism. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix(examples): regenerate triangulate-tangents asset sheet against the new reference set Adds a SELECT row for the buckler to scripts/asset_sheet.py. It matches the Buckler lathe mesh and Buckler.Rivets only. The walnut stand and kickstand strut are display staging, not part of the asset, so they are excluded. The asset sheet is re-rendered with the committed tooling against the reference set from #257 (collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…ff (#265) * fix(examples): redesign gltf-skin-roundtrip as a mech scorpion standoff The review singled this hero out: two near-identical scorpions built from untextured orange boxes, with legs clipping into each other and the floor. The image gave the eye nothing to compare, because a pass meant "they look the same". The model is rebuilt from scratch. It has a lofted gunmetal chassis under a crowned carapace and five shingled tergite plates. Eight jointed legs have painted femur armour, hydraulic rams and knee drums, and they plant on rubber pads. Each claw has three bones (arm, swollen chela, movable finger). The tail has five armoured collars on rubber bellows, and a telson with a venom band and a chrome needle. There are 5 materials, and emission is used only on the eyes and the venom band. The rig grows from 7 bones to 21, with bones pointing +Y, -Y and +/-X, so the rest-matrix round-trip is exercised off the old single axis. The composition now witnesses the skin. The authored rig holds the guard pose the check compares. The actual re-imported mesh is driven through its IMPORTED armature into a different strike pose. A file that lost the skin, the joints or the weights could not follow that pose. The render path now runs gallery_framing (exit 10) and gallery_asset_quality (exit 11). Two check-protocol bugs were found and fixed; both make the check stricter: - The "straddle-safe" neighbour lookup added +/-1e-4 without re-rounding, so only the exact key could ever match. It reported a phantom weight loss (exit 18, 1.0) once the redesign put a vertex on a rounding boundary. - got_w kept only the last re-imported vertex per position. A corrupted split copy hid behind its twin, and the weight falsifier fell through to exit 19 instead of 18. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(examples): regate gltf-skin-roundtrip against the rebased calibration sets After the rebase onto main, two things changed. #258 re-rendered bmesh-gear, which darkened the contact-sheet calibration, and #257 raised the asset-sheet reference set. The scorpion stage measured 0.236, brighter than every calibration tile, so the key, fill, rim and wedge come down until the stage sits inside the set (0.204). Luma is now 0.231. The committed asset-sheet tool gains a row for this example, and it now bakes an Armature-deformed asset's staged pose before it removes the rig. Without that bake a skinned asset falls back to its rest pose, and the scorpion rendered with its tail stretched flat. None of the five references is skinned, so their panels are unchanged. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
#266) 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. Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
TMHSDigital
added a commit
that referenced
this pull request
Sep 26, 2026
…hree shadings read (#271) The gallery review judged the hero weak: three near-identical olive cans whose shading differences vanished at card size, and a crude X of floater prisms as the only detail. PR #257 demoted the can from the asset reference set as least-designed. The can is rebuilt as a pressed-steel prop. The shell has four raised rounded-triangle panels on each face with 45-deg walls, and the X is the channel left between them. There is also a weld-seam bead, a triple handle on welded feet, and a spout with red seal, domed cap, cam lever, hinge and locking pin. Olive paint chips to steel on exposed edges, driven by a `wear` point attribute on coplanar support rings. The facet angles are chosen for the contract: curves step at 22.5 deg or less, creases break at 45 or 90 deg, and nothing sits near 30 deg. The render shows three fresh builds, flat, smooth-everywhere and by-angle. The by-angle can's `sharp_edge` set is read back from the mesh and traced in thin cyan lines. A low strip light makes the highlights diverge. The render path now runs the gallery_framing (exit 10) and gallery_asset_quality (exit 11) gates it previously skipped. Checks are unchanged in tolerance. by-angle now covers Shell, Handle and Neck (1304 of 4738 edges, an exact match). The custom-normal round-trip request pattern moved from an index sweep to a 20-deg tilt toward each corner's bisector. On the new 8k-loop shell the old sweep measured Blender's lnor-encoder fan merge (1.38e-02), and a fixed 144-direction cycle hit its in-plane angle snap (9.1e-03). Both come from the 0.81-deg LNOR_SPACE_TRIGO_THRESHOLD, not from storage precision. The new pattern stays clear of both and reads back at 3.904e-05 (tol 2e-4). Long straight runs are split so the face fill has no slivers. Signed-off-by: TMHSDigital <tmhospitalitystrategies@gmail.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A review of the first 45 gallery examples found that three of the four pinned asset-quality references (
lod-decimate-chain,custom-normals-shade,vertex-weight-limit) are among the least-designed assets in the gallery. The asset-sheet gate asks "is the candidate the least-designed object in this lineup?", so a weak lineup lets weak candidates through.What
collision-hull-proxy,socket-attach-points,vertex-color-ao,wheelbarrow,apothecary-shelf. A reference may be an example or a showcase piece..scratch/scripts, so no sheet could be reproduced. The host script reads the reference set from its CLAUDE.md line, so the tool can't disagree with the gate. The Blender side prints each isolated asset's floors (parts / materials / edge90).Evidence
Sheet:
docs/gallery/asset-sheets/lod-decimate-chain.webp. The rocket (top left) is immediately the least-designed object in the new lineup, so the raised bar does the job the old one could not. Under the old set it passed.Floors measured on the isolated assets (5.2.1 LTS): socket-attach-points 21 parts / 32 materials / edge90 0.027; vertex-color-ao 11 / 11 / 0.171; wheelbarrow 1 / 2 / 0.216; apothecary-shelf 1 / 6 / 0.055.
Proven by live run
python scripts/asset_sheet.py --blender .scratch/blender-5.2.1-windows-x64/blender.exe lod-decimate-chainran end to end on Blender 5.2.1 LTS (E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe). It rendered all six panels, exited 0, and parsed the reference set from CLAUDE.md.Established by inspection only
🤖 Generated with Claude Code