blender-assembly
Blender Assembly Skill
This skill prevents geometry errors when building 3D models in Blender via MCP, and enforces a detail pass so models come out looking like objects, not boxes. The recurring failure modes it addresses:
- Cube size math —
primitive_cube_add(size=1)creates vertices at ±0.5, soscale=0.4gives half-extent 0.2, not 0.4. This silently halves every dimension, misplacing all connected parts. - Euler rotation on cylinders — rotating a cylinder to point in a direction using Euler angles frequently points it along the wrong axis due to XYZ rotation order.
- Invisible gaps — parts placed "near" each other with no geometric overlap look exploded when rendered. Even a 5mm gap is visible at model scale.
- Bare-box output — nothing in the workflow asked for detail, so none was built. Phase 1.5 and Rules 6–11 fix this.
- Broken meshes — booleans and joins leave non-manifold edges, duplicate verts, and degenerate faces that bounding-box checks never see. The integrity gate (Phase 3) fixes this.
Helper library
All helper functions live in references/blender_helpers.py, versioned. At session start, read that file and execute it whole via the Blender MCP instead of re-pasting individual functions — this eliminates drift between copies. A new helper enters the library only after surviving its fixtures (library-learning convention). The v2 helpers are marked PENDING FIXTURES in the file header until validated.
Routing: build it, or generate it?
This skill covers parametric hard-surface modeling — anything definable by dimensions, joints, and repeated features (furniture, machines, crates, frames, pipes, electrical devices, weapons). For organic or densely decorative geometry (statues, creatures, irregular props, sculpted surfaces), hand-building in Blender is the expensive path: route to hunyuan3d-local (canonical image→3D ladder: local → fal → paid) instead (AI base mesh → optimize/remesh → this pipeline for cleanup and export). Decide before writing any geometry code; a half-sculpted bmesh blob is the worst of both worlds.