tileset.json
是 3D Tiles 标准(由 Cesium 主导制定,用于高效传输和渲染大规模 3D 地理空间数据的开放格式)的核心配置文件,相当于 3D 瓦片数据集的“索引目录”。它定义了瓦片的组织结构、数据格式、空间范围、层级关系等关键信息,让渲染引擎(如 Cesium、Three.js 等)能按需加载、拼接和渲染 3D 内容(如城市模型、地形、BIM 模型等)。
一、核心作用
- 描述数据集元信息:告诉引擎“这是什么数据”(如名称、版本、坐标系);
- 定义瓦片层级结构:说明数据如何按“分辨率/层级”拆分(如从低精度到高精度的瓦片树);
- 提供瓦片定位信息:每个瓦片的空间范围(如经纬度、包围盒),确保引擎知道瓦片对应现实中的位置;
- 指定瓦片加载路径:每个瓦片文件的 URL 或相对路径,引擎按此加载具体数据;
- 配置渲染参数:如瓦片的几何格式(如 glTF、B3DM)、纹理信息、LOD(细节层次)规则等。
二、关键字段解析(基于 3D Tiles 1.1 标准)
tileset.json
采用 JSON 格式,核心字段可分为“顶层元信息”“瓦片层级定义”“扩展配置”三类,以下是最常用的字段说明:
字段路径 | 类型 | 作用说明 |
---|---|---|
顶层元信息 | ||
asset | Object | 数据集基础信息,必选。 |
- version | String | 3D Tiles 版本(如 “1.1”),引擎据此解析格式。 |
- tilesetVersion | String | 自定义数据集版本(如 “v202405”),用于版本管理。 |
geometricError | Number | 整个数据集的“几何误差”(单位:米),必选。表示最顶层瓦片的精度(误差越小精度越高)。 |
root | Object | 瓦片树的根节点,必选。所有子瓦片通过根节点递归组织。 |
瓦片节点字段(root 及子瓦片) | ||
boundingVolume | Object | 瓦片的空间包围体,必选。引擎用它判断瓦片是否在视野内(用于“视锥体剔除”,减少加载量)。常见类型: - region :地理坐标系(WGS84)的矩形范围,格式 [西经, 南纬, 东经, 北纬, 最小高度, 最大高度] ;- box :笛卡尔坐标系的长方体,格式 [中心点X, 中心点Y, 中心点Z, 半长X, 半长Y, 半长Z] 。 |
geometricError | Number | 当前瓦片的几何误差(单位:米)。子瓦片的误差必须小于父瓦片(LOD 规则:视野越近,加载误差越小的高精度瓦片)。 |
refine | String | 瓦片更新策略,可选。决定子瓦片加载后如何替换父瓦片: - "REPLACE" :子瓦片完全替换父瓦片(常用,如建筑模型);- "ADD" :子瓦片叠加在父瓦片上(如精细纹理补充)。 |
content | Object | 当前瓦片的数据内容,可选(若为“空瓦片”,仅用于组织子瓦片)。 |
- uri | String | 瓦片数据文件的路径(如 tiles/level1/tile_0_0.b3dm ),支持绝对 URL 或相对路径。 |
- boundingVolume | Object | (可选)瓦片内容的精确包围体(比父节点 boundingVolume 更精细,优化剔除效率)。 |
children | Array | 子瓦片数组,可选。每个子元素是一个完整的“瓦片节点”(包含 boundingVolume 、geometricError 等字段),形成递归的瓦片树。 |
扩展配置 | ||
extensionsUsed | Array | 数据集使用的 3D Tiles 扩展(如 CESIUM_3D_TILES_BATCHED_3D_MODEL ),声明后引擎会加载对应扩展逻辑。 |
properties | Object | 瓦片的自定义属性(如建筑的“高度”“建成年份”),支持后续交互(如点击查询、属性筛选)。 |
三、典型示例(简化版)
以下是一个包含“根瓦片+2个子瓦片”的 tileset.json
示例,用于组织城市建筑模型(数据格式为 B3DM,即“批量 3D 模型瓦片”):
{
"asset": {
"version": "1.1",
"tilesetVersion": "v1.0"
},
"geometricError": 1000.0, // 根瓦片误差:1000米(低精度)
"root": {
"boundingVolume": {
"region": [116.3, 39.9, 116.4, 40.0, 0, 500] // 北京某区域:西经116.3,南纬39.9,东经116.4,北纬40.0,高度0-500米
},
"geometricError": 500.0,
"children": [
{
"boundingVolume": {
"region": [116.3, 39.9, 116.35, 40.0, 0, 500]
},
"geometricError": 100.0, // 子瓦片1误差更小(高精度)
"content": {
"uri": "tiles/child1.b3dm" // 子瓦片1的数据文件
}
},
{
"boundingVolume": {
"region": [116.35, 39.9, 116.4, 40.0, 0, 500]
},
"geometricError": 100.0,
"content": {
"uri": "tiles/child2.b3dm" // 子瓦片2的数据文件
}
}
]
}
}
四、常见应用场景
- 大规模地理空间 3D 可视化:如数字孪生城市(如上海数字孪生、雄安新区模型)、GIS 3D 地图(Cesium 平台常用);
- 高精度模型加载:如 BIM 建筑模型、工业设备模型(按层级拆分,避免一次性加载过大文件);
- 游戏/虚拟场景:大型开放世界游戏的地形、场景瓦片加载(类似 2D 游戏的瓦片地图,但为 3D)。
五、注意事项
- 版本兼容性:3D Tiles 1.0 和 1.1 存在部分字段差异(如 1.1 新增
content.boundingVolume
),需确认渲染引擎支持的版本; - 几何误差合理性:父瓦片误差需大于子瓦片,否则引擎可能无法正确触发 LOD 切换(导致精度异常或加载冗余);
- 路径正确性:
content.uri
若为相对路径,需以tileset.json
所在目录为基准,避免文件找不到; - 包围体精度:
boundingVolume
若过大,会导致引擎误判“瓦片在视野内”,加载不必要的瓦片(影响性能);若过小,可能导致瓦片漏加载(出现空白)。
如果需要更具体的配置(如结合 glTF 模型、添加自定义属性),可参考 Cesium 3D Tiles 官方文档。