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
1 change: 1 addition & 0 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
"examples": [
"examples/armature-bend",
"examples/bmesh-gear",
"examples/car-mirror-symmetry",
"examples/color-attribute-wheel",
"examples/collision-hull-proxy",
"examples/compositor-glare",
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/blender-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -529,3 +529,16 @@ jobs:
# failure.
xvfb-run -a "$BLENDER" --background \
--python examples/soccer-ball-goldberg/soccer_ball_goldberg.py --

- name: Shipped example - car mirror symmetry (Mirror modifier + depsgraph)
run: |
set -euo pipefail
# Check only (no render): a hatchback lofted as one half and
# completed by the Mirror modifier; asserts the datablock keeps the
# half (126/231/106, 28 centerline verts), the evaluated mesh is
# exactly 2n-c (224/434/212), watertight with Euler 2, every
# evaluated vertex has an exact negated-X partner, and wheels/lamps
# mirror about object origins parked on the symmetry plane. Exits
# non-zero on failure.
xvfb-run -a "$BLENDER" --background \
--python examples/car-mirror-symmetry/car_mirror_symmetry.py --
23 changes: 21 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</p>

<p align="center">
<strong>12 skills</strong> &nbsp;&bull;&nbsp; <strong>6 rules</strong> &nbsp;&bull;&nbsp; <strong>2 templates</strong> &nbsp;&bull;&nbsp; <strong>17 snippets</strong> &nbsp;&bull;&nbsp; <strong>37 examples</strong>
<strong>12 skills</strong> &nbsp;&bull;&nbsp; <strong>6 rules</strong> &nbsp;&bull;&nbsp; <strong>2 templates</strong> &nbsp;&bull;&nbsp; <strong>17 snippets</strong> &nbsp;&bull;&nbsp; <strong>38 examples</strong>
</p>

<p align="center">
Expand All @@ -36,7 +36,7 @@

## Overview

This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 37 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 38 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.

Expand Down Expand Up @@ -720,6 +720,25 @@ bound by face vertex count, never enumeration order. Sibling to
witnesses polyhedral invariants plus per-face-class material binding. The
smoothed render inverts on sight if the panel binding does.

</td>
</tr>
<tr>
<td width="46%" valign="middle">
<a href="examples/car-mirror-symmetry/"><img src="examples/car-mirror-symmetry/preview.webp" alt="Car mirror symmetry: a red low-poly hatchback on a dark studio floor, light windshield band and white headlamp pair — lofted as one half and completed by the Mirror modifier evaluated through the depsgraph, proving 2n-c counts, exact negated-X partners, a welded watertight centerline, and wheels mirrored about origins on the plane" /></a>
</td>
<td valign="middle">

### [car-mirror-symmetry](examples/car-mirror-symmetry/)

The Mirror + depsgraph contract: the datablock holds only the authored half
(126/231/106, 28 centerline verts) while the evaluated mesh is the welded
whole — exactly `2n − c` verts, watertight with Euler 2, every vertex paired
at negated X (deviation 0.0). Wheels and lamps mirror about object origins
parked **on** the symmetry plane — offset the data, never the object.
Companion to [`depsgraph-export`](examples/depsgraph-export/) (evaluated-vs-
original) and [`shape-key-blend`](examples/shape-key-blend/) (non-destructive
evaluation). Break the mirror and the render is literally half a car.

</td>
</tr>
</table>
Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
- Freestyle SVG / line-set witness: Freestyle line set on a silhouette (full render pass; prefer Line Art first)
- ~~prop-origin-transform witness~~ **SHIPPED** as `examples/prop-origin-transform/` — origin to base center + data-API scale apply + `matrix_parent_inverse` for a bolted accessory; scale `(1,1,1)`, local `min.z==0`, world AABB delta 0, bare jump ~0.43 m, MPI err ~3e-8; stale `matrix_world` until `view_layer.update()`; byte-identical on 4.5.11 and 5.1.2
- ~~Goldberg polyhedron topology witness~~ **SHIPPED** as `examples/soccer-ball-goldberg/` — soccer ball as a truncated icosahedron: bmesh icosphere cut at 1/3 per edge, faces ordered by link-topology walks; closed forms 60/90/32 + Euler 2, census 12×5+20×6, uniform degree 3, edge dev 6.5e-06, planarity 1.9e-06 (independent Newell normal), circumsphere dev 9.0e-06, panels bound by face vertex count (enumeration-order probes exit 13); float32 noise floor ~9e-6 → 3e-5 gates; byte-identical on 4.5.11 and 5.1.2
- Mirror-modifier symmetry witness: half-model completed by Mirror evaluated through the depsgraph — evaluated-vs-original counts (2n − welded centerline), exact ±X partner for every evaluated vertex, merge-threshold weld proof, failure dramatically visible (half a subject / split seam). Strongest subject: a generic vehicle body
- ~~Mirror-modifier symmetry witness: half-model completed by Mirror evaluated through the depsgraph~~ **SHIPPED** as `examples/car-mirror-symmetry/` — generic hatchback loft (14 stations × 9-point half-rings); datablock keeps the half (126/231/106, 28 centerline), evaluated is exactly 2n−c (224/434/212), watertight Euler 2, ±X partner dev 0.0; wheels/lamps mirror about origins parked on the plane; probes: merge off → 252 (exit 5), centerline off-plane → 27≠28 (exit 4), axis off → 126 half-car (exit 5), applied → exit 3; byte-identical on 4.5.11 and 5.1.2
- Chess-piece lathe witness: a turned piece (rook/pawn) via Screw modifier or bmesh spin from an authored profile — evaluated verts == profile × steps (minus pole merges), ring radii match the profile closed form, axis of revolution exact
- Dice-pair per-face witness: material/attribute assignment driven by face normal direction, opposite-faces-sum-to-7 as an independently computed invariant, pip placement from a closed-form lattice
- Bicycle-wheel radial witness: spokes via radial Array with object offset — exact angular spacing, spoke count, hub/rim concentricity, every evaluated spoke endpoint on its computed rim coordinate
Expand Down
Binary file added docs/gallery/assets/car-mirror-symmetry-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading