Skip to content

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:

  1. SAP broadphase for candidate pair generation
  2. SAT narrowphase for exact contact computation
  3. 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