Markus Schütz, Lukas Herzberger, Michael Wimmer
Paper: "SimLOD: Simultaneous LOD Generation and Rendering"
Binaries: SimLOD 1.0 (May require a CUDA 11.8 installation due to hot reload? We'll work on a standalone binary)
This project loads point clouds, creates an LOD structure on-the-fly, and immediatelly displays the results in real time.
On an RTX 4090 and PCIe 5.0 SSD (12GB/s), we are able to load and real-time render point clouds at rates of about 200-300 million points per second (MP/s) from the LAS format, 30 MP/s from compressed LAZ files, and up to 580 MP/s from an optimal XYZRGBA(16bytes/point) format.
Right now we only display data sets that fit in GPU memory, but support for arbitarily large point clouds is in development.
Figure: Drag&Dropping 680 million points (11GB). Loaded in 1.7 seconds (400 MP/s; 6.4GB/s). |
The generated LOD structure is an octree that stores voxels in inner nodes and original point cloud data in leaf nodes [WBB08]. Voxels are created by sampling on a 128³ grid. Due to the sparsity in surfacic data sets, the voxels themselves are stored in lists instead of grids. In order to support growing amounts of voxels and points as new data is inserted into the octree, we use linked lists of chunks of points/voxels.
During rendering, a CUDA kernel first computes a list of visible octree nodes. Each node is then rendered by one workgroup that iterates through the node's chunks and the stored points and voxels, and draws them with atomic operations.
- CUDA Toolkit 12.4
- Prebuilt binaries are available at the release page: https://github.com/m-schuetz/SimLOD/releases/
- Create Visual Studio 2022 project files:
mkdir build
cd build
cmake ../ -G "Visual Studio 17 2022" -A x64
- Open build/SimLOD.sln
- Switch to Release mode
- Compile and Run (Ctrl + F5)
- Drag&Drop point clouds in *.las, *.laz or *.simlod format into the application.
mkdir out && cd out # Create a build directory
cmake .. && make # Configure CMake and build the SimLOD target
./SimLOD # Run SimLOD
- The environment variable
CUDA_PATH
needs to point to the install location of CUDA Toolkit 11.8 (e.g.,/usr/local/cuda-11.8
) - If you want to modify and hot reload CUDA code at runtime, make sure to set the work directory to the top-most folder of this repository instead of the binary target path. The project loads cuda files located relative to "./modules".
File | Description |
---|---|
main_progressive_octree.cpp | C++ entry point. |
render.cu | CUDA kernel that renders the scene. |
progressive_octree_voxels.cu | CUDA kernel that incrementally updates the octree. |
Different subsets of San Simeon, specifically the Morro Bay area, are provided as test data. Each archive contains the same point cloud in las, laz and simlod formats.
The full San Simeon data set (18 billion points) is available at Open Topography:
PG&E Diablo Canyon Power Plant (DCPP): San Simeon and Cambria Faults, CA. Distributed by OpenTopography. https://doi.org/10.5069/G9CN71V5 . Accessed: 2023-10-05
@article{SimLOD, title = "SimLOD: Simultaneous LOD Generation and Rendering", author = "Markus Schütz and Lukas Herzberger and Michael Wimmer", year = "2024", month = may, journal = "Proceedings of the ACM in Computer Graphics and Interactive Techniques", volume = "7", note = "Source Code: https://github.com/m-schuetz/SimLOD", keywords = "point-based rendering", }
Most relevant related work:
- [WBB08] WAND, MICHAEL, BERNER, ALEXANDER, BOKELOH, MARTIN, et al. “Processing and interactive editing of huge point clouds from 3D scanners”. Computers & Graphics 32.2 (2008), 204–220 2–4,10.
- [GM04] GOBBETTI, ENRICO and MARTON, FABIO. “Layered Point Clouds: A Simple and Efficient Multiresolution Structure for Distributing and Rendering Gigantic Point-sampled Models”. Comput. Graph. 28.6 (2004), 815–826 2, 3.
- [SKKW23] SCHÜTZ, MARKUS, KERBL, BERNHARD, KLAUS, PHILIP, and WIMMER, MICHAEL. GPU-Accelerated LOD Generation for Point Clouds. Feb. 2023.