README.md
March 5, 2026 · View on GitHub
Open-RNb
Open-source Reflectance and Normal-based
Multi-View 3D Reconstruction
A fully open-source reimplementation of
RNb-NeuS2
No proprietary CUDA libraries — runs out of the box with standard PyTorch + tiny-cuda-nn.
Robin Bruneau★ · Baptiste Brument★
Yvain Quéau · Jean Mélou · François Lauze · Jean-Denis Durou · Lilian Calvet
★ corresponding authors
Overview
This repository is a clean, open-source reimplementation of the RNb-NeuS2 method.
RNb-NeuS reconstructs high-quality 3D surfaces from multi-view normal and reflectance (albedo) maps estimated by photometric stereo methods such as SDM-UniPS and Uni-MS-PS.
Built on instant-nsr-pl with NeuS as the underlying signed distance function (SDF) representation, the method combines normal supervision with a two-phase albedo scaling pipeline to produce accurate geometry even when per-view reflectance maps have inconsistent scales.
Features
- Two dataset backends: RNb (cameras.npz) and SfM (Meshroom / AliceVision JSON)
- Two-phase training with automatic albedo scaling
- Scene normalization:
scale_mat,point_cloud,silhouette,camera, orauto - PLY mesh export with optional vertex colors
Meshroom Plugin
A ready-to-use Meshroom plugin is available at meshroomHub/mrOpenRNb. It wraps Open-RNb as a native Meshroom node so you can integrate neural surface reconstruction directly into your photogrammetry pipeline without command-line usage.
Requirements
- Python 3.10+
- CUDA 12.x + NVIDIA GPU (RTX 2080 Ti or newer)
tinycudann,nerfacc 0.3.3,torch_efficient_distloss
See docs/install.md for detailed setup instructions.
Data
RNb format (cameras.npz)
data/<scene>/
albedo/ 000.png, 001.png, ...
normal/ 000.png, 001.png, ...
mask/ 000.png, 001.png, ...
cameras.npz
Pre-built datasets (DiLiGenT-MV, LUCES-MV, Skoltech3D) with normals and reflectance from SDM-UniPS and Uni-MS-PS are available on Google Drive.
SfM format (Meshroom JSON)
Provide separate .sfm / .json files for normals, albedos, and masks.
Views are matched by viewId across files.
dataset:
name: sfm
normal_sfm: path/to/normalSfm.json
albedo_sfm: path/to/albedoSfm.json # optional
mask_sfm: path/to/maskSfm.json # optional
Training
Single command
# RNb dataset
python launch.py --config configs/rnb.yaml --gpu 0 --train \
dataset.scene=golden_snail \
dataset.root_dir=./data/golden_snail
# SfM dataset
python launch.py --config configs/sfm.yaml --gpu 0 --train \
dataset.scene=golden_snail \
dataset.normal_sfm=data/golden_snail/normalSfm.json \
dataset.albedo_sfm=data/golden_snail/albedoSfm.json \
dataset.mask_sfm=data/golden_snail/maskSfm.json
Two-phase training (albedo scaling)
When albedos are available, training automatically uses two phases:
- Phase 1 (geometry warmup):
no_albedo=True, white albedos, rendering loss trains only the SDF - Intermediate mesh extraction + scene renormalization + albedo ratio computation
- Phase 2 (full training): fresh model with scaled albedos
Control via config:
system:
albedo_scaling:
enabled: null # null=auto, true/false to force
warmup_ratio: 0.1 # Phase 1 = 10% of total steps
n_samples: 2000 # Pixel samples per view for ratios
intermediate_mesh_resolution: 512
sphere_scale_p2: 1.5 # Phase 2 bounding sphere radius
Key options
| Option | Default | Description |
|---|---|---|
trainer.max_steps | 20000 | Total training iterations |
dataset.scaling_mode | auto (SfM) / scale_mat (RNb) | Scene normalization method |
dataset.sphere_scale | 1.0 | Phase 1 bounding sphere radius |
model.geometry.isosurface.resolution | 512 | Marching cubes grid resolution |
system.save_images | false | Save validation/test images |
Tests
pip install pytest
python -m pytest tests/ -v
Tests mock CUDA dependencies and run on CPU.
Acknowledgements
This work is supported by DOPAMIn (Diffusion Open de Photogrammétrie par AliceVision/Meshroom pour l'Industrie), selected in the 2024 cohort of the OPEN programme run by CNRS Innovation. OPEN supports the valorization of open-source scientific software by providing dedicated developer resources, governance expertise, and industry partnership support.
Lead researcher: Jean-Denis Durou, IRIT (INP-Toulouse)
Citation
@article{bruneau25,
title={{Multi-view Surface Reconstruction Using Normal and Reflectance Cues}},
author={Robin Bruneau and Baptiste Brument and Yvain Qu{\'e}au and Jean M{\'e}lou and Fran{\c{c}}ois Bernard Lauze and Jean-Denis Durou and Lilian Calvet},
journal={International Journal of Computer Vision (IJCV)},
year={2025},
eprint={2506.04115},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2506.04115},
}
@inproceedings{brument24,
title={{RNb-NeuS: Reflectance and Normal-based Multi-View 3D Reconstruction}},
author={Baptiste Brument and Robin Bruneau and Yvain Qu{\'e}au and Jean M{\'e}lou and Fran{\c{c}}ois Lauze and Jean-Denis Durou and Lilian Calvet},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
year={2024}
}
@misc{instant-nsr-pl,
Author = {Yuan-Chen Guo},
Year = {2022},
Note = {https://github.com/bennyguo/instant-nsr-pl},
Title = {Instant Neural Surface Reconstruction}
}