Skip to content
Voro
  1. Geometry
  2. Solvers

Soft Body

Soft Body simulates deforming volumes with a finite element solve. Co-rotational and Neo-Hookean material models control the elastic response. Multiple bodies can share the solver, with optional world, self and inter-body collisions.

Place Soft Body in the Geometry view, under Solvers. For a first test without authored input, reduce Demo Bodies to 1, keep Demo Resolution at 3 and choose World Only in Collision Mode. Collision Mode starts off, so the enabled floor alone does not make the body collide.

For your own object, connect vertices carrying tetrahedral data to the geometry input. A surface mesh alone does not define the volume. The Tet attribute stores groups of four vertex indices; bodyid separates bodies and pin values above 0.5 fix vertices. Prepare this data upstream.

Connections accepts sdf obstacles, xforms, velocity and contacts. The solver publishes vertex P, v, id and Cd, plus a contact set when enabled.

Use Attribute Material reads youngs, poissons and density attributes, taking each body’s values from its representative vertex. Without those attributes, the parameter values apply. Live Wire Surface can publish boundary-triangle topology with the deformed vertices; it is off by default and adds work.

  • Dt Override at 0 follows host timing. Start with two Substeps and six Iterations. Simulate pauses advancement; Reset rebuilds the starting state.
  • Young’s Modulus controls stiffness. Begin at 250000 and lower it for a softer response. Poisson Ratio starts at 0.35 and controls the material’s lateral response to compression.
  • Linear Damping, Elasticity Damping and Velocity Scale affect settling. Keep the starting values while checking the volume and pins.
  • Collision Mode selects Off, World Only, or World + Self + Inter. Contact Radius, Collision Iterations, Friction and Contact Damping tune the active collision mode.
  • Velocity Field Coupling starts at 0. Publish Contact Set and Couple Weight control contact exchange once resources are connected.
  • Max Vertices, Max Tets and Max Bodies are capacity limits. With Auto-Rebuild off, structural edits wait for Rebuild; check Status before expecting them to appear.

Check for DEMO FALLBACK in Status when authored input does not produce your intended body. Valid tetrahedra are required; the solver does not tetrahedralize a polygon shell.

Self and inter-body collisions, large tetrahedral counts and Live Wire Surface increase the work per step. Establish one body with world collisions before adding a pile.

Inputs

  • geometry points
  • sdf sdf collider
  • xforms transforms
  • velocity velocity field
  • contacts contacts

Outputs

  • P points
  • v points
  • id points
  • Cd points
  • contact contacts

Soft Body

Auto-Rebuild on Build Params (Autorebuild) Toggle op('soft').par.Autorebuild
Default:
On
Options:
Off, On
Rebuild (Rebuildnow) Pulse op('soft').par.Rebuildnow
Default:
None
Simulate (Simulate) Toggle op('soft').par.Simulate
Default:
On
Options:
Off, On
Reset (Resetsolver) Pulse op('soft').par.Resetsolver
Default:
None

Solver

Solve (Hdrsolve) Str op('soft').par.Hdrsolve

Read only.

Default:
"" (Empty String)
Dt Override (0=host) (Dt) Float op('soft').par.Dt
Default:
0
Range:
0 to 0.5
Substeps (Substeps) Int op('soft').par.Substeps
Default:
2
Range:
1 to 16
Iterations (Iterations) Int op('soft').par.Iterations
Default:
6
Range:
1 to 64
Gravity (Gravityx) Float op('soft').par.Gravityx
Default:
0
Gravity Y (Gravityy) Float op('soft').par.Gravityy
Default:
-9.81
Gravity Z (Gravityz) Float op('soft').par.Gravityz
Default:
0
Linear Damping (Lineardamping) Float op('soft').par.Lineardamping
Default:
0.02
Range:
0 to 1
Velocity Scale (Velocityscale) Float op('soft').par.Velocityscale
Default:
0.85
Range:
0 to 1
Max Linear Velocity (Maxlinearvelocity) Float op('soft').par.Maxlinearvelocity
Default:
200
Range:
0.1 to 1000
Max Vertices (cap) (Maxvertices) Int op('soft').par.Maxvertices
Default:
200000
Range:
4096 to 4000000
Max Tets (cap) (Maxtets) Int op('soft').par.Maxtets
Default:
800000
Range:
8192 to 8000000
Max Bodies (cap) (Maxbodies) Int op('soft').par.Maxbodies
Default:
2048
Range:
1 to 100000

Material

Material (Hdrmat) Str op('soft').par.Hdrmat

Read only.

Default:
"" (Empty String)
Material Model (Materialmodel) Menu op('soft').par.Materialmodel
Default:
0
Options:
Co-rotational, Neo-Hookean
Use Attribute Material (Useattribmaterial) Toggle op('soft').par.Useattribmaterial
Default:
On
Options:
Off, On
Young's Modulus (Youngs) Float op('soft').par.Youngs
Default:
250000
Range:
1 to 100000000
Poisson Ratio (Poissons) Float op('soft').par.Poissons
Default:
0.35
Range:
0.01 to 0.49
Density (Density) Float op('soft').par.Density
Default:
1
Range:
0.000001 to 10000
Elasticity Damping (Materialdamping) Float op('soft').par.Materialdamping
Default:
0
Range:
0 to 1000

Collision

Collision (Hdrcoll) Str op('soft').par.Hdrcoll

Read only.

Default:
"" (Empty String)
Collision Mode (Collisionmode) Menu op('soft').par.Collisionmode
Default:
0
Options:
Off, World Only, World + Self + Inter
Collision Iterations (Collisioniters) Int op('soft').par.Collisioniters
Default:
3
Range:
1 to 16
Contact Radius (Contactradius) Float op('soft').par.Contactradius
Default:
0.05
Range:
0 to 1
Contact Stiffness (Contactstiffness) Float op('soft').par.Contactstiffness
Default:
1
Range:
0 to 1
Contact Damping (Contactdamping) Float op('soft').par.Contactdamping
Default:
0.6
Range:
0 to 1
Friction (Friction) Float op('soft').par.Friction
Default:
0.3
Range:
0 to 1
Self Collision (Selfcollision) Toggle op('soft').par.Selfcollision
Default:
On
Options:
Off, On
Floor Enabled (Floorenabled) Toggle op('soft').par.Floorenabled
Default:
On
Options:
Off, On
Floor Y (Floory) Float op('soft').par.Floory
Default:
0
Range:
-100 to 100

Coupling

Coupling (Hdrcouple) Str op('soft').par.Hdrcouple

Read only.

Default:
"" (Empty String)
Publish Contact Set (Publishcontacts) Toggle op('soft').par.Publishcontacts
Default:
On
Options:
Off, On
Couple Weight (Coupleweight) Float op('soft').par.Coupleweight
Default:
1
Range:
0 to 2
Max Foreign Contacts (cap) (Maxforeign) Int op('soft').par.Maxforeign
Default:
262144
Range:
1024 to 4000000
Velocity Field Coupling (vel:) (Windcoupling) Float op('soft').par.Windcoupling
Default:
0
Range:
0 to 1000

Authoring

Authoring (unwired demo) (Hdrauthor) Str op('soft').par.Hdrauthor

Read only.

Default:
"" (Empty String)
Demo Bodies (Demobodies) Int op('soft').par.Demobodies
Default:
64
Range:
1 to 100000
Demo Resolution (Demores) Int op('soft').par.Demores
Default:
3
Range:
1 to 6
Demo Spacing (Demospacing) Float op('soft').par.Demospacing
Default:
0.75
Range:
0.05 to 10

Color

Color (Hdrcolor) Str op('soft').par.Hdrcolor

Read only.

Default:
"" (Empty String)
Color Mode (Colormode) Menu op('soft').par.Colormode
Default:
0
Options:
By Speed, By Body
Base Color (Colorr) Float op('soft').par.Colorr
Default:
0.25
Range:
0 to 1
Base Color G (Colorg) Float op('soft').par.Colorg
Default:
0.48
Range:
0 to 1
Base Color B (Colorb) Float op('soft').par.Colorb
Default:
1
Range:
0 to 1
Color Speed Lift (Colorspeed) Float op('soft').par.Colorspeed
Default:
0.15
Range:
0 to 4
Color Speed Normalize (Colorspeedmax) Float op('soft').par.Colorspeedmax
Default:
5
Range:
0.01 to 100

Outputs

Live Wire Surface (heavy) (Wiresurface) Toggle op('soft').par.Wiresurface
Default:
Off
Options:
Off, On