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
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-Cave (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:
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:
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:
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:
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
- Oliver's main LidarView page
- Source code download page
- Oliver Kreylos' blog page on LidarViewer (currently down)
- Oliver Kreylos' blog page on LidarViewer (on the Wayback machine)
- LiDAR Viewer with Oculus and Hydra (YouTube video)
- Instructional documentation from Oregon State U
- SDSC 3-page tutorial on using LidarViewer (pdf)
Papers referencing LidarViewer
- Old publication about usage after Haiti earthquake (pdf)
- Old publication about usage after Haiti earthquake (online version)
- Detailed reconstruction of trees from terrestrial laser scans for remote sensing and radiative transfer modelling applications
Available Lidar data
- Open Topography
- Indiana state data
- Pennsylvania state data
- Home scans by the Wisconsin Institute of Discovery
General Lidar Information
- USGS site
- Introduction to Lidar by MathWorks
- Overall Lidar concepts/software
- LidarView by Kitware — A different open-source point-cloud software system with a similar name
- StackExchange question about Linux lidar viewers GIS StackExchange article with link to LidarViewer
- old Geo-software page that mentions building LidarViewer