From f6027d0d2f826cf1c2b84f2facdb97b2c89b1b65 Mon Sep 17 00:00:00 2001 From: fOuttaMyPaint Date: Wed, 22 Jul 2026 11:04:39 -0400 Subject: [PATCH] feat: add sky-texture-sun-elevation example Witness World ShaderNodeTexSky across 4.5 NISHITA vs 5.1 MULTIPLE_SCATTERING, the dust_density/aerosol_density trap, and sun_elevation zenith rise with a dual-elevation gallery diptych. Signed-off-by: fOuttaMyPaint Co-authored-by: Cursor --- .cursor-plugin/plugin.json | 1 + .github/workflows/blender-smoke.yml | 11 + README.md | 23 +- ROADMAP.md | 5 + .../sky-texture-sun-elevation-hero.webp | Bin 0 -> 18382 bytes ...y-texture-sun-elevation-contact-sheet.webp | Bin 0 -> 22498 bytes docs/gallery/index.html | 14 + .../sky-texture-sun-elevation/index.html | 777 ++++++++++++++++++ examples/gallery.json | 13 + examples/sky-texture-sun-elevation/README.md | 53 ++ .../sky-texture-sun-elevation/preview.webp | Bin 0 -> 16696 bytes .../sky_texture_sun_elevation.py | 531 ++++++++++++ 12 files changed, 1425 insertions(+), 3 deletions(-) create mode 100644 docs/gallery/assets/sky-texture-sun-elevation-hero.webp create mode 100644 docs/gallery/contact-sheets/sky-texture-sun-elevation-contact-sheet.webp create mode 100644 docs/gallery/sky-texture-sun-elevation/index.html create mode 100644 examples/sky-texture-sun-elevation/README.md create mode 100644 examples/sky-texture-sun-elevation/preview.webp create mode 100644 examples/sky-texture-sun-elevation/sky_texture_sun_elevation.py diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 387b252..a0cb5fe 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -81,6 +81,7 @@ "examples/png-exr-alpha", "examples/shader-node-group", "examples/shape-key-blend", + "examples/sky-texture-sun-elevation", "examples/swatch-grid", "examples/temp-override-join", "examples/text-version-stamp", diff --git a/.github/workflows/blender-smoke.yml b/.github/workflows/blender-smoke.yml index a6cf6f7..9cb33f8 100644 --- a/.github/workflows/blender-smoke.yml +++ b/.github/workflows/blender-smoke.yml @@ -474,3 +474,14 @@ jobs: # Exits non-zero on failure. xvfb-run -a "$BLENDER" --background \ --python examples/custom-normals-shade/custom_normals_shade.py -- + + - name: Shipped example - sky texture sun elevation (Nishita / MS + zenith rise) + run: | + set -euo pipefail + # Check only (no gallery still): World ShaderNodeTexSky drives + # Background Color; sky_type is NISHITA on 4.5 and MULTIPLE_SCATTERING + # on 5.1 (NISHITA gone); dust_density is 4.5-only (aerosol_density on + # 5.1). Two tiny Cycles OPEN_EXR zenith probes assert sun_elevation + # 8→55 deg brightens zenith (rise gate ≥ 1.25). Exits non-zero on failure. + xvfb-run -a "$BLENDER" --background \ + --python examples/sky-texture-sun-elevation/sky_texture_sun_elevation.py -- diff --git a/README.md b/README.md index 423846c..7551db6 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@

- 12 skills  •  6 rules  •  2 templates  •  17 snippets  •  32 examples + 12 skills  •  6 rules  •  2 templates  •  17 snippets  •  33 examples

@@ -36,7 +36,7 @@ ## Overview -This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 32 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support. +This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 33 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support. The content is consumed by AI coding agents (Cursor, Claude Code, any MCP-capable client) when working on Blender add-ons, geometry nodes scripts, batch pipelines, or animation tooling. There is no build step. Edit the markdown and Python files directly. @@ -85,7 +85,7 @@ or expand a category below.

-Materials, shading & compositing — 6 examples +Materials, shading & compositing — 7 examples @@ -179,6 +179,23 @@ as if associated-alpha — straight-authored dark values at low alpha clamp to w (closed-form error **0.98** at `(0.02, a=1/255)`). OpenEXR preserves float RGBA; byte images stay straight 8-bit. Also witnesses `EXR color_mode='RGB'` dropping alpha. + + + + +
+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 + + +### [sky-texture-sun-elevation](examples/sky-texture-sun-elevation/) + +World `ShaderNodeTexSky` driving Background Color — the sky contract AI lighting +code misses across 4.5 → 5.1. `sky_type` is `NISHITA` on 4.5 LTS and +`MULTIPLE_SCATTERING` on 5.1 (`NISHITA` gone); `dust_density` exists only on 4.5 +(`aerosol_density` on 5.1). Two tiny Cycles EXR zenith probes assert +`sun_elevation` 8° → 55° brightens zenith (rise **2.25x** / **1.50x**, gate ≥ 1.25). +Gallery still is a dual-elevation diptych so the contract reads at thumbnail scale. +
diff --git a/ROADMAP.md b/ROADMAP.md index f0011c3..d20d9ec 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -114,6 +114,11 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo - Falsy `bpy_prop_collection` trap snippet: an empty collection is falsy, so `editor.strips or editor.sequences` silently falls through to the legacy accessor on an empty timeline — always branch on `hasattr`; likely generalizes across the API (found authoring `vse-cut-list`) - ~~Collision compound witness~~ **SHIPPED** as `examples/collision-hull-proxy/` — game-prop collision as a compound of convex pieces, each a `bmesh.ops.convex_hull` of a coarse `sec(π/n)`-inflated cage (containment 4.4e-08, watertight, positive signed volume, Euler 2, per-piece 255-face budget: body 70, caps 60×3, compound 250); a hull of the dense render mesh measures 380 faces — over budget — which is why pipelines hull cages; proud details cost cage rows, concave grooves are free; byte-identical on 4.5.11 and 5.1.2 - ~~Custom-normals / shade-by-angle witness~~ **SHIPPED** as `examples/custom-normals-shade/` — the post-4.1 shading contract: `use_auto_smooth`/`use_custom_normals`/`calc_normals` are AttributeError on BOTH 4.5.11 and 5.1.2; `set_sharp_from_angle` sharp sets match an independent dihedral recompute exactly (188/388 edges, 3 meshes); evaluated normal welds/splits exact (0.0 dev); custom split normals survive depsgraph evaluation within int16 quantization (1.407e-04, not float-exact); **divergence**: the legacy `shade_auto_smooth` operator CANCELS headless on 4.5 ("Asset loading is unfinished", mesh untouched, no exception) while 5.1 FINISHES with the Smooth-by-Angle NODES modifier — the data API is the portable path +- ~~Sky Texture / sun_elevation witness~~ **SHIPPED** as `examples/sky-texture-sun-elevation/` — World `ShaderNodeTexSky` → Background; `sky_type` is `NISHITA` on 4.5 and `MULTIPLE_SCATTERING` on 5.1 (`NISHITA` gone); `dust_density` is 4.5-only (`aerosol_density` on 5.1); zenith EXR rise 8°→55° measured **2.25x** (5.1.2) / **1.50x** (4.5.11), gate ≥ 1.25; dual-elevation gallery diptych +- Grease Pencil Line Art contour witness: empty GPv3 object + `modifiers.new(..., "LINEART")`; `thickness` on 4.5 vs `radius` on 5.1; evaluated contour stroke counts for a known source mesh +- Camera DOF + focus_distance witness: `cam.dof.use_dof`, focus plane vs defocus variance on high-freq cards (Stage deviation — depth needs background content) +- Volumetric scatter optical-depth witness: Volume Scatter density → Beer–Lambert transmittance along a known path (Cycles; Stage deviation) +- Freestyle SVG / line-set witness: Freestyle line set on a silhouette (full render pass; prefer Line Art first) - prop-origin-transform witness — origin to base center, `transform_apply` through the data API, delta transforms, `matrix_parent_inverse` so parented children do not teleport; closed forms: post-apply scale exactly (1,1,1), local bbox min Z == 0, world bbox unchanged (builds on `parent-inverse-orrery`, does not duplicate it) - mesh-hygiene-audit witness — the engine-ingest checklist as executable contract: no ngons, no loose vertices, no non-manifold edges, no zero-area faces, consistent outward winding; closed forms via Euler characteristic and exact edge-face incidence counts diff --git a/docs/gallery/assets/sky-texture-sun-elevation-hero.webp b/docs/gallery/assets/sky-texture-sun-elevation-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..a91c325813848f5cad9b82dc96c71cc1eda23cd8 GIT binary patch literal 18382 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

l5wh9EKV3-3B1Qw+T_#$( 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 x=n>wwJs(V5y|*|30000000000000000000000000000000000000000002(F5f1Examples Gallery + + +

@@ -557,6 +560,17 @@

custom-normals-shade

View example
+
+ + sky-texture-sun-elevation — World ShaderNodeTexSky driving Background Color — the sky contract across 4.5 LTS and 5.1. + +
+

sky-texture-sun-elevation

+

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 >= 1.25).

+

witnesses AI code still assigns sky_type='NISHITA' 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.

+ View example +
+