3DTiles之cmpt介绍

3D Tiles 中的 Composite Tile(cmpt)格式介绍

3D Tiles 是一个用于表示大规模 3D 地理空间数据的开放格式,它能够高效地处理和呈现地理空间场景中的各种复杂对象,如城市建模、地形和其它 3D 数据。为了进一步优化数据流式传输并支持异构数据集的结合,3D Tiles 引入了 复合瓦片(Composite Tile,简称 cmpt 格式。该格式使得不同类型的瓦片可以组合成一个复合瓦片,从而减少请求次数并优化数据加载策略。

TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

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 字节 组成,包含以下字段:

字段名数据类型描述
magic4 字节 ANSI 字符串固定值 "cmpt",用于标识复合瓦片格式。
versionuint32版本号,目前版本为 1。
byteLengthuint32复合瓦片的总字节长度(包括头部和内瓦片)。
tilesLengthuint32复合瓦片中内瓦片的数量。
2.2 内瓦片(Inner Tiles)

复合瓦片的内瓦片紧随头部存储,每个内瓦片的数据也遵循特定的结构。每个内瓦片的头部由以下字段组成:

字段名数据类型描述
magic4 字节 ANSI 字符串标识内瓦片的格式(每种瓦片格式的 magic 值不同)。
versionuint32内瓦片的版本号。
byteLengthuint32内瓦片的字节长度(包括头部)。

需要注意的是,复合瓦片中的每个内瓦片的头部结构都是固定的,可以帮助解析器准确地找到各个瓦片的边界。

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. 复合瓦片的优势

  1. 减少请求次数:通过将多个瓦片合并为一个复合瓦片,可以减少数据加载时的请求数量,进而提高加载效率。
  2. 灵活的数据管理:开发者可以根据需要将不同格式的瓦片组合成一个复合瓦片,方便管理和传输。
  3. 优化流式传输:复合瓦片格式使得不同类型的数据能够在同一个流中传输,从而优化带宽使用。

7. 结语

复合瓦片(cmpt)格式为 3D Tiles 提供了更高的灵活性,尤其是在需要处理不同类型的 3D 数据集时。它的引入不仅使得瓦片的管理和传输变得更加高效,还能够为开发者提供更多控制流式传输和加载策略的能力。在未来的大规模 3D 地理空间数据应用中,复合瓦片将是一个非常有价值的工具。

TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。
请添加图片描述

如果你有兴趣了解如何实现或使用复合瓦片格式,或者在具体的项目中遇到技术难题,可以随时向我咨询!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值