3DTILESdracopoint_compression Extension
# 3DTILES_draco_point_compression Extension
# Overview
This extension adds Draco geometry compression (opens new window) to the Point Cloud tile format to support streaming compressed point data.
Draco compresses common properties such as position, color, and normal, as well as generic metadata such as intensity or classification.
This extension is based on Draco bitstream version 2.2 (opens new window), which is normative and included in scope.
# Point Cloud tile format updates
# Feature Table
The Feature Table of a Point Cloud tile may be extended to include a 3DTILES_draco_point_compression
object. This object defines
the compressed properties and the location of the compressed data in the Feature Table binary.
Below is an example of a Feature Table with the Draco extension set:
{
"POINTS_LENGTH": 20,
"POSITION": {
"byteOffset": 0
},
"RGB": {
"byteOffset": 0
},
"BATCH_ID": {
"byteOffset": 0,
"componentType": "UNSIGNED_BYTE"
},
"extensions": {
"3DTILES_draco_point_compression": {
"properties": {
"POSITION": 0,
"RGB": 1,
"BATCH_ID": 2
},
"byteOffset": 0,
"byteLength": 100
}
}
}
# properties
properties
defines the Feature Table properties stored in the compressed data. In the example above, positions, RGB colors, and batch IDs are compressed.
Each property defined in the extension must correspond to a semantic already defined in the Feature Table JSON.
When a semantic is compressed its byteOffset
property is ignored and may be set to zero. Its componentType
, if present,
defines the component type of the uncompressed data.
Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID.
Allowed properties are "POSITION"
, "RGBA"
, "RGB"
, "NORMAL"
, and "BATCH_ID"
.
# byteOffset
The byteOffset
property specifies a zero-based offset relative to the start of the Feature Table binary at which the compressed data starts.
# byteLength
The byteLength
property specifies the length, in bytes, of the compressed data.
# Schema updates
See Property reference for the 3DTILES_draco_point_compression
Feature Table schema reference. The full JSON schema can be found in 3DTILES_draco_point_compression.featureTable.schema.json.
# Batch Table
Per-point metadata can also be compressed. The Batch Table may be extended to include a 3DTILES_draco_point_compression
object that defines additional compressed properties.
Below is an example of a Batch Table with the Draco extension set:
{
"Intensity": {
"byteOffset": 0,
"type": "SCALAR",
"componentType": "UNSIGNED_BYTE"
},
"Classification": {
"byteOffset": 0,
"type": "SCALAR",
"componentType": "UNSIGNED_BYTE"
},
"extensions": {
"3DTILES_draco_point_compression": {
"properties": {
"Intensity": 3,
"Classification": 4
}
}
}
}
# properties
properties
defines additional Batch Table properties stored in the compressed data. In the example above, intensity and classification are compressed.
Each property defined in the extension must correspond to a property name already defined in the Batch Table JSON.
When a property is compressed its byteOffset
property is ignored and may be set to zero. Its componentType
and type
properties
define the component type and type, respectively, of the uncompressed data.
Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID.
byteOffset
and byteLength
are not defined in the Batch Table extension; all compressed data is stored in the Feature Table binary.
# Schema updates
See Property reference for the 3DTILES_draco_point_compression
Batch Table schema reference. The full JSON schema can be found in 3DTILES_draco_point_compression.batchTable.schema.json.
# Notes
If some properties are compressed and others are not, the Draco encoder must apply the POINT_CLOUD_SEQUENTIAL_ENCODING
encoding method.
This ensures that Draco preserves the original ordering of point data.
Implementation Note: Draco may reorder point data to achieve better compression and smaller file sizes. For best results, all properties in the Feature Table and Batch Table should be Draco compressed, in which case
POINT_CLOUD_SEQUENTIAL_ENCODING
should not be applied.
# Resources
This section is non-normative.
# Property reference
3DTILES_draco_point_compression Feature Table extension
3DTILES_draco_point_compression Batch Table extension
# 3DTILES_draco_point_compression Feature Table extension
Specifies the compressed Feature Table properties and the location of the compressed data in the Feature Table binary.
Properties
Type | Description | Required | |
---|---|---|---|
properties | object | Defines the properties stored in the compressed data. Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID. | ✅ Yes |
byteOffset | number | A zero-based offset relative to the start of the Feature Table binary at which the compressed data starts. | ✅ Yes |
byteLength | number | The length, in bytes, of the compressed data. | ✅ Yes |
# properties ✅
Defines the properties stored in the compressed data. Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID.
- Type:
object
- Required: Yes
- Type of each property:
number
# byteOffset ✅
A zero-based offset relative to the start of the Feature Table binary at which the compressed data starts.
- Type:
number
- Required: Yes
- Minimum:
>= 0
# byteLength ✅
The length, in bytes, of the compressed data.
- Type:
number
- Required: Yes
- Minimum:
>= 0
# 3DTILES_draco_point_compression Batch Table extension
Specifies the compressed Batch Table properties.
Properties
Type | Description | Required | |
---|---|---|---|
properties | object | Defines the properties stored in the compressed data. Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID. | ✅ Yes |
# properties ✅
Defines the properties stored in the compressed data. Each property is associated with a unique ID. This ID is used to identify the property within the compressed data. No two properties in the Feature Table and Batch Table may use the same ID.
- Type:
object
- Required: Yes
- Type of each property:
number