🚧 Currenly under construction, will be finished soon. 🚧
Federico Vasile, Ri-Zhao Qiu, Lorenzo Natale Xiaolong Wang,
We present Any-Shape Differentiable Material Point Method (AS-DiffMPM), a particle-based framework for simulating collisions with arbitrarily shaped rigid bodies.
Clone the repository and install dependencies. Our code is tested with Python 3.11 and PyTorch 2.5.1 with CUDA 12.1, but other versions should also work.
git clone https://github.com/FedericoVasile1/as-diffmpm
cd as-diffmpm
conda create -n mpmenv python=3.11
conda activate mpmenv
pip install -r requirements.txt
The following command runs an example where a cross-shaped object, modeled as a Newtonian fluid, collides with an Armadillo mesh:
python simulate.py --particles assets/particles/cross.ply --config configs/newtonian/armadillo.ply
The simulation outputs the particle positions at each timestep in the output directory specified in the config file (default is simulation_output/{material}/{collider}).
The particles can be visualized in Open3D using the provided script. For the sake of convenience, we handle user input through a OpenCV window, click on the windows and then press f and b to move forward and backward through the simulation.
python vis_simulation_output.py --base-dir simulation_output/newtonian/armadillo
Obtained Open3D visualization:
[TODO]
For further colliders, materials, and simulation settings, please refer to the configs/ folder. We currently used the cross-shaped object as material particles, you can find more at assets/particles/.
Our code supports also moving colliders, such as the glass example. Take a look at configs/newtonian/glass.py, specifically at the start_frame, end_frame, lin_vel, ang_vel and rot_center that handle the moving collider parameters. Few examples below:
python simulate.py --particles assets/particles/cross.ply --config configs/newtonian/glass.py
python simulate.py --particles assets/particles/cross.ply --config configs/non_newtonian/paddle.py
python simulate.py --particles assets/particles/cross.ply --config configs/sand/sphere.py
Our framework supports both mesh and 2DGS-based collders. Few splats are provided in assets/collider/splats. To use a 2DGS-based, we need to modify the config file accordingly. In configs/newtonian/armadillo.py, replace as follows:
# 1st replace:
#"mesh": {
"splat": {
# 2nd replace:
#"ply_path": "assets/colliders/meshes/armadillo.ply",
"ply_path": "assets/colliders/splats/armadillo.ply",
# 3rd replace:
#"points_per_face": 1,
"opacity_threshold": 0.01,Besides forward simulation, AS-DiffMPM can be used to identify physical parameters from observed particle trajectories using gradient-based optimization. Given observations of particle positions over time, we can optimize for unknown physical parameters (e.g., Young's modulus, fluid viscosity) by minimizing the discrepancy between simulated and observed trajectories using MSE loss.
python train.py --config configs/newtonian/box.py --gt-dir [TODO]
The dataset used for system identification experiments can be found at [TODO]
- [] Add System Identification from Visual Observations
- [] Add particle visualizations with other libraries (e.g., Genesis)
Our code is built upon the following repositories: PAC-NeRF, MLS-MPM. We thank the authors for their fantastic work.
If you find our work useful, please consider citing our paper as follows:
@article{vasile2025asdiffmpm,
title={Gaussian-Augmented Physics Simulation and Identification with Complex Colliders},
author={Federico Vasile and Ri-Zhao Qiu and Lorenzo Natale and Xiaolong Wang},
booktitle={NeurIPS},
year={2025},
}
This repository is mantained by:
| @FedericoVasile1 |