Skip to content

Soldann/surf-leaf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Surf-LEAF

Surf-LEAF (Surface-Level Extraction with Advancing Front Reconstruction Meshing) is a custom mesh extraction pipeline tailored for Gaussian Splatting reconstructions in urban environments.

Surf-LEAF Pipeline

Gaussian Splatting is a recent point-based scene representation that enables real-time, high-fidelity novel view synthesis across large-scale scenes. While it excels in rendering, extracting high-quality meshes from Gaussian reconstructions remains a challenge—especially in urban scenes where sharp edges, low-contrast surfaces, and sparse regions can degrade mesh fidelity.

We demonstrate improved mesh quality over existing techniques like DN-Splatter, achieving a 10% reduction in Chamfer distance on the TartanAir dataset.

Table of Contents

Installation

Prerequisites:

  1. Clone the repository and its submodules by running:
git clone https://github.com/Soldann/surf-leaf.git
cd surf-leaf
  1. Load your nerfstudio conda environment:
conda activate nerfstudio
  1. Install the package and its dependencies:
pip install -e .

Usage

The surf_leaf package provides a command line interface to run the mesh extraction pipeline. The basic usage is as follows:

surf-leaf --load_config /<Path to your run>/config.yml

This will load the Gaussian Splatting reconstruction from the specified path and run the mesh extraction pipeline with default parameters.

A full table of parameters:

Parameter Type Default Description
load_config Path REQUIRED Path to the trained config YAML file.
output_dir Path "./mesh_exports/" Path to the output directory.
total_points int 2_000_000 Total number of surface samples to extract.
use_masks bool False If dataset has masks, use them to restrict surface sampling.
surface_levels List[float] [0.3] Surface level isosurfaces to extract.
return_normal "analytical", "closest_gaussian", "average" "closest_gaussian" Strategy for estimating normals from Gaussians.
cropbox_pos Optional[Tuple[float, float, float]] None Position of the cropbox center (x, y, z).
cropbox_rpy Optional[Tuple[float, float, float]] None Orientation of cropbox in roll, pitch, yaw (radians).
cropbox_scale Optional[Tuple[float, float, float]] None Scale (size) of the cropbox.
voxel_size float 0.4 Voxel size used during meshing.
margin_seam float 0.04 Seam margin used during meshing.
margin_discard float 0.04 Discard margin used during meshing.
max_edge_length float 1.0 Maximum triangle edge length in the mesh.
postprocess_alpha_fraction float 0.001 Alpha wrapping ball size fraction.
postprocess_stepsmoothnum int 1 Number of HC Laplacian smoothing steps.
postprocess_targetperc float 0.6 Target reduction percentage for mesh simplification.

Example

For our example scene we use the TartanAir dataset, specifically the abandoned_factory/P001 scene. We use the Tartan to Nerfstudio Converter to convert the dataset to a Nerfstudio-compatible format. This includes camera poses, images, and depth images.

We use QED-Splatter to train a Gaussian Splatting reconstruction of the scene.

After training, we can extract the mesh using Surf-LEAF:

surf-leaf --load_config /outputs/qed-splatter/2025-06-23_022015/abandoned_factory/P001/config.yml \
          --cropbox_scale 2.0 2.0 2.0

This will extract the mesh from the Gaussian Splatting reconstruction, using a cropbox scale of 2.0 in all dimensions. The resulting mesh will be saved in the mesh_exports directory, with the name based on the scene and timestamp.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages