fix(examples): redesign custom-normals-shade jerry can and make the three shadings read - #271
Merged
Merged
Conversation
…hree shadings read The gallery review judged the hero weak: three near-identical olive cans whose shading differences vanished at card size, and a crude X of floater prisms as the only detail. PR #257 demoted the can from the asset reference set as least-designed. The can is rebuilt as a pressed-steel prop. The shell has four raised rounded-triangle panels on each face with 45-deg walls, and the X is the channel left between them. There is also a weld-seam bead, a triple handle on welded feet, and a spout with red seal, domed cap, cam lever, hinge and locking pin. Olive paint chips to steel on exposed edges, driven by a `wear` point attribute on coplanar support rings. The facet angles are chosen for the contract: curves step at 22.5 deg or less, creases break at 45 or 90 deg, and nothing sits near 30 deg. The render shows three fresh builds, flat, smooth-everywhere and by-angle. The by-angle can's `sharp_edge` set is read back from the mesh and traced in thin cyan lines. A low strip light makes the highlights diverge. The render path now runs the gallery_framing (exit 10) and gallery_asset_quality (exit 11) gates it previously skipped. Checks are unchanged in tolerance. by-angle now covers Shell, Handle and Neck (1304 of 4738 edges, an exact match). The custom-normal round-trip request pattern moved from an index sweep to a 20-deg tilt toward each corner's bisector. On the new 8k-loop shell the old sweep measured Blender's lnor-encoder fan merge (1.38e-02), and a fixed 144-direction cycle hit its in-plane angle snap (9.1e-03). Both come from the 0.81-deg LNOR_SPACE_TRIGO_THRESHOLD, not from storage precision. The new pattern stays clear of both and reads back at 3.904e-05 (tol 2e-4). Long straight runs are split so the face fill has no slivers. Signed-off-by: TMHSDigital <[email protected]> Co-Authored-By: Claude Opus 5.5 (1M context) <[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 judged the
custom-normals-shadehero weak. It showed three near-identical olive jerry cans whose shading differences disappeared at card size, and a crude X of floater prisms was the only detail. PR #257 demoted the can from the asset reference set as least-designed. This PR redesigns both the asset and the scene.Asset. The jerry can is rebuilt as a pressed-steel prop with 13 named parts and 3 materials:
wearpoint attribute on coplanar support rings. The rings add no shading break.Facet angles are chosen for the contract: curves step at 22.5 deg or less, creases break at 45 or 90 deg, and nothing sits near the 30-deg threshold.
Scene. Three fresh builds of the can, one per shading treatment:
sharp_edgeattribute is read back from the mesh and traced in thin cyan lines, so the render draws the contract's own output.A low strip light makes the highlight shapes diverge. There is no floor text. The render path now calls
gallery_framing(exit 10) andgallery_asset_quality(exit 11); before this PR it called neither.Check changes (no tolerance changed)
2*pi*i/nswept over loop index to "face normal tilted 20 deg toward the corner bisector". On the new 8196-loop shell the old sweep measured 1.38e-02. That value comes from Blender's lnor encoder, not int16 storage: requests in one fan closer than 0.81 deg are merged (LNOR_SPACE_TRIGO_THRESHOLD). I also tried a fixed 144-direction cycle; it hit the encoder's second rule, which snaps an in-plane angle under 0.81 deg to zero. That gave 13 of 4524 corners at 9.1e-03, with stored beta = 0, verified from thecustom_normalINT16_2D data. The bisector pattern stays clear of both rules by construction and reads back at 3.904e-05 (tol 2e-4, unchanged). Straight runs are now split every 0.08 so the face fill has no sliver corners.Gates (5.2.1 LTS)
Framing: fill x=0.797 y=0.750 (band 0.70–0.90). Margins: left 0.113, right 0.091, bottom 0.128, top 0.111 (min 0.02).
Asset quality (by-angle can): no default names; materials n=3, dominant OlivePaint at 0.69; edge90 0.086; compactness 28.9 (informational).
aq_ok.Contact sheet:
docs/gallery/contact-sheets/custom-normals-shade-contact-sheet.webpVerdicts:
Asset sheet:
docs/gallery/asset-sheets/custom-normals-shade.webp, against collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow and apothecary-shelf. Verdict: the can is not the least-designed object in the lineup. Pressed panels, seam, triple handle, spout hardware and edge wear put it above the primitive-built hydrant. It sits below the drone and the shelf.measure_hero_drift.py --only custom-normals-shade: mean_abs 0.00475, verdict matches.Check runs (
tests/smoke/run_example.py)E:\Blender-Developer-Tools\.scratch\blender-4.5.11-windows-x64\blender.exeE:\Blender-Developer-Tools\.scratch\blender-5.1.2-windows-x64\blender.exeE:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exeThe
--outputrender path also passes both gates on 4.5.11. The hero was rendered on 5.2.1 throughscripts/render_hero.py.Falsifiers (5.2.1, each probe restored after)
--mismatch-angle(mark sharp at 20 deg, audit at 30): exit 5, Shell has 48 extra edges out of 1144.TOL_NORMAL = 1e-6: exit 7, measured 3.904e-05.materials 1<2 on a 13-part hero.Proven by live run
Established by inspection only
🤖 Generated with Claude Code