fix(examples): re-review of the 20 judged-fine examples; seat the gear, buckler and crystal - #247
Merged
Merged
Conversation
The display stand hung 0.49 m above the floor with nothing under it, and nothing held the buckler's 20-degree backward lean. The stand now rests on the floor, the rim's lowest evaluated vertex bites 1 cm into its top, and a kickstand strut runs from the buckler's back (found by a local-space ray) to the floor. The camera and aim ride with the derived lift. Render path only; exit codes are unchanged on 4.5.11, 5.1.2 and 5.2.1. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
The gear leaned 46 degrees back with nothing behind it, and its lowest tooth was sunk 4.5 cm into the floor. The gear is now seated from its lowest evaluated vertex (3 mm bite) and carried by a matte inclined wedge whose slope lies in the back-cap plane. The camera rides with the seat height. bmesh-gear is a pinned calibration reference: luma 0.305 -> 0.302, stage 0.237 -> 0.236, warmth +0.370 -> +0.374, saturation 0.195 -> 0.195. Render path only; exit codes are unchanged on all three binaries. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
… mount it build_crystal duplicated an open cone and flipped it over the original. The two crossed into an hourglass with open hexagonal ends and an inner spike, which the old gallery alt described as an hourglass-shaped solid. It is now the hexagonal bipyramid the docstring intended. The crystal also hovered 0.13 m above the floor; a two-tier hex mount, built after the check from the lowest evaluated vertex, now holds its lower tip. The still dollies along the check camera's bearing so the mount stays in frame. The corrected mesh changes the measured Line Art counts from 10 strokes / 34 points to 2 / 12, identical on 4.5.11, 5.1.2 and 5.2.1. The gates are lower bounds (>=1, >=4) and are unchanged, as are every assertion and exit code (default 0, --no-contour 4, --output 0). Shared gallery.json and gallery index updates for all three examples ride here. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.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.
A second review of the 20 gallery examples an earlier pass had marked "fine". I re-inspected all 20 as Track B: each example's contract, assertions and exit codes are frozen, and only presentation and demo scaffolding may change. Three examples had real defects and are fixed here. The other 17 are unchanged, with evidence below.
Binaries:
.scratch/blender-4.5.11-windows-x64(reportsBlender 4.5.11 LTS)blender-5.1.2-windows-x64(Blender 5.1.2)blender-5.2.1-windows-x64(Blender 5.2.1 LTS)The heroes were rendered on 5.2.1 through
scripts/render_hero.py.Method: I intercepted each example's own hero render, which covers the 14 render paths that have no framing gate, and shot these views from the scene as staged:
A probe then printed the world-space extents of every evaluated mesh at render time. All inspection output stays in
.scratch/.Fixed
triangulate-tangentsDefects:
ground_contact(shadow far below) and confirmed by the extents probe.Fix: everything is derived from the posed mesh.
ray_cast, to the floor behind it.Measured: rim 0.110 m against a stand top at 0.120 m; stand from 0 to 0.12 m; strut foot at −0.028 m.
Framing: own gate, fill 0.833, minimum margin 0.028 (it was 0.834 and ok before).
Rounds: 1.
bmesh-gear(pinned contact-sheet calibration reference)Defects:
Fix:
Why it took 4 rounds: the wedge first read as a pale sheet of paper. A diagnostic render with the wedge painted pure red showed that about 45/255 of its brightness was specular, not albedo, so the final material cuts the specular level.
Round limit: my plan allowed three rounds per example; this one took four.
Residual: the wedge is only moderately darker than the floor, about 60/255 against 77/255.
Framing: out of band, fill 0.856 and top margin 0.033, both as before.
Calibration shift (this tile is in every contact sheet):
gp-lineart-contourDefects:
build_crystalduplicated an open cone and flipped it over the original. The two crossed into an hourglass with open hexagonal ends, and the top view looked into a bowl with a spike inside. The old gallery alt even read "A translucent hourglass-shaped solid". Revealed by the clay and wire views.ground_contact, extents probe).Fix:
Measured-line change (disclosed): the crystal is demo scaffolding, not asserted geometry, but Line Art counts come from it. The counts move from 10 strokes / 34 points to 2 / 12, identical on all three binaries. The gates are lower bounds (≥1, ≥4) and are unchanged, as is every assertion and exit code. The README, gallery
teachesand the version-witness line were updated to match.Framing: own gate, fill 0.761, minimum margin 0.056.
Contact sheet: luma 0.192 → 0.155, which is inside the 0.151–0.305 band but near its floor. Saturation went 0.242 → 0.184, because more of the frame is the translucent body and less is cyan stroke. It is legible at thumbnail size.
Why it took 5 rounds: rounds 3–5 re-fit framing for the corrected crystal, which is smaller.
Exit codes, before and after
Identical on 4.5.11, 5.1.2 and 5.2.1, and identical before and after:
--output--zero-uv)--no-extrude)--no-contour)I diffed every measured-value line across all 27 runs. The only differences are the gp-lineart-contour stroke counts above, plus the
use_nodesdeprecation warnings printed for the new staging materials.Contact sheets:
Unchanged: verdicts
Fine with no qualification:
png-exr-alpha,uv-layer-grid,grease-pencil-rosette,vse-gamma-cross,image-pixels-testcard,armature-bend: fine.lod-decimate-chain,compositor-glare,light-link-studio: fine.collision-hull-proxy,custom-normals-shade,vertex-weight-limit: fine.Fine, with reasons:
socket-attach-points: a hovering drone is correct for a drone, and the battery module sits where the socket contract places it.modular-kit-snap: the odd shapes in the exterior close-ups are just the backs of wall panels.damped-track-aim: its needles bleed off the frame edges by design.gltf-skin-roundtrip: the blocky scorpion is the asserted geometry; vertex counts are part of the check. The wireframe view showed a stray icosphere, but it is the glTF importer's bone-shape object in an excluded collection and never renders.car-mirror-symmetry: the dark rear half is consistent with the dark-studio look. This is the weakest of the unchanged renders.Out-of-band framing: the 14 paths without a gate
No gate was added, because that would introduce exit 10. Each example's own hero render was measured, before this PR:
modular-kit-snaphas its ownmeasure_framing_deviationcap for its interior corridor, so a plain fill measurement does not apply to it.Checks
Run locally and passing:
check_exit_code_readme.pycheck_gallery_images.pycheck_falsifier_targets.pybuild_gallery.pywas run last. I read the generated alt text indocs/gallery/index.htmland on the three detail pages.🤖 Generated with Claude Code