fix(examples): rebuild triangulate-tangents buckler as a machined shield - #261
Merged
Merged
Conversation
The gallery review judged the hero weak. The face was covered in wobbly ring ripples that read as a shading bug, which is the worst look for an example about tangent-space correctness. The object also read as a dish or speaker cone with a murky grey interior. The ripples came from a Generated- coordinate wave texture with distortion 3.0, so they were never UV-driven. The open ring at the apex also rendered as a black hole. The buckler is now one closed lathe mesh: a pointed turned boss, a flange, a cosine dome, a cut groove and a rolled rim. An apex fan closes the top and is counted in the closed-form triangle count (4992). The mesh is smooth-shaded with sharp edges at the machined breaks, so mikktspace now really welds frames. The measured weld is 3.27e-02, inside the unchanged 0.15 tolerance. Materials are assigned per ring: brass boss and rim, blued-steel flange, turned-steel dome, leather back, plus steel rivets. The lathe grooves are a bump read straight off UV v, so they are exact circles. The anisotropic streak follows the UV-map Tangent node. The shield is turned three-quarter so the boss projects and the dome reads convex. The render path now also runs the asset-quality floors (exit 11). Every check is unchanged and passes, with identical numbers on 4.5.11, 5.1.2 and 5.2.1. The falsifiers were re-proven on the new geometry. The VISUAL-STYLE numeric-only precedent sentence now states the actual mechanism. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: TMHSDigital <[email protected]>
…e new reference set Adds a SELECT row for the buckler to scripts/asset_sheet.py. It matches the Buckler lathe mesh and Buckler.Rivets only. The walnut stand and kickstand strut are display staging, not part of the asset, so they are excluded. The asset sheet is re-rendered with the committed tooling against the reference set from #257 (collision-hull-proxy, socket-attach-points, vertex-color-ao, wheelbarrow, apothecary-shelf). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: TMHSDigital <[email protected]>
Keeps all asset-sheet SELECT rows; generated gallery pages regenerate unchanged. 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
A gallery review judged the
triangulate-tangentshero weak:ShaderNodeTexWaveon Generated coordinates withDistortion 3.0. The ripples were never UV-driven.Changes
2*((RINGS-1)*SIDES + 2*SIDES) + 2*SIDES= 4992);Buckler.Rivetspart with 16 rim rivets and 8 flange rivets.|sin(pi*40*v)|bumps read straight off UV v, which is the radius. They are exact circles with no distortion, masked by a constant ramp into two decorative bands.ShaderNodeTangent. The old code looked up a nonexistent"Anisotropic IOR Level"input first; it now usesAnisotropicdirectly.gallery_asset_quality.check_asset_quality(exit 11) aftercheck_framing.docs/VISUAL-STYLE.mdnumeric-only precedent sentence now states the actual mechanism: grooves are a bump off UV v, and the streak follows the renderer's own UV-map tangent. So a break in thecalc_tangents()loop data the check reads does not move pixels.gallery.jsonalt and the README gallery-row alt are updated.Evidence
docs/gallery/contact-sheets/triangulate-tangents-contact-sheet.webpdocs/gallery/asset-sheets/triangulate-tangents.webp. It was regenerated with the committedscripts/asset_sheet.py(from chore(gates): raise the asset-sheet reference bar and commit its renderer #257) against the new reference set on 5.2.1.SELECTrow is^Buckler(\.Rivets)?$: the lathe mesh plus the rivets. The walnut stand and strut are display staging, not part of the asset, so they are excluded.main(docs/gallery/assets/triangulate-tangents-hero.webpat 15ba0a3).Gate numbers (5.2.1)
aq_ok.[email protected] ... FAIL, but that metric is informational only and is not gated (see VISUAL-STYLE § Dropped floors).measure_hero_drift.py --only triangulate-tangentsgives mean_abs 0.00307, gt2pct 0.33 %, verdict matches.Contact-sheet metrics
Per-criterion verdicts
Asset-sheet verdict (new reference set)
Pass, but close. The buckler is on par with the hydrant (collision-hull-proxy). Both are lathe-turned bodies with distinct material zones and designed profile breaks. The buckler adds a pointed boss, a groove-banded dome and 24 rivets, so it is not identifiable as the least-designed object.
It is the simplest silhouette in the lineup, though. The drone, well, wheelbarrow and shelf are assemblies of many parts with more structure. A round shield is inherently a single turned plate, so it will not match their part count.
Checks per binary (check-only path)
E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe(Blender 5.2.1 LTS)...\blender-5.1.2-windows-x64\blender.exe(Blender 5.1.2)...\blender-4.5.11-windows-x64\blender.exe(Blender 4.5.11 LTS)Falsifiers (re-proven on the new geometry, all three binaries unless noted)
--zero-uvPROFILEcalc_tangentsMeshUVLoopLayerhandleBuckler.RivetstoSphere(5.2.1,--output)The stale-handle row matches the documented hazard: the handle is silent on 4.5 and survives by luck on 5.x.
Proven by live run vs established by inspection only
Proven by live run (headless binaries):
scripts/render_hero.py;scripts/asset_sheet.pyagainst the chore(gates): raise the asset-sheet reference bar and commit its renderer #257 reference set;build_gallery.pyoutput, with the generated<img alt>read back indocs/gallery/index.htmlanddocs/gallery/triangulate-tangents/index.html.Established by inspection only:
calc_tangents()loop data. It rests on the material using only the UV-map Tangent node and UV coordinates; no render was made with corrupted loop tangents.🤖 Generated with Claude Code