From afd2eedf559f33637e1f64249729e20c3f272012 Mon Sep 17 00:00:00 2001 From: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Date: Fri, 2 Oct 2026 22:01:23 -0400 Subject: [PATCH] feat(examples): add solidify-even-thickness and boolean-exact-volume solidify-even-thickness: a strip folded at 60, 90 and 120 degrees, solidified in Simple mode (offset -1, t = 0.16). - Without use_even_offset, each fold vertex's copy moves t along the bisector of its face normals, so the shell is t*cos(phi/2) thick: 0.1386, 0.1131 and 0.0800. - With use_even_offset, the copy moves t/cos(phi/2) and the shell is exactly t thick. - Both closed forms are derived from the profile geometry and match to 3.7e-8. Exits: 4 even shell, 5 plain-shell closed form, 6 thinning floor. - --no-even exits 4 (0.0800 against 0.1600). - The ROADMAP candidate's "1/cos(theta/2)" was imprecise; the shipped line states the cos(phi/2) factor on the bend angle. boolean-exact-volume: the Boolean modifier's EXACT solver on a 2 m cube and a 2x1x1 m slab whose top face is coplanar with the cube's top. Both operands are translated and turned 18 degrees about Z. - Union, difference and intersection measure 9, 7 and 1 m^3 by the divergence theorem, to 1e-6 relative (exit 3). - Each result is a closed 2-manifold with no loose geometry (exit 4). - --float-solver exits 3 with a 7.708 m^3 union. - The floating-point solver is named 'FAST' on 4.5 and 'FLOAT' on 5.x, so the script branches on bpy.app.version. Both default runs exit 0 on Blender 4.5.11, 5.1.2 and 5.2.1. Both falsifiers are proven on 4.5.11 and 5.2.1 (boolean's also on 5.1.2). tests/smoke/run_example.py reports [PASS] for both on 5.2.1 and 4.5.11. Contact sheets are committed; every criterion passes for both. Co-Authored-By: Claude Opus 5.5 Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --- .cursor-plugin/plugin.json | 4 +- AGENTS.md | 4 +- CLAUDE.md | 6 +- README.md | 38 +- ROADMAP.md | 5 +- docs/gallery/armature-bend/index.html | 4 +- .../assets/boolean-exact-volume-hero-640.webp | Bin 0 -> 10752 bytes .../assets/boolean-exact-volume-hero.webp | Bin 0 -> 34418 bytes .../solidify-even-thickness-hero-640.webp | Bin 0 -> 9594 bytes .../assets/solidify-even-thickness-hero.webp | Bin 0 -> 27656 bytes .../gallery/attribute-domain-shear/index.html | 4 +- .../bake-normal-high-to-low/index.html | 4 +- docs/gallery/bmesh-gear/index.html | 4 +- docs/gallery/boolean-exact-volume/index.html | 1134 ++++++++++++++++ docs/gallery/car-mirror-symmetry/index.html | 16 +- docs/gallery/collision-hull-proxy/index.html | 4 +- docs/gallery/color-attribute-wheel/index.html | 4 +- docs/gallery/compositor-glare/index.html | 4 +- .../boolean-exact-volume-contact-sheet.webp | Bin 0 -> 60772 bytes ...solidify-even-thickness-contact-sheet.webp | Bin 0 -> 59912 bytes .../cross-version-property-delete/index.html | 4 +- docs/gallery/curve-bevel-arc/index.html | 4 +- docs/gallery/custom-normals-shade/index.html | 4 +- docs/gallery/damped-track-aim/index.html | 4 +- docs/gallery/degenerate-bevel-weld/index.html | 4 +- docs/gallery/depsgraph-export/index.html | 4 +- docs/gallery/driver-wave/index.html | 4 +- docs/gallery/export-preset-axis/index.html | 4 +- docs/gallery/gltf-export-roundtrip/index.html | 4 +- docs/gallery/gltf-skin-roundtrip/index.html | 4 +- docs/gallery/gn-instance-grid/index.html | 4 +- docs/gallery/gn-modifier-inputs/index.html | 4 +- docs/gallery/gn-sdf-remesh/index.html | 4 +- docs/gallery/gn-sim-fountain/index.html | 4 +- docs/gallery/gn-socket-rename/index.html | 4 +- docs/gallery/gn-zone-iterate/index.html | 4 +- docs/gallery/gp-lineart-contour/index.html | 4 +- docs/gallery/grease-pencil-rosette/index.html | 4 +- docs/gallery/image-pixels-testcard/index.html | 4 +- docs/gallery/index.html | 28 +- docs/gallery/lattice-deform/index.html | 22 +- docs/gallery/light-link-studio/index.html | 4 +- docs/gallery/lightmap-uv-channel/index.html | 4 +- docs/gallery/lod-decimate-chain/index.html | 16 +- docs/gallery/mesh-hygiene-audit/index.html | 4 +- docs/gallery/modular-kit-snap/index.html | 4 +- docs/gallery/parent-inverse-orrery/index.html | 4 +- docs/gallery/png-exr-alpha/index.html | 4 +- docs/gallery/prop-origin-transform/index.html | 4 +- docs/gallery/ray-cast-space/index.html | 4 +- docs/gallery/shader-node-group/index.html | 4 +- docs/gallery/shape-key-blend/index.html | 4 +- .../sky-texture-sun-elevation/index.html | 4 +- docs/gallery/soccer-ball-goldberg/index.html | 4 +- docs/gallery/socket-attach-points/index.html | 4 +- .../solidify-even-thickness/index.html | 1191 +++++++++++++++++ docs/gallery/swatch-grid/index.html | 4 +- docs/gallery/temp-override-join/index.html | 4 +- docs/gallery/text-version-stamp/index.html | 4 +- docs/gallery/triangulate-tangents/index.html | 4 +- docs/gallery/turntable/index.html | 4 +- .../usd-export-evaluation-mode/index.html | 4 +- docs/gallery/uv-layer-grid/index.html | 4 +- docs/gallery/vertex-color-ao/index.html | 4 +- docs/gallery/vertex-weight-limit/index.html | 4 +- docs/gallery/vse-cut-list/index.html | 4 +- docs/gallery/vse-gamma-cross/index.html | 4 +- docs/gallery/wave-displace/index.html | 4 +- docs/new-example-prompt.md | 2 +- examples/boolean-exact-volume/README.md | 81 ++ .../boolean_exact_volume.py | 412 ++++++ examples/boolean-exact-volume/preview.webp | Bin 0 -> 31380 bytes examples/gallery.json | 28 + examples/solidify-even-thickness/README.md | 81 ++ examples/solidify-even-thickness/preview.webp | Bin 0 -> 25668 bytes .../solidify_even_thickness.py | 440 ++++++ tests/smoke/catalog.json | 2 + 77 files changed, 3570 insertions(+), 144 deletions(-) create mode 100644 docs/gallery/assets/boolean-exact-volume-hero-640.webp create mode 100644 docs/gallery/assets/boolean-exact-volume-hero.webp create mode 100644 docs/gallery/assets/solidify-even-thickness-hero-640.webp create mode 100644 docs/gallery/assets/solidify-even-thickness-hero.webp create mode 100644 docs/gallery/boolean-exact-volume/index.html create mode 100644 docs/gallery/contact-sheets/boolean-exact-volume-contact-sheet.webp create mode 100644 docs/gallery/contact-sheets/solidify-even-thickness-contact-sheet.webp create mode 100644 docs/gallery/solidify-even-thickness/index.html create mode 100644 examples/boolean-exact-volume/README.md create mode 100644 examples/boolean-exact-volume/boolean_exact_volume.py create mode 100644 examples/boolean-exact-volume/preview.webp create mode 100644 examples/solidify-even-thickness/README.md create mode 100644 examples/solidify-even-thickness/preview.webp create mode 100644 examples/solidify-even-thickness/solidify_even_thickness.py diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index c0064dfa..3bc8cc69 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -138,7 +138,9 @@ "examples/vse-linear-modifiers", "examples/wave-displace", "examples/ray-cast-space", - "examples/lattice-deform" + "examples/lattice-deform", + "examples/solidify-even-thickness", + "examples/boolean-exact-volume" ], "showcase": [ "showcase/shipping-crate", diff --git a/AGENTS.md b/AGENTS.md index 35a69d2b..9fdfca6c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,7 +20,7 @@ a `.cursor-plugin/plugin.json` manifest so the ecosystem drift checker classifies it as a `cursor-plugin`. This is content the AI loads when the user asks Blender questions or works on Blender add-ons in Cursor or Claude Code. -The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 62 +The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 74 showcase pieces (counts are CI-enforced against README.md) and the manifest). The full inventory tables and per-item purposes live in `CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`; @@ -36,7 +36,7 @@ Blender-Developer-Tools/ rules/.mdc # 9 rule files templates// # 3 starter templates snippets/.py # 27 standalone Python snippets - examples// # 62 runnable smoke-gated examples (+ gallery.json) + examples// # 64 runnable smoke-gated examples (+ gallery.json) examples/gallery_framing.py # shared Layer 1 framing measurement (render path only) showcase// # budget-conformance props (sibling of examples/) showcase/gallery.json # this tree's gallery index; merged into docs/gallery/ diff --git a/CLAUDE.md b/CLAUDE.md index 635383ac..289aab19 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -21,7 +21,7 @@ skills//SKILL.md - AI workflow definitions, 16 total rules/.mdc - Anti-pattern rules, 9 total templates// - Starter projects, 3 total snippets/.py - Standalone code patterns, 27 total -examples// - Runnable smoke-gated examples, 62 total (+ gallery.json) +examples// - Runnable smoke-gated examples, 64 total (+ gallery.json) showcase// - Budget-conformance props, 74 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories) scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json scripts/site/ - Vendored landing-page build (Jinja2); tokens.css is the shared palette @@ -105,12 +105,12 @@ v0.2.0: Principled BSDF material, driver-with-custom-function via `driver_namesp AI asset pipeline track: `decimate_to_budget.py`, `convex_hull_collider.py`, `lod_chain.py` (helper duplicated, not imported), `gltf_draco_export.py`, `export_preset_unity.py`, `export_preset_godot.py`, `export_preset_unreal.py`, `setup_bake_target_image.py`, `bake_normal_high_to_low.py`, `save_baked_image.py`. -## Examples (62) +## Examples (64) Runnable scripts at `examples//`, each asserting a real API contract with deterministic checks (exit non-zero on failure) and optionally rendering a still via `--output`. All of them run headless on Blender 5.2 LTS and 4.5 LTS in `blender-smoke.yml` (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch); -**54 of the 62 ship a render in the site gallery** at `docs/gallery/`. The other +**56 of the 64 ship a render in the site gallery** at `docs/gallery/`. The other eight are **check-only**: they carry no `--output` path, no gallery entry, and no hero asset. The criterion is whether the contract is expressible in pixels. An example is check-only when its witness is a data or state fact that no scene diff --git a/README.md b/README.md index 4ab6cd05..a0bfae10 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@

- 16 skills  •  9 rules  •  3 templates  •  27 snippets  •  62 examples  •  74 showcase pieces + 16 skills  •  9 rules  •  3 templates  •  27 snippets  •  64 examples  •  74 showcase pieces

@@ -37,7 +37,7 @@ ## Overview -This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 62 examples, and 74 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable. +This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 64 examples, and 74 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable. The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly. @@ -75,7 +75,7 @@ blender --background --python examples/bmesh-gear/bmesh_gear.py -- ## Falsifiers -Every one of the 62 examples carries a **falsifier**: a flag that changes the +Every one of the 64 examples carries a **falsifier**: a flag that changes the input so a real assertion fails. It never disables the assertion, skips the check, or short-circuits to an error — it feeds the script something the contract says must not pass, and the same check that guards the happy path @@ -458,7 +458,7 @@ Gallery still is a sky-lit obelisk diptych (8° dusk | 55° midday) so the contr

-Mesh, curves & text — 15 examples +Mesh, curves & text — 17 examples @@ -686,6 +686,36 @@ A 2×2×2 Lattice modifier set to `'KEY_LINEAR'`, with two corners moved through blend of the eight deformed corners, and that the default `'KEY_BSPLINE'` misses it (`--bspline` exits 4). + + + + + + + + +
+Solidify even thickness: two folded zigzag shells on a walnut plinth, their cut ends in orange, the left band pinching thin at every fold and the right staying one width, above brass plaques reading use_even_offset = False and use_even_offset = True + + +### [solidify-even-thickness](examples/solidify-even-thickness/) + +Solidify on a strip folded at 60°, 90° and 120°. Without `use_even_offset`, each fold vertex +moves *t* along the bisector and the wall thins to *t*·cos(φ/2), half at 120°. With it, the +vertex moves *t*/cos(φ/2) and the wall stays exactly *t*. Both closed forms are measured off +the evaluated mesh to 1e-5 (`--no-even` exits 4). + +
+Boolean exact volume: three results on a walnut plinth, each inside thin steel and glowing orange outlines of its two operands - a teal union with a slab grown out of a cube, a brass cube with a notch cut down through its top, and the orange one-metre overlap cube, on a dark studio floor + + +### [boolean-exact-volume](examples/boolean-exact-volume/) + +The Boolean modifier on `solver='EXACT'`, cutting a cube with a slab whose top face is +coplanar with the cube's. Union, difference and intersection measure their closed-form +9, 7 and 1 m³ by the divergence theorem and are closed 2-manifolds. The floating-point +solver, renamed `'FAST'` → `'FLOAT'` in 5.0, gets the union wrong (`--float-solver` exits 3). +
diff --git a/ROADMAP.md b/ROADMAP.md index 63a6227e..6db9755c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -167,8 +167,9 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo - `mathutils.bvhtree` witness — `BVHTree.FromObject` on evaluated geometry: `find_nearest` distances and `overlap` pairs match closed forms on a known arrangement - Curves datablock witness — the modern `bpy.types.Curves` hair API (`add_curves`, `position` attribute, `curve_offset_data`) vs legacy particle hair: point and curve counts closed-form, every root on the emitter surface - Non-Color normal-map witness — an image used as a normal map must be `colorspace_settings.name = 'Non-Color'`; a baked/sampled value round-trips only then, and sRGB shifts it by the transfer curve (a silent shading error AI code ships) -- Solidify even-thickness witness — `use_even_offset` keeps shell thickness constant at sharp corners, while without it the corner thins by 1/cos(θ/2): measured thickness at a known angle matches both closed forms -- Boolean solver witness — EXACT solver union/difference volumes match closed forms on overlapping primitives, and the result is manifold; FAST on coplanar faces is the documented failure case +- ~~Solidify even-thickness witness — `use_even_offset` keeps shell thickness constant at sharp corners, while without it the corner thins by 1/cos(θ/2): measured thickness at a known angle matches both closed forms~~ **SHIPPED** as `examples/solidify-even-thickness/` — Simple-mode Solidify (offset −1) on a strip folded at 60°/90°/120°: the even shell is exactly t thick (copies t/cos(φ/2) along the bisector), the plain shell t·cos(φ/2) = t·sin(θ/2) (0.866t, 0.707t, 0.5t), both to 3.7e-8; the candidate's "thins by 1/cos(θ/2)" was imprecise, since the factor is cos(φ/2) on the bend angle; `--no-even` exits 4 +- ~~Boolean solver witness — EXACT solver union/difference volumes match closed forms on overlapping primitives, and the result is manifold; FAST on coplanar faces is the documented failure case~~ **SHIPPED** as `examples/boolean-exact-volume/` — union/difference/intersection of a cube and a top-coplanar slab through translated, Z-turned operands: 9 / 7 / 1 m³ by the divergence theorem (1e-6 rel), closed 2-manifolds; the floating-point solver (`'FAST'` on 4.5, renamed `'FLOAT'` in 5.0) gives a 7.708 m³ union and `--float-solver` exits 3 +- MANIFOLD Boolean solver witness — the 4.5+ `'MANIFOLD'` solver against EXACT on the same closed-form operands: identical volumes with fewer faces (10 vs 14 on the fully coplanar union), plus its documented refusal of non-manifold input operands (result empty or unchanged) as the falsifier - ~~Lattice deform witness — a 2×2×2 lattice with one displaced point deforms interior verts by exact trilinear weights (`interpolation_type_u/v/w = 'KEY_LINEAR'`)~~ **SHIPPED** as `examples/lattice-deform/` — 602 evaluated verts on the trilinear closed form (5.6e-7) through a translated, non-uniformly scaled lattice; `--bspline` (the default interpolation) exits 4 at 0.2145 - Lattice `use_outside` / outside-vertex witness — verts outside a KEY_LINEAR lattice's volume: assert the documented clamp or extrapolation closed form, and `use_outside` (deform only the outer points) against an interior-only control move - FBX unit-scale witness — `export_scene.fbx` with `apply_unit_scale` / `apply_scale_options` changes exported coordinates by the closed-form ×100 cm factor; re-import restores metres only on the matching option diff --git a/docs/gallery/armature-bend/index.html b/docs/gallery/armature-bend/index.html index 6166426e..c8bb1571 100644 --- a/docs/gallery/armature-bend/index.html +++ b/docs/gallery/armature-bend/index.html @@ -45,7 +45,7 @@

Armature Bend

Rigging end to end in the data API — edit_bones chain construction, name-bound vertex groups with smoothstep blend zones, posing, and depsgraph evaluation — bending a ribbed bellows hose through rest, half, and full curl.

- + @@ -1050,7 +1050,7 @@

LOD Decimate Chain

- +
diff --git a/docs/gallery/assets/boolean-exact-volume-hero-640.webp b/docs/gallery/assets/boolean-exact-volume-hero-640.webp new file mode 100644 index 0000000000000000000000000000000000000000..40c0618d2af72f78c2ae890992e6eeee5de70931 GIT binary patch literal 10752 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 literal 0 HcmV?d00001 diff --git a/docs/gallery/assets/boolean-exact-volume-hero.webp b/docs/gallery/assets/boolean-exact-volume-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..becf6c40ebc000768de575285872f6c1bf09b063 GIT binary patch literal 34418 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 OPywb800AA~0001W+-1oC literal 0 HcmV?d00001 diff --git a/docs/gallery/assets/solidify-even-thickness-hero-640.webp b/docs/gallery/assets/solidify-even-thickness-hero-640.webp new file mode 100644 index 0000000000000000000000000000000000000000..7fbfce03c3aa11eadf4342660ccf7e39e35167c6 GIT binary patch literal 9594 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 literal 0 HcmV?d00001 diff --git a/docs/gallery/assets/solidify-even-thickness-hero.webp b/docs/gallery/assets/solidify-even-thickness-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..0cecca1a42cecc686745a030e3b93e49b6d3494a GIT binary patch literal 27656 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 Domain Shear

POINT vs CORNER color-attribute domains on a shared-vertex fan: CORNER stays exact per face while a naive per-wedge POINT loop shears to the last write at the hub. A striped parasol keeps crisp stripes under CORNER and smears, with one panel turned the wrong color, under POINT; the measured shear equals the palette closed form.

- + @@ -1507,7 +1507,7 @@

Custom Normals Shade< - +

diff --git a/docs/gallery/bake-normal-high-to-low/index.html b/docs/gallery/bake-normal-high-to-low/index.html index e199dcd5..1c475160 100644 --- a/docs/gallery/bake-normal-high-to-low/index.html +++ b/docs/gallery/bake-normal-high-to-low/index.html @@ -45,7 +45,7 @@

Bake Normal High To Low

A collapse-decimated hatch plate receiving a Cycles cage-baked tangent normal map from a ribbed high-poly source

- + @@ -1409,7 +1409,7 @@

Shape Key Blend

- +
diff --git a/docs/gallery/bmesh-gear/index.html b/docs/gallery/bmesh-gear/index.html index d756b011..0e6ddf90 100644 --- a/docs/gallery/bmesh-gear/index.html +++ b/docs/gallery/bmesh-gear/index.html @@ -45,7 +45,7 @@

BMesh Gear

A 14-tooth gear built entirely with bmesh — profile ring, face, extrude — with bm.free() in a try/finally, exactly as the ownership contract demands.

- + @@ -1229,7 +1229,7 @@

Mesh Hygiene Audit

- +
diff --git a/docs/gallery/boolean-exact-volume/index.html b/docs/gallery/boolean-exact-volume/index.html new file mode 100644 index 00000000..a39db438 --- /dev/null +++ b/docs/gallery/boolean-exact-volume/index.html @@ -0,0 +1,1134 @@ + + + + + + Boolean Exact Volume (boolean-exact-volume) — Examples — Blender Developer Tools + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

Boolean Exact Volume

+

examples/boolean-exact-volume/

+

The Boolean modifier on the EXACT solver: union, difference and intersection of a cube and a slab whose top face is coplanar with the cube's, read back through the depsgraph and measured by the divergence theorem.

+
+
+ + +

Rendered headless by the example itself. Select it to enlarge.

+
witnesses EXACT booleans are closed-form even on coplanar faces: through translated, 18°-turned operands the union, difference and intersection measure 9, 7 and 1 m³ (8.999999 / 6.999999 / 1.000000, float32) and are closed 2-manifolds with no loose geometry; the floating-point solver ('FAST' on 4.5, 'FLOAT' on 5.x) gives a 7.708 m³ union and --float-solver exits 3.
+

tags mesh modifiers depsgraph

+
+
blender --background --python examples/boolean-exact-volume/boolean_exact_volume.py --
+ +
+
+

A runnable example that cuts a 2 m cube with a 2 × 1 × 1 m slab using the Boolean modifier on the EXACT solver, in all three operations (UNION, DIFFERENCE, INTERSECT), then proves that each result has the closed-form volume and is a closed 2-manifold. The hard part is deliberate: the slab's top face lies in the cube's top plane, the coplanar case where floating-point booleans go wrong. The results are read through the depsgraph lifetime contract from depsgraph-and-evaluated-data (evaluated_get → to_mesh → to_mesh_clear), and the operands are built with bmesh and freed in try/finally as mesh-editing-and-bmesh requires.

+

What it witnesses: with A = [0,2]³ and B = [1,3] × [0.5,1.5] × [1,2], the overlap is A ∩ B = [1,2] × [0.5,1.5] × [1,2], so the closed forms are V(A ∪ B) = 8 + 2 − 1 = 9, V(A − B) = 8 − 1 = 7 and V(A ∩ B) = 1 cubic metre. Each operand pair sits in an object matrix that is translated and turned 18° about Z, so the modifier has to carry B into A's space. For every result the check:

+
  • sums the signed volume over the evaluated mesh's own triangles (divergence theorem, world space) and requires the closed form to 1e-6 relative (measured 8.999999, 6.999999 and 1.000000 — float32 coordinates through a rotation). A positive volume also means the normals point outward;
  • requires a closed 2-manifold: every edge borders exactly two faces, with no loose verts or edges;
  • requires that the result's volume differs from V(A) by at least 0.5 m³, so the modifier really acted and the witness cannot pass vacuously.
+

The trap it exposes: the floating-point solver is faster and is right in general position, but it mishandles coplanar faces. --float-solver runs the same three operations on it and gets a union of 7.708 m³ against the closed form 9, so check 3 fails with the measured error. That solver was 'FAST' through 4.5 LTS and is 'FLOAT' from 5.0, so a script that hard-codes either name breaks on the other series (fast_solver_id() branches on bpy.app.version). 'EXACT' is the same identifier on 4.5, 5.1 and 5.2.

+

The still shows the three operations side by side on a walnut plinth, each with its two operands drawn as thin outlines (the cube in steel, the coplanar slab in glowing orange): on the left the union in teal glaze with the slab's free end grown out of the cube; in the middle the difference in brass with the slab's notch cut down through the top face; on the right the intersection, the 1 m³ overlap cube, in orange. The outlines are render-only rods built after the check has run, and the cutter objects themselves never render.

+

Run#

+
# Cheap correctness check (no render) — the CI check:
+blender --background --python boolean_exact_volume.py --
+
+# Falsifier: the floating-point solver (FLOAT / FAST) on the coplanar case. Must exit 3.
+blender --background --python boolean_exact_volume.py -- --float-solver
+
+# Also render a still (EEVEE on a GPU host; use --engine cycles on GPU-less hosts):
+blender --background --python boolean_exact_volume.py -- --output boolean.png --engine cycles
+

Version notes#

+

BooleanModifier.solver lists 'FAST', 'EXACT', 'MANIFOLD' on 4.5 LTS and 'FLOAT', 'EXACT', 'MANIFOLD' on 5.1 and 5.2 LTS: the floating-point solver was renamed in 5.0. Measured identically on 4.5.11, 5.1.2 and 5.2.1: EXACT union 8.999999 (12 faces), difference 6.999999 (10 faces), intersection 1.000000 (6 faces), all closed 2-manifolds; --float-solver union 7.708379.

+

Exit codes#

+
CodeMeaning
0Success
1Uncaught exception (FATAL wrapper)
2argparse / usage
3A result's volume is off its closed form (--float-solver lands here)
4A result is not a closed 2-manifold (an edge without exactly two faces, or loose geometry)
5A result's volume is within 0.5 m³ of operand A's (the witness would pass vacuously)
6--output produced no file
10--output framing violation (Layer 1 fill / margin gate, gallery_framing)
+

The blender-smoke workflow runs the check on Blender 5.2 LTS and 4.5 LTS (5.1 on the weekly cron, the needs-5.1 PR label, or manual dispatch). Smoke does not pass --output or --float-solver.

+
+
+

Source

+
+ examples/boolean-exact-volume/boolean_exact_volume.py + 412 lines · View on GitHub → +
+
+
"""EXACT Boolean volumes are closed-form and manifold, even on coplanar faces — a runnable example.
+
+Witnesses the Boolean modifier contract with ``solver = 'EXACT'``. Operand A
+is a 2 m cube and operand B a 2 x 1 x 1 m slab that overlaps A by a 1 m cube
+and whose top face lies in A's top plane: the coplanar case. Both operands
+sit in object matrices that are translated and turned about Z, so the
+modifier has to bring B into A's space. For each of UNION, DIFFERENCE and
+INTERSECT the evaluated mesh (``evaluated_get`` + ``to_mesh`` /
+``to_mesh_clear``) is measured in world space:
+
+- 3: its signed volume, by the divergence theorem over its own triangles,
+  matches the closed form (V(A) + V(B) - V(A n B) = 9, V(A) - V(A n B) = 7,
+  V(A n B) = 1 cubic metres) to 1e-6 relative; positive volume also means
+  the normals point outward;
+- 4: it is a closed 2-manifold: every edge borders exactly two faces, and
+  there are no loose verts or edges;
+- 5: it is not vacuous: each result's volume differs from V(A) by at least
+  0.5 m^3, so the modifier really acted.
+
+``--float-solver`` runs the same three operations on the floating-point
+solver (``'FLOAT'`` on Blender 5.x, ``'FAST'`` on 4.5 LTS, the same solver
+under its older name). On the coplanar top face it returns a wrong union
+(7.708 m^3 against 9, measured identically on 4.5.11, 5.1.2 and 5.2.1), so
+check 3 fails with the measured error. That is the falsifier, and the documented failure case
+the EXACT solver exists to handle.
+
+By default it runs only the correctness check (no render) — the CI smoke
+check. Pass --output to also render a still:
+
+    blender --background --python boolean_exact_volume.py --                     # check only
+    blender --background --python boolean_exact_volume.py -- --float-solver      # must fail
+    blender --background --python boolean_exact_volume.py -- --output b.png      # + render
+"""
+import bpy, bmesh, sys, os, math, argparse
+from mathutils import Vector, Matrix
+
+# Shared Layer 1 framing measurement (render path only) — see gallery_framing.py
+sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir))
+sys.dont_write_bytecode = True  # keep examples/__pycache__ out of the repo tree
+import gallery_framing
+
+# Operands in their shared local frame (metres). B's top face (z = 2) is
+# coplanar with A's top face; the overlap A n B is [1,2] x [0.5,1.5] x [1,2].
+A_LO, A_HI = (0.0, 0.0, 0.0), (2.0, 2.0, 2.0)
+B_LO, B_HI = (1.0, 0.5, 1.0), (3.0, 1.5, 2.0)
+OPS = ('UNION', 'DIFFERENCE', 'INTERSECT')
+SPACING = 4.6           # world X between the three operation sets
+TURN = math.radians(-18.0)  # every set's frame turns about Z
+
+
+def box_volume(lo, hi):
+    return (hi[0] - lo[0]) * (hi[1] - lo[1]) * (hi[2] - lo[2])
+
+
+def overlap(lo1, hi1, lo2, hi2):
+    lo = tuple(max(lo1[k], lo2[k]) for k in range(3))
+    hi = tuple(min(hi1[k], hi2[k]) for k in range(3))
+    return lo, hi
+
+
+V_A = box_volume(A_LO, A_HI)
+V_B = box_volume(B_LO, B_HI)
+V_AB = box_volume(*overlap(A_LO, A_HI, B_LO, B_HI))
+EXPECTED = {'UNION': V_A + V_B - V_AB, 'DIFFERENCE': V_A - V_AB, 'INTERSECT': V_AB}
+REL_TOL = 1e-6
+MIN_CHANGE = 0.5        # m^3; check 5's floor against V(A)
+
+
+def fast_solver_id():
+    """The floating-point solver: 'FAST' through 4.5 LTS, renamed 'FLOAT' in 5.0."""
+    return 'FLOAT' if bpy.app.version >= (5, 0, 0) else 'FAST'
+
+
+def box_mesh(name, lo, hi):
+    me = bpy.data.meshes.new(name)
+    bm = bmesh.new()
+    try:
+        res = bmesh.ops.create_cube(bm, size=1.0)
+        for vert in res["verts"]:
+            vert.co = Vector(tuple(lo[k] + (vert.co[k] + 0.5) * (hi[k] - lo[k]) for k in range(3)))
+        bm.to_mesh(me)
+    finally:
+        bm.free()
+    return me
+
+
+def frame(i):
+    """World matrix of operation set i: translated along X, turned about Z,
+    with the operands' local frame centred on A's footprint."""
+    centre = Matrix.Translation((-(A_HI[0] - A_LO[0]) / 2 - 0.5, -(A_HI[1] - A_LO[1]) / 2, 0.0))
+    return (Matrix.Translation(((i - 1) * SPACING, 0.0, 0.0))
+            @ Matrix.Rotation(TURN, 4, 'Z') @ centre)
+
+
+def build_scene(float_solver=False):
+    bpy.ops.wm.read_factory_settings(use_empty=True)
+    scene = bpy.context.scene
+    solver = fast_solver_id() if float_solver else 'EXACT'
+    results = {}
+    cutters = {}
+    for i, op in enumerate(OPS):
+        a = bpy.data.objects.new(f"{op.title()}Result", box_mesh(f"{op.title()}Result", A_LO, A_HI))
+        b = bpy.data.objects.new(f"{op.title()}Cutter", box_mesh(f"{op.title()}Cutter", B_LO, B_HI))
+        a.matrix_world = frame(i)
+        b.matrix_world = frame(i)
+        b.hide_render = True
+        b.display_type = 'WIRE'
+        scene.collection.objects.link(a)
+        scene.collection.objects.link(b)
+        mod = a.modifiers.new("Boolean", 'BOOLEAN')
+        mod.operation = op
+        mod.solver = solver
+        mod.object = b
+        results[op] = a
+        cutters[op] = b
+    return results, cutters, solver
+
+
+def measure(obj):
+    """World-space signed volume (divergence theorem over fan triangles of
+    each polygon) plus manifold counts, from the evaluated mesh."""
+    deps = bpy.context.evaluated_depsgraph_get()
+    ev = obj.evaluated_get(deps)
+    me = ev.to_mesh()
+    try:
+        mw = ev.matrix_world
+        co = [mw @ v.co for v in me.vertices]
+        vol = 0.0
+        for p in me.polygons:
+            idx = list(p.vertices)
+            v0 = co[idx[0]]
+            for j in range(1, len(idx) - 1):
+                vol += v0.dot(co[idx[j]].cross(co[idx[j + 1]])) / 6.0
+        bm = bmesh.new()
+        try:
+            bm.from_mesh(me)
+            bad_edges = sum(1 for e in bm.edges if len(e.link_faces) != 2)
+            loose_verts = sum(1 for v in bm.verts if not v.link_faces)
+            loose_edges = sum(1 for e in bm.edges if not e.link_faces)
+        finally:
+            bm.free()
+        return vol, bad_edges, loose_verts, loose_edges, len(me.polygons)
+    finally:
+        ev.to_mesh_clear()
+
+
+def check(results, solver):
+    bpy.context.view_layer.update()
+    m = {op: measure(results[op]) for op in OPS}
+
+    # 3: volumes on the closed forms (positive => outward normals)
+    for op in OPS:
+        vol, exp = m[op][0], EXPECTED[op]
+        if abs(vol - exp) > REL_TOL * exp:
+            print(f"ERROR: {op} on solver {solver!r}: volume {vol:.6f} m^3, closed form "
+                  f"{exp:.6f} (error {vol - exp:+.6f})", file=sys.stderr)
+            return 3
+
+    # 4: closed 2-manifold, no loose geometry
+    for op in OPS:
+        _, bad, lv, le, _ = m[op]
+        if bad or lv or le:
+            print(f"ERROR: {op} on solver {solver!r} is not a closed manifold: {bad} edges "
+                  f"without exactly two faces, {lv} loose verts, {le} loose edges",
+                  file=sys.stderr)
+            return 4
+
+    # 5: every result really differs from operand A
+    for op in OPS:
+        if abs(m[op][0] - V_A) < MIN_CHANGE:
+            print(f"ERROR: {op} volume {m[op][0]:.4f} within {MIN_CHANGE} of V(A) = {V_A}",
+                  file=sys.stderr)
+            return 5
+
+    parts = ", ".join(f"{op} {m[op][0]:.6f} (closed form {EXPECTED[op]:g}, {m[op][4]} faces)"
+                      for op in OPS)
+    print(f"solver {solver!r}, coplanar top face: {parts}; all closed 2-manifold, "
+          f"0 loose verts/edges")
+    return 0
+
+
+def eevee_engine_id():
+    return 'BLENDER_EEVEE' if bpy.app.version >= (5, 0, 0) else 'BLENDER_EEVEE_NEXT'
+
+
+# ---------------------------------------------------------------------------
+# Render staging only (runs after the check; never part of it)
+# ---------------------------------------------------------------------------
+
+def principled(name, base, rough, metal=0.0, noise=None, coat=0.0, emit=None):
+    mat = bpy.data.materials.new(name)
+    mat.use_nodes = True
+    nt = mat.node_tree
+    b = nt.nodes["Principled BSDF"]
+    b.inputs["Base Color"].default_value = (*base, 1.0)
+    b.inputs["Roughness"].default_value = rough
+    b.inputs["Metallic"].default_value = metal
+    if coat:
+        b.inputs["Coat Weight"].default_value = coat
+    if emit:
+        b.inputs["Emission Color"].default_value = (*emit[0], 1.0)
+        b.inputs["Emission Strength"].default_value = emit[1]
+    if noise:
+        tex = nt.nodes.new("ShaderNodeTexNoise")
+        tex.inputs["Scale"].default_value = noise
+        tex.inputs["Detail"].default_value = 8.0
+        mr = nt.nodes.new("ShaderNodeMapRange")
+        mr.inputs["To Min"].default_value = max(rough - 0.08, 0.0)
+        mr.inputs["To Max"].default_value = rough + 0.14
+        nt.links.new(tex.outputs["Fac"], mr.inputs["Value"])
+        nt.links.new(mr.outputs["Result"], b.inputs["Roughness"])
+    return mat
+
+
+def tube_mesh(name, segments, radius, sides=10):
+    """Render-only rods along line segments (the operand outlines)."""
+    me = bpy.data.meshes.new(name)
+    bm = bmesh.new()
+    try:
+        for a, b in segments:
+            axis = b - a
+            res = bmesh.ops.create_cone(bm, cap_ends=True, segments=sides,
+                                        radius1=radius, radius2=radius, depth=axis.length)
+            rot = Vector((0, 0, 1)).rotation_difference(axis.normalized()).to_matrix()
+            mid = (a + b) / 2
+            for vert in res["verts"]:
+                vert.co = rot @ vert.co + mid
+        bmesh.ops.recalc_face_normals(bm, faces=bm.faces)
+        bm.to_mesh(me)
+    finally:
+        bm.free()
+    for p in me.polygons:
+        p.use_smooth = True
+    return me
+
+
+def box_edges(lo, hi, mw):
+    c = {(i, j, k): mw @ Vector((hi[0] if i else lo[0], hi[1] if j else lo[1], hi[2] if k else lo[2]))
+         for i in (0, 1) for j in (0, 1) for k in (0, 1)}
+    edges = []
+    for i in (0, 1):
+        for j in (0, 1):
+            edges.append((c[(i, j, 0)], c[(i, j, 1)]))
+            edges.append((c[(i, 0, j)], c[(i, 1, j)]))
+            edges.append((c[(0, i, j)], c[(1, i, j)]))
+    return edges
+
+
+def render_still(results, cutters, path, engine):
+    scene = bpy.context.scene
+    glazes = {
+        'UNION': principled("UnionGlaze", (0.07, 0.30, 0.34), 0.28, coat=0.5),
+        'DIFFERENCE': principled("DifferenceBrass", (0.86, 0.56, 0.26), 0.30, metal=1.0, noise=60.0),
+        'INTERSECT': principled("IntersectOrange", (0.95, 0.36, 0.05), 0.32, coat=0.4),
+    }
+    steel = principled("OperandA", (0.62, 0.64, 0.68), 0.25, metal=1.0)
+    cutter_mat = principled("OperandB", (1.0, 0.45, 0.06), 0.35,
+                            emit=((1.0, 0.45, 0.06), 1.2))
+    walnut = principled("Walnut", (0.13, 0.055, 0.025), 0.45, noise=40.0, coat=0.4)
+
+    parts = []
+
+    def add(name, me, mat):
+        me.materials.append(mat)
+        ob = bpy.data.objects.new(name, me)
+        scene.collection.objects.link(ob)
+        parts.append(ob)
+        return ob
+
+    for i, op in enumerate(OPS):
+        res = results[op]
+        res.data.materials.append(glazes[op])
+        mw = frame(i)
+        # thin outlines of both operands: A in steel, the coplanar cutter B in orange
+        add(f"{op.title()}OutlineA", tube_mesh(f"{op.title()}OutlineA",
+                                               box_edges(A_LO, A_HI, mw), 0.016), steel)
+        add(f"{op.title()}OutlineB", tube_mesh(f"{op.title()}OutlineB",
+                                               box_edges(B_LO, B_HI, mw), 0.020), cutter_mat)
+
+    half_x = SPACING + 2.2
+    plinth = add("Plinth", bpy.data.meshes.new("Plinth"), walnut)
+    bm = bmesh.new()
+    try:
+        res = bmesh.ops.create_cube(bm, size=1.0)
+        lo, hi = (-half_x, -2.3, -0.16), (half_x, 2.3, -0.004)
+        for vert in res["verts"]:
+            vert.co = Vector(tuple(lo[k] + (vert.co[k] + 0.5) * (hi[k] - lo[k]) for k in range(3)))
+        bm.to_mesh(plinth.data)
+    finally:
+        bm.free()
+    bev = plinth.modifiers.new("Chamfer", 'BEVEL')
+    bev.width = 0.03
+    bev.segments = 2
+
+    floor_me = bpy.data.meshes.new("Floor")
+    bm = bmesh.new()
+    try:
+        bmesh.ops.create_grid(bm, x_segments=1, y_segments=1, size=30.0)
+        bm.to_mesh(floor_me)
+    finally:
+        bm.free()
+    fmat = bpy.data.materials.new("Studio")
+    fmat.use_nodes = True
+    fb = fmat.node_tree.nodes["Principled BSDF"]
+    fb.inputs["Base Color"].default_value = (0.03, 0.032, 0.037, 1.0)
+    fb.inputs["Roughness"].default_value = 0.7
+    floor_me.materials.append(fmat)
+    floor = bpy.data.objects.new("Floor", floor_me)
+    floor.location = (0.0, 0.0, -0.16)
+    scene.collection.objects.link(floor)
+    wall = bpy.data.objects.new("Wall", floor_me.copy())
+    wall.location = (0.0, 8.0, 0.0)
+    wall.rotation_euler = (math.radians(90), 0.0, 0.0)
+    scene.collection.objects.link(wall)
+
+    world = bpy.data.worlds.new("World")
+    world.use_nodes = True
+    world.node_tree.nodes["Background"].inputs["Color"].default_value = (0.02, 0.021, 0.025, 1.0)
+    scene.world = world
+
+    centre = Vector((0.0, 0.0, 1.0))
+
+    def light(name, loc, energy, size, col, aim):
+        ld = bpy.data.lights.new(name, 'AREA')
+        ld.energy = energy; ld.size = size; ld.color = col
+        ob = bpy.data.objects.new(name, ld)
+        ob.location = loc
+        ob.rotation_euler = (Vector(aim) - Vector(loc)).to_track_quat('-Z', 'Y').to_euler()
+        scene.collection.objects.link(ob)
+
+    light("Key", (-5.0, -6.0, 7.5), 700.0, 5.0, (1.0, 0.96, 0.9), centre)
+    light("Fill", (7.0, -5.5, 3.0), 140.0, 8.0, (0.75, 0.85, 1.0), centre)
+    light("Rim", (2.0, 5.0, 7.0), 420.0, 4.0, (0.6, 0.78, 1.0), centre)
+    light("Wedge", (3.0, 5.0, 3.0), 480.0, 6.0, (1.0, 0.76, 0.5), (5.0, 8.0, 1.0))
+
+    cam_data = bpy.data.cameras.new("Cam")
+    cam_data.lens = 50.0
+    cam = bpy.data.objects.new("Cam", cam_data)
+    cam.location = (3.2, -20.9, 11.0)
+    scene.collection.objects.link(cam)
+    aim = bpy.data.objects.new("Aim", None)
+    aim.location = centre + Vector((0.0, 0.0, -0.1))
+    scene.collection.objects.link(aim)
+    tr = cam.constraints.new('TRACK_TO')
+    tr.target = aim
+    tr.track_axis = 'TRACK_NEGATIVE_Z'
+    tr.up_axis = 'UP_Y'
+    scene.camera = cam
+
+    scene.render.engine = 'CYCLES' if engine == 'cycles' else eevee_engine_id()
+    if engine == 'cycles':
+        scene.cycles.samples = 48
+    else:
+        try:
+            scene.eevee.taa_render_samples = 64
+        except AttributeError:
+            pass
+    scene.render.resolution_x = 1280
+    scene.render.resolution_y = 720
+    scene.render.image_settings.file_format = 'PNG'
+    scene.render.filepath = path
+    # AgX would wash the glazes and the orange cutter toward pastel (docs/VISUAL-STYLE.md)
+    scene.view_settings.view_transform = 'Standard'
+    bpy.context.view_layer.update()
+    # Layer 1 framing gate (silhouette matte) — exit 10 on violation, before
+    # the beauty render so a defective composition ships no artifact
+    shown = list(results.values()) + parts
+    fcode = gallery_framing.check_framing(
+        scene, cam,
+        hero=shown,
+        elements=shown,
+        stage=[floor, wall],
+    )
+    if fcode:
+        return fcode
+    bpy.ops.render.render(write_still=True)
+    if not (os.path.exists(path) and os.path.getsize(path) > 0):
+        print("ERROR: render produced no file", file=sys.stderr)
+        return 6
+    return 0
+
+
+def main():
+    argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
+    p = argparse.ArgumentParser()
+    p.add_argument("--output", default=None, help="optional: render a still PNG here")
+    p.add_argument("--engine", default="eevee", choices=("eevee", "cycles"),
+                   help="render engine for --output (cycles for GPU-less hosts)")
+    p.add_argument("--float-solver", action="store_true",
+                   help="use the floating-point solver (FLOAT / FAST) on the coplanar case (must fail)")
+    args = p.parse_args(argv)
+
+    results, cutters, solver = build_scene(float_solver=args.float_solver)
+    code = check(results, solver)
+    if code:
+        return code
+
+    if args.output:
+        rcode = render_still(results, cutters, os.path.abspath(args.output), args.engine)
+        if rcode:
+            return rcode
+        print(f"rendered still {args.output}")
+
+    print("boolean-exact-volume OK")
+    return 0
+
+
+if __name__ == "__main__":
+    try:
+        sys.exit(main())
+    except Exception as e:
+        import traceback; traceback.print_exc(); print(f"FATAL: {e}", file=sys.stderr); sys.exit(1)
+
+
+
+ + +
+ + + Three results on a walnut plinth, each inside steel and orange operand outlines: a teal union with a slab grown out of a cube, a brass cube notched through its top, and an orange overlap cube. + + +

+ + + diff --git a/docs/gallery/car-mirror-symmetry/index.html b/docs/gallery/car-mirror-symmetry/index.html index 3084e15b..abc4fb02 100644 --- a/docs/gallery/car-mirror-symmetry/index.html +++ b/docs/gallery/car-mirror-symmetry/index.html @@ -45,7 +45,7 @@

Car Mirror Symmetry

A stylized hatchback lofted as one half (52 stations, 13-point rings) and completed by the Mirror modifier, evaluated through the depsgraph. Wheels, lamps, grille, door mirrors and handles mirror about object origins parked on the symmetry plane; the grille is authored as a half and welded on it.

- + @@ -1892,25 +1892,25 @@

Lattice Deform

- A game controller's sparse control cage in orange wire and vertex beads beside the smooth subdivided cobalt controller with sticks and colored buttons, on a dark studio floor. + Two folded zigzag shells on a walnut plinth with orange cut ends: the left band pinching thin at each fold, the right one even width, above brass plaques reading use_even_offset False and True.
-

Depsgraph Export

-

The depsgraph lifetime contract — evaluated_get().to_mesh() paired with to_mesh_clear() — measured against an OBJ export of the same object.

+

Solidify Even Thickness

+

Solidify's use_even_offset on a folded strip: off, each fold vertex moves t along the bisector of its face normals and the shell thins to t*cos(phi/2); on, it moves t/cos(phi/2) and stays exactly t thick at 60, 90 and 120 degree folds.

- Three spiral staircases of one design, with oak treads, teal posts and brass rails, rising left to right from seven steps to seventeen to twenty-seven. + Three results on a walnut plinth, each inside steel and orange operand outlines: a teal union with a slab grown out of a cube, a brass cube notched through its top, and an orange overlap cube.
-

GN Modifier Inputs

-

Per-modifier Geometry Nodes Float inputs on a shared tree — 4.5/5.1 write mod[identifier], 5.2 writes mod.properties.inputs.Socket_1.value.

+

Boolean Exact Volume

+

The Boolean modifier on the EXACT solver: union, difference and intersection of a cube and a slab whose top face is coplanar with the cube's, read back through the depsgraph and measured by the divergence theorem.

- +
diff --git a/docs/gallery/collision-hull-proxy/index.html b/docs/gallery/collision-hull-proxy/index.html index 45db1ffd..cd109236 100644 --- a/docs/gallery/collision-hull-proxy/index.html +++ b/docs/gallery/collision-hull-proxy/index.html @@ -45,7 +45,7 @@

Collision Hull Proxy

A fire hydrant street prop inside its compound collision shell: four convex pieces hulled by bmesh.ops.convex_hull from a coarse inflated cage. The dense render mesh is never hulled - its hull would measure 380 faces, over the 255-face per-piece engine budget. Closed-form plane tests prove containment, convexity, watertightness, outward winding, and Euler characteristic 2 per piece.

- + @@ -1169,7 +1169,7 @@

Mesh Hygiene Audit

- +
diff --git a/docs/gallery/color-attribute-wheel/index.html b/docs/gallery/color-attribute-wheel/index.html index 14b5bb2d..298893db 100644 --- a/docs/gallery/color-attribute-wheel/index.html +++ b/docs/gallery/color-attribute-wheel/index.html @@ -45,7 +45,7 @@

Color Attribute Wheel

The modern color-attributes API — mesh.color_attributes.new() on the CORNER domain, filled by expanding per-vertex HSV across face corners with foreach_get/foreach_set, then wired into a shader Attribute node.

- + @@ -1039,7 +1039,7 @@

Attribute Domain Shear< - +

diff --git a/docs/gallery/compositor-glare/index.html b/docs/gallery/compositor-glare/index.html index 73ad9cf9..f87d61cc 100644 --- a/docs/gallery/compositor-glare/index.html +++ b/docs/gallery/compositor-glare/index.html @@ -45,7 +45,7 @@

Compositor Glare

Bloom where it actually lives — a compositor Glare (Fog Glow) node fed by Render Layers, wired via scene.compositing_node_group on 5.x and scene.node_tree on 4.x, with the Glare node's legacy properties vs 5.x menu sockets.

- + @@ -874,7 +874,7 @@

Image Pixels Testcard - +

diff --git a/docs/gallery/contact-sheets/boolean-exact-volume-contact-sheet.webp b/docs/gallery/contact-sheets/boolean-exact-volume-contact-sheet.webp new file mode 100644 index 0000000000000000000000000000000000000000..b7a6ccd75d889f5ecba1302b4440e7a147a112d8 GIT binary patch literal 60772 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�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 z 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 F{|7sfqxk>; literal 0 HcmV?d00001 diff --git a/docs/gallery/contact-sheets/solidify-even-thickness-contact-sheet.webp b/docs/gallery/contact-sheets/solidify-even-thickness-contact-sheet.webp new file mode 100644 index 0000000000000000000000000000000000000000..9d3a00eee831ba7c1f55e05bcef47f74cfa0f03b GIT binary patch literal 59912 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