VBD / AVBD Solver¶
Overview¶
NovaPhy implements the Vertex Block Descent (VBD) and Augmented VBD (AVBD) formulation for rigid-body simulation. This solver uses a primal-dual approach with support for contacts, joints, and springs.
The formulation aligns with the Augmented Vertex Block Descent paper (SIGGRAPH 2025).
Backends¶
| Backend | Build Flag | Description |
|---|---|---|
| CPU | Always built | Default backend, runs on host |
| CUDA | NOVAPHY_WITH_VBD_CUDA=ON |
GPU-accelerated (experimental) |
Usage¶
import novaphy
builder = novaphy.ModelBuilder()
builder.add_ground_plane(y=0.0)
# ... add bodies and shapes ...
vbd_cfg = novaphy.VBDConfig()
vbd_cfg.dt = 1.0 / 60.0
vbd_cfg.iterations = 4
# vbd_cfg.backend = novaphy.VbdBackend.CUDA # Optional, requires CUDA build
vbd_world = novaphy.VBDWorld(builder.build(), vbd_cfg)
for _ in range(120):
vbd_world.step()
Constraint Types¶
The AVBD solver supports:
- Contacts — Rigid body contacts with Coulomb friction (shared collision pipeline with SAP + SAT)
- Joints — Augmented-Lagrangian joint constraints between bodies
- Springs — Compliant spring connections between bodies
Collision Pipeline¶
The VBD world shares the same collision pipeline as the standard rigid body solver:
- SAP broadphase for candidate pair generation
- SAT narrowphase for exact contact computation
- Contact data fed into the VBD primal-dual iterations
Demos¶
| Demo | Description |
|---|---|
demo_vbd_contacts_gui.py |
Rigid contacts with Coulomb friction |
demo_vbd_joint_gui.py |
Joints between bodies |
demo_vbd_spring_gui.py |
Springs between bodies |
demo_vbd_lunar_rover.py |
Lunar rover simulation |