Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,11 @@
"examples/bmesh-gear",
"examples/depsgraph-export",
"examples/driver-wave",
"examples/gn-instance-grid",
"examples/gn-sdf-remesh",
"examples/shader-node-group",
"examples/swatch-grid",
"examples/temp-override-join",
"examples/turntable",
"examples/wave-displace"
]
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/blender-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,21 @@ jobs:
# Tint values differ. Exits non-zero on failure.
xvfb-run -a "$BLENDER" --background \
--python examples/shader-node-group/shader_node_group.py --

- name: Shipped example - temp-override join (context override)
run: |
set -euo pipefail
# Frame-independent check only (no render): three cubes joined under
# bpy.context.temp_override; asserts one mesh remains, sources are gone,
# and topology is verts=24 faces=18. Exits non-zero on failure.
xvfb-run -a "$BLENDER" --background \
--python examples/temp-override-join/temp_override_join.py --

- name: Shipped example - GN instance grid (Instance on Points)
run: |
set -euo pipefail
# Frame-independent check only (no render): generative GN tree instances a
# cube on a 3x3 grid and realizes; asserts eval verts=72 faces=54 and Set
# Material carries Lime. Exits non-zero on failure.
xvfb-run -a "$BLENDER" --background \
--python examples/gn-instance-grid/gn_instance_grid.py --
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,34 @@ One reusable `TintedGloss` group declared via `tree.interface.new_socket`, insta
materials with different Tint values. Witnesses the grouping contract: shared datablock
(`users == 2`), parameters on the group **node** — two spheres, one group, two colors.

</td>
</tr>
<tr>
<td width="46%" valign="middle">
<a href="examples/temp-override-join/"><img src="examples/temp-override-join/preview.webp" alt="Temp-override join: an amber L-shaped mesh made of three joined unit cubes on a dark studio floor, viewed into the open corner" /></a>
</td>
<td valign="middle">

### [temp-override-join](examples/temp-override-join/)

Three unit cubes joined into one L-shaped mesh under `bpy.context.temp_override` — the
supported replacement for the removed `context.copy()` dict-pass form. Asserts one mesh
remains, sources are gone, and topology is verts = 8 × blocks, faces = 6 × blocks.

</td>
</tr>
<tr>
<td width="46%" valign="middle">
<a href="examples/gn-instance-grid/"><img src="examples/gn-instance-grid/preview.webp" alt="GN instance grid: nine lime-green cubes in a 3x3 grid on a dark studio floor, instanced via Geometry Nodes Instance on Points" /></a>
</td>
<td valign="middle">

### [gn-instance-grid](examples/gn-instance-grid/)

A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances —
attached as a `NODES` modifier with no Group Input. Asserts evaluated topology is
verts = 72, faces = 54, and `Set Material` carries the lime accent.

</td>
</tr>
</table>
Expand Down
Binary file added docs/gallery/assets/gn-instance-grid-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/gallery/assets/temp-override-join-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
469 changes: 469 additions & 0 deletions docs/gallery/gn-instance-grid/index.html

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions docs/gallery/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -176,13 +176,16 @@ <h1>Examples Gallery</h1>
<button class="chip active" data-tag="" type="button">All</button>
<button class="chip" data-tag="animation" type="button">animation</button>
<button class="chip" data-tag="bmesh" type="button">bmesh</button>
<button class="chip" data-tag="context" type="button">context</button>
<button class="chip" data-tag="depsgraph" type="button">depsgraph</button>
<button class="chip" data-tag="drivers" type="button">drivers</button>
<button class="chip" data-tag="export" type="button">export</button>
<button class="chip" data-tag="geometry-nodes" type="button">geometry-nodes</button>
<button class="chip" data-tag="instancing" type="button">instancing</button>
<button class="chip" data-tag="materials" type="button">materials</button>
<button class="chip" data-tag="mesh" type="button">mesh</button>
<button class="chip" data-tag="node-groups" type="button">node-groups</button>
<button class="chip" data-tag="operators" type="button">operators</button>
<button class="chip" data-tag="performance" type="button">performance</button>
<button class="chip" data-tag="rendering" type="button">rendering</button>
</div>
Expand Down Expand Up @@ -276,6 +279,28 @@ <h2><a href="shader-node-group/">shader-node-group</a></h2>
<a class="card-link" href="shader-node-group/">View example <span aria-hidden="true">&rarr;</span></a>
</div>
</article>
<article class="card" data-tags="operators context">
<a class="card-media" href="temp-override-join/" aria-label="temp-override-join example detail page">
<img src="assets/temp-override-join-hero.webp" alt="temp-override-join — Join three unit cubes into one L-shaped mesh under bpy" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="temp-override-join/">temp-override-join</a></h2>
<p class="teaches">Join three unit cubes into one L-shaped mesh under bpy.context.temp_override — the supported replacement for the removed context.copy() dict-pass form.</p>
<p class="witnesses"><span class="tag">witnesses</span> temp_override actually applies: join consumes the sources, exactly one mesh remains, and topology is verts = 8 × blocks, faces = 6 × blocks.</p>
<a class="card-link" href="temp-override-join/">View example <span aria-hidden="true">&rarr;</span></a>
</div>
</article>
<article class="card" data-tags="geometry-nodes instancing">
<a class="card-media" href="gn-instance-grid/" aria-label="gn-instance-grid example detail page">
<img src="assets/gn-instance-grid-hero.webp" alt="gn-instance-grid — A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances — attached as a NODES modifier with no Group Input geometry" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="gn-instance-grid/">gn-instance-grid</a></h2>
<p class="teaches">A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances — attached as a NODES modifier with no Group Input geometry.</p>
<p class="witnesses"><span class="tag">witnesses</span> Realized instances produce closed-form topology: eval verts = grid points × cube verts (3 × 3 × 8 = 72), and Set Material carries the accent onto the evaluated mesh.</p>
<a class="card-link" href="gn-instance-grid/">View example <span aria-hidden="true">&rarr;</span></a>
</div>
</article>
</div>
</main>
<footer>
Expand Down
Loading
Loading