fix(examples): redesign gltf-export-roundtrip as one crate under its re-imported wire cage - #273
Merged
Merged
Conversation
…re-imported wire cage The review found two identical crates labelled AUTHORED and ROUND-TRIP in small floor text. Nothing differed between them, so the eye had nothing to find. The hero is now one crate. The solid crate is the authored one. Laid over it is the actual re-imported mesh (the file's own triangles), drawn as a thin amber wire cage through a render-only Weld + Wireframe display stack, and masked to the right of a vertical cut. Neither object is moved: both keep the identity transform that check 13 proves, and the camera does the turning. The cage lands on every bevel, rivet and vent slat only because the importer undid the +Y-up bake exactly. A probe that puts back the missing quarter turn drops the cage through the floor, and the framing gate fails too (bottom margin 0.000). The crate grows from 35 to 43 box shells: vent slats under each carry handle and stiffening ribs across the lid. The trim is a lighter gunmetal and the paint a warmer olive. On the render path only, the authored copy gets noise-mottled paint and trim. The check logic is unchanged; its closed-form counts follow PARTS (344 cage verts, 9,288 evaluated loops). The render path now also runs gallery_asset_quality on the authored crate, with its 11 remapped to 23. The bevel is baked into the display mesh first, because the edge measure reads Object.data, which is still the square cage. The floor text is gone. read_gltf now opens the JSON with encoding="utf-8". scripts/asset_sheet.py gains a SELECT row. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: TMHSDigital <[email protected]>
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.
What changed and why
The review found two identical crates with small floor text reading AUTHORED / ROUND-TRIP. That is the identical-copies failure mode: because a pass means the two crates look alike, there is nothing for the eye to find.
The hero is now one crate:
export_yupbake exactly and the file carried the evaluated (beveled) mesh.The crate itself has been upgraded:
The render path now also runs
gallery_asset_qualityon the authored crate, with its exit 11 remapped to 23. The bevel is baked into the display mesh first, because the edge90 measure readsObject.data, which is still the square cage.Also in this PR:
read_gltfnow opens its JSON withencoding="utf-8".scripts/asset_sheet.pygains agltf-export-roundtripSELECT row (^Crate\.Authored$).Evidence
docs/gallery/contact-sheets/gltf-export-roundtrip-contact-sheet.webpdocs/gallery/asset-sheets/gltf-export-roundtrip.webpFraming: fill x=0.556, y=0.828 (band 0.70-0.90). Margins: left 0.222, right 0.222, bottom 0.078, top 0.094.
framing_okon 5.2.1 and 4.5.11.Asset floors (authored crate): no default names, 3 materials (the floor applies only when parts >= 2; parts = 1), edge90 = 0.000.
aq_ok.Contact sheet, per criterion:
Asset sheet verdict: PASS, not the least-designed object in the lineup. The crate has more modeled parts and edge treatment than the hydrant and the well, though it is boxier than the drone and the shelf.
A note on the asset-sheet tool: its fit-to-extent camera frames the crate tightly, and the crate touches the edge of its panel. That is the shared tool's framing. The example itself is not affected.
Hero drift (
measure_hero_drift.py --only): mean_abs 0.00834, verdictmatches.Check runs (check-only path)
--no-yupfalsifierE:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exeE:\Blender-Developer-Tools\.scratch\blender-5.1.2-windows-x64\blender.exeE:\Blender-Developer-Tools\.scratch\blender-4.5.11-windows-x64\blender.exeAll three versions give the same measurements: verts=344, eval_loops=9288=disk_verts, tris=4644, pos_err 0.00e+00, nrm_err 6.35e-05, uv_err 3.11e-07. The render path also passes on 4.5.11 (EEVEE Next) with identical framing numbers.
Falsifiers
--no-yup(the existing contract falsifier): exit 9 on all three binaries, as shown above.aq_edge90 frac=1.000 (516/516) FAIL, exit 23. The probe was then deleted.rotation_euler.x = 90 deg) to the imported object before rendering.Proven by live run vs established by inspection
Proven by live run:
--no-yupon 5.2.1, 5.1.2 and 4.5.11render_hero.py,contact_sheet.py,asset_sheet.pyandmeasure_hero_drift.pyon 5.2.1build_gallery.py, after the rebase onto origin/main. The generated<img alt>indocs/gallery/index.htmlanddocs/gallery/gltf-export-roundtrip/index.htmlwas read.Established by inspection only:
🤖 Generated with Claude Code