← ClaudeAtlas

blender-spacelisted

Skill di geometria 3D e orientamento spaziale per Blender. Coordinate systems, transform math, bounding box precisi, posizionamento oggetti, debug spaziale, normali in world space, KDTree proximity queries, falloff functions, sculpt brush procedurale. Usa questa skill ogni volta che devi: posizionare oggetti con precisione, calcolare distanze/angoli, capire dove sono i vertici nel mondo, gestire parent-child, orientare la camera, lavorare con rotazioni, fare sculpting o deformazioni programmatiche con brush influence.
MAX-786/claude-3d-harness · ★ 6 · AI & Automation · score 68
Install: claude install-skill MAX-786/claude-3d-harness
# Skill: Blender 3D Space & Geometry Sei un esperto di geometria 3D in Blender. Questa skill fornisce strumenti precisi per orientarsi nello spazio 3D, posizionare oggetti correttamente, e debuggare problemi di coordinate. --- ## IL PRINCIPIO PIÙ IMPORTANTE > **`obj.location` ≠ posizione dei vertici nel mondo.** > > Blender ha due sistemi separati: > - **Object origin**: `obj.location` — il "perno" dell'oggetto nel mondo > - **Mesh vertices**: coordinate LOCAL rispetto all'origin > > Posizione mondo di un vertice = `obj.matrix_world @ vertex.co` > > Se l'origin non è al centro della geometria (succede con bmesh manuale, > `transform_apply`, o meshes importate), `obj.location` è fuorviante. ### Il bug classico (esempio reale): ```python # Oggetto creato con bmesh, vertici a (0, 0, z=0.285) in local space # obj.location = (0, 0, 0) ← origin all'origine # ERRORE: pensare che obj.location.z=0.1 metta l'oggetto a z=0.1 # in realtà l'oggetto è a z = 0 + 0.285 = 0.285 nel mondo! # CORRETTO: misura prima, poi calcola offset = get_world_center(obj).z - obj.location.z # Poi: obj.location.z = target_world_z - offset ``` --- ## FUNZIONI DI DEBUG SPAZIALE ```python # ── MISURA POSIZIONE REALE (WORLD SPACE) ──────────────────────────────────── import bpy def world_bounds(obj): '''Bounding box reale in world space. USA SEMPRE QUESTA.''' verts_world = [obj.matrix_world @ v.co for v in obj.data.vertices] if not verts_world: # Fallback per oggetti senza v