fix(examples): redesign temp-override-join as a hurricane lantern joined from seven parts - #281
Merged
Merged
Conversation
…ned from seven parts The review found three orange and grey cubes stacked like a bar chart. That is programmer art, and the render said nothing about joining. The subject is now a prop that is naturally assembled by a join: a hurricane lantern built as seven part objects (fount, glass globe, wire guard, side air tubes, bell cap, bail with wooden grip, brasswork). Each part has its own mesh, materials and object transform. One object.join under temp_override turns them into the single Lantern object. The hero is that joined object, and it shows five materials only because the join merged the slots and remapped the per-face indices. Checks: object count, target identity, sources gone and the Z span are kept. The Z span is now closed form from foot to grip top, and it proves the part transforms were applied. Topology is now the sum over the parts. Two checks are new: the slots must be exactly the five part materials, once each (exit 8), and faces per material must equal what the parts brought in (exit 9). The render path now runs gallery_framing (10) and gallery_asset_quality (11). It had never called the framing gate before. "no file" moves from 8 to 12. scripts/asset_sheet.py gains a SELECT row. The ROADMAP floor survey drops temp-override-join from the edge90 list, since it now measures 0.007. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: TMHSDigital <[email protected]>
Union of asset-sheet SELECT rows; generated gallery pages regenerated. 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 three orange and grey cubes stacked into a "staircase" that read like a bar chart. That is programmer art, and nothing in the image said "join".
The subject is now a prop that is naturally assembled by a join: a hurricane lantern built from seven part objects:
Each part has its own mesh, its own materials and its own object transform. One
object.joinunderbpy.context.temp_overrideturns them into the singleLanternobject. The hero is that joined object. It renders five materials only because the join merged the material slots and remapped the per-face indices. If the slots had not merged, the lantern would render in the target's red enamel from grip to foot. A shadowless warm point light inside the globe (render-only) stands in for the lit wick. The floor-text labels are gone. No exploded "before" ghost was added: it cluttered the story, and the per-part materials on one object already carry it.Checks (contract kept, and made stricter)
--no-overridelands here)gallery_framing/gallery_asset_quality. The old render path never called the framing gatescripts/asset_sheet.pygains atemp-override-joinSELECT row (^Lantern$). The ROADMAP floor survey drops temp-override-join from the edge90 list (it now measures 0.007).Before / after
docs/gallery/contact-sheets/temp-override-join-contact-sheet.webpdocs/gallery/asset-sheets/temp-override-join.webpGate numbers (Blender 5.2.1 LTS, render path)
framing_ok.aq_ok.measure_hero_drift.py --only temp-override-join: mean_abs 0.00334, luma 0.2364/0.2361, matches.Check runs (
tests/smoke/run_example.pyplus direct runs)--no-overrideE:\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.exeThe same line prints on all three:
parts=7 verts=4070 faces=4136 z=0.000..2.303 slots=5 faces/material={Brass 528, Glass 320, Iron 1280, Paint 1592, Wood 416}.Falsifiers (5.2.1; each was a temporary copy of the script, deleted after the run)
--no-override:RuntimeError: Operator bpy.ops.object.join.poll() failed, context is incorrect, thenexpected 1 mesh object after join, got 7. Exit 3. Also exit 3 on 5.1.2 and 4.5.11.faces=4135 != sum over parts faces=4136. Exit 5.local z [-0.5270, 1.9250] != [0.0000, 2.3030]. Exit 7.Lantern.Painttwice. Exit 8.{'Lantern.Paint': 4136} != {... Paint 1592, Glass 320, Iron 1280, Wood 416, Brass 528}. Exit 9.Proven by live run
--no-overrideon 5.2.1, 5.1.2 and 4.5.11 (table above).scripts/render_hero.py.build_gallery.pyregenerated after rebasing ontoorigin/main. The generated<img alt>and witnesses text indocs/gallery/index.htmlanddocs/gallery/temp-override-join/index.htmlwere read back.Established by inspection only
--engine cyclesrender path and the 5.1 / 4.5 render path were not run. Only the check paths ran on those binaries. The materials use only Principled inputs present in 4.5+ (Emission Color), and the check path builds them on all three versions.🤖 Generated with Claude Code