tileset.json解析

#王者杯·14天创作挑战营·第5期#

tileset.json3D Tiles 标准(由 Cesium 主导制定,用于高效传输和渲染大规模 3D 地理空间数据的开放格式)的核心配置文件,相当于 3D 瓦片数据集的“索引目录”。它定义了瓦片的组织结构、数据格式、空间范围、层级关系等关键信息,让渲染引擎(如 Cesium、Three.js 等)能按需加载、拼接和渲染 3D 内容(如城市模型、地形、BIM 模型等)。

一、核心作用

  1. 描述数据集元信息:告诉引擎“这是什么数据”(如名称、版本、坐标系);
  2. 定义瓦片层级结构:说明数据如何按“分辨率/层级”拆分(如从低精度到高精度的瓦片树);
  3. 提供瓦片定位信息:每个瓦片的空间范围(如经纬度、包围盒),确保引擎知道瓦片对应现实中的位置;
  4. 指定瓦片加载路径:每个瓦片文件的 URL 或相对路径,引擎按此加载具体数据;
  5. 配置渲染参数:如瓦片的几何格式(如 glTF、B3DM)、纹理信息、LOD(细节层次)规则等。

二、关键字段解析(基于 3D Tiles 1.1 标准)

tileset.json 采用 JSON 格式,核心字段可分为“顶层元信息”“瓦片层级定义”“扩展配置”三类,以下是最常用的字段说明:

字段路径类型作用说明
顶层元信息
assetObject数据集基础信息,必选
- versionString3D Tiles 版本(如 “1.1”),引擎据此解析格式。
- tilesetVersionString自定义数据集版本(如 “v202405”),用于版本管理。
geometricErrorNumber整个数据集的“几何误差”(单位:米),必选。表示最顶层瓦片的精度(误差越小精度越高)。
rootObject瓦片树的根节点必选。所有子瓦片通过根节点递归组织。
瓦片节点字段(root 及子瓦片)
boundingVolumeObject瓦片的空间包围体必选。引擎用它判断瓦片是否在视野内(用于“视锥体剔除”,减少加载量)。常见类型:
- region:地理坐标系(WGS84)的矩形范围,格式 [西经, 南纬, 东经, 北纬, 最小高度, 最大高度]
- box:笛卡尔坐标系的长方体,格式 [中心点X, 中心点Y, 中心点Z, 半长X, 半长Y, 半长Z]
geometricErrorNumber当前瓦片的几何误差(单位:米)。子瓦片的误差必须小于父瓦片(LOD 规则:视野越近,加载误差越小的高精度瓦片)。
refineString瓦片更新策略,可选。决定子瓦片加载后如何替换父瓦片:
- "REPLACE":子瓦片完全替换父瓦片(常用,如建筑模型);
- "ADD":子瓦片叠加在父瓦片上(如精细纹理补充)。
contentObject当前瓦片的数据内容,可选(若为“空瓦片”,仅用于组织子瓦片)。
- uriString瓦片数据文件的路径(如 tiles/level1/tile_0_0.b3dm),支持绝对 URL 或相对路径。
- boundingVolumeObject(可选)瓦片内容的精确包围体(比父节点 boundingVolume 更精细,优化剔除效率)。
childrenArray子瓦片数组,可选。每个子元素是一个完整的“瓦片节点”(包含 boundingVolumegeometricError 等字段),形成递归的瓦片树。
扩展配置
extensionsUsedArray数据集使用的 3D Tiles 扩展(如 CESIUM_3D_TILES_BATCHED_3D_MODEL),声明后引擎会加载对应扩展逻辑。
propertiesObject瓦片的自定义属性(如建筑的“高度”“建成年份”),支持后续交互(如点击查询、属性筛选)。

三、典型示例(简化版)

以下是一个包含“根瓦片+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的数据文件
        }
      }
    ]
  }
}

四、常见应用场景

  1. 大规模地理空间 3D 可视化:如数字孪生城市(如上海数字孪生、雄安新区模型)、GIS 3D 地图(Cesium 平台常用);
  2. 高精度模型加载:如 BIM 建筑模型、工业设备模型(按层级拆分,避免一次性加载过大文件);
  3. 游戏/虚拟场景:大型开放世界游戏的地形、场景瓦片加载(类似 2D 游戏的瓦片地图,但为 3D)。

五、注意事项

  1. 版本兼容性:3D Tiles 1.0 和 1.1 存在部分字段差异(如 1.1 新增 content.boundingVolume),需确认渲染引擎支持的版本;
  2. 几何误差合理性:父瓦片误差需大于子瓦片,否则引擎可能无法正确触发 LOD 切换(导致精度异常或加载冗余);
  3. 路径正确性content.uri 若为相对路径,需以 tileset.json 所在目录为基准,避免文件找不到;
  4. 包围体精度boundingVolume 若过大,会导致引擎误判“瓦片在视野内”,加载不必要的瓦片(影响性能);若过小,可能导致瓦片漏加载(出现空白)。

如果需要更具体的配置(如结合 glTF 模型、添加自定义属性),可参考 Cesium 3D Tiles 官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软考鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值