3dTile技术研究-概念详述(4)

上篇:3dTile技术研究-概念详述(3)

1. Tileset JSON

3D Tiles使用一个主要的tileset JSON文件作为定义的整个tileset的入口点。入口tileset和外部的tileset JSON文件都不需要遵循特定的命名规范。

下面是Canary Wharf使用的tileset的一个片段(可以在这里看到完整文件tileset.json):

{
  "asset" : {
    "version": "1.0",
    "tilesetVersion": "e575c6f1-a45b-420a-b172-6449fa6e0a59",
  },
  "properties": {
    "Height": {
      "minimum": 1,
      "maximum": 241.6
    }
  },
  "geometricError": 494.50961650991815,
  "root": {
    "boundingVolume": {
      "region": [
        -0.0005682966577418737,
        0.8987233516605286,
        0.00011646582098558159,
        0.8990603398325034,
        0,
        241.6
      ]
    },
    "geometricError": 268.37878244706053,
    "refine": "ADD",
    "content": {
      "uri": "0/0/0.b3dm",
      "boundingVolume": {
        "region": [
          -0.0004001690908972599,
          0.8988700116775743,
          0.00010096729722787196,
          0.8989625664878067,
          0,
          241.6
        ]
      }
    },
    "children": [..]
  }
}

tileset JSON有4个顶级属性:asset、propertiesgeometricError、和root

asset属性是一个包含关于整个tileset的元数据的对象。asset.version属性是一个定义了3D Tiles的版本字符串,它制定了tileset的JSON模式和基础的tile格式集。tilesetVersion属性是一个可选的字符串,它定义了tileset特定于程序的版本,比如当一个tileset更新了。

properties是包含了tileset中每个对象(feature)属性的对象。这个tileset JSON片段是3D建筑的,所以每一个tile都包括多个建筑对象,且每个建筑对象由一个Height属性(参考Batch Table)。properties中的每个对象的名称是和每个对象(feature)属性的名字匹配的,且它的值定义了最大最小数值,这时有用的,比如对于创建样式的色带时。

batch table片段:

{
    "height" : {
        "byteOffset" : 0,
        "componentType" : "FLOAT",
        "type" : "SCALAR"
    },
    "geographic" : {
        "byteOffset" : 40,
        "componentType" : "DOUBLE",
        "type" : "VEC3"
    }
}

geometricError是一个定义了以米为单位的的非负数值,它决定tileset是否需要渲染。在运行时,geometricError用来计算以像素度量的Screen-Space Error (SSE)。如果SSE没有超出最低要求,就不需要渲染tileset,同时不需要考虑渲染它的任何tile,详细参考Geometric error。

注意:tileset的geometricError决定tileset是否被渲染,也就是root tile是否被渲染;而root tile的geometricError决定了其children是否需要被渲染,即root tile是否需要被细化。

root是一个使用了上述章节提到的tile JSON来定义root tile的对象。root.geometricError和tileset顶级的geometricError不同的是:tileset的geometricError是用来在运行时基于计算的SSE判断是否需要渲染tileset的root tile;而root.geometricError是用来在运行时基于计算的SSE判断是否需要渲染root tile的children的。

 

2. 外部的tileset(External tilesets)

为了创建一个树的树(即嵌套的树,并非子树),tile的content.uri可以指向一个外部的tileset(另一个tileset JSON文件的uri)。这可以使,比如将每一个城市存储到一个tileset中,然后这些tileset共同组成了一个全局的tileset这种场景成为可能。

.

3dTile技术研究-概念详述(4)_第1张图片

当tile指向了外部的tileset时:该tile需要遵守以下规则:

  • 不能包含任何children;tile.children必须是未定义的或者空的数组。
  • 不能被用来循环引用,比如,指向了包含当前tile的tileset文件或者指向了另一个又指回了当前tileset文件的tileset文件。
  • 外部的tileset中的tile要被当前tile和root tile的transform作用。比如,下面的tileset引用了一个外部的tileset,那么对于T3的转换矩阵计算后是这样的:[T0][T1][T2][T3]

3dTile技术研究-概念详述(4)_第2张图片

 

3. 包围体的空间连贯性

如上所述,tileset的tree结构具有空间连贯性;每个tile有一个完全包含了它本身内容的包围体,同时该包围体也完全包含它的children tiles(如果有的话)的内容。但这并不意味着child tile的包围体要被它parent tile的包围体所包含。比如下面的例子:

 

3dTile技术研究-概念详述(4)_第3张图片

地球tile的包围球

3dTile技术研究-概念详述(4)_第4张图片

地球tile的4个child tile的包围体。child tile的内容完全包含在parent tile的包围体中,但是child tile的包围体并没有,因为它不是紧密适合的。

 

传送:

3dTile技术研究-开篇

3dTile技术研究-概述

3dTile技术研究-概念详述(1)

3dTile技术研究-概念详述(2)

3dTile技术研究-概念详述(3)

你可能感兴趣的:(BIM,图形学,lod,3dtiles,cesium,BIM,图形学)