This repository contains the reference implementation of NFL-BA (Near-Field Light Bundle Adjustment).
NFL-BA is implemented as a plug-and-play photometric optimization module, and in this repo we demonstrate it on top of the MonoGS SLAM / reconstruction backbone.
The idea from this paper (correcting the image formulation model and bundle adjustment) works on multiple different backbones
- Backbone: MonoGS (monocular Gaussian splatting SLAM / reconstruction).
- Approach: Plug-and-play near-field lighting bundle adjustment:
- We keep the overall MonoGS pipeline intact.
- We introduce a physically motivated near-field lighting model into the renderer and loss.
- Main code changes:
- Renderer:
- Extensions to the rendering code to model near-field illumination (e.g., inverse-square falloff, angle-dependent terms).
- Loss functions:
- Modifications to incorporate the near-field photometric residuals into the optimization.
- Renderer:
- Other changes:
- Minor changes to the CUDA rasterizer.
- Minor adjustments in configuration files and experiment scripts to enable NFL-BA.
The environment and dependencies are intended to be identical or very close to the original MonoGS implementation.
conda env create -f environment.yml
conda activate MonoGS
pip install -e submodules/diff-gaussian-rasterizationUse the same Python version, CUDA / PyTorch versions, and compilation steps recommended by MonoGS.
Below are example commands for reproducing experiments on C3VD and on self-captured data. Adjust paths as needed.
python slam.py \
--config configs/mono/c3vd/base_config.yaml \
--experiment c3vd \
--depth c3vd \
--scene /path/to/C3VD/cecum_t1_a_under_reviewKey arguments:
--config: Base configuration file for MonoGS + NFL-BA on C3VD.--experiment: Experiment tag (c3vdin our setup).--depth: Depth mode (c3vduses the dataset depth maps, whileppsuses depth predicted by PPSNet).--scene: Path to the specific C3VD sequence.
For our own self-captured sequences (e.g., pooled data from real-world scenes), we use:
python slam.py \
--config configs/rgbd/wild/base_config.yaml \
--experiment wild \
--scene /path/to/data/pool_ONAgain, you should adapt:
--configto match your configuration for self-captured RGBD or monocular data.--sceneto the directory containing your sequence.
If you find this code useful in your research, please cite:
@inproceedings{
beltran2025nflba,
title={{NFL}-{BA}: Near-Field Light Bundle Adjustment for {SLAM} in Dynamic Lighting},
author={Andrea Dunn Beltran and Daniel Rho and Marc Niethammer and Roni Sengupta},
booktitle={The Thirty-ninth Annual Conference on Neural Information Processing Systems},
year={2025},
url={https://openreview.net/forum?id=AmZ7uHDJiR}
}- This codebase is built on top of MonoGS, and we are grateful to the original authors for releasing their implementation.
- Please also cite the MonoGS paper and repository if you build on this work.
- Release per-scene training / reconstruction code used in the paper.
- Release self-captured data
- Release evaluation scripts for pose and reconstruction metrics.