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
{{ message }}
Repository navigation
Commit 99e4b25
Browse filesBrowse the repository at this point in the historyBrowse files
fix: driver-wave presentation, a raised camera so the wave reads
Render path only: the camera looks down 18 degrees so the column tops and
shadows read as a wave. Contract 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>
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -645,7 +645,7 @@ A slotted-actions Z-rotation turntable keyed through the cross-version channelba
645
645
</tr>
646
646
<tr>
647
647
<tdwidth="46%"valign="middle">
648
-
<ahref="examples/driver-wave/"><imgsrc="examples/driver-wave/preview.webp"alt="Driver wave: sixteen orange columns whose heights form a sine skyline on a dark studio floor, each driven by a driver_namespace function" /></a>
648
+
<ahref="examples/driver-wave/"><imgsrc="examples/driver-wave/preview.webp"alt="Driver wave: sixteen orange columns seen from above whose heights form a sine wave on a dark studio floor, each driven by a driver_namespace function" /></a>
<metaproperty="og:image:alt" content="A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends." />
19
+
<metaproperty="og:image:alt" content="A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor." />
<metaname="twitter:description" content="A driver_namespace function driving sixteen column heights through SCRIPTED drivers — the sine skyline is entirely driver-evaluated." />
<metaname="twitter:image:alt" content="A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends." />
25
+
<metaname="twitter:image:alt" content="A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor." />
26
26
<style>
27
27
/* fonts are deployed by the landing build (docs/fonts/) */
<p>A driver_namespace function driving sixteen column heights through SCRIPTED drivers — the sine skyline is entirely driver-evaluated.</p>
269
269
</header>
270
270
<mainid="main">
271
-
<buttonclass="detail-hero" id="heroZoom" type="button" aria-label="View full size: A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends.">
272
-
<imgsrc="../assets/driver-wave-hero.webp" alt="A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends." width="1280" height="720" />
271
+
<buttonclass="detail-hero" id="heroZoom" type="button" aria-label="View full size: A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor.">
272
+
<imgsrc="../assets/driver-wave-hero.webp" alt="A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor." width="1280" height="720" />
273
273
</button>
274
274
<pclass="zoom-hint">Rendered headless by the example itself — click to zoom.</p>
275
275
<divclass="callout"><spanclass="tag">witnesses</span> Driven values appear after a view-layer update in two places that must agree: the evaluated copy and the original datablock the animation system flushes for display.</div>
@@ -281,6 +281,8 @@ <h1>driver-wave</h1>
281
281
<p>A runnable example that drives sixteen column heights from a custom function registered in <code>bpy.app.driver_namespace</code> — the pattern from <ahref="https://github.com/TMHSDigital/Blender-Developer-Tools/tree/main/skills/drivers-and-app-handlers/SKILL.md"><code>drivers-and-app-handlers</code></a>. Each column gets a SCRIPTED driver on Z scale whose expression calls <code>wave_scale(i)</code>, producing a sine skyline.</p>
282
282
<p><strong>What it witnesses:</strong> the driver evaluation contract. Driven values appear only after a view-layer update, and they land in <strong>two</strong> places that must agree: the depsgraph-evaluated copy (<code>evaluated_get(dg).scale</code>) and the original datablock, which the animation system flushes for display. The check asserts both against the closed-form profile.</p>
283
283
<p>Note for real add-ons: <code>driver_namespace</code> entries do <strong>not</strong> persist in <code>.blend</code> files — re-register them from a <code>load_post</code> handler, or every driver that calls them fails on file open. Headless, registering before driver creation (as here) is enough.</p>
284
+
<h2>Staging</h2>
285
+
<p>The camera is raised to look down about 18 degrees, so the column tops and their shadows read as a wave. From nearly level (86 degrees) the skyline flattened into a bar chart. Render path only.</p>
284
286
<h2>Run</h2>
285
287
<pre><code># Cheap correctness check (no render) — the CI check:
286
288
blender --background --python driver_wave.py --
@@ -457,8 +459,10 @@ <h2>Source</h2>
457
459
<spanclass="c"># the frame with a small margin -- the skyline must not clip</span>
<imgsrc="../assets/driver-wave-hero.webp" alt="A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends." />
535
+
<imgsrc="../assets/driver-wave-hero.webp" alt="A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor." />
<imgsrc="assets/driver-wave-hero.webp" alt="A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends." loading="lazy" decoding="async" />
401
+
<imgsrc="assets/driver-wave-hero.webp" alt="A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor." loading="lazy" decoding="async" />
<imgsrc="assets/hitching-post-hero.webp" alt="A tall wooden hitching post with a pointed cap, a crossbar and two iron rings." loading="lazy" decoding="async" />
1072
+
<imgsrc="assets/hitching-post-hero.webp" alt="A tall wooden hitching post with a pointed cap, a crossbar, two iron bands wrapped around the post and two iron rings." loading="lazy" decoding="async" />
<pclass="teaches">A procedural hitching post (eaved cap, one rail, cup shoe, rings hung through eyes) through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
1077
-
<pclass="witnesses"><spanclass="tag">witnesses</span> Recomputed: 1680 tris, two materials with 114 wood and 742 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.500×0.149×1.246 m, zmin 0, hygiene and coplanar pairs 0, post seated at z 0.010, ring centerline error 0, LOD ratios in band, convex collider 80 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert and --twin-sole exit 15; --lift-z exits 16; --clip-ring exits 18; --short-post exits 19.</p>
1077
+
<pclass="witnesses"><spanclass="tag">witnesses</span> Recomputed: 1680 tris, two materials with 114 wood and 742 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.500×0.149×1.246 m, zmin 0, hygiene and coplanar pairs 0, post seated at z 0.010, ring centerline error 0, bands 6.5 mm proud of the post, LOD ratios in band, convex collider 80 tris, non-empty glTF. --skip-decimate exits 9; --stray-vert and --twin-sole exit 15; --lift-z exits 16; --clip-ring and --sunk-bands exit 18; --short-post exits 19.</p>
<imgsrc="assets/hand-pump-hero.webp" alt="A dark iron village hand pump with a curved spout and lever handle on a square wooden plinth." loading="lazy" decoding="async" />
1094
+
<imgsrc="assets/hand-pump-hero.webp" alt="A matte black cast-iron village hand pump with a curved spout and lever handle on a stepped wooden plinth." loading="lazy" decoding="async" />
Copy file name to clipboardExpand all lines: examples/gallery.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -73,7 +73,7 @@
73
73
"name": "driver-wave",
74
74
"dir": "examples/driver-wave",
75
75
"teaches": "A driver_namespace function driving sixteen column heights through SCRIPTED drivers — the sine skyline is entirely driver-evaluated.",
76
-
"alt": "A row of orange bars whose heights rise and fall in a wave, low in the middle and tall at both ends.",
76
+
"alt": "A row of orange bars seen from above, their heights rising and falling in a wave, low in the middle and tall at both ends, each casting a shadow on the floor.",
77
77
"witnessesFix": "Driven values appear after a view-layer update in two places that must agree: the evaluated copy and the original datablock the animation system flushes for display.",
0 commit comments