π WorkflowΒΆ
Once you have a running solver and a live connection (see Connections if you havenβt set that up yet), the day-to-day loop is:
Organize your scene into object groups: Solid, Shell, Rod, or Static.
Assign material parameters per group (density, Youngβs modulus, Poisson ratio, friction, bend, shrink, strain limit, and so on).
Set scene parameters: gravity, wind, time step, frame count, air density, air friction.
Add pins and attach operations: Move By, Spin, Scale, Torque, or keyframed Embedded Move.
(Optional) Add invisible colliders: infinite walls or parametric spheres (including bowl / inverted sphere variants).
(Optional) Snap and merge overlapping meshes to stitch them across group boundaries.
Transfer geometry and parameters to the solver, then Build.
Run the simulation and Fetch frames back as PC2 animation on your Blender objects.
(Optional) Bake the fetched animation onto the objects as standard Blender keyframes, so the scene plays back without the add-on.
The same nine steps, laid out by phase. Steps 1 through 6 are scene setup in Blender, 7 and 8 are the solve on the GPU, and 9 hands the result off as self-contained Blender animation. In practice you bounce between Run and the material / scene parameters many times before baking.ΒΆ
Step 8 can also happen entirely from JupyterLab, including with Blender closed. See JupyterLab for the full export β simulate β relaunch Blender β fetch loop.
Coordinate SystemΒΆ
Blender is Z-up; the solver is Y-up. The add-on converts in both directions
automatically. A Blender vector (x, y, z) is sent to the solver as
[x, z, -y], and results are flipped back on fetch. You only need to think
about this when you read raw solver output. Everything visible in Blender
(pin centers, gravity arrows, overlay previews, baked animation) is already
in Z-up.
Both frames are right-handed. On the encode side, Blenderβs Y (into
the scene) becomes the solverβs -Z, and Blenderβs Z (up) becomes the
solverβs Y. On fetch the conversion runs in reverse, so everything
read back on Blender meshes, pins, and overlays stays in Z-up.ΒΆ
Note
The solver stores vertices in untranslated object space (rotation + scale only) with object translation tracked separately. Any absolute coordinate you supply through the Python API (pin centers, operation pivots, collider positions) is transformed into that space at encode time. You do not need to pre-subtract the origin.
Where Parameters LiveΒΆ
Each sidebar panel maps to one chapter below:
Panel |
Whatβs there |
Docs |
|---|---|---|
Scene Configuration |
Global sim params: gravity, time step, frame count, CG tolerances, air density / friction, auto-save. |
|
Scene Configuration β Dynamic Parameters |
Keyframed gravity / wind / air density / air friction / vertex air damping. |
|
Dynamics Groups |
Per-group type, material model, densities, moduli, contact gap, overlay color. |
|
Dynamics Groups β Pin Vertex Groups |
Pins and their list of operations (Move By / Spin / Scale / Torque / Embedded Move). |
|
Dynamics Groups β Transform (Static only) |
Per-object Move By / Spin / Scale ops, or Blender transform keyframes. |
|
Scene Configuration β Invisible Colliders |
Walls and spheres with keyframed position / radius. |
|
Snap and Merge |
Snap/merge pairs with optional stitch stiffness. |
Note
Everything reachable from the Scene Configuration panel is also
reachable from a fluent Blender Python API. See the
Blender Python API reference for the
full surface; each chapter below also ends with a short
## Blender Python API section covering the calls relevant to that
chapter.
Blender Python APIΒΆ
The same workflow is available from Python. Import solver and read or
write through solver.param, solver.create_group(...),
solver.add_wall(...), and friends:
from zozo_contact_solver import solver
solver.param.gravity = (0, 0, -9.8)
cloth = solver.create_group("Cloth", "SHELL")
cloth.add("Shirt")
Under the hood
All add-on data hangs off scene.zozo_contact_solver:
Lives on |
Whatβs there |
|---|---|
|
Global sim params: gravity, dt, frame count, CG tolerances, air density/friction, auto-save. |
|
Keyframed gravity / wind / air density / air friction / vertex air damp. |
|
Per-group type, material model, densities, moduli, contact gap, overlay color. |
|
Pins and their list of operations (MOVE_BY / SPIN / SCALE / TORQUE / EMBEDDED_MOVE). |
|
Walls and spheres with keyframed position / radius. |
|
Snap/merge pairs with optional stitch stiffness. |