Point Cloud Tiler

Looking for on-premise 3D Tiling? Contact sales for an evaluation.

Contact sales

Setup

Extract the contents of Cesium-ion-3D-Tiling-Pipeline.zip.

The main executable is point-cloud-tiler and can be found under bin.

If you wish to run the examples download and extract SampleData.zip into a new SampleData directory.

Windows

Windows binaries require Visual C++ Redistributable for Visual Studio 2017. Download and run the installer.

Using the tiler

A typical tiler command follows the following format:

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i <input.las> -o <output-directory>

For example, a simple LAZ point cloud of a house is included at SampleData/House.laz. Tile it by running:

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o House_Tiles

This will produce a 3D Tiles tileset in the House_Tiles directory.

You can also convert all LAS files in a directory and recursively in its subdirectories.

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData -o House_Tiles

If the input point cloud is not georeferenced, longitude, latitude, and height above the WGS84 ellipsoid may be supplied as shown below.

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o House_Tiles --longitude=-105.290735 --latitude=40.040382 --height=1680.034796

The tiler has built-in support for Draco compression which is enabled by default. Configure the precision with:

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o Tileset --draco-precision-meters=0.005

To disable compression, use the following.

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o Tileset --compression=NONE

By default, the tiler preserves color, classification, and intensity per-point attributes. Use the following options to discard these attributes and reduce the tileset size.

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o House_Tiles --discard-color --discard-classification --discard-intensity

Memory usage and concurrency may be supplied for fine-grained control of system resources. When running inside Docker, it is recommended to set these manually since containerization prevents the tiler from querying system resources.

Copy to clipboard. Data copied clipboard.
point-cloud-tiler -i SampleData/House.laz -o House_Tiles --memory=16000 --concurrency=8

Note: When working with big point clouds, ensure that there is enough space on disk for temporary files used during tiling. Typically the amount of temporary space needed is no more than the size of the input point cloud. Temporary files are deleted when the tiler finishes.

Available options

Below is a full list of command line options to configure the tiler.

Basic options

Option Description Required Default
--help, -h Display help message.    
--version, -v Display version number.    
--input, -i One or more input files or directories (recursive). Supported types: .las, .laz.  
--output, -o The path to the output directory or a .3dtiles database file. Will overwrite the existing directory if found, or otherwise create a new directory.  
--quiet Suppress output during tiling.   false
--verbose Show verbose output.   false
--show-statistics-only Show statistics for the input point cloud. Does not run the tiler.   false
--memory, -m Limits the maximum memory used by the tiler in megabytes. By default, the tiler will use the available system memory. If the input point cloud exceeds this limit, the tiler will run in out-of-core mode. When running inside Docker, it is recommended to set this manually since containerization prevents the tiler from querying system resources.   System available.
--concurrency, -x Maximum number of cores to use for CPU processing. Actual utilization depends on system resources. When running inside Docker, it is recommended to set this manually since containerization prevents the tiler from querying system resources.   System available.
--io-concurrency Maximum number of concurrent threads to use for I/O processing. Defaults to the value used for concurrency. It is recommended to set this to 1 for slower storage devices such as hard disk drives.   concurrency
--compression The type of point compression to use. Options are DRACO, QUANTIZE, and NONE.   DRACO
--gzip Save the tileset with gzip compression.   false

Advanced options

Option Description Required Default
--working-directory Working directory for saving temporary files during tiling. Defaults to the system’s temporary directory. Typically the amount of temporary space needed is no more than the size of the input point cloud. This directory will be deleted when the tiler finishes.    
--draco-compression-level Draco compression level between 0 and 10. In general, the highest setting, 10, will have the most compression but worst decompression speed. 0 will have the least compression but best decompression speed. Does not affect precision.   7
--draco-precision-meters Precision in meters for Draco compression. Defaults to millimeter precision. Set to 0 for lossless compression, which produces larger tileset sizes.   0.001
--quadtree Whether to build a quadtree instead of an octree. This is often suitable for flatter point clouds, such as those produced by aerial LiDAR.   false
--well-known-text A file containing the Well-Known Text (WKT) representation of the input point cloud’s coordinate system. The WKT is used in place of the projection information from the input point cloud.    
--ignore-projection Ignore projection information contained in the input point cloud.   false
--longitude The longitude in EPSG:4326 coordinates (degrees) at which to place the point cloud’s origin when the point cloud is not georeferenced.    
--latitude The latitude in EPSG:4326 coordinates (degrees) at which to place the point cloud’s origin when the point cloud is not georeferenced.    
--height The height in meters relative to the WGS84 ellipsoid at which to place the point cloud’s origin when the point cloud is not georeferenced.    
--heading The rotation in degrees from the local north direction where a positive angle is increasing eastward. Only applicable when the point cloud is not georeferenced.   0.0
--pitch The rotation in degrees from the local east-north plane. Positive pitch angles are above the plane. Negative pitch angles are below the plane. Only applicable when the point cloud is not georeferenced.   0.0
--roll The rotation in degrees applied to the local east axis. Only applicable when the point cloud is not georeferenced.   0.0
--scale-x The amount to scale in the x dimension. Scaling is not applied if the point cloud is georeferenced.   1.0
--scale-y The amount to scale in the y dimension. Scaling is not applied if the point cloud is georeferenced.   1.0
--scale-z The amount to scale in the z dimension. Scaling is not applied if the point cloud is georeferenced.   1.0
--minimum-height The height in meters relative to the WGS84 ellipsoid below which points are removed. A simple metric for removing outliers.    
--maximum-height The height in meters relative to the WGS84 ellipsoid above which points are removed. A simple metric for removing outliers.    
--keep-outliers Bypass logic that detects and removes outliers.   false
--outlier-sigma-count For outlier detection, how many standard deviations from the mean a point has to be to be considered an outlier.   15
--outlier-sweep-count For outlier detection, caps how many iterations are performed to determine a best fit bounding volume.   2
--discard-color Discard per-point color attributes.   false
--discard-intensity Discard per-point intensity attributes.   false
--discard-classification Discard per-point classification attributes.   false
--pretty-json Write out tileset.json with human-readable formatting.   false
--tileset-version A version number or string to assign to the tileset. This is written to tileset.json and can be used as metadata to track changes.    

Next steps

Now that we’ve tiled our point clouds into 3D Tiles, the next step is to stream them into CesiumJS. All we need is a web server to host our tiles, and then we can pass a URL to our tileset as shown below.

Copy to clipboard. Data copied clipboard.
var viewer = new Cesium.Viewer('cesiumContainer');

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : '<URL to tileset.json>'
}));

viewer.zoomTo(tileset);

The Hosting 3D Content tutorial walks you through setting up the Cesium ion Asset Server and streaming 3D content into CesiumJS.

License

Third-party licenses used by the tilers can be found in ThirdParty.pdf.

Patents: US10438092B2