[Cesium好好学习]3D Tiles 规范解读

3D Tiles 规范定义了两部分, 和 gltf 一样将场景组织索引树和模型数据块文件分离.

在 3D Tiles 规范中, 场景通过 tiles.json 文件组织, 该文件描述了场景层级结构和 LOD 逻辑.

数据结构

{
  // 元数据存放字段.
  "asset": {
    // 3D Tiles 规范的适用版本号
    "version": "1.0"
  },
  "geometricError": 100,
   // 根瓦片
  "root": {
    "boundingVolume": {
      // 包围体不仅仅可以是一个包围盒.还可以是是包围球,最小最大精度以及高程定义的地理区域
      // region 则表示的是地理区域. WGS84/EPSG:4326坐标系
      "region": [
        // 
        -1.3197209591796106,
        0.6988424218,
        -1.3196390408203893,
        0.6989055782,
        0,
        67.00999999999999
      ]
    },
    // 几何容差, 单位是米
    "geometricError": 100,
    "refine": "ADD",
    // 子瓦片结构列表, 叶子瓦片 children 长度为 0 .
    "children": [
      {
        // 子瓦片的包围盒不大于父瓦片, 且被完全包裹. 子瓦片可以以任意形式分割父瓦片.
        "boundingVolume": {
          "region": [
            -1.3197209591796106,
            0.6988424218,
            -1.3196390408203893,
            0.6989055782,
            0,
            20
          ]
        },
        // 子瓦片的容差不大于父瓦片
        "geometricError": 70,
        "content": {
          "url": "city/tileset.json"
        }
      },
      {
        "transform": [
          4.843178171884396,
          1.2424271388626869,
          0,
          0,
          -0.7993230372483163,
          3.115888059101095,
          3.827835456922795,
          0,
          0.9511613309563466,
          -3.7077778261067222,
          3.2167803336138237,
          0,
          1215011.9317263428,
          -4736309.3434217675,
          4081602.0044800863,
          1
        ],
        "boundingVolume": {
          "box": [
            0,
            0,
            6.701,
            1.869,
            0,
            0,
            0,
            1.86,
            0,
            0,
            0,
            6.701
          ]
        },
        "geometricError": 0,
        "content": {
          "url": "building.b3dm"
        }
      },
      {
        "transform": [
          0.9686356343768792,
          0.24848542777253732,
          0,
          0,
          -0.15986460759301988,
          0.6231776123790458,
          0.7655670908997338,
          0,
          0.19023226607079735,
          -0.7415555647517257,
          0.6433560672996863,
          0,
          1215012.2075631288,
          -4736310.4186773375,
          4081602.937346383,
          1
        ],
        "viewerRequestVolume": {
          "sphere": [
            0,
            0,
            0,
            15
          ]
        },
        "boundingVolume": {
          "sphere": [
            0,
            0,
            0,
            1.25
          ]
        },
        "geometricError": 0,
        "content": {
          "url": "points.pnts"
        }
      }
    ]
  }
}

上边提到的 EPSG:4326 含义可查阅 [GIS一二三]EPSG标准.

模型数据块由多种格式够成, 它们分别有不同的文件编码规则.

*.b3dm

Batched 3D Model. 通常用于存储 纹理地形和表面, 建筑物内外表面, 大量的模型实体.

*.i3dm

Instanced 3D Model. 枚举模型单元, 用于存储一些将会 大量重复 出现的物品.

*.pnts

Point Cloud. 点云存储格式. 使用一个包含 headerbody的数据结构存储.

点云数据库存储结构

*.cmpt

Composite. 混合数据结构, 将多种格式的模型文件打包存储为一个大区块.

Composite 数据结构