Skip to content
Voro
  1. Geometry
  2. Solvers

SDF Collider

SDF Collider turns a mesh or analytic primitive into a signed distance field. Solvers sample its distance to push points out of obstacles or keep them inside a domain. The output also includes a transform set for the collider’s fitted pose.

Place SDF Collider in the Geometry view, under Solvers. For a first obstacle, choose Analytic Primitive, select Sphere and start with Radius at 0.5 and Resolution at 48. Place it where the receiving solver’s particles will reach it.

On the receiving solver’s Resources page, add a Connections row, select its sdf input in Type and choose this collider’s field resource. Select the xform output in a separate xforms row when the receiver uses moving-collider transforms. Check the row Status after selecting each resource.

Geometry Input reads the incoming mesh. Analytic Primitive uses the shape controls without a mesh; Blend Geometry + Primitive combines them. The outputs are field0, the collision field, and xform, the fitted transforms.

Input SDF appears in the Source menu, but the current public declaration has no SDF input port. Use the mesh or primitive modes for this node’s documented connection workflow.

  • Primitive chooses Box, Sphere, Cylinder, Capsule, Plane, Torus or Rounded Box. Center, Size, Rotation and the relevant radius controls place and shape it.
  • Domain Mode chooses solid inside or free inside. Invert Sign reverses the sign; use it deliberately, since it changes which side the solver treats as solid.
  • Dilate, Erode and Offset move the collision boundary. Smooth and Blend Width modify the field and the geometry/primitive blend.
  • Resolution sets the cubic field density. Padding adds room around the mesh bounds. Max Triangles caps mesh capacity; begin with a simple mesh before increasing it.
  • Geometry Pose chooses Fit Rigid Pose or AABB Only. Surface Slip ranges from no slip at 0 to full slip at 1 for consumers that use it.
  • Rebuild Field refreshes the field. Structural edits follow Auto-Rebuild or wait for Rebuild. Show Preview and its density and length controls change the field display.

Animated mesh input can update the field, including changing point counts. Do not assume animation only changes a transform or that a deforming mesh costs the same as an analytic primitive.

Thin features need enough field resolution to survive sampling. For mesh input, use a closed surface with a clear inside and outside; the Hybrid and Winding number sign methods depend on that distinction.

Inputs

  • geometry points

Outputs

  • field0 sdf collider
  • xform transforms
  • preview lines
  • preview_cd lines

SDF Collider

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

Preview

Show Preview (Previewshow) Toggle op('sdf_collider').par.Previewshow
Default:
On
Options:
Off, On
Preview Density (Previewdensity) Int op('sdf_collider').par.Previewdensity
Default:
12
Range:
2 to 48
Preview Length (cells) (Previewlength) Float op('sdf_collider').par.Previewlength
Default:
0.6
Range:
0 to 2

Outputs

SDF Collider Resource (Hdrsdfout) Str op('sdf_collider').par.Hdrsdfout

Read only.

Default:
"" (Empty String)
Collider Output Resource (Resourcename) Str op('sdf_collider').par.Resourcename
Default:
collider

Source

SDF Source (Hdrsource) Str op('sdf_collider').par.Hdrsource

Read only.

Default:
"" (Empty String)
Source (Source) Menu op('sdf_collider').par.Source
Default:
0
Options:
Geometry Input, Analytic Primitive, Input SDF, Blend Geometry + Primitive
Geometry Pose (Posefit) Menu op('sdf_collider').par.Posefit
Default:
0
Options:
Fit Rigid Pose, AABB Only
Primitive (Primitive) Menu op('sdf_collider').par.Primitive
Default:
0
Options:
Box, Sphere, Cylinder, Capsule, Plane, Torus, Rounded Box
Center (Centerx) Float op('sdf_collider').par.Centerx
Default:
0
Range:
-1000 to 1000
Center Y (Centery) Float op('sdf_collider').par.Centery
Default:
0
Range:
-1000 to 1000
Center Z (Centerz) Float op('sdf_collider').par.Centerz
Default:
0
Range:
-1000 to 1000
Size (Sizex) Float op('sdf_collider').par.Sizex
Default:
1
Range:
0.0001 to 1000
Size Y (Sizey) Float op('sdf_collider').par.Sizey
Default:
1
Range:
0.0001 to 1000
Size Z (Sizez) Float op('sdf_collider').par.Sizez
Default:
1
Range:
0.0001 to 1000
Rotation (deg) (Rotationx) Float op('sdf_collider').par.Rotationx
Default:
0
Range:
-360 to 360
Rotation (deg) Y (Rotationy) Float op('sdf_collider').par.Rotationy
Default:
0
Range:
-360 to 360
Rotation (deg) Z (Rotationz) Float op('sdf_collider').par.Rotationz
Default:
0
Range:
-360 to 360
Radius (Radius) Float op('sdf_collider').par.Radius
Default:
0.5
Range:
0.0001 to 1000
Minor Radius (Radius2) Float op('sdf_collider').par.Radius2
Default:
0.125
Range:
0.0001 to 1000
Height (Height) Float op('sdf_collider').par.Height
Default:
1
Range:
0.0001 to 1000
Round Radius (Round) Float op('sdf_collider').par.Round
Default:
0
Range:
0 to 1000

Domain

Domain / Sign (Hdrdomain) Str op('sdf_collider').par.Hdrdomain

Read only.

Default:
"" (Empty String)
Domain Mode (Domainmode) Menu op('sdf_collider').par.Domainmode
Default:
0
Options:
Collider (solid inside), Domain (free inside)
Invert Sign (Invert) Toggle op('sdf_collider').par.Invert
Default:
Off
Options:
Off, On
Dilate (Dilate) Float op('sdf_collider').par.Dilate
Default:
0
Range:
0 to 1000
Erode (Erode) Float op('sdf_collider').par.Erode
Default:
0
Range:
0 to 1000
Offset (Offset) Float op('sdf_collider').par.Offset
Default:
0
Range:
-1000 to 1000
Smooth (Smooth) Float op('sdf_collider').par.Smooth
Default:
0
Range:
0 to 1000
Blend Width (Blend) Float op('sdf_collider').par.Blend
Default:
0
Range:
0 to 1000
Surface Slip (0=no-slip 1=full-slip) (Surfaceslip) Float op('sdf_collider').par.Surfaceslip
Default:
0
Range:
0 to 1

Field

Field Build (Hdrfield) Str op('sdf_collider').par.Hdrfield

Read only.

Default:
"" (Empty String)
Resolution (N^3) (Resolution) Int op('sdf_collider').par.Resolution
Default:
48
Range:
8 to 128
Padding (frac of bbox diag) (Padding) Float op('sdf_collider').par.Padding
Default:
0.1
Range:
0 to 1
Max Triangles (ceiling) (Maxtriangles) Int op('sdf_collider').par.Maxtriangles
Default:
200000
Range:
1000 to 2000000
Sign Method (Method) Menu op('sdf_collider').par.Method
Default:
0
Options:
Hybrid (ray + winding), Winding number
Triangle AABB Margin (Boxmargin) Float op('sdf_collider').par.Boxmargin
Default:
0.00001
Range:
0 to 1
Rebuild Field (Rebuild) Pulse op('sdf_collider').par.Rebuild
Default:
None