Skip to content

VBD / AVBD Solver

NovaPhy exposes Vertex Block Descent through the Newton-aligned solver-primary API:

import novaphy

builder.color()
model = builder.finalize()
config = novaphy.solvers.SolverVBD.Config()
config.iterations = 10
solver = novaphy.solvers.SolverVBD(model, config)
state_in = model.state()
state_out = model.state()
control = model.control()
collision_pipeline = novaphy.CollisionPipeline(model)
contacts = collision_pipeline.contacts()

collision_pipeline.collide(state_in, contacts)
solver.step(state_in, state_out, control, contacts, dt)

There is no VBDWorld container. SolverVBD consumes caller-owned SimState, Control, and Contacts buffers like the rest of the solver family.

Layout

The C++ implementation follows Newton's VBD solver split while using NovaPhy's upper-layer data interfaces:

Module Purpose
dynamics/vbd/solver_vbd.h Public SolverVBD : SolverBase entry point
src/dynamics/vbd/solver_vbd.cpp Step orchestration and backend reporting
src/dynamics/vbd/rigid/ Rigid-body AVBD prediction, contact constraints, velocity recovery
src/dynamics/vbd/soft/ Particle / soft-body VBD prediction and contact projection
src/dynamics/vbd/common/ Shared VBD math helpers

The SolverBase VBD path follows NovaPhy's solver-primary API. Backend selection is not a solver config field; CPU/GPU execution is selected by model/device plumbing when that backend is available.

Demos

VBD demos live under python/demos/vbd/. The CPU demo browser intentionally keeps the lightweight demo3d-style scenes that are suitable for the current CPU SolverVBD path: rigid contacts, supported rigid joints, and one cloth hanging scene. Distance-spring scenes are omitted because SolverVBD::joint_support() does not advertise distance joints. Cloth twist / softbody gift / cable examples are better matched to Newton's Warp/GPU path and are omitted until NovaPhy has native CUDA VBD kernels and capsule rods.

Demo Newton analogue Purpose
demo_vbd_rigid.py CPU VBD rigid scene browser Contacts / supported joints
demo_vbd_soft.py CPU VBD soft scene browser Cloth / soft-rigid contact

Scene groups:

  • contacts: ground, dynamic_friction, static_friction, stack, stack_ratio, pyramid
  • joints: rope, heavy_rope, bridge
  • cloth: cloth_hanging