Skip to content

Commit 0787488

Browse files
TMHSDigitalclaude
andcommitted
fix: sky-texture-sun-elevation presentation, the sky lights the jar
Render path only: a pale glaze and dimmed studio lights let the sky, the variable under test, light the jar, so the two elevations differ. The committed hero had drifted from the code. Zenith probe values and exit codes unchanged on 4.5.11, 5.1.2 and 5.2.1. Also regenerates the gallery index for all four items. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
1 parent 15efe45 commit 0787488

9 files changed

Lines changed: 56 additions & 37 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ byte images stay straight 8-bit. Also witnesses `EXR color_mode='RGB'` dropping
307307
</tr>
308308
<tr>
309309
<td width="46%" valign="middle">
310-
<a href="examples/sky-texture-sun-elevation/"><img src="examples/sky-texture-sun-elevation/preview.webp" alt="Sky texture sun elevation: terracotta jar diptych on a dark floor — left panel low sun at 8 degrees with a deep blue zenith and warm horizon limb, right panel high sun at 55 degrees with a brighter cyan sky, proving ShaderNodeTexSky sun_elevation" /></a>
310+
<a href="examples/sky-texture-sun-elevation/"><img src="examples/sky-texture-sun-elevation/preview.webp" alt="Sky texture sun elevation: pale glazed jar diptych on a dark floor — left panel low sun at 8 degrees, the jar dim twilight blue under a deep blue zenith, right panel high sun at 55 degrees, the jar bright under a pale daylight sky" /></a>
311311
</td>
312312
<td valign="middle">
313313

-3.67 KB
Loading
28.7 KB
Loading

‎docs/gallery/index.html‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ <h2><a href="shape-key-blend/">shape-key-blend</a></h2>
475475
</article>
476476
<article class="card" data-tags="curves bevel">
477477
<a class="card-media" href="curve-bevel-arc/" tabindex="-1" aria-hidden="true">
478-
<img src="assets/curve-bevel-arc-hero.webp" alt="A magenta beveled curve tube sweeping in an arc across a dark floor, with a capped end." loading="lazy" decoding="async" />
478+
<img src="assets/curve-bevel-arc-hero.webp" alt="A magenta beveled curve tube lying in a semicircle on a dark floor, both filled end caps facing the camera." loading="lazy" decoding="async" />
479479
</a>
480480
<div class="card-body">
481481
<h2><a href="curve-bevel-arc/">curve-bevel-arc</a></h2>
@@ -717,7 +717,7 @@ <h2><a href="custom-normals-shade/">custom-normals-shade</a></h2>
717717
</article>
718718
<article class="card" data-tags="world sky rendering">
719719
<a class="card-media" href="sky-texture-sun-elevation/" tabindex="-1" aria-hidden="true">
720-
<img src="assets/sky-texture-sun-elevation-hero.webp" alt="Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right." loading="lazy" decoding="async" />
720+
<img src="assets/sky-texture-sun-elevation-hero.webp" alt="Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right." loading="lazy" decoding="async" />
721721
</a>
722722
<div class="card-body">
723723
<h2><a href="sky-texture-sun-elevation/">sky-texture-sun-elevation</a></h2>
@@ -1036,12 +1036,12 @@ <h2><a href="park-bench/">park-bench</a></h2>
10361036
</article>
10371037
<article class="card" data-tags="mesh export showcase">
10381038
<a class="card-media" href="wheelbarrow/" tabindex="-1" aria-hidden="true">
1039-
<img src="assets/wheelbarrow-hero.webp" alt="A wooden wheelbarrow with a box tray, spoked front wheel and two long handles." loading="lazy" decoding="async" />
1039+
<img src="assets/wheelbarrow-hero.webp" alt="A wooden wheelbarrow whose tray walls are stacked boards held by iron straps, with a spoked front wheel and two long handles." loading="lazy" decoding="async" />
10401040
</a>
10411041
<div class="card-body">
10421042
<h2><a href="wheelbarrow/">wheelbarrow</a></h2>
10431043
<p class="teaches">A procedural wooden wheelbarrow through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1044-
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 2500 tris, two materials with 1094 wood and 190 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.556×0.630×0.572 m, zmin 0, hygiene 0, wall-floor seat 12 mm, spoke clearance 40 mm, LOD ratios in band (5.2 COLLAPSE leaner on LOD2), convex collider 90 tris, non-empty glTF. --skip-decimate exits 9 on LOD1; --stray-vert exits 15 on hygiene; --lift-z / --short-legs exit 16 on grounded; --fat-spokes / --float-walls exit 17 on joint fit; --pipe-rim exits 18 on tread aspect.</p>
1044+
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 2536 tris, two materials with 1157 wood and 190 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 1.556×0.630×0.572 m, zmin 0, hygiene 0, wall-floor seat 12 mm, spoke clearance 40 mm, two boards per side and front wall with 2 mm seams, LOD ratios in band (5.2 COLLAPSE leaner on LOD2), convex collider 90 tris, non-empty glTF. --skip-decimate exits 9 on LOD1; --stray-vert exits 15 on hygiene; --lift-z / --short-legs exit 16 on grounded; --fat-spokes / --float-walls / --wide-seams exit 17 on joint fit; --pipe-rim exits 18 on tread aspect.</p>
10451045
<a class="card-link" href="wheelbarrow/">View showcase piece<span class="sr-only"> wheelbarrow</span> <span aria-hidden="true">&rarr;</span></a>
10461046
</div>
10471047
</article>
@@ -1168,12 +1168,12 @@ <h2><a href="iron-cauldron/">iron-cauldron</a></h2>
11681168
</article>
11691169
<article class="card" data-tags="mesh export showcase">
11701170
<a class="card-media" href="wooden-ladder/" tabindex="-1" aria-hidden="true">
1171-
<img src="assets/wooden-ladder-hero.webp" alt="A wooden ladder with tapered stiles and round rungs, leaning at an angle." loading="lazy" decoding="async" />
1171+
<img src="assets/wooden-ladder-hero.webp" alt="A wooden ladder with tapered stiles and evenly spaced round rungs, leaning against a dark wall section." loading="lazy" decoding="async" />
11721172
</a>
11731173
<div class="card-body">
11741174
<h2><a href="wooden-ladder/">wooden-ladder</a></h2>
11751175
<p class="teaches">A procedural timber ladder with raked tapered stiles, six turned rungs, ferrule caps, and level shoe plates through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1176-
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 2536 tris, two materials with 612 wood and 736 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.490×0.376×1.487 m, zmin 0, hygiene and coplanar pairs 0, tenon clearance 8 mm, shoe bite 20 mm, LOD ratios in band, convex collider 24 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert and --twin-sole exit 15; --lift-z exits 16; --fat-rungs exits 17; --short-stile exits 18.</p>
1176+
<p class="witnesses"><span class="tag">witnesses</span> Recomputed: 2536 tris, two materials with 612 wood and 736 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.490×0.376×1.487 m, zmin 0, hygiene and coplanar pairs 0, tenon clearance 8 mm, shoe bite 20 mm, rung pitch even to 0.002 m, LOD ratios in band, convex collider 24 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert and --twin-sole exit 15; --lift-z exits 16; --fat-rungs exits 17; --short-stile exits 18; --drift-rungs exits 19.</p>
11771177
<a class="card-link" href="wooden-ladder/">View showcase piece<span class="sr-only"> wooden-ladder</span> <span aria-hidden="true">&rarr;</span></a>
11781178
</div>
11791179
</article>

‎docs/gallery/sky-texture-sun-elevation/index.html‎

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
<meta property="og:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/sky-texture-sun-elevation-hero.webp" />
1717
<meta property="og:image:width" content="1280" />
1818
<meta property="og:image:height" content="720" />
19-
<meta property="og:image:alt" content="Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right." />
19+
<meta property="og:image:alt" content="Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right." />
2020
<meta property="og:site_name" content="Blender Developer Tools" />
2121
<meta name="twitter:card" content="summary_large_image" />
2222
<meta name="twitter:title" content="sky-texture-sun-elevation — Examples — Blender Developer Tools" />
2323
<meta name="twitter:description" content="World ShaderNodeTexSky driving Background Color — the sky contract across 4.5 LTS and 5.1. sky_type is NISHITA on 4.5 and MULTIPLE_SCATTERING on 5.1 (NISHITA gone); dust_density exists only on 4.5 (aerosol_density on 5.1). Two tiny Cycles OPEN_EXR zenith probes prove sun_elevation 8 deg to 55 deg brightens zenith (rise 2.25x on 5.1.2, 1.50x on 4.5.11, gate &gt;= 1.25)." />
2424
<meta name="twitter:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/sky-texture-sun-elevation-hero.webp" />
25-
<meta name="twitter:image:alt" content="Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right." />
25+
<meta name="twitter:image:alt" content="Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right." />
2626
<style>
2727
/* fonts are deployed by the landing build (docs/fonts/) */
2828
@font-face { font-family: 'Barlow Condensed'; font-weight: 600; font-display: swap;
@@ -268,8 +268,8 @@ <h1>sky-texture-sun-elevation</h1>
268268
<p>World ShaderNodeTexSky driving Background Color — the sky contract across 4.5 LTS and 5.1. sky_type is NISHITA on 4.5 and MULTIPLE_SCATTERING on 5.1 (NISHITA gone); dust_density exists only on 4.5 (aerosol_density on 5.1). Two tiny Cycles OPEN_EXR zenith probes prove sun_elevation 8 deg to 55 deg brightens zenith (rise 2.25x on 5.1.2, 1.50x on 4.5.11, gate &gt;= 1.25).</p>
269269
</header>
270270
<main id="main">
271-
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right.">
272-
<img src="../assets/sky-texture-sun-elevation-hero.webp" alt="Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right." width="1280" height="720" />
271+
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right.">
272+
<img src="../assets/sky-texture-sun-elevation-hero.webp" alt="Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right." width="1280" height="720" />
273273
</button>
274274
<p class="zoom-hint">Rendered headless by the example itself — click to zoom.</p>
275275
<div class="callout"><span class="tag">witnesses</span> AI code still assigns sky_type=&#x27;NISHITA&#x27; and dust_density on 5.1 — both are wrong (NISHITA removed; dust_density is AttributeError; use MULTIPLE_SCATTERING + aerosol_density). A near-black Background Strength alone is not a sky: Sky must link into Background Color. Elevation that does not brighten zenith fails the rise gate.</div>
@@ -284,9 +284,10 @@ <h1>sky-texture-sun-elevation</h1>
284284
<p><strong>What each check catches on failure:</strong> broken Sky→Background link (exit 6), wrong <code>sky_type</code> for the running version (exit 3), lost <code>sun_elevation</code> round-trip (exit 4), <code>dust_density</code> / <code>NISHITA</code> present on the wrong side of 5.0 (exit 5), a non-working sky (zenith floor, exit 7), and an elevation that does not brighten zenith (exit 8 — rise below 1.25).</p>
285285
<p><strong>Version witness:</strong> <code>sky_type</code> and the dust/aerosol rename are the divergence; <code>sun_elevation</code> itself is stable. Zenith rise differs by model (Nishita vs multiple scattering) but clears the same gate on both binaries.</p>
286286
<h2>Stage deviation</h2>
287-
<p>World carries a Nishita / multiple-scattering Sky Texture instead of the default near-black Background — the contract <em>is</em> the sky. Gallery still is a dual-elevation diptych (8° | 55°) so failure (identical panels) is visible at thumbnail scale. Layer 1 still holds: <code>view_transform=&#x27;Standard&#x27;</code>, designed terracotta materials, chosen camera, no helpers in frame.</p>
287+
<p>World carries a Nishita / multiple-scattering Sky Texture instead of the default near-black Background — the contract <em>is</em> the sky. Gallery still is a dual-elevation diptych (8° | 55°) so failure (identical panels) is visible at thumbnail scale. Layer 1 still holds: <code>view_transform=&#x27;Standard&#x27;</code>, designed materials, chosen camera, no helpers in frame.</p>
288+
<p>The jar is pale glaze, and the studio key and fill only model its form (70 W and 10 W). With saturated terracotta and a 420 W key, the studio lights lit the jar and both panels looked the same: the sky, the thing under test, was not what lit it. Now the jar reads dim twilight blue under the 8° sun and bright under the 55° sun. Mean luma is about 0.35, above the dark-stage band, which is information under this deviation, not a failure.</p>
288289
<h2>Framing deviation</h2>
289-
<p>The hero is the sky itself — a world contract, not an object on the stage. The silhouette matte can only measure the cone reference props (0.369x / 0.489y), so the out-of-band number is a measurement artifact, not the composition; if ever wired to <code>examples/gallery_framing.py</code>, this example reports with <code>deviation=&quot;world-contract subject; matte sees only the cone props&quot;</code> rather than enforcing.</p>
290+
<p>The hero is the sky itself — a world contract, not an object on the stage. The silhouette matte can only measure the jar in each 640 px panel (about 0.37 x / 0.49 y), so an out-of-band number would be a measurement artifact, not the composition. The diptych is not wired to <code>examples/gallery_framing.py</code>; the helper has no <code>deviation=</code> flag to report through.</p>
290291
<h2>Run</h2>
291292
<pre><code># Zenith-luminance correctness check (tiny Cycles CPU EXR probes) — the CI check:
292293
blender --background --python sky_texture_sun_elevation.py --
@@ -433,16 +434,21 @@ <h2>Source</h2>
433434

434435

435436
<span class="k">def</span> build_ceramic(sc):
436-
<span class="s">&quot;&quot;&quot;A turned terracotta jar — saturated clay + pale glaze lid.&quot;&quot;&quot;</span>
437-
clay = _principled(<span class="s">&quot;Clay&quot;</span>, (<span class="n">0.78</span>, <span class="n">0.22</span>, <span class="n">0.08</span>), rough=<span class="n">0.52</span>, metallic=<span class="n">0.0</span>, specular=<span class="n">0.2</span>)
438-
glaze = _principled(<span class="s">&quot;Glaze&quot;</span>, (<span class="n">0.55</span>, <span class="n">0.18</span>, <span class="n">0.06</span>), rough=<span class="n">0.28</span>, metallic=<span class="n">0.0</span>, specular=<span class="n">0.4</span>)
437+
<span class="s">&quot;&quot;&quot;A turned jar in pale glaze, so it takes the colour of the sky&#x27;s light.
438+
439+
Saturated terracotta looked the same under both skies: the clay&#x27;s own
440+
orange swamped the change in the light, which is the thing on show.
441+
&quot;&quot;&quot;</span>
442+
clay = _principled(<span class="s">&quot;Clay&quot;</span>, (<span class="n">0.80</span>, <span class="n">0.78</span>, <span class="n">0.74</span>), rough=<span class="n">0.38</span>, metallic=<span class="n">0.0</span>, specular=<span class="n">0.4</span>)
443+
glaze = _principled(<span class="s">&quot;Glaze&quot;</span>, (<span class="n">0.60</span>, <span class="n">0.58</span>, <span class="n">0.55</span>), rough=<span class="n">0.22</span>, metallic=<span class="n">0.0</span>, specular=<span class="n">0.5</span>)
439444

440445
<span class="k">def</span> body(bm):
441446
bmesh.ops.create_cone(
442447
bm, cap_ends=<span class="k">True</span>, cap_tris=<span class="k">False</span>,
443448
segments=<span class="n">64</span>, radius1=<span class="n">0.62</span>, radius2=<span class="n">0.42</span>, depth=<span class="n">1.35</span>,
444449
)
445-
bmesh.ops.translate(bm, verts=bm.verts, vec=(<span class="n">0.0</span>, <span class="n">0.0</span>, <span class="n">0.68</span>))
450+
<span class="c"># base on the floor (the cone is centred on its depth)</span>
451+
bmesh.ops.translate(bm, verts=bm.verts, vec=(<span class="n">0.0</span>, <span class="n">0.0</span>, <span class="n">0.675</span>))
446452

447453
vessel = _mesh_obj(sc, <span class="s">&quot;Vessel&quot;</span>, body, (<span class="n">0.0</span>, <span class="n">0.0</span>, <span class="n">0.0</span>), clay)
448454
bev = vessel.modifiers.new(<span class="s">&quot;Bev&quot;</span>, <span class="s">&quot;BEVEL&quot;</span>)
@@ -696,7 +702,7 @@ <h2>Source</h2>
696702
<span class="k">else</span>:
697703
sky.dust_density = <span class="n">0.45</span>
698704
bg = world.node_tree.nodes[<span class="s">&quot;Background&quot;</span>]
699-
bg.inputs[<span class="s">&quot;Strength&quot;</span>].default_value = <span class="n">0.08</span>
705+
bg.inputs[<span class="s">&quot;Strength&quot;</span>].default_value = <span class="n">0.14</span>
700706
sc.world = world
701707

702708
<span class="c"># Remove prior still lights / cams from earlier calls</span>
@@ -720,9 +726,10 @@ <h2>Source</h2>
720726
ob.rotation_euler = tuple(math.radians(a) <span class="k">for</span> a <span class="k">in</span> rot)
721727
sc.collection.objects.link(ob)
722728

723-
area(<span class="s">&quot;Key&quot;</span>, (-<span class="n">3.0</span>, -<span class="n">3.5</span>, <span class="n">4.0</span>), <span class="n">420.0</span>, <span class="n">4.0</span>, (<span class="n">1.0</span>, <span class="n">0.95</span>, <span class="n">0.88</span>), (<span class="n">50</span>, <span class="n">0</span>, -<span class="n">32</span>))
724-
area(<span class="s">&quot;Fill&quot;</span>, (<span class="n">3.5</span>, -<span class="n">2.2</span>, <span class="n">1.8</span>), <span class="n">55.0</span>, <span class="n">8.0</span>, (<span class="n">0.7</span>, <span class="n">0.82</span>, <span class="n">1.0</span>), (<span class="n">70</span>, <span class="n">0</span>, <span class="n">42</span>))
725-
area(<span class="s">&quot;Rim&quot;</span>, (-<span class="n">0.5</span>, <span class="n">3.8</span>, <span class="n">2.5</span>), <span class="n">120.0</span>, <span class="n">3.5</span>, (<span class="n">0.55</span>, <span class="n">0.72</span>, <span class="n">1.0</span>), (-<span class="n">55</span>, <span class="n">0</span>, <span class="n">185</span>))
729+
<span class="c"># The sky is the light under test, so the studio lights only model the</span>
730+
<span class="c"># form. At 420 W the key drowned the sky and both panels matched.</span>
731+
area(<span class="s">&quot;Key&quot;</span>, (-<span class="n">3.0</span>, -<span class="n">3.5</span>, <span class="n">4.0</span>), <span class="n">70.0</span>, <span class="n">4.0</span>, (<span class="n">1.0</span>, <span class="n">1.0</span>, <span class="n">1.0</span>), (<span class="n">50</span>, <span class="n">0</span>, -<span class="n">32</span>))
732+
area(<span class="s">&quot;Fill&quot;</span>, (<span class="n">3.5</span>, -<span class="n">2.2</span>, <span class="n">1.8</span>), <span class="n">10.0</span>, <span class="n">8.0</span>, (<span class="n">1.0</span>, <span class="n">1.0</span>, <span class="n">1.0</span>), (<span class="n">70</span>, <span class="n">0</span>, <span class="n">42</span>))
726733

727734
aim = bpy.data.objects.new(<span class="s">&quot;Aim&quot;</span>, <span class="k">None</span>)
728735
aim.location = (<span class="n">0.0</span>, <span class="n">0.0</span>, <span class="n">0.8</span>)
@@ -858,7 +865,7 @@ <h2>Source</h2>
858865
</main>
859866
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
860867
<button class="lightbox-close" type="button" autofocus>Close</button>
861-
<img src="../assets/sky-texture-sun-elevation-hero.webp" alt="Split view of an orange cone under a procedural sky: sun elevation 8 degrees on the left, 55 degrees on the right." />
868+
<img src="../assets/sky-texture-sun-elevation-hero.webp" alt="Split view of a pale glazed jar under a procedural sky: dim twilight blue at sun elevation 8 degrees on the left, bright daylight at 55 degrees on the right." />
862869
</dialog>
863870
<footer>
864871
<div class="statusbar">

0 commit comments

Comments
 (0)