PBDSolver#
The PBDSolver implements Position Based Dynamics for simulating cloth, soft bodies, and particle systems with fast, stable steps. The materials it supports are listed in PBD.
Overview#
PBD works by:
Predicting particle positions.
Projecting constraint violations.
Iteratively correcting positions.
Recovering velocities from the position change.
Advantages:
Stability: robust at large time steps.
Speed: cheap iterative projection.
Controllability: direct position control.
Usage#
The solver activates when the scene contains a PBD entity. Configure it through PBDOptions; see gs.options.PBDOptions for the full option set.
import genesis as gs
gs.init()
scene = gs.Scene(
pbd_options=gs.options.PBDOptions(
max_stretch_solver_iterations=4,
max_bending_solver_iterations=1,
),
)
# Add cloth
cloth = scene.add_entity(
gs.morphs.Mesh(file="cloth.obj"),
material=gs.materials.PBD.Cloth(
stretch_compliance=1e-7, # m/N; smaller resists stretching more
bending_compliance=1e-5, # rad/N; smaller resists bending more
),
)
scene.build()
# Pin cloth particles by their local indices
cloth.fix_particles(particles_idx_local=[0, 1, 2])
for i in range(1000):
scene.step()
Constraint types#
PBD applies several constraint groups, each with its own iteration count:
Stretch constraints: maintain edge lengths.
Bending constraints: resist folding.
Volume constraints: preserve enclosed volume.
Density constraints: enforce incompressibility for fluids.
Each group has its own iteration count in PBDOptions.
See also#
PBD entities: PBD entities.
PBD: PBD materials.
gs.options.PBDOptions: full options.