Using the VBD Solver#
Vertex Block Descent (VBD) is a Newton solver for cloth and soft-body
simulation. In Isaac Lab, VBD is enabled by selecting a
NewtonCfg whose solver_cfg is provided by
isaaclab_contrib.deformable.
VBD support is experimental. The solver managers, configuration fields, and recommended tuning values may change while Newton deformable support is under active development. A task that works with PhysX or with Newton’s MuJoCo-Warp solver may still need deformable assets, materials, contacts, and coupling tuned before it works well with VBD.
VBD is usually exposed through a task-specific physics preset rather than a
general newton_vbd preset. Deformable-only scenes can use
VBDSolverCfg directly. Robot or
rigid-body scenes usually use
CoupledMJWarpVBDSolverCfg or
CoupledFeatherstoneVBDSolverCfg so one
solver advances rigid bodies and VBD advances deformable particles.
Start from a Supported Deformable Task#
Before adding VBD to a new task, first run one of the experimental Franka deformable tasks:
./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Lift-Soft-Franka-v0 --num_envs 1 --visualizer kit
For the surface-deformable cloth variant, use:
./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Lift-Cloth-Franka-v0 --num_envs 1 --visualizer kit
Both tasks configure MJWarp for the rigid Franka and VBD for the deformable
object through
CoupledMJWarpVBDSolverCfg.
Use these tasks as starting points for asset setup, solver coupling, and contact
tuning.
Add a VBD Physics Preset#
Tasks that support multiple physics options usually store SimulationCfg.physics
as a PresetCfg. For deformable Newton tasks,
the preset can use a small NewtonCfg subclass
to carry NewtonModelCfg alongside the
normal Newton fields:
from isaaclab.utils.configclass import configclass
from isaaclab_newton.physics import NewtonCfg
from isaaclab_contrib.deformable import NewtonModelCfg
@configclass
class DeformableNewtonCfg(NewtonCfg):
model_cfg: NewtonModelCfg | None = None
The Franka soft-body task defines a newton_mjwarp_vbd preset that couples
MJWarp and VBD:
class PhysicsCfg(PresetCfg):
# Newton physics: MJWarp rigid + VBD soft, one-way coupled
# (matches newton/examples/softbody/example_softbody_franka.py)
newton_mjwarp_vbd: DeformableNewtonCfg = DeformableNewtonCfg(
solver_cfg=CoupledMJWarpVBDSolverCfg(
rigid_solver_cfg=MJWarpSolverCfg(
njmax=40,
nconmax=20,
ls_iterations=20,
cone="pyramidal",
impratio=1,
ls_parallel=False,
integrator="implicitfast",
ccd_iterations=100,
),
soft_solver_cfg=VBDSolverCfg(
iterations=10,
integrate_with_external_rigid_solver=True,
particle_enable_self_contact=False,
particle_collision_detection_interval=-1,
),
coupling_mode="two_way",
),
model_cfg=NewtonModelCfg(
soft_contact_ke=1e4,
soft_contact_kd=1e-5,
soft_contact_mu=5.0,
shape_material_ke=4e4,
shape_material_kd=1e-5,
shape_material_mu=5.0,
),
num_substeps=10,
use_cuda_graph=True,
)
physx: PhysxCfg = PhysxCfg()
default = newton_mjwarp_vbd
The important pieces are:
Add a Newton physics preset whose value is
DeformableNewtonCfg.Use
CoupledMJWarpVBDSolverCfgwhen rigid bodies and deformables must interact in the same scene.Use
soft_solver_cfg=VBDSolverCfg(integrate_with_external_rigid_solver=True)inside a coupled solver so VBD advances only the deformable particles.Add
NewtonModelCfgwhen body-particle or self-contact values need task-level tuning.Keep the preset at the same config path used by the task’s
SimulationCfg, for exampleenv.sim.physics.
You can select the deformable Newton preset globally:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Lift-Soft-Franka-v0 presets=newton_mjwarp_vbd
or select the physics field directly:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Lift-Soft-Franka-v0 env.sim.physics=newton_mjwarp_vbd
Use the direct path override when only one task field should use the VBD preset.
Use presets=newton_mjwarp_vbd when you want every matching preset field in
the task config to resolve to that preset. Isaac Lab training scripts accept
these Hydra overrides after the regular command line flags; no separator is
needed for the examples above.
Check Task and Asset Compatibility#
VBD uses the Newton model built from the task assets. When adding VBD to a new task, validate the following before tuning solver parameters:
The task must already be compatible with the Newton backend. If a rigid-only
newton_mjwarppreset fails during model construction, fix the asset or task configuration first.The scene must include Newton-compatible deformable assets and materials. Use
NewtonDeformableBodyMaterialCfgfor volume deformables andNewtonSurfaceDeformableBodyMaterialCfgfor cloth or surface deformables.Coupled robot tasks should start with
coupling_mode="two_way"when the robot should feel contact forces from the deformable object.Contact-heavy scenes usually need task-specific
num_substeps,VBDSolverCfg, andNewtonModelCfgvalues. Start from the Franka soft-body or cloth preset that most closely resembles the scene.Use a small visual smoke test before training. Confirm that the deformable spawns, renders, deforms, and contacts rigid bodies as expected.
VBD Solver Parameters#
The following fields are specific to
VBDSolverCfg. They are grouped by the part
of the solver they affect.
Core Solve#
Parameter |
Description |
|---|---|
|
Default: |
|
Default: |
Self-Contact#
Parameter |
Description |
|---|---|
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
Coupled Solver Parameters#
Use the coupled solver configs when one solver should advance rigid bodies and VBD should advance deformables:
Parameter |
Description |
|---|---|
|
Rigid-body sub-solver configuration. |
|
VBD sub-solver configuration. In coupled scenes, set |
|
Rigid solver advances first, and VBD reacts to the updated rigid poses. The rigid solver does not feel particle contact forces. |
|
Contact reactions from deformables are injected into the rigid solver before the rigid step, then VBD advances deformables against the shared contacts. Use this for manipulation tasks where the robot should be pushed back by deformable contact. |
|
Available on |
The rigid solver parameters still matter. For example, MJWarp’s nconmax and
njmax must be large enough for the rigid contacts in the scene, and
ccd_iterations can affect fast rigid contacts near deformables. See
MJWarp Solver for the MJWarp-side parameters.
Contact and Material Parameters#
Contact Model#
NewtonModelCfg applies contact parameters
to the finalized Newton model:
Parameter |
Description |
|---|---|
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
Volume Deformable Materials#
Use
NewtonDeformableBodyMaterialCfg
for volume deformables:
Parameter |
Description |
|---|---|
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
Surface Deformable Materials#
Use
NewtonSurfaceDeformableBodyMaterialCfg
for cloth or surface deformables:
Parameter |
Description |
|---|---|
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
|
Default: |
Tuning Workflow#
Use the following sequence when bringing up a new VBD task:
Run one of the supported Franka deformable tasks and confirm your installation, visualizer, and deformable rendering path work.
Add a task-specific VBD or coupled VBD preset copied from the closest supported task.
Run a small visual smoke test with
--num_envs 1before training.Tune deformable material stiffness and damping until the object deforms in the expected range without rigid contact.
Increase
num_substepsor decreasedtif the object is unstable before increasing stiffness further.Increase
iterationswhen contacts or stiff materials do not converge within a substep.Tune
soft_contact_keto reduce rigid/deformable clipping, then tunesoft_contact_mufor grip andsoft_contact_kdfor chatter.Enable self-contact only after body-particle contact is stable, then tune
particle_self_contact_radiusfor active self-contact thickness,particle_self_contact_marginfor missed contacts, andparticle_collision_detection_intervalfor detection frequency.Increase
num_envsand profile only after the single-environment scene is stable.
Symptoms and First Parameters to Check#
Symptom |
First parameters to check |
|---|---|
Rigid bodies visibly clip through the deformable. |
Increase |
The robot cannot lift the deformable. |
Use |
The deformable barely deforms. |
Reduce material stiffness, |
Contact chatters or bounces. |
Increase |
Cloth passes through itself. |
Enable |
Self-contact is too expensive. |
Increase |
For implementation details of the VBD and coupled solver managers, see Newton Manager Abstraction.