[Project Page] [arXiv] [Video]
Tianyi Xie1*, Zeshun Zong1*, Yuxing Qiu1*, Xuan Li1*, Yutao Feng2,3, Yin Yang3, Chenfanfu Jiang1
1University of California, Los Angeles, 2Zhejiang University, 3University of Utah
*Equal contributions
Abstract: We introduce PhysGaussian, a new method that seamlessly integrates physically grounded Newtonian dynamics within 3D Gaussians to achieve high-quality novel motion synthesis. Employing a customized Material Point Method (MPM), our approach enriches 3D Gaussian kernels with physically meaningful kinematic deformation and mechanical stress attributes, all evolved in line with continuum mechanics principles. A defining characteristic of our method is the seamless integration between physical simulation and visual rendering: both components utilize the same 3D Gaussian kernels as their discrete representations. This negates the necessity for triangle/tetrahedron meshing, marching cubes, ''cage meshes,'' or any other geometry embedding, highlighting the principle of ''what you see is what you simulate (WS2).'' Our method demonstrates exceptional versatility across a wide variety of materials--including elastic entities, plastic metals, non-Newtonian fluids, and granular materials--showcasing its strong capabilities in creating diverse visual content with novel viewpoints and movements.
- [2024-03-27] Release a Colab notebook for quick start.
- [2024-03-03] Code Release.
- [2024-02-27] Our paper has been accpetd by CVPR 2024!
- [2023-12-20] Our MPM solver code is open sourced!
This repository uses original gaussian-splatting as a submodule. Use the following command to clone:
git clone --recurse-submodules git@github.com:XPandora/PhysGaussian.git
To prepare the Python environment needed to run PhysGaussian, execute the following commands:
conda create -n PhysGaussian python=3.9
conda activate PhysGaussian
pip install -r requirements.txt
pip install -e gaussian-splatting/submodules/diff-gaussian-rasterization/
pip install -e gaussian-splatting/submodules/simple-knn/
By default, We use pytorch=2.0.0+cu118.
We provide several pretrained Gaussian Splatting models and their corresponding .json
config files in the config
directory.
To simulate a reconstructed 3D Gaussian Splatting scene, run the following command:
python gs_simulation.py --model_path <path to gs model> --output_path <path to output folder> --config <path to json config file> --render_img --compile_video
The images and video results will be saved to the specified output_path.
If you want a quick try, run:
pip install gdown
bash download_sample_model.sh
python gs_simulation.py --model_path ./model/ficus_whitebg-trained/ --output_path output --config ./config/ficus_config.json --render_img --compile_video --white_bg
Hopefully, you will see a video result like this:
To generate custom dynamics, follow these guidelines:
Begin by reconstructing a 3D GS scene as per Gaussian Splatting.
Before simulating Gaussian kernels as continuum particles, perform the following preprocessing steps:
- Remove Gaussian kernels with low opacity.
- Rotate the 3D scene to make it align with the coordinate plane (e.g., bottom surface parallel to the xy plane).
- Define a cuboid simulation area.
- Center and scale the simulation area within a unit cube.
- Optionally, fill internal voids with particles.
Related parameters, such as rotation axis and degree, should be provided in the config file. For Nerf Synthetic Dataset, the reconstructed results typically already align with the axis. For custom datasets, we use 3D software, e.g. Houdini, to view the distribution of the Gaussian kernels and determine how to rotate and select the scene for simulation readiness.
A single .json
file should detail all data preprocessing and simulation parameters for each scene. Key parameters include:
- Data Preprocessing Parameters:
opacity_threshold
: Filters out Gaussian kernels with opacity below this threshold.rotation_degree (list)
androtation_axis (list)
: Rotate the scene to align with the grid.sim_area (list)
: Choose the particles within a bounding box for simulation. The expected format is[xmin, xmax, ymin, ymax, zmin, zmax]
.particle_filling (dict)
: Specify a cubic area to fill internal particles. Tuningdensity_threshold
andsearch_threshold
is usually needed for optimal filling results. See more details below.
- Simulation Parameters:
material
: Available material types includejelly
,metal
,sand
,foam
,snow
andplasticine
.E
: Young's modulusnu
: Poisson's Ratiodensity
: Material densityg
: Gravitysubstep_dt
: Simulation time step sizen_grid
: MPM grid sizeboundary_conditions (list)
: Boundary conditions can be enforced on either particles or grids, allowing manipulation of Gaussian kernels via external forces.
- Export Parameters:
frame_dt
: Duration of each frameframe_num
: Total number of frames to exportdefault_camera_index
: Camera view index from the training set
Please see sample config files under the config
folder for reference.
Optionally, we employ a ray-collision-based method to detect inner grids for particle filling. To use this, specify the following parameters:
n_grid
: Particle filling grid size.density_threshold
: Grid cells with density above this threshold will be treated as part of the surface shell.search_exclude_direction
: A parameter (list of ints) for internal filling condition 1 in PhysGaussian. We won't cast rays in these excluded directions. The mapping between ints and directions is: 0, 1, 2, 3, 4, 5 (+x, -x, +y, -y, +z, -z).ray_cast_direction
: tA parameter for internal filling condition 2 in PhysGaussian. Along this direction, we will detect the number of collision times. The mapping between ints and directions is the same assearch_exclude_direction
.max_particles_per cell
: The number of particles to fill for each grid cell.boundary
: Specify a well-reconstructed cubic area to perform particle filling.
Note: This particle filling algorithm is sensitive to Gaussian kernel distribution and may produce unsatisfying filling results if Gaussians are too noisy.
To fix or move the reconstructed object, specify the boundary condition either on grids or particles. Some commonly used boundary condition types include:
bounding_box
: Prevents particles from moving outside the MPM simulation area.cuboid
: Enforces a boundary condition on the grid. Also specify other necessary parameters:point
: Center of the cubic area, e.g.[1, 1, 1]
size
: Size of the cubic area (half of the width, height and depth), e.g.[0.2, 0.2, 0.2]
vecloticy
: Velocity assigned to the grids, e.g.[0, 0, 0]
start_time
andend_time
: Time duration of this boundary condition
enforce_particle_translation
: Enforces a boundary condition on particles with parameters similar to those for grids.
- Add more pretrained models.
@article{xie2023physgaussian,
title={PhysGaussian: Physics-Integrated 3D Gaussians for Generative Dynamics},
author={Xie, Tianyi and Zong, Zeshun and Qiu, Yuxing and Li, Xuan and Feng, Yutao and Yang, Yin and Jiang, Chenfanfu},
journal={arXiv preprint arXiv:2311.12198},
year={2023},
}