RigidBench: Evaluating Rigid-Body Physics in Video Generation Models
Organizations: University of Cambridge
Abstract
Video models are increasingly used to predict what happens next in a scene, yet the metrics commonly used to compare their outputs say little about whether the predicted objects move correctly. Motion, geometry, identity, background stability, and visual similarity can fail independently, but whole-frame scores often mix these errors together. We introduce RigidBench, a simulator-grounded benchmark that compares a generated continuation with a reference rollout from the same initial frame and motion description. Its five rigid-body tasks vary objects, materials, viewpoints, and indoor and outdoor scenes, with per-frame masks, depth, 6-DoF trajectories, and contacts available for scoring. We evaluate eight models on the same 100 examples with ten measurements that keep these aspects separate. The resulting rankings depend strongly on what is measured: no model leads on all ten, and across model means, higher SSIM accompanies larger 3D trajectory error (r = 0.89). RigidBench also includes 5,000 training videos with exact simulator state, which we use to fine-tune and analyze Wan 2.2 TI2V-5B. Full fine-tuning reduces 3D trajectory error by about 20% with almost no change in SSIM, while teacher-forced probes and targeted interventions show that object position is represented throughout Wan's diffusion transformer and used by its denoising computation.
Figures & tables
| Task | Setup | Main interaction |
|---|---|---|
| Free fall | One object drops toward a support | Free flight |
| Bounce | A high-restitution object drops onto a surface | Restitution |
| Ramp collision | Two objects roll down opposing ramps and collide | Rolling collision |
| Ball chain | A rolling object strikes a row of three objects | Contact chain |
| Drop into cluster | One object falls onto a three-object cluster | Multi-body impact |
| Condition | Scenes | Objects | Examples |
|---|---|---|---|
| In-distribution | training | training | 25 |
| OOD-scene | held out | training | 25 |
| OOD-object | training | held out | 25 |
| OOD-both | held out | held out | 25 |
| Object motion and geometry | Visual similarity and stability | |||||||||
| Model | IoU | L2 | Cham. | ATE | ATE-3D | SI-MSE | SSIM | LPIPS | IdDrift | BGDrift |
| Wan 2.2 | .183 | .220 | .370 | .200 | 2.64 | .0288 | .925 | .056 | .501 | .739 |
| Cosmos 2.5 | .171 | .300 | .527 | .282 | 2.84 | .0331 | .909 | .095 | .484 | 1.094 |
| Veo 3.1 | .153 | .230 | .380 | .203 | 2.47 | .0283 | .879 | .112 | .516 | 2.368 |
| Veo 3.1 Fast | .157 | .229 | .382 | .204 | 2.63 | .0352 | .902 | .100 | .517 | 1.491 |
| Kling 3.0 | .169 | .230 | .387 | .186 | 2.76 | .0364 | .912 | .130 | .553 | 1.632 |
Appendix figures & tables24 assets
Supplementary material from the paper’s appendix.
Appendix
| Task | Physical setup | Prompt and camera direction |
|---|---|---|
| Free fall | One object is placed – m above the support. | “{object} is dropping.” Any azimuth. |
| Bounce | One object tagged bouncy is placed – m above the support. The support restitution is and its friction is . | “{object} is dropping.” Any azimuth. |
| Ramp collision | Two opposing ramps each have length – m, height – m, and width – m. Their gap is – m, with one rolling object placed on each ramp. | “{object} and {object} are rolling down two ramps facing each other.” Relative azimuth – or – . |
| Drop into cluster | Three stackable objects form a cluster with gap – m. A fourth object is placed – m above the support. | “{object} is dropping onto a cluster of objects.” Any azimuth. |
| Ball chain | A ramp has length – m, height – m, and width – m. One object rolls toward a line of three objects, placed – m beyond the ramp with gaps of – m. | “{object} is rolling down the ramp toward a row of objects.” Relative azimuth – or – . |
| Subset | Configuration identifiers |
|---|---|
| Training scenes | hallway_interior , modern_loft , modern_luxury_kitchen , minimal_white_kitchen , modern_japandi_dining , dining_room_set , modular_flat , coastal_living_room |
| Held-out scenes | beach_gazebo , butterfly_mural_room , cozy_living_room , modern_warm_kitchen |
| Training objects | apple , orange , lemon , kiwi , pomegranate , pear , mango , banana , watermelon , baseball , bouncy_ball , rugby_ball , red_bull_can , plastic_bottle , large_dice , food_can |
| Held-out objects | peach , tomato , coconut , tennis_ball , toy_duck , cricket_ball , rubiks_cube , soda_can |
| Partition | Scene set | Object set | Examples |
|---|---|---|---|
| Training | Training | Training | 5,000 |
| In-distribution | Training | Training | 25 |
| OOD scene | Held-out | Training | 25 |
| OOD object | Training | Held-out | 25 |
| OOD both | Held-out | Held-out | 25 |
| Component | Setting |
|---|---|
| Video | , 49 frames, 24 frames per second, PNG frames and H.264 video |
| Simulation | Blender 4.5.9, 30 Bullet substeps per frame, 20 solver iterations |
| Rigid bodies | Per-object mass, friction, and restitution, with convex-hull active collisions, linear damping , angular damping , and collision margin m |
| Passive geometry | Mesh collisions with margin m, default friction , and restitution , unless a task overrides the support |
| Cycles | 32 adaptive samples with threshold , OptiX denoising, six maximum bounces, and at most three diffuse, glossy, or transmission bounces |
| Camera | mm lens, elevation, m minimum distance, framing multiplier , bounding-box padding m |
| Artifact | Contents |
|---|---|
| frames/ , video.mp4 | The 49 rendered RGB frames and their encoded video |
| EXR pass streams | Per-frame 32-bit object-index and Z passes under masks/ and depth/ , written by the Cycles compositor |
| masks.npz | Boolean array of shape obtained by thresholding the object-index render pass, together with actor names |
| depth.npz | Float32 array of shape containing the Cycles Z pass used by the trajectory code |
| trajectories.npz | Per-frame world positions, Blender-order quaternions, and finite differences of position and rotation for every actor |
| contacts.json | Per-frame mesh-overlap events for actor pairs and passive geometry, with up to five contact points and normals per pair |
| Model | Identifier | Generation and scoring configuration |
|---|---|---|
| Wan 2.2 TI2V-5B | Wan-AI/Wan2.2-TI2V-5B , local DiffSynth | , 49 frames at 24 Hz, 50 steps |
| Cosmos Predict 2.5-2B | nvidia/Cosmos-Predict2.5-2B , revision diffusers/base/post-trained , local Diffusers | , 33 frames at 16 Hz, 50 steps |
| Veo 3.1 / Fast | google/veo-3.1 , google/veo-3.1-fast | 4 s, 720p, , audio disabled, scored as 24 Hz |
| Kling 3.0 | kwaivgi/kling-v3-video | 3 s, pro mode, , audio disabled, scored as 24 Hz |
| Seedance 2.0 / Fast | bytedance/seedance-2.0 , bytedance/seedance-2.0-fast | 4 s, 720p, , audio disabled, scored as 24 Hz |
| Grok Imagine | xai/grok-imagine-video | 4 s, 720p, automatic aspect ratio, scored as 24 Hz |
| Quantity | Model | Input and settings |
|---|---|---|
| Actor masks | SAM 2.1 Hiera Large, facebook/sam2.1-hiera-large | One frame-zero mask for each active actor. Propagated logits are thresholded at zero. |
| Point tracks | CoTracker3 offline | Twenty points per active actor, sampled without replacement from a three-pixel erosion of its reference mask. Generated and reference visibility must both be true. |
| Disparity | Video Depth Anything Large, depth-anything/Video-Depth-Anything-Large | ViT-L encoder, input size 384, target rate 24 Hz. The saved output is disparity. |
| Identity features | DINOv2 ViT-L/14 | track-centered patches resized to , ImageNet normalization, bfloat16 inference in batches of 256, and L2-normalized features. |
| Full-frame features | LPIPS with AlexNet | Reference and generated RGB mapped from to . |
| Background tracks | CoTracker3 offline | At most 200 Shi-Tomasi corners with quality threshold and minimum separation 10 pixels, sampled within the background after a 15-pixel erosion. |
| Metric | Per-sample calculation |
|---|---|
| IoU | Per-actor mask intersection over union, with an empty union assigned one. |
| Centroid L2 | Mask-centroid distance divided by image height. Empty actor-frames are omitted. |
| Chamfer | Sum of the two mean nearest-neighbor distances between foreground-pixel sets, divided by image height. Empty actor-frames are omitted. |
| ATE | Mean track-point distance over jointly visible point-frames, divided by image height. |
| ATE-3D | Actor-position RMSE divided by the mean reference displacement of actors moving more than m. |
| SI-MSE | Per-frame variance of the log-depth residual after one clip-level affine disparity alignment. |
| Model | Ball chain | Ramp collision | Drop into cluster | Bounce | Free fall |
|---|---|---|---|---|---|
| Wan 2.2 | 1.02 | 1.39 | 1.78 | 3.70 | 5.30 |
| Cosmos 2.5 | 1.12 | 1.32 | 2.01 | 4.02 | 5.74 |
| Veo 3.1 | 0.75 | 1.86 | 1.69 | 3.53 | 4.54 |
| Veo 3.1 Fast | 0.86 | 1.59 | 1.80 | 3.66 | 5.22 |
| Kling 3.0 | 1.52 | 1.56 | 1.79 | 3.89 | 5.02 |
| Seedance 2.0 | 1.07 | 1.27 | 1.21 | 2.55 | 3.97 |
| Setting | LoRA | Full fine-tuning |
|---|---|---|
| Trainable weights | Rank , , dropout | All non-conditioning DiT weights |
| Updated modules | q , k , v , o , ffn.0 , ffn.2 | All remaining DiT modules; text_embedding , time_embedding , and time_projection fixed |
| Distributed strategy | DDP | FSDP FULL_SHARD , wrapped by DiT block |
| Batch per GPU | 2 | 16 |
| Gradient accumulation | 8 batches | 1 batch |
| Effective batch | 128 examples | 128 examples |
| Object motion and geometry | Visual similarity and stability | ||||||||||
| Regime | Step | IoU | L2 | Cham. | ATE | ATE-3D | SI-MSE | SSIM | LPIPS | IdDrift | BGDrift |
| Base | – | .183 | .220 | .370 | .200 | 2.64 | .0288 | .925 | .056 | .501 | .739 |
| LoRA | 500 | .185 | .168 | .272 | .158 | 2.34 | .0247 | .929 | .056 | .525 | .726 |
| LoRA | 1,000 | .207 | .164 | .264 | .154 | 2.31 | .0250 | .929 | .056 | .518 | .718 |
| LoRA | 1,500 | .195 | .174 | .282 | .163 | 2.40 | .0261 | .925 | .058 | .519 | .770 |
| LoRA | 2,000 | .193 | .165 | .264 | .159 | 2.44 | .0260 | .925 | .058 | .523 | .736 |
| Metric | LoRA 1k base | Full FT 2.5k base | Full FT LoRA |
|---|---|---|---|
| IoU | |||
| L2 | |||
| Cham. | |||
| ATE | |||
| ATE-3D | |||
| SI-MSE |
| Model | Ball chain | Ramp collision | Drop into cluster | Bounce | Free fall |
|---|---|---|---|---|---|
| Base | 1.02 | 1.39 | 1.78 | 3.70 | 5.30 |
| LoRA 1k | 0.94 | 1.14 | 1.41 | 3.20 | 4.85 |
| Full FT 2.5k | 0.78 | 1.12 | 1.51 | 3.21 | 3.94 |
| ATE-3D | SSIM | |||||||
|---|---|---|---|---|---|---|---|---|
| Model | ID | Scene | Object | Both | ID | Scene | Object | Both |
| Base | 2.64 | 2.31 | 3.63 | 1.98 | 0.946 | 0.906 | 0.946 | 0.901 |
| LoRA 1k | 2.20 | 2.18 | 3.36 | 1.50 | 0.948 | 0.916 | 0.946 | 0.906 |
| Full FT 2.5k | 1.95 | 1.99 | 3.03 | 1.48 | 0.947 | 0.910 | 0.948 | 0.902 |
| Component | Configuration |
|---|---|
| Backbones | Randomly initialized Wan architecture, base Wan 2.2 TI2V-5B, and the full fine-tuning checkpoint at step 2,500 |
| Extraction sites | 30 blocks at five schedule fractions, giving 150 cells per backbone |
| Probe rows | 148,303 training, 19,696 validation, and 18,637 test actor–time rows after visibility filtering |
| Linear probe | One affine map from 3,072 dimensions to the target |
| MLP probe | 3,072–64–target with a ReLU hidden layer |
| Optimization | Adam for 20 epochs, batch size 4,096, learning rate , seed 0 |
| Position ( ) | Contact (AUC) | |||
|---|---|---|---|---|
| Model | Linear | MLP | Linear | MLP |
| Random init | ||||
| Base Wan | ||||
| Full fine-tuning | ||||
| Linear | MLP | |||
|---|---|---|---|---|
| Simulator target | Mean | Best cell | Mean | Best cell |
| Position | 0.709 | 0.772 | 0.879 | 0.926 |
| Orientation | 0.024 | 0.055 | 0.035 | 0.065 |
| Linear velocity | -14.958 | -1.497 | -0.010 | 0.278 |
| Linear acceleration | -0.001 | 0.353 | 0.149 | 0.493 |
| Angular velocity | -0.095 | -0.023 | -0.002 | 0.001 |
| Removed subspace | Full model | Direct head |
|---|---|---|
| Position (INLP) | ||
| Variance-matched PC | ||
| Random subspace |
Physical Consistency in Video Generation
Physical consistency in video generation studies how to make and evaluate videos whose geometry, motion, interactions, and state changes obey real-world laws.
See all 191 papers