Skip to content

fix: bake-normal-high-to-low and lightmap-uv-channel quality pass - #244

Merged
TMHSDigital merged 2 commits into
mainfrom
fix/bake-normal-lightmap-uv-quality-pass
Sep 24, 2026
Merged

TMHSDigital merged 2 commits into
mainfrom
fix/bake-normal-lightmap-uv-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 and demo scaffolding change. 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 (hero angle, clay three-quarter, wireframe, per-object close-ups, ground contact) come from each example's own render scene via its framing call and stayed in .scratch/.

Picks: every showcase piece and every check-only example has already had a pass. So these are the lowest-scoring examples not yet reviewed: bake-normal-high-to-low (weakest hero) and lightmap-uv-channel (flagged in the last report). I also looked at modular-kit-snap and socket-attach-points; both are strong and were left alone.

bake-normal-high-to-low (Track B)

Defects (round 0):

  1. Both panels stood balanced on a bottom edge with nothing holding them. The plate, leaning back 72°, sent its lower edge 44 mm through the floor. Seen in ground_contact and the hero.
  2. The solidify rim wore the baked map along with the face. Seen in close_1_BakeLow_a.

Presentation changed:

  • A new seat_on_plinth() stands each panel in a dark plinth sized from its own footprint. The panel is lifted so its lowest evaluated vertex sits 35 mm in the slot, a height read from the mesh, not a constant.
  • The rim takes a plain bronze slot through material_offset_rim.
  • The plinths join the framing elements.

Left as-is, because it is the contract: the rippled bronze surface and the faint waviness along the plate's border are the baked map itself. The waviness is normal-map shading inside the UV margin, and the silhouette is straight in the clay pass.

Contract unchanged: the bake, map_stats, and every gate and exit code are untouched. The measured stats are identical before and after on all three binaries: detail frac 0.7211, MAD 0.09356; flat control frac 0.0000, MAD 0.00277.

4.5.11 5.1.2 5.2.1
before: default / --flat-source / --output 0 / 5 / 0 0 / 5 / 0 0 / 5 / 0
after: default / --flat-source / --output 0 / 5 / 0 0 / 5 / 0 0 / 5 / 0

Framing: fill x 0.809, minimum margin 0.078, ok.

lightmap-uv-channel (Track B)

Defects (round 0):

  1. The four posts were fixed 1.35 m boxes topping out at z = 2.225, while the canopy's inner arc sits at z = 2.553 above their station (|y| = 0.48). So all four posts stopped 0.33 m short and the canopy floated over them. Seen in the clay three-quarter, where the front-right post plainly ends in the air.

Scaffolding changed: each post now rises from inside the bed into the canopy's underside at its own y, computed from the canopy's radius, thickness and base height. Its top vertices are sheared to follow the arc, which gives a uniform 12 mm bite into the 40 mm canvas; a flat top under a sloped arc would be buried on one side and open on the other. The canopy constants are shared, so a dimension change keeps the posts seated.

Contract unchanged: the UV0/UV1 names, flags, overlap SAT, island margin and watertightness checks, and all exit codes are untouched. On 5.2.1 every one of the 21 parts, the four posts included, reports the same loops, triangles and island count, zero overlap and the same minimum island distance before and after: 21 parts, 3680 islands.

4.5.11 5.1.2 5.2.1
before: default / --falsify / --output 0 / 0 / 0 0 / 0 / 0 0 / 0 / 0
after: default / --falsify / --output 0 / 0 / 0 0 / 0 / 0 0 / 0 / 0

--falsify PATH exiting 0 is by design: it renders the overlapping-atlas visual variant rather than tripping a gate (see the example README). The framing and asset-quality gates pass on the render path.

docs/gallery/asset-sheets/lightmap-uv-channel.webp is the before/after record from the #117 remodel. There is no committed tool to regenerate it, so it is left as historical evidence. Its "after" tile shows the short posts this PR fixes.

Contact sheets

  • bake-normal-high-to-low: luma 0.334, stage 0.208. That is above the 0.305 band, but it is unchanged from the old hero (0.336). The unlit periwinkle map card, which is the contract content, drives it. Legible at thumbnail size.
  • lightmap-uv-channel: luma 0.207, stage 0.193, warmth +0.11, saturation 0.14, all in family (old hero 0.207). Legible at thumbnail size.

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 19:18
Render path only. Both panels balanced on an edge and the leaning plate
pierced the floor; each now stands in a low plinth, lifted so its lowest
evaluated point seats 35 mm in the slot. The solidify rim wears plain
bronze rather than the baked map. Bake statistics (frac 0.7211, MAD
0.09356) and exit codes 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>
The four 1.35 m posts stopped 0.33 m under the canopy arc, so the canopy
floated. Each post now rises into the arc's underside at its own station,
its top sheared to the arc for a uniform 12 mm bite. Every part keeps its
UV1 island count, zero overlap and minimum island distance; exit codes are
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 87dad44 into main Sep 24, 2026
14 checks passed
@TMHSDigital
TMHSDigital deleted the fix/bake-normal-lightmap-uv-quality-pass branch September 24, 2026 23:25
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