3D Tiles 中的 Composite Tile(cmpt
)格式介绍
3D Tiles 是一个用于表示大规模 3D 地理空间数据的开放格式,它能够高效地处理和呈现地理空间场景中的各种复杂对象,如城市建模、地形和其它 3D 数据。为了进一步优化数据流式传输并支持异构数据集的结合,3D Tiles 引入了 复合瓦片(Composite Tile,简称 cmpt
) 格式。该格式使得不同类型的瓦片可以组合成一个复合瓦片,从而减少请求次数并优化数据加载策略。
TilesBuilder: TilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。
1. 复合瓦片的概述
复合瓦片是 3D Tiles 中的一种新型瓦片格式,它支持将不同格式的瓦片组合成一个单一的瓦片。例如,在一个城市建模场景中,建筑物数据可能存储为 Batched 3D Model 瓦片,而树木数据则可能存储为 Instanced 3D Model 瓦片。使用复合瓦片格式后,建筑物和树木等不同类型的瓦片可以合并为一个单独的瓦片,方便进行整体传输和管理。
复合瓦片允许 内瓦片(intra-tile) 和 外瓦片(inter-tile) 两种灵活的组合方式:
- 内瓦片:不同瓦片格式组合在同一个复合瓦片中。
- 外瓦片:不同瓦片格式存储在同一个瓦片集(tileset)中。
这种方式使得开发者可以根据实际需求,在数据加载、可见性控制、请求优化等方面做出取舍。
2. 复合瓦片格式的布局
复合瓦片采用 二进制格式 存储,所有字段使用 小端字节序。其基本布局如下所示:
| Header (16 bytes) | Inner Tiles (binary) |
2.1 头部(Header)
复合瓦片的头部由 16 字节 组成,包含以下字段:
字段名 | 数据类型 | 描述 |
---|---|---|
magic | 4 字节 ANSI 字符串 | 固定值 "cmpt" ,用于标识复合瓦片格式。 |
version | uint32 | 版本号,目前版本为 1。 |
byteLength | uint32 | 复合瓦片的总字节长度(包括头部和内瓦片)。 |
tilesLength | uint32 | 复合瓦片中内瓦片的数量。 |
2.2 内瓦片(Inner Tiles)
复合瓦片的内瓦片紧随头部存储,每个内瓦片的数据也遵循特定的结构。每个内瓦片的头部由以下字段组成:
字段名 | 数据类型 | 描述 |
---|---|---|
magic | 4 字节 ANSI 字符串 | 标识内瓦片的格式(每种瓦片格式的 magic 值不同)。 |
version | uint32 | 内瓦片的版本号。 |
byteLength | uint32 | 内瓦片的字节长度(包括头部)。 |
需要注意的是,复合瓦片中的每个内瓦片的头部结构都是固定的,可以帮助解析器准确地找到各个瓦片的边界。
3. 填充和字节对齐
复合瓦片格式要求所有瓦片(包括复合瓦片本身和内部瓦片)都必须按照 8 字节对齐。这意味着每个瓦片的大小必须是 8 的倍数,这对于处理大规模的 3D 数据集非常重要,有助于提高数据访问效率。
4. 文件扩展名和 MIME 类型
复合瓦片文件通常使用 .cmpt
扩展名,但该扩展名并不是强制要求,实际的实现可以通过解析文件的 magic
字段来确定格式。
- 文件扩展名:
.cmpt
(可选) - MIME 类型:
application/octet-stream
5. 实现与应用
在实际应用中,复合瓦片格式允许将多个不同类型的瓦片文件组合成一个文件,这样可以减少传输的请求次数,并且支持更灵活的数据管理。以下是一些常见的实现示例:
- Python packcmpt 工具:作为
gltf2glb
工具集的一部分,packcmpt
工具能够将多个 Batched 3D Model 或 Instanced 3D Model 瓦片组合成一个复合瓦片文件。 - Cesium 实现:在 Cesium 中,
Composite3DTileContent.js
是用于读取复合瓦片头部和解析内部瓦片的代码,它帮助开发者理解如何在浏览器中处理复合瓦片。
6. 复合瓦片的优势
- 减少请求次数:通过将多个瓦片合并为一个复合瓦片,可以减少数据加载时的请求数量,进而提高加载效率。
- 灵活的数据管理:开发者可以根据需要将不同格式的瓦片组合成一个复合瓦片,方便管理和传输。
- 优化流式传输:复合瓦片格式使得不同类型的数据能够在同一个流中传输,从而优化带宽使用。
7. 结语
复合瓦片(cmpt
)格式为 3D Tiles 提供了更高的灵活性,尤其是在需要处理不同类型的 3D 数据集时。它的引入不仅使得瓦片的管理和传输变得更加高效,还能够为开发者提供更多控制流式传输和加载策略的能力。在未来的大规模 3D 地理空间数据应用中,复合瓦片将是一个非常有价值的工具。
TilesBuilder: TilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。
如果你有兴趣了解如何实现或使用复合瓦片格式,或者在具体的项目中遇到技术难题,可以随时向我咨询!