Skip to content

fix: turntable and swatch-grid quality pass - #243

Merged
TMHSDigital merged 2 commits into
mainfrom
fix/turntable-swatch-grid-quality-pass
Sep 24, 2026
Merged

TMHSDigital merged 2 commits into
mainfrom
fix/turntable-swatch-grid-quality-pass

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Quality pass on two gallery examples, both Track B: the contract is frozen and only presentation changes. The binaries were .scratch/blender-4.5.11-windows-x64 (reports Blender 4.5.11 LTS), blender-5.1.2-windows-x64 (Blender 5.1.2) and blender-5.2.1-windows-x64 (Blender 5.2.1 LTS). The heroes were rendered on 5.2.1 through scripts/render_hero.py. The inspection sheets (clay three-quarter, wireframe, hero angle, close-ups) stayed in .scratch/.

Picks: every showcase piece and every check-only example has already had a pass. So this run takes the examples the last report scored weakest. turntable and swatch-grid needed work. uv-layer-grid was inspected and left alone: its flat left panel is the contract, and the render is already pixel-verified against it.

turntable (Track B)

Defects (round 0):

  1. The head hovered just above the floor with nothing under it, and nothing in the frame said "turntable". Seen in close_contact.
  2. The 500-face Suzanne read as faceted plates despite shade_smooth. Seen in close_face and the hero.
  3. The copper at roughness 0.25 blew every brow and ear edge out to white. Seen in the hero.

Presentation changed: a new stage_turntable() runs inside render_still, after the correctness check. It adds a subdivision modifier (levels 2), a plinth plus a brushed platter, and a rougher copper (0.38). The head is lifted so its lowest evaluated vertex seats 10 mm into the platter; that height is derived from the mesh, not a constant. The camera is pulled back.

Contract unchanged: build(), correctness(), the rotation keys, the sampled frames and the exit codes are untouched.

4.5.11 5.1.2 5.2.1
before: default / --no-keys / --output 0 / 3 / 0 0 / 3 / 0 0 / 3 / 0
after: default / --no-keys / --output 0 / 3 / 0 0 / 3 / 0 0 / 3 / 0

Framing: this render path does not call gallery_framing.check_framing. Adding the call would add exit code 10, and Track B forbids changing exit codes, so it is not added here. I measured framing out of band with the helper on the final scene: fill y 0.789, margins ≥ 0.050, framing_ok. Wiring the gate in is a separate decision for a future PR.

swatch-grid (Track B)

Defects (round 0):

  1. The mirror gold (roughness 0.08) reflected the near-black world and rendered as a black ball with two light-card glints. Seen in close_gold and the hero.
  2. The spheres hung 1.58 m in front of the backdrop with nothing under or behind them. Seen in close_side.

The flat orange emissive disc is what emission looks like, so it was left alone.

Presentation changed: the world is a reflection-only sky. Light Path "Is Glossy Ray" mixes in a warm overhead gradient above a dark horizon, while camera and diffuse rays still see the 0.02 stage. The backdrop moves from y = 2.5 to 1.08, 0.16 m behind the spheres, so each casts a soft contact shadow. Four variants were prototyped first, each checked against verify_png. A uniform glossy world made the gold flat tan and put fresnel halos on the plastics; the gradient at 0.70 did not.

Contract unchanged: sphere positions, materials, the camera, verify_png, and the exit codes are untouched. The pixel check still reads 6 distinct regions on every binary.

4.5.11 5.1.2 5.2.1
before: default / --same-base / --output 0 / 3 / 0 0 / 3 / 0 0 / 3 / 0
after: default / --same-base / --output 0 / 3 / 0 0 / 3 / 0 0 / 3 / 0

The framing gate passes on the --output path (exit 0 above).

Contact sheets

  • turntable: mean luma 0.248, inside the calibration band (0.151–0.305). Stage 0.204. Warmth is neutral (−0.015); the key is warm and the fill cool. Saturation 0.22. Legible at thumbnail size.
  • swatch-grid: mean luma 0.338, above the band. The old hero was already above it at 0.318. Most of the rise is the gold sphere, which now reads as gold instead of black. Stage darkness moved only 0.236 → 0.243. Warmth +0.47, saturation 0.21. I judged a brighter gold to be the fix, not a defect to dim back down.

Checks run locally: check_exit_code_readme.py and check_gallery_images.py pass. I read the generated alt text in docs/gallery/index.html and in both detail pages.

🤖 Generated with Claude Code

TMHSDigital and others added 2 commits September 24, 2026 18:55
Render path only, after the check. The 500-face head read as faceted plates
and hovered just above the floor. It now carries a subdivision modifier, is
seated 10 mm into the platter of a turntable plinth from its own lowest
evaluated vertex, and the copper is less glossy. Rotation keys, sampled
frames and exit codes are unchanged; framing measured out of band (fill y
0.789, margin 0.050) since the path has no framing call.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
Render path only. The mirror gold reflected the near-black world and read
as a black ball; a reflection-only sky (Light Path Is Glossy Ray) now gives
it a warm overhead gradient while camera and diffuse rays still see the
dark stage. The backdrop moves in behind the spheres so they cast contact
shadows. Six-region pixel check and exit codes unchanged on all three
binaries. Also refreshes the gallery alts and index for both examples.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@TMHSDigital TMHSDigital added the needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this. label Sep 24, 2026
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ documentation Improvements or additions to documentation labels Sep 24, 2026
@TMHSDigital
TMHSDigital merged commit 52eaabb into main Sep 24, 2026
14 checks passed
@TMHSDigital
TMHSDigital deleted the fix/turntable-swatch-grid-quality-pass branch September 24, 2026 23:02
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/ needs-5.1 Opt-in Blender 5.1 smoke on this PR. Default matrix stays 4.5 + 5.2. Auto-label will not apply this.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant