Giter Club home page Giter Club logo

simlod's Introduction

SimLOD: Simultaneous LOD Generation and Rendering

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.

(a) Inner node with voxels. (b) Leaf node with points. (c) LOD (d) Point/Voxel storage via linked-lists
Figure: Inner nodes comprise representative voxels with a resolution of 128³ and leaf nodes store the full-precision point cloud data. We render the LOD at a resolution that results in pixel-sized voxels to give the impression of looking at the full-res data.

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.

Getting Started

Install Dependencies

  • CUDA Toolkit 11.8

Build & Run

Prebuilt windows binaries

Windows with Visual Studio 2022

  • 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.

Windows or Linux with CMake

mkdir out && cd out         # Create a build directory
cmake .. && make            # Configure CMake and build the SimLOD target
./SimLOD                    # Run SimLOD

Notes

  • 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".

Software Architecture

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.

Data Sets

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

Bibtex

@article{SimLOD,
    title =      "SimLOD: Simultaneous LOD Generation and Rendering",
    author =     "Markus Schütz and Lukas Herzberger and Michael Wimmer",
    year =       "2023",
    month =      oct,
    journal =    "Arxiv",
    keywords =   "point-based rendering",
}

References

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.

simlod's People

Contributors

m-schuetz avatar mrnerf avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.