Skip to content

chore(gates): raise the asset-sheet reference bar and commit its renderer - #257

Merged
TMHSDigital merged 1 commit into
mainfrom
chore/asset-reference-set
Sep 25, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
chore/asset-reference-set

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

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

  • CLAUDE.md: the reference set is now collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf. A reference may be an example or a showcase piece.
  • scripts/asset_sheet.py + scripts/asset_sheet_panel.py: commit the panel renderer, which until now lived only in uncommitted .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).
  • docs/VISUAL-STYLE.md: calibration table gains rows for the four new references and relabels the three demoted ones.
  • docs/gallery/asset-sheets/lod-decimate-chain.webp: the demoted rocket rendered against the new set (evidence below).

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-chain ran 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

  • The judgment that the three demoted assets are weaker than the new references (review of committed heroes and existing asset sheets).
  • No example code, check, or smoke row changes.

🤖 Generated with Claude Code

…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>
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 25, 2026
@TMHSDigital
TMHSDigital merged commit 6f57e76 into main Sep 25, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the chore/asset-reference-set branch September 25, 2026 23:49
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>
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant