[ICML 2026] EnerGS: Energy-Based Gaussian Splatting with Partial Geometric Priors
Rui Song1,2, Tianhui Cai1, Markus Gross3, Yun Zhang1, Walter Zimmer1, Zhiyu Huang1, Olaf Wysocki2, Jiaqi Ma1
1University of California, Los Angeles 2University of Cambridge 3Technical University of Munich
EnerGS reformulates partial geometric supervision in 3D Gaussian Splatting as a continuous energy field that provides soft, observability-aware guidance during optimization. Instead of treating LiDAR (or any partial geometric prior) as a hard constraint, EnerGS partitions space into Occupied / Free / Unknown regions and induces an adaptive potential landscape over them, enabling robust reconstruction in LiDAR-blind but camera-visible areas while still rejecting floaters in certified free space.
git clone --recursive https://github.com/ucla-mobility/EnerGS.git
cd EnerGSOption A: Provided environment file (CUDA 12.1)
conda env create -f gs_cuda12.yaml
conda activate gs_cuda12Option B: Manual setup
conda create -n energs python=3.10
conda activate energs
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install plyfile tqdm scipy numpy pillow lpipspip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
pip install submodules/fused-ssim # optional, faster SSIMEnerGS expects:
- A standard 3DGS-style COLMAP scene.
- A pre-computed geometric field cache
field_cache.npz(Euclidean Distance Transform + region labels derived from LiDAR ray-tracing). The toolkit that generates this cache will be released alongside the dataset bundle.
Expected layout:
<scene>/
├── images/
├── sparse/0/
│ ├── cameras.bin
│ ├── images.bin
│ └── points3D.bin
└── field_cache.npz # geometric energy / gradient field
python train_energs.py \
-s <path/to/scene> \
-m <output/path> \
--field_npz <path/to/field_cache.npz> \
--iterations 30000 \
--evalKey EnerGS-specific flags:
| Flag | Default | Description |
|---|---|---|
--energs_w_occ |
1.0 | Attractor weight in occupied space |
--energs_sigma_occ |
1.0 | Welsch kernel bandwidth (m) in occupied space |
--energs_w_unk |
0.25 | Weak attractor weight in unknown space |
--energs_barrier_lambda |
2.0 | Boltzmann/Softplus barrier strength in free space |
--energs_relax_lr |
0.005 | Geometric relax step size η_μ |
--energs_prune_free |
False | Enable discrete FREE-space pruning |
python render.py -m <output/path>
python metrics.py -m <output/path>Reported metrics include PSNR / SSIM (photometry) and Leak / OccCov / Margin / Thick (geometry), measured against a unified voxelized occupancy field derived from LiDAR.
EnerGS/
├── train_energs.py # Main training entrypoint
├── render.py # Novel-view rendering
├── metrics.py # PSNR / SSIM / geometry metrics
├── energs/ # EnerGS core module
│ ├── geometric_energy.py # E_occ / E_free / E_unk and gradient field
│ ├── gaussian_model.py # GaussianModelEnerGS (decoupled update)
│ └── coverage.py # Coverage modulation / FREE pruning
├── scene/ # Scene loading (COLMAP + field cache)
├── gaussian_renderer/ # Differentiable rasterization wrappers
├── arguments/ # CLI argument definitions
└── submodules/ # CUDA extensions
EnerGS is built on top of 3D Gaussian Splatting by Kerbl et al. We thank the authors of 3DGS, 2DGS, Taming-3DGS, GeoGaussian, Mip-Splatting, Scaffold-GS, Street Gaussians, SplatAD, and the broader Gaussian Splatting community for releasing their code.
If you find this repository useful for your research, please consider giving us a star and citing our paper.
@inproceedings{song2026energs,
title={EnerGS: Energy-Based Gaussian Splatting with Partial Geometric Priors},
author={Song, Rui and Cai, Tianhui and Gross, Markus and Zhang, Yun and Zimmer, Walter and Huang, Zhiyu and Wysocki, Olaf and Ma, Jiaqi},
booktitle={Proceedings of the International Conference on Machine Learning (ICML)},
year={2026}
}