Immersive Visualization / IQ-Station Wiki

This site hosts information on virtual reality systems that are geared toward scientific visualization, and as such often toward VR on Linux-based systems. Thus, pages here cover various software (and sometimes hardware) technologies that enable virtual reality operation on Linux.

The original IQ-station effort was to create low-cost (for the time) VR systems making use of 3DTV displays to produce CAVE/Fishtank-style VR displays. That effort pre-dated the rise of the consumer HMD VR systems, however, the realm of midrange-cost large-fishtank systems is still important, and has transitioned from 3DTV-based systems to short-throw projectors.

LidarViewer

From IQ-Station Wiki
Jump to navigation Jump to search

LidarViewer is a virtual reality point-cloud rendering tool written using the Vrui VR integration library. Oliver Kreylos wrote this as part of his visualization suite for the UC-Davis Geology Department, where it was first deployed in the UC-Davis KECK-CAVES (a 4-sided CAVE installation).

While it is called "LidarViewer", it can handle point-clouds generated by any means, including photogrammetry.

Software

The LidarViewer package actually provides a suite of tools to process and manipulate point cloud files, with the eponymous flagship tool the one that permits a user to view and interact with the point data through an immersive interface.

The LidarViewer suite can be downloaded from:

Demonstrating LidarViewer

Rendering a point-cloud

As the "LidarViewer" tools makes use of an Oct-tree (octree) structure to determine how best to render a point-cloud, this structure must be pre-generated by the "LidarPreprocessor" tool. The "LidarPreprocessor" takes point-cloud data from a number of different comment formats, creates the Oct-tree, and writes the results into a directory with specific files, including an Oct-tree index file. When using "LidarViewer", point-cloud datasets (can be more than one) are specified by providing the name of the directory(s) created by "LidarPreprocessor".

For example, if one has point cloud data in space-separated ASCII columns (SSV), and this data has color (R,G,B) values for each point, one might do:

% LidarPreprocessor -np 4096 -o myRoom.LiDAR -xyzrgb myRoomPoints.txt
% LidarViewer myRoom.LiDAR

The suite of tools

The full suite of tools that are created when building the package include:

  • LidarViewer — the flagship tool that allows for immersive interaction with point-cloud data
  • LidarPreprocessor — convert a point-cloud dataset into a binary octree directory
  • LidarExporter — convert a LidarViewer data directory into ASCII, binary or LAS format file
  • LidarSubtractor — remove a collection of points from an existing LidarViewer dataset
  • LidarIlluminator — generates a "Normals" file for the point-cloud data
  • CalcLasRange — provide general information about an LAS point-cloud data file (e.g. the bounds)
  • PaulBunyan — not sure, but probably something to do with deforestation if I had to guess
  • LidarColorMapper
  • LidarGridder
  • LidarSpotRemover
  • PointSetSimilarity
  • PrintPrimitiveFile

The LidarViewer data format

As mentioned, for rapid rendering of ultra-large point-cloud datasets, and the increase and reduction of resolution for more distant regions of the data, LidarViewer has it's own Oct-tree (octree) data format, which consists of a directory containing two to four different files, each with specific types of information. (Often these directories will erroneously be called a "file", but in fact they are a collection of files that are used together.)

When specifying a dataset to process or view, only the directory name containing the data needs to be provided. The files therein all must follow a very specific naming convention. (And all manipulation of these files is handled by the tools listed above — with the exception of the "Unit" file, which is a simple ASCII description of the data's unit of measurement.)

  • Index — information about the Octree index (binary)
  • Points — location, intensity and color values of each point (binary)
  • Normals[optional] normal directions of each point (binary)
  • Unit — an ASCII file that declares the unit values of the point data. E.g. "1.0 kilometer"

LidarPreprocessor

Before running "LidarViewer" one must process existing data into the oct-tree format that enables "LidarViewer" to efficiently render the scene. The "LidarPreprocessor" tool is how point-cloud data is processed into the efficient oct-tree format required by "LidarViewer"

LidarPreprocessor Command-Line Arguments

There are a handful of command line options that are used to load data into the pre-processor:

LidarViewer command line options
Option Affect
-np <integer> Maximum number of points per node.
-header <integer> Number of header-lines in the input file — i.e. the number of lines to skip before reading actual data.
-o <directory-name> The name of a directory into which to write the Oct-tree formatted data.
-c <red> <green> <blue> Color-scaling values to apply to the data.
input file data See below for separate chart of the available input types and their parameters.

Datafile formats

Several types of datafiles are accepted for the LidarPreprocessor <filename> arguments:

LidarPreprocessor input file types
Extension Type
-bin binary x,y,z,i tuple format
-binrgb binary x,y,z,r,g,b tuple format
-las 16-bit data per voxel
-ascii <X> <Y> <Z> <I> Give the column numbers in which to find the x,y,z,i values
-csv <X> <Y> <Z> <I> Give the column numbers in which to find the x,y,z,i — where columns are separated by commas
-asciirgb Give the column numbers in which to find the x,y,z,r,g,b values
-csvrgb Give the column numbers in which to find the x,y,z,r,g,b values — where columns are separated by commas
-xyzi shorthand for "-ascii 0 1 2 3"
-xyzrgb shorthand for "-ascii 0 1 2 3 4 5"

LidarViewer

LidarView Command-Line Arguments

LidarViewer has a handful of command line options that are used to load data into the application:

LidarViewer command line options
Option Affect
-loadView <filename> Jump to a specific viewpoint (and scale-size) as stored in the given file.
-memoryCacheSize <megabytes> Set the amount of memory for caching data
-graphicsCacheSize <megabytes> Set the amount of memory on the GPU for caching data (best if larger than "memoryCacheSize"
-renderQuality <float-scalar> Set the render quality value (1.0 is "normal"). Can also be adjusted in-app.
-focusAndContextWeight <float-scalar> (not sure)
-pointSize <float-scalar> Set the initial size at which points will be rendered. (Not sure of the units). Can also be adjusted in-app.
-enableLighting Sets the initial state of in-scene lighting to "true". Can also be adjusted in-app.
-usePointColors Sets the initial state of point rendering to use the value of the point. Can also be adjusted in-app.
-sceneGraph <filename> Load the given scene-graph file into the application
-rootSection <config-section> The Vrui option used to select a particular configuration

LidarViewer run-time controls

(To be added) Hints:

  • select/deselect point sets
  • save selected point sets
  • take measurements
  • set the units
  • calculate mathematical amalgamated values of a point set selection

See Also

Here are some other resources for the LidarViewer tool.

About LidarViewer

Papers referencing LidarViewer

Available Lidar data

General Lidar Information