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.
Difference between revisions of "LidarViewer"
(Expanded the suite of tools, the data format, and the See-Also section) |
m (Added a picture, a link, and emboldened main list items) |
||
Line 2: | Line 2: | ||
LidarViewer is a virtual reality point-cloud rendering tool written using the [[Vrui]] VR integration library. | 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, | 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- | where it was first deployed in the [https://web.cs.ucdavis.edu/~okreylos/ResDev/KeckCAVES UC-Davis KECK-CAVES] (a 4-sided CAVE installation). | ||
While it is called "LidarViewer", it can handle point-clouds generated by any means, | While it is called "LidarViewer", it can handle point-clouds generated by any means, | ||
Line 14: | Line 14: | ||
The LidarViewer suite can be downloaded from: | The LidarViewer suite can be downloaded from: | ||
* [https://web.cs.ucdavis.edu/~okreylos/ResDev/LiDAR/LinkDownload.html LidarViewer Download page] | * [https://web.cs.ucdavis.edu/~okreylos/ResDev/LiDAR/LinkDownload.html LidarViewer Download page] | ||
[[File:BC_IUPUI_6659m.jpg|thumb|right|300px|Demonstrating LidarViewer]] | |||
==Rendering a point-cloud== | ==Rendering a point-cloud== | ||
Line 33: | Line 35: | ||
The full suite of tools that are created when building the package | The full suite of tools that are created when building the package | ||
include: | include: | ||
* ''LidarViewer'' — the flagship tool that allows for immersive interaction with point-cloud data | * '''''LidarViewer''''' — the flagship tool that allows for immersive interaction with point-cloud data | ||
* ''LidarPreprocessor'' — convert a point-cloud dataset into a binary octree directory | * '''''LidarPreprocessor''''' — convert a point-cloud dataset into a binary octree directory | ||
* ''LidarExporter'' — convert a LidarViewer data directory into ASCII, binary or LAS format file | * '''''LidarExporter''''' — convert a LidarViewer data directory into ASCII, binary or LAS format file | ||
* ''LidarSubtractor'' — remove a collection of points from an existing LidarViewer dataset | * '''''LidarSubtractor''''' — remove a collection of points from an existing LidarViewer dataset | ||
* ''LidarIlluminator'' — generates a "Normals" file for the point-cloud data | * '''''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) | * '''''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 | * ''PaulBunyan'' — not sure, but probably something to do with deforestation if I had to guess | ||
Line 63: | Line 65: | ||
data's unit of measurement.) | data's unit of measurement.) | ||
* ''Index'' — information about the Octree index (binary) | * '''''Index''''' — information about the Octree index (binary) | ||
* ''Points'' — location, intensity and color values of each point (binary) | * '''''Points''''' — location, intensity and color values of each point (binary) | ||
* ''Normals'' — ''[optional]'' normal directions 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" | * '''''Unit''''' — an ASCII file that declares the unit values of the point data. E.g. "1.0 kilometer" | ||
=LidarPreprocessor= | =LidarPreprocessor= |
Latest revision as of 11:17, 31 January 2025
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:
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