Houdini 20.5 MPM - what is that?

Really good write up on Reddit about what MPM actually is in Houdini 20.5. Really good explainer here.

“When it comes to simulation currently in the industry there are a few major kinds of solvers - 1. Grid based (Eulerian solvers) 2. Particle based (Lagrangian solvers) 3. A mix of both (Hybrid / semi Lagrangian solvers) 4. There’s also a 4th kind, mostly point or geometry based (PBD solvers, Bullet, NVIDIA PHYSX). Although PBD can be categorised as Lagrangian too.

So what are Eulerian and Lagrangian solvers? In very simple words if you’re calculating and storing your velocities on the grid like bounding box that you use in FLIP fluids or pyro solvers basically solvers that use a voxel grid then it’s Eulerian. Example of such solvers are FLIP fluid and pyro solver in Houdini.

On the other hand if you compute and store velocities and forces on the particles instead of any VDB grid etc then it’s Lagrangian. Example of Lagrangian solver can be SPH (smooth particle hydrodynamics) probably was used in old versions of Bifrost, Real Flow etc. Currently not very famous or used. Probably the most common example of this method in Houdini is vellum which uses PBD (position based dynamics) or XPBD (extended position based dynamics) where velocities and forces are computed and stored in the grid.

As you may already know in both the methods you can simulate various materials to some extent like cloth, soft bodies, fluids, grains etc.

When I worked in Dune 2 we used FLIP solver extensively to create some of the sand shots while in other shots where it wasn’t necessary we used vellum grains or even particles.

But here comes the major problem. You can’t make Eulerian and Lagrangian solver talk to each other easily without creating a custom bridge.

So in order to do that, the solution is MPM or material particle method based solver. MPM uses both the characteristics of Eulerian solver and Lagrangian solver.

How?

In MPM you store the forces and velocities of a particle in the particle like you do in Lagrangian but then you interpolate that velocity back into a grid , solve the forces and then interpolate the forces / velocities back to the particles and move the particles.

Whereas is FLIP the whole velocity projection / Pressure projection stage happens in the grid itself.

MPM is sort of a hybrid solver. It was built as an extension of FLIP solver. While FLIP is very good at handling fluid behaviours by keeping the simulation divergence free, MPM is more of a general purpose solver that can handle stretch, strain, granular sims a lot better however it can also do fluids.

Now through MPM you can have a good interaction between various materials that you didn’t have before like cloth and fluid, grain and fluid etc.

Not only that in some cases like snow accumulation etc MPM can give a lot better results than PBD based solvers like vellum. However one drawback is that with MPM you’ll have to make bounding boxes like FLIP or Pyro solver which might not always be very memory efficient.”- Icy-Acanthisitta3299