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