fix(examples): redesign depsgraph-export as a controller cage beside its subdivided shell - #280
Merged
Merged
Conversation
…its subdivided shell The gallery review called the hero programmer art: a teal cube with a wire outline beside a wire-caged sphere, where the evaluated-vs-original story did not read. The checked object is now a game controller. Its shell is a 90-vertex quad control cage under a level-2 SUBSURF modifier; sticks, d-pad, face buttons, pills, home button and bumpers are modeled parts (no modifiers) seated on the evaluated limit surface by ray cast and parented to the shell. The still shows the shell datablock as the file stores it (orange wire, a bead per vertex, faint blue facets) beside the smooth cobalt controller the OBJ contains, both on low satin display stands. Tiny labels are gone. The check got stricter, not weaker: every mesh is measured through evaluated_get().to_mesh()/to_mesh_clear(), the evaluated shell must equal the Catmull-Clark closed form from its own cage topology (new exit 7: V=90 E=176 F=88 S=352 -> 1410), and the OBJ vertex count must equal the summed evaluated counts (3666, versus 2346 base). The render path now also runs the asset-quality floors (exit 11); asset_sheet.py gains its 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 and why
The gallery review called the
depsgraph-exporthero programmer art: a teal cube with a wire outline next to a wire-caged sphere, and the evaluated-vs-original story did not read.Redesign: the checked object is now a game controller. Its shell is a 90-vertex quad control cage under a level-2
SUBSURF. The sticks, d-pad, face buttons, pills, home button and bumpers are modeled parts with no modifiers, seated on the evaluated limit surface by ray cast and parented to the shell. The still puts the shell datablock as the file stores it (orange wire, a bead on every cage vertex, faint blue facets) on the left, and the smooth cobalt controller the OBJ contains on the right. If the export shipped the base mesh, the right-hand piece would be the blocky cage. Both pieces lean on low satin display stands, which are render-only and added after the export. There are no labels.The check is stricter, not weaker:
evaluated_get().to_mesh()and paired withto_mesh_clear()V' = V+E+F,E' = 2E+S,F' = S,S' = 4F'. For this cage V=90, E=176, F=88, S=352, which gives 1410.vcount == summed evaluated counts. This is 3666; the base meshes sum to 2346.gallery_asset_quality(exit 11).scripts/asset_sheet.pygains itsSELECTrow (^Gamepad\.).Before / after
docs/gallery/assets/depsgraph-export-hero.webp)docs/gallery/assets/depsgraph-export-hero.webpdocs/gallery/contact-sheets/depsgraph-export-contact-sheet.webpdocs/gallery/asset-sheets/depsgraph-export.webpGates (5.2.1 LTS render path)
framing_ok. The numbers are identical on 5.1.2 and 4.5.11.aq_ok.measure_hero_drift.py --only depsgraph-export): mean_abs 0.00555, verdictmatches.tests/check_*.py(engine id, exit-code README, falsifier targets, gallery images, import/export rules): all pass.Check runs (check-only path via
tests/smoke/run_example.py --forbid-skip)--unevaluated.scratch/blender-5.2.1-windows-x64/blender.exe.scratch/blender-5.1.2-windows-x64/blender.exe.scratch/blender-4.5.11-windows-x64/blender.exeFalsifiers (5.2.1; scratch probe imports the script, breaks one thing, runs
check())--unevaluated(apply_modifiers=False)export (2346) != evaluated (3666)levels = 1(closed form still at 2)evaluated shell (354) != closed form (1410)V' = V + E)evaluated shell (1410) != closed form (970)show_viewport = False(depsgraph evaluates the bare cage)All of these were restored by construction, because the probes never edit the script.
Proven by live run vs established by inspection
Proven by live run:
--unevaluatedexit 5 on all threerender_hero.pyon 5.2.1build_gallery.py, and reading the generated<img alt>indocs/gallery/index.htmlanddocs/gallery/depsgraph-export/index.htmltests/check_*.pyEstablished by inspection only:
--engine cyclespath was not rendered.🤖 Generated with Claude Code