You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(examples): redesign custom-normals-shade jerry can and make the three 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]>
Copy file name to clipboardExpand all lines: README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -971,7 +971,7 @@ concave grooves are free.
971
971
</tr>
972
972
<tr>
973
973
<tdwidth="46%"valign="middle">
974
-
<ahref="examples/custom-normals-shade/"><imgsrc="examples/custom-normals-shade/preview.webp"alt="Custom normals and shade by angle: three olive-drab jerry can props with pressed X ribs and red spout rings on a dark studio floor - one faceted flat, one smeared by smooth-everything, one crisp with correct hard edges - proving the post-4.1 shading contract" /></a>
974
+
<ahref="examples/custom-normals-shade/"><imgsrc="examples/custom-normals-shade/preview.webp"alt="Custom normals and shade by angle: three olive-drab jerry cans with X-pressed panels, triple handles and red-sealed spouts on a dark studio floor - one faceted flat, one smeared glossy by smooth-everything, one crisp by-angle with its sharp edges traced in thin cyan lines - proving the post-4.1 shading contract" /></a>
975
975
</td>
976
976
<tdvalign="middle">
977
977
@@ -984,7 +984,7 @@ on **both** 4.5 LTS and 5.1. `set_sharp_from_angle` marks sharp exactly the
984
984
edges an independent dihedral recompute predicts; evaluated loop normals
985
985
weld across smooth edges and split by the dihedral across sharp ones;
986
986
custom split normals survive depsgraph evaluation within their int16
987
-
quantization (1.407e-04, not float-exact). Documents the legacy
987
+
quantization (3.904e-05, not float-exact). Documents the legacy
988
988
`shade_auto_smooth` operator trap: CANCELLED headless on 4.5, FINISHED
<imgsrc="assets/custom-normals-shade-hero.webp" alt="Three olive jerry cans with embossed X ribs, shaded flat, smooth and smooth-by-angle." loading="lazy" decoding="async" />
709
+
<imgsrc="assets/custom-normals-shade-hero.webp" alt="Three olive jerry cans with X-pressed panels, triple handles and red-sealed spouts: faceted flat, glossy-smeared smooth-everywhere, and crisp by-angle with its sharp edges traced in thin cyan lines." loading="lazy" decoding="async" />
<pclass="teaches">A jerry can prop shaded three ways to prove the post-4.1 shading contract: hard edges are mesh data, landing exactly where the dihedral crosses. Face smooth flags plus a sharp_edge attribute, verified against an independently recomputed dihedral test, and per-loop custom normals surviving depsgraph evaluation within their int16 storage quantization (1.407e-04, not float-exact).</p>
714
-
<pclass="witnesses"><spanclass="tag">witnesses</span> use_auto_smooth, use_custom_normals and calc_normals are AttributeError on BOTH 4.5 LTS and 5.1 - AI code still emits them. The legacy shade_auto_smooth operator CANCELS headless on 4.5 (asset load never finishes; mesh untouched; no exception) while 5.1 FINISHES with the Smooth by Angle NODES modifier. By-angle sharp sets match the independent dihedral recompute exactly (188 of 388 edges over 3 meshes).</p>
713
+
<pclass="teaches">A jerry can prop shaded three ways to prove the post-4.1 shading contract: hard edges are mesh data, landing exactly where the dihedral crosses. Face smooth flags plus a sharp_edge attribute, verified against an independently recomputed dihedral test, and per-loop custom normals surviving depsgraph evaluation within their int16 storage quantization (3.904e-05 over 8196 loops, not float-exact).</p>
714
+
<pclass="witnesses"><spanclass="tag">witnesses</span> use_auto_smooth, use_custom_normals and calc_normals are AttributeError on BOTH 4.5 LTS and 5.1 - AI code still emits them. The legacy shade_auto_smooth operator CANCELS headless on 4.5 (asset load never finishes; mesh untouched; no exception) while 5.1 FINISHES with the Smooth by Angle NODES modifier. By-angle sharp sets match the independent dihedral recompute exactly (1304 of 4738 edges over 3 meshes).</p>
0 commit comments