Skip to content

In-For-Disaster-Analytics/PotreeConverter

 
 

Repository files navigation

About

PotreeConverter generates an octree LOD structure for streaming and real-time rendering of massive point clouds. The results can be viewed in web browsers with Potree or as a desktop application with PotreeDesktop.

Version 2.0 is a complete rewrite with following differences over the previous version 1.7:

  • About 10 to 50 times faster than PotreeConverter 1.7 on SSDs.
  • Produces a total of 3 files instead of thousands to tens of millions of files. The reduction of the number of files improves file system operations such as copy, delete and upload to servers from hours and days to seconds and minutes.
  • Better support for standard LAS attributes and arbitrary extra attributes. Full support (e.g. int64 and uint64) in development.
  • Optional compression is not yet available in the new converter but on the roadmap for a future update.

Altough the converter made a major step to version 2.0, the format it produces is also supported by Potree 1.7. The Potree viewer is scheduled to make the major step to version 2.0 in 2021, with a rewrite in WebGPU.

Publications

Getting Started

Tapis Application

The Tapis Application is available at: https://ptdatax.tacc.utexas.edu/workbench/applications

The goal of the Tapis Application is to generate Point Clouds and upload the files to a world-accessible location for easy sharing and visualization.

Note: When submitting jobs through the web interface, ensure the Archive Directory is set to:

/corral/utexas/BCS24011/ckan/lidar_files/${JobName}-${JobUUID}

How Does It Work?

The Tapis Application workflow:

  1. Processing: PotreeConverter processes your LAS/LAZ files and generates the octree structure in the job's output directory
  2. Scene Generation: A Python script automatically creates a scene.json file with the proper web URLs for viewing
  3. Archiving: Tapis automatically archives the output directory to /corral/utexas/BCS24011/ckan/lidar_files/${JobName}-${JobUUID}
  4. Web Access: The archived files become publicly accessible via the CKAN server at https://ckan.tacc.utexas.edu/lidar_files/${JobName}-${JobUUID}/

Important: Only the ptdatax system can write to the archive path. Jobs must be submitted through the proper Tapis interface.

Finding the Public URL

After your job completes successfully:

  1. Click on the "Output Location" link in the job status table
  2. Open the tapisjob.out file to find the public URL where your converted point cloud can be accessed
  3. Look for the "Scene URL" in the output logs - this is the direct link to your web-viewable point cloud

Docker (Recommended)

The easiest way to run PotreeConverter is using Docker:

  1. Pull the pre-built image:

    docker pull ghcr.io/in-for-disaster-analytics/potreeconverter:latest
  2. Or build locally:

    docker build -t potreeconverter .
  3. Run the converter:

    # Basic usage
    docker run -it --user $(id -u):$(id -g) \
      -v /path/to/input:/data \
      potreeconverter -i /data/input.laz -o /data/output
    
    # With sampling strategy
    docker run -it --user $(id -u):$(id -g) \
      -v /path/to/input:/data \
      potreeconverter -i /data/input.laz -o /data/output -m poisson

    Note: The --user $(id -u):$(id -g) flag ensures the container runs with your user permissions, allowing it to read input files and write output files.

TACC Usage with Apptainer

On TACC systems, use Apptainer (formerly Singularity) to run the container:

  1. Load the Apptainer module:

    module load tacc-apptainer
  2. Run PotreeConverter:

    # Basic usage
    apptainer exec docker://ghcr.io/in-for-disaster-analytics/potreeconverter:latest \
      PotreeConverter -i /path/to/input.laz -o /path/to/output
    
    # With sampling strategy
    apptainer exec docker://ghcr.io/in-for-disaster-analytics/potreeconverter:latest \
      PotreeConverter -i /path/to/input.laz -o /path/to/output -m poisson

    Note: Apptainer automatically maps your home directory and current working directory, so file paths work as expected without additional volume mounting.

Build from Source

  1. Download windows binaries or
    • Download source code
    • Install CMake 3.16 or later
    • Create and jump into folder "build"
      mkdir build
      cd build
      
    • run
      cmake ../
      
    • On linux, run: make
    • On windows, open Visual Studio 2019 Project ./Converter/Converter.sln and compile it in release mode
  2. run PotreeConverter.exe <input> -o <outputDir>
    • Optionally specify the sampling strategy:
    • Poisson-disk sampling (default): PotreeConverter.exe <input> -o <outputDir> -m poisson
    • Random sampling: PotreeConverter.exe <input> -o <outputDir> -m random

In Potree, modify one of the examples with following load command:

let url = '../pointclouds/D/temp/test/metadata.json';
Potree.loadPointCloud(url).then((e) => {
  let pointcloud = e.pointcloud;
  let material = pointcloud.material;

  material.activeAttributeName = 'rgba';
  material.minSize = 2;
  material.pointSizeType = Potree.PointSizeType.ADAPTIVE;

  viewer.scene.addPointCloud(pointcloud);
  viewer.fitToScreen();
});

Alternatives

PotreeConverter 2.0 produces a very different format than previous iterations. If you find issues, you can still try previous converters or alternatives:

PotreeConverter 2.0 PotreeConverter 1.7 Entwine
license free, BSD 2-clause free, BSD 2-clause free, LGPL
#generated files 3 files total 1 per node 1 per node
compression none (TODO) LAZ (optional) LAZ

Performance comparison (Ryzen 2700, NVMe SSD):

Bibtex

@article{SCHUETZ-2020-MPC,
	title =      "Fast Out-of-Core Octree Generation for Massive Point Clouds",
	author =     "Markus Schütz and Stefan Ohrhallinger and Michael Wimmer",
	year =       "2020",
	month =      nov,
	journal =    "Computer Graphics Forum",
	volume =     "39",
	number =     "7",
	doi =        "10.1111/cgf.14134",
	pages =      "13",
	publisher =  "John Wiley & Sons, Inc.",
	pages =      "1--13",
	keywords =   "point clouds, point-based rendering, level of detail",
}

About

Create multi res point cloud to use with potree

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • JavaScript 82.4%
  • C++ 9.0%
  • C 7.9%
  • HTML 0.3%
  • CSS 0.2%
  • Python 0.1%
  • Other 0.1%