Concept · 1 paper · updated 2026-10-19
Material point method
A hybrid particle-grid method for simulating deformable materials: particles carry mass and deformation, a background grid solves the momentum update each sub-step. Used to make static 3D Gaussian objects move under forces, with an elastic material model. Only one card covers it so far; it fits Young's modulus from a generated video and costs about a minute per second of video on one V100.
physics-simulationmaterial-estimation3d-gaussians
Markdown4 min read
AI-compiled overview, updated 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
Overview
The material point method (MPM) simulates a deformable body with two sets of carriers. Particles hold mass, volume, position, velocity, a deformation gradient and a velocity gradient. A background grid is used only to solve the momentum update. Each sub-step scatters particle mass and momentum to the grid, turns grid momentum into grid velocity, gathers that velocity back to the particles, and then updates each particle's deformation and position [arxiv:2404.13026 §4.1].
The material enters through the stress. The paper uses a fixed corotated hyperelastic model, and its Lamé parameters come from Young's modulus E and Poisson's ratio \nu 2404.13026 §4.1. In the paper the particles are the Gaussians of a 3D Gaussian Splatting reconstruction 2404.13026 §5.2. The only shared invariant across the uses found so far is that the object is elastic and that collisions are excluded 2404.13026 §6.
Variants
Only one card covers this concept. The variants below are the ones that paper describes, plus one it compares against and that is not carded here.
Elastic MPM with a fitted Young's modulus field
Young's modulus is a per-particle field, represented by a triplane with a three-layer MLP. An initial velocity field is represented the same way, with its own triplane 2404.13026 §4.2 2404.13026 §5.2. The reference is a clip generated from one still image of the object. The fit runs in two stages: first the velocity on the first three frames with random, frozen stiffness, then the stiffness with the velocity frozen 2404.13026 §4.2. The loss compares rendered frames with the reference, combining L1 and D-SSIM terms, plus a total-variation penalty on the triplanes 2404.13026 §4.2. Card: PhysDreamer.
Driving-particle subsampling for Gaussian scenes
A full scene has 0.5 to 1.5 million Gaussians, of which 50 to 300 thousand belong to the foreground object 2404.13026 §5.2. The paper runs the physics only on K-Means driving particles, 10 to 50 times fewer than the Gaussians, each Gaussian having 8 nearest driving particles [arxiv:2404.13026 §4.3]. For each Gaussian, a rigid transform fitted to those neighbours moves its position and rotation 2404.13026 §4.3 2404.13026 alg. 1. This is an accelerated form of the same MPM core, not a different material model.
Hand-set material MPM on Gaussians
PhysGaussian runs MPM on 3D Gaussians, but its material values are set by hand. The PhysDreamer paper uses this as its main baseline 2404.13026 §5.1. Its content is not used on this page. Read it at arXiv:2311.12198.
When to use which
The comparisons below are author-reported. They rest on 2AFC judgements of perceived realism, not on measured material properties 2404.13026 §5.1.
| Situation | Use | Why |
|---|---|---|
| A reference video of the object moving, no measured material data | Elastic MPM with a fitted E field | Preferred over PhysGaussian on motion realism in 80.8% of 2AFC judgements, and over DreamGaussian4D in 63.5% 2404.13026 tab. 1 2404.13026 §5.3 |
| Material values known or set by hand, no reference motion | Hand-set MPM | No fitting step is needed. The paper's criticism of this route is that its values must be set by hand 2404.13026 §5.1 |
| Two or more views of the object are available | Add a second view to the fit | Two-view supervision is preferred in 81.0% (visual quality) and 86.0% (motion realism) of user samples. These numbers appear only in the text 2404.13026 §5.4 |
| Large scene or many frames | Subsampling, and budget for the cost | Even with subsampling the method takes about one minute on a V100 per second of video, and the paper calls it computationally demanding 2404.13026 §6 |
| Collisions, or non-elastic materials | Out of scope for this method | The paper restricts its scope to elastic objects without collisions 2404.13026 §6 |
| Object not yet cut from its background | Segment first | The paper segments the background and keeps only foreground particles 2404.13026 §5.2 |
Implementation sketch
The core is one sub-step. Only the fixed corotated stress and the material fit are specific to the paper 2404.13026 §4.1 2404.13026 §4.2. Helper names are placeholders.
# One MPM sub-step for an elastic material [arxiv:2404.13026 §4.1]
def mpm_substep(x, v, F, C, mass, volume, E, nu, dt):
# Lame parameters from Young's modulus and Poisson's ratio [§4.1]
mu = E / (2 * (1 + nu))
lam = E * nu / ((1 + nu) * (1 - 2 * nu))
# Stress from the fixed corotated model applied to F [§4.1]
stress = fixed_corotated_stress(F, mu, lam)
# Particle to grid: mass and momentum, with the stress term [§4.1]
grid_m, grid_p = scatter_to_grid(x, v, C, mass, volume, stress, dt)
# Grid velocity from momentum; stationary cells keep zero velocity [§5.2]
grid_v = grid_p / grid_m
grid_v = apply_boundary_mask(grid_v)
# Grid to particle: new velocity and velocity gradient [§4.1]
v, C = gather_from_grid(grid_v, x)
# Deformation gradient from the velocity gradient, then move [§4.1]
F = (identity + dt * C) @ F
x = x + dt * v
return x, v, F, CThe paper's fit wraps this sub-step. Rendered frames are compared with a reference clip, and the gradient flows back through the simulation 2404.13026 §4.2.
# Fit a stiffness field and an initial velocity field [arxiv:2404.13026 §4.2]
def fit_material(particles, reference_frames):
# Stage 1: stiffness random and frozen; fit velocity on 3 frames [§4.2]
stiffness = random_stiffness(particles)
velocity = init_velocity_field()
for step in range(stage1_steps): # step count not stated [§4.2]
frames = simulate(particles, velocity, stiffness, num_frames=3)
loss = render_loss(frames, reference_frames[:3])
velocity = optimizer_step(velocity, loss)
# Stage 2: velocity frozen; fit stiffness [§4.2]
for step in range(stage2_steps): # step count not stated [§4.2]
frames = simulate(particles, velocity, stiffness)
loss = render_loss(frames, reference_frames) + tv_penalty(stiffness)
stiffness = optimizer_step(stiffness, loss)
return stiffness, velocitySub-step size and count are not fixed in one place. See Contradictions.
Contradictions
- Sub-step size. Section 4.2 gives a sub-step size of about 1 \times 10^{-4} for most experiments 2404.13026 §4.2. Section 5.2 gives 768 sub-steps per frame, each 4.34 \times 10^{-5} s 2404.13026 §5.2. The paper does not say which applies to the reported runs. Check the value against the released code before you rely on either number.
Papers
- PhysDreamer: Physics-Based Interaction with 3D Objects via Video Generation: elastic MPM on 3D Gaussians, with a Young's modulus field fitted from a generated video and driving-particle subsampling.
Source and license
Compiled from the papers listed on this page, all published under CC BY, CC BY-SA or CC0, with citations. See each paper's page for its authors and license.