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
~isaaclab_newton.physics.NewtonCfg whose solver_cfg is a
~isaaclab_newton.physics.VBDSolverCfg.
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
~isaaclab_newton.physics.VBDSolverCfg directly. For robot or
rigid-body scenes, the named-entry coupling options are:
~isaaclab_contrib.coupling.CouplerProxyCfgfor the proxy coupling used by the core Franka tasks.~isaaclab_contrib.coupling.CouplerAdmmCfgfor linearized ADMM coupling between named solver entries.
Start from a Supported Deformable Task
The Isaac-Lift-Soft-Franka task requires automatic tetrahedralization.
The uv commands below select the tetrahedralization extra when needed.
With the legacy installer:
Before adding VBD to a new task, first run one of the Franka deformable tasks:
uv (Recommended)
isaaclab.sh / isaaclab.bat
For the surface-deformable cloth variant, use:
uv (Recommended)
isaaclab.sh / isaaclab.bat
Both tasks configure MJWarp for the rigid Franka and VBD for the deformable
object through
~isaaclab_contrib.coupling.CouplerProxyCfg.
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 ~isaaclab_tasks.utils.hydra.PresetCfg. For deformable Newton tasks,
the preset is a plain ~isaaclab_newton.physics.NewtonCfg. Standalone
VBD and soft-contact configuration live in isaaclab_newton.physics, while
proxy and ADMM coupling live in isaaclab_contrib.coupling.
The Franka soft-body and cloth tasks define task-specific proxy presets.
The important pieces are:
- Add a Newton physics preset whose value is a
~isaaclab_newton.physics.NewtonCfg. - Use
~isaaclab_contrib.coupling.CouplerProxyCfgwith named~isaaclab_contrib.coupling.CouplerEntryCfgentries to partition the rigid bodies and deformable particles between MJWarp and VBD. - Add
~isaaclab_contrib.coupling.CouplerProxyMappingCfgentries for the collidable rigid bodies exposed to VBD. Leaveintegrate_with_external_rigid_solver=Falsefor proxy-coupled VBD entries. - Set the outer
isaaclab_newton.physics.NewtonCfg.soft_contact_cfgto a~isaaclab_newton.physics.NewtonSoftContactCfgwhen body-particle or self-contact values need task-level tuning. - Keep the preset at the same config path used by the task’s
~isaaclab.sim.SimulationCfg, for exampleenv.sim.physics.
You can select the deformable Newton preset globally:
uv (Recommended)
isaaclab.sh / isaaclab.bat
or select the physics field directly:
uv (Recommended)
isaaclab.sh / isaaclab.bat
Use the direct path override when only one task field should use the VBD preset.
Use physics=newton_mjwarp_vbd_proxy when you want every matching preset
field in the task config to resolve to that preset. Isaac Lab training commands
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
~isaaclab_newton.sim.spawners.materials.NewtonDeformableBodyMaterialCfgfor volume deformables and~isaaclab_newton.sim.spawners.materials.NewtonSurfaceDeformableBodyMaterialCfgfor cloth or surface deformables. - Proxy-coupled robot tasks should expose only the collidable bodies needed for deformable contact.
- Contact-heavy scenes usually need task-specific
num_substeps,~isaaclab_newton.physics.VBDSolverCfg, and~isaaclab_newton.physics.NewtonSoftContactCfgvalues. 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
~isaaclab_newton.physics.VBDSolverCfg. They are grouped by the part
of the solver they affect.
Core Solve
Rigid Cables
For new rigid-cable configurations, explicitly enable compliant ALM:
Compliant ALM uses finite material stiffness for rigid joints and body-body contacts. Validate the cable’s stretch, bend, and contact stiffness under the intended loads and timestep when switching from legacy AVBD. Increasing contact capacity only increases the available storage; it does not change stiffness.
VBDSolverCfg leaves Newton’s C0 stabilization parameter rigid_avbd_alpha
unset. Newton 1.6 defaults it to 0.0 for compliant ALM and 0.95 for legacy
AVBD, for both rigid joints and body-body contacts. Setting alpha to zero alone
does not enable ALM.
Self-Contact
Custom MJWarp + VBD Parameters
The opt-in
~isaaclab_contrib.custom_coupling.newton_manager_cfg.CoupledMJWarpVBDSolverCfg
runs MJWarp and VBD over one shared model. Import
isaaclab_contrib.custom_coupling.tasks explicitly to register
IsaacContrib-Lift-Soft-Franka-Custom-Coupling, which selects the
newton_mjwarp_vbd preset.
MJWarp nconmax and njmax must cover the rigid contacts and constraints
in the scene. ccd_iterations can affect fast rigid contacts near
deformables. See /source/how-to/solver_tuning_mjwarp for the rigid-solver
parameters.
Use the custom manager for direct shared-model substep ordering. Use proxy coupling when deformable contact is localized to selected rigid bodies.
Start from coupling_mode="two_way". With two-way coupling the body-particle
reaction acts on the arm as well as the deformable, so the gripper is less
likely to clip through the object than under one-way coupling. If it still
clips, lower the arm actuator stiffness so the arm can yield to those reactions,
and command the gripper to close fully, letting the actuator’s maximum effort
limit the squeeze.
Coupled MJWarp + VBD
~isaaclab_contrib.coupling.CouplerProxyCfg is the coupling used by
the core Franka tasks. It partitions the model between named solver entries and
exposes selected source bodies to the destination solver as proxies. Contact
feedback returns to the source solver as lagged impulses. This keeps deformable
contact work localized to the rigid bodies that need it, such as a gripper hand
and fingers. The pinned proxy solver supports at most two entries and rejects
joints that cross entry boundaries.
See Coupled Solvers for a high-level comparison of proxy and ADMM coupling before choosing an approach.
The core Franka soft-body task demonstrates the proxy configuration:
What the selectors do:
entriescontains one~isaaclab_contrib.coupling.CouplerEntryCfgper sub-solver. Each entry has a stablename, its ownsolver_cfg, and explicit model ownership selectors.- An entry’s
bodiesselectors are full Newton body-label regex strings. By default, joints inherit their child body’s owner and shapes inherit their body’s owner. Useall_particles=Trueto own all deformable particles andinclude_static_shapes=Trueto own world geometry. Bodies, particles, joints, and shapes may be assigned to at most one entry; unassigned elements remain outside the nested solver views. proxiescontains directed~isaaclab_contrib.coupling.CouplerProxyMappingCfgmappings. Each mapping names itssourceanddestinationentries, then usesbodiesto select the source bodies that the destination solver should collide against. Only bodies that own at least onenewton.ShapeFlags.COLLIDE_SHAPESshape are kept.- In the snippet above, the entire Franka articulation is routed to MJWarp,
while the deformable particles and static table/world shapes are routed to
VBD. Only the
panda_handand the two fingers are exposed as proxies, so VBD sees three rigid proxies regardless of the number of arm links.
Full-surface rigid-soft contact includes edge and triangle-interior contacts. Analytic proxy shapes support it directly, while mesh and convex proxy shapes require a volume SDF.
The coupler currently rejects
~isaaclab_newton.physics.KaminoPADMMSolverCfg or
~isaaclab_newton.physics.KaminoDVISolverCfg entries and
~isaaclab_newton.physics.MPMSolverCfg entries configured with
project_outside_colliders=True, as well as
~isaaclab_newton.physics.MJWarpSolverCfg entries configured with
use_mujoco_cpu=True. These configurations require manager-specific
build, forward-kinematics, reset, or per-step lifecycle hooks that are not
yet available to nested solvers. Use MPM with
project_outside_colliders=False and GPU MJWarp, or run these solvers
through their standalone managers until nested lifecycle support is added.
Key proxy-specific parameters:
Body selectors must use full Newton body-label regexes, such as
/World/envs/env_.*/Robot. Proxy mappings also accept raw Newton body ids.
~isaaclab_contrib.coupling.CouplerAdmmCfg provides linearized ADMM
coupling between the same named solver entries. Set contact_pairs to select
entry pairs explicitly, or leave it as None to detect every distinct pair.
Use iterations and rho to tune the ADMM solve.
Try the demo:
uv (Recommended)
isaaclab.sh / isaaclab.bat
Contact and Material Parameters
Contact Model
~isaaclab_newton.physics.NewtonSoftContactCfg applies contact parameters
to the finalized Newton model through
isaaclab_newton.physics.NewtonCfg.soft_contact_cfg:
To set rigid collision-shape contact properties (ke, kd, mu) for
shapes that lack an explicit per-asset material, use
~isaaclab_newton.physics.NewtonShapeCfg on NewtonCfg.default_shape_cfg
instead. Per-asset materials override these defaults.
Volume Deformable Materials
Use
~isaaclab_newton.sim.spawners.materials.NewtonDeformableBodyMaterialCfg
for volume deformables:
Try the interactive material demo to vary shear and volume stiffness independently, with fixed reference cubes.
Surface Deformable Materials
Use
~isaaclab_newton.sim.spawners.materials.NewtonSurfaceDeformableBodyMaterialCfg
for cloth or surface deformables:
Try the interactive cloth demo to compare bending stiffness while three sheets drape over horizontal rollers.
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 proxy-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
isaaclab_newton.physics.VBDSolverCfg.iterationswhen contacts or stiff materials do not converge within a substep. - Tune
isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_keto reduce rigid/deformable clipping, then tuneisaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_mufor grip andisaaclab_newton.physics.NewtonSoftContactCfg.soft_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
For implementation details of the VBD managers and Newton coupler, see Extending Newton Solvers.