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

Paper PDF Project Page Project Page

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, or auto
  • 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:

  1. Phase 1 (geometry warmup): no_albedo=True, white albedos, rendering loss trains only the SDF
  2. Intermediate mesh extraction + scene renormalization + albedo ratio computation
  3. 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

OptionDefaultDescription
trainer.max_steps20000Total training iterations
dataset.scaling_modeauto (SfM) / scale_mat (RNb)Scene normalization method
dataset.sphere_scale1.0Phase 1 bounding sphere radius
model.geometry.isosurface.resolution512Marching cubes grid resolution
system.save_imagesfalseSave 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}
}