fix: crate-stack, depsgraph-export and unapplied-scale-gltf quality pass - #227
Merged
TMHSDigital merged 4 commits intoSep 23, 2026
Merged
Conversation
…eated nails, grained planks Adds two budgets: nail seat (exit 18, --float-nails) and zero right-angle edges (exit 21, --sharp-iron). The corner strap is now one L-section extrusion; two overlapping boxes put coplanar chamfer strips on every outer corner. The iron bevel pins material=METAL_IDX. Per-plank tone and grain direction ride as face attributes read by the wood shader. The temp glTF export is removed after it is measured. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
…ge cages Render path only. The check, its assertions and exit codes are unchanged. docs/gallery/index.html also carries the crate-stack card alt from the previous commit, since both regenerate in one build. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
…hits it, and 5.1 re-verification Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
… host-derived part classifiers, plank variation Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
TMHSDigital
deleted the
fix/quality-pass-crate-stack-depsgraph-unapplied-scale
branch
September 23, 2026 14:19
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.
Quality pass: three items, one per track. Everything below comes from live runs on
.scratch/blender-{4.5.11,5.1.2,5.2.1}-windows-x64/blender.exe, which report 4.5.11 LTS / 5.1.2 / 5.2.1 LTS, unless it is labelled inspection.A —
showcase/crate-stackTook 3 inspection rounds: r0 baseline, r1 fixes, r2 tuning. Each round rendered six orthos, two three-quarters, clay, wireframe, 9 joint close-ups and a ground-contact view. A separate probe coloured each crate on its own, which showed that the crossed boards between crates in the clay pass are just three crates yawed differently. The joints are sound.
Defects found in r0
.glbexport leaked into the working directory (repo-wide item from the last queue).Defects found only after fixing (by the new budgets, r1)
6.
bmesh.ops.bevelgave the iron chamfer faces material slot 0. The plates rendered and classified as timber (iron faces 1008, expected ~1500).7. Each strap was two boxes sharing their outer corner edge. Once chamfered, both laid strips on that line: 12 coplanar cross-shell pairs (the z-fight budget caught this).
8. The nail audit's fixed 10 mm size classifier dropped 8 of 48 nails once the heads grew, because a yawed head's world AABB is wider than the head (r2).
Fixes, and why each is structural rather than a nudge
IRON_BEVEL= 0.8 mm. That bevel is sized to the stock, not to a screenshot.material=METAL_IDX.px,py,IRON_WRAP, strap height), so they follow the strap when any dimension changes.paint_plankswritesPlankTone(seeded per shell) andGrainDir(each shell's long axis, recovered from its own vertices) as face attributes. The wood shader stretches its grain alongGrainDir, not along a world axis, which a yawed crate would be 5–6° off.IRON_WRAP * 0.5).New budgets. Measured identically on 4.5.11, 5.1.2 and 5.2.1.
Re-fitted around the new measurements: base tris 3200–7200 → 5200–7000, iron face floor 120 → 900, timber face floor 600 → 1800. The body footprint now includes nail proud (
BODY_PROUD). The existing hygiene set is unchanged and still all zero, including zfight 0.Triangles: 4380 → 6060. Collider 208 → 230 (ceiling 260). LOD2 is now 1332 / 0.2198 on all three versions; it used to split 5.2 against 4.5/5.1. Same-binary determinism: two runs on 5.2.1 match on every measured line.
Falsifiers:
--float-nails→ 18 (bite −0.90 mm) and--sharp-iron→ 21 (216 right-angle iron edges), on all three binaries.tests/check_falsifier_targets.pypasses (183 falsifiers).Hero re-rendered on 5.2.1 through
scripts/render_hero.py.check_framingruns withoutdeviation=: fill y 0.728, min margin 0.128. Contact sheet:docs/gallery/contact-sheets/crate-stack-contact-sheet.webp. Luma 0.212 sits inside the calibration band (0.151 damped-track-aim to 0.305 bmesh-gear), stage 0.197, warmth +0.150, saturation 0.167. Thumbnail reads as three nailed crates. No asset sheet: no showcase piece has one yet (#202).B —
examples/depsgraph-exportPresentation change: each object now has an edge cage over it. On the base cube it is its 12 edges. On the evaluated object it is the same
SUBSURFfollowed byWIREFRAME, so the cage draws exactly the 98-vertex topology the OBJ ships. Before, the still was "a teal cube and a ball", and nothing in frame showed base versus evaluated. The cages are separate render-path objects created aftercheck().Contract unchanged.
check(), the assertions and the exit codes are untouched; the diff is confined torender_still.--unevaluated, before → afterFraming: fill x 0.812, min margin 0.062. Contact sheet:
docs/gallery/contact-sheets/depsgraph-export-contact-sheet.webp, luma 0.246, inside the band.C —
examples/unapplied-scale-gltfREADME improvements:
export_applyRNA description.export_apply=Falsewrites the identical node scale and POSITION.nodes[0].scale, the POSITION range) and says why vertex count cannot tell applied from unapplied.Re-verification (live probe):
export_applydescriptionnode.scale,export_apply=True/False--bake--identity/--bakeexitDocumented behaviour is correct. The old README said "same on 4.5 and 5.2"; it now covers 5.1 as well. No code change.
Also
showcase/README.mdconventions: edge treatment (no right angles, bevelmaterial=), L-sections as one shell, fastener classifiers derived from the host, plank tone and grain variation.docs/gallery/index.htmlcarries both card alts in the depsgraph commit, because one build regenerates both.🤖 Generated with Claude Code