Official implementation of Neural Particle Automata: Learning Self-Organizing Particle Dynamics (SIGGRAPH 2026).
pip install -r requirements.txtWe use nanobind to bind the CUDA kernels.
cd sphops
./build.sh # Linux
./build.ps1 # WindowsThe code has been tested across multiple CUDA and PyTorch versions. For best results we recommend CUDA 13.0 and PyTorch 2.12. After building, run the test suite to verify the kernels compiled correctly and pass the numerical correctness tests:
python3 test.pypython3 train.py --config configs/growing.yaml
python3 train.py --config configs/texture.yaml
python3 train_dataset.py --config configs/point_mnist.yaml
python3 train_3dgs.py --config configs/growing-3dgs.yaml # Download dataset firstAll training configs except growing-3dgs.yaml can run on RTX 2080 with 8GB VRAM.
For growing-3dgs.yaml, reduce batch_size in the config to fit in the small VRAM GPUs.
You can also run the growing experiment end-to-end in your browser (no local setup) via the Colab notebook:
To deploy trained models on the interactive web demo, see SelfOrg-NPA/SelfOrg-NPA.github.io.
We provide two pretrained models in data/pretrained:
lizard.pth— Growing a morphology experimentpolka_dotted.pth— Texture experiment
Set graft_path in your config to one of these models to improve training stability and convergence.
The transparent texture dataset can be downloaded here and should be placed in data/transparent_textures.
For 3DGS morphogenesis, nerf-synthetic dataset can be downloaded here and should be placed in data/nerf_synthetic.
For PointMNIST classification, the code will automatically download MNIST dataset and convert to PointMNIST on the first run.
Later runs will use cached PointMNIST dataset saved in data/point-MNIST-512.
- Google Colab notebook
- Self-classifying particles experiment
- Growing a 3D morphology using Gaussian splats
