AVBD 3D — results against the paper
Our WebGPU implementation of Augmented Vertex Block Descent (Giles, Diaz, Yuksel, SIGGRAPH 2025), timed on
the scenes of the paper's performance figures, against the times the paper reports on an NVIDIA RTX 4090.
One column per machine; each is a report in docs/data/bench3d/. Run the suite with
bench3d.html (or pnpm bench3d:gpu).
Against the paper
Per frame, whole step (collision, colouring, solve). Paper times include collision detection; the solve part is from its Table 1. Ratio = ours / paper: below 1× is faster.
All scenes
Wall time per step (the queue kept busy), ms. Small scenes run on anything; settled scenes track the development notes.
Per machine
GPU time per phase is the median of 10 isolated steps (timestamp queries), which run at lower clocks than back-to-back steps, so the phases can add up to more than the wall time.
The paper's Table 1 (RTX 4090, solver only)
| scene | Seq. Impulse | XPBD | VBD | AVBD |
|---|---|---|---|---|
| Fig. 1, 110,000 bodies | 14.1 ms (15 it) | 19.5 ms (6 sub) | 10.8 ms (15 it) | 3.5 ms (4 it) |
| Fig. 3, 510,000 bodies | 78.4 ms (27 it) | 524.7 ms (26 sub) | 26.5 ms (8 it) | 10.3 ms (3 it) |
Iteration counts are what each method needed to keep the piles standing. Timestep 1/60 s throughout.
How to read this
- The scenes follow the paper's figures but are ours: the paper does not publish its scene files. Each has a note in the table above. Fig. 14's scene includes a 10,000-vertex cloth we do not simulate.
- Moving scenes are timed in a short window (about 110 steps) right after a 60-step lead-in, while the spheres are still breaking walls, so every machine times the same stretch of the simulation.
-
Still pairs keep their contact points between steps (
reuseContacts), which helps most in the parts of a scene nothing has hit yet. The paper doesn't mention doing this. - Wall times depend on clocks: close other GPU work, keep the tab visible, and prefer AC power. A hidden tab or battery power can read several times slower.
- GPU MB is the peak size of the solver's buffers for the scene.
Add a machine
Run bench3d.html on it with a machine name, press "Download results", and put the
file in docs/data/bench3d/ (commit it to keep it). To preview without committing, paste the
copied JSON here; it stays in this browser only.