3D Tiles是流式传输大规模异构地理空间数据集的开放标准;
3D Tiles是为了流式传输和渲染大规模3D地理空间数据(如摄影测量、3D建筑、BIM/CAD、实例化对象和点云)而设计的。它定义了分层的数据结构和提供渲染内容的Tile格式数据集。3D Tiles并没有为如何渲染数据定义明确的规则,客户端可以根据需要来决定如何渲染3D Tiles数据。
原文中的model、feature很多场景下都是指基本的对象(如构件),当然3D Tiles中没有构件的概念,构件是业务上的概念,这里以构件或其他基本对象理解会比较容易。
3D Tiles数据格式主要是作为入口的分层数据结构(tree)和其引用的具体内容数据(.b3dm、.i3dm、.pnts、.cmpt)构成,分层数据结构将具体数据内容组织起来共同表达完整的模型,甚至更大规模的GIS体量模型集。
3D Tiles是开放的规范,其为了方便流式传输和渲染大规模数据而设计,但对于具体如何去渲染并没有明确的规定,甚至对于格式的规范也是较为宽松的和灵活的,如对入口的分层数据结构(tileset树)主要约定了
- 是一棵树;
- 且树节点的boundingBox包含其内容以及其节点内容(即后文会提到的空间连贯性)
而具体该树是二叉树、四叉树、八叉树、其他类型的树没有规定,因为也不需要去规定,除了更好的组织数据方便渲染外,该树的主要目的是方便在渲染时快速判断哪些Tile是可见的,只有对可见的Tile才需要继续进行计算处理来进行对应详细程度数据的加载。
在3D Tiles中,tileset 是用空间数据结构(树)组织起来的tile集合,一个tileset 由至少一个 包含了tileset元数据和tile对象树的 tileset json文件来表达,每个tile对象可能引用了如下格式之一的可渲染数据内容:
Format | Uses |
---|---|
Batched 3D Model (b3dm ) |
异构3D模型。例如带纹理的地形和表面,3D建筑外部和内部,大型模型。 |
Instanced 3D Model (i3dm ) |
3D模型实例。例如树木,风车,螺栓。 |
Point Cloud (pnts ) |
大量的点。 |
Composite (cmpt ) |
将不同格式的Tile合并为一个Tile。 |
tile的内容(tile格式的单独实例)是包含一个Feature Table 和一个Batch Table的特定格式的多个组件的二进制数据。
tile的内容引用了一组features,例如代表建筑物或树木或点云中的点的3D模型。每个feature都有存储在tile的Feature Table中的位置和外观属性,以及存储在Batch Table中的特定于应用程序的其他属性。客户端可以选择在运行时选择features,并获取其属性以进行可视化或分析。
Batched 3D Model(.b3dm)和Instanced 3D Model(.i3dm)格式是基于glTF构建的,glTF是为高效传输3D数据而设计的开放规范。这些格式的tile内容嵌入了glTF资源,其中的二进制部分包含几何和纹理信息。点云格式并没有嵌入glTF。
tile被组织成一棵树,其中包含了为优化空间数据渲染的层次细节级别(HLOD)的概念。每个tile都有一个包围盒,即一个定义了完全包含其内容的空间范围。树具有空间连贯性,tile的child tiles的内容完全包含在它的包围体中(见上文,为了快速的判断tile的可见性)。
虽然tile的包围体需要完全包含它的child tiles的内容,但这并不意味着其child tiles的包围体要被它的包围体完全包围。因为没有必要这样,对树具有空间连贯性的要求是为了更快速的判断tile的可见性。
一个tileset可以使用类似于栅格和矢量切片方案的2D空间切片方案(例如Web地图切片服务(WMTS)或XYZ方案),该二维空间切片方案以几个细节级别(或缩放级别)提供预定义的切片。但是,由于tileset的内容通常是不一致的,或者可能不容易仅在二维上组织,因此树可以是具有空间连贯性的任何空间数据结构,包括kd树,四叉树,八叉树和网格。
可选地,可以将3D Tiles样式或style应用于tileset。style定义要评估的表达式,这些表达式修改每个feature的显示方式。
3D Tiles 使用以下的文件扩展名和MIME types。
.json
extension and the application/json
MIME type。.json
扩展名和application/json
MIME类型。Explicit file extensions are optional. Valid implementations may ignore it and identify a content's format by the magic
field in its header.
显式的文件扩展名是可选的。一个有效的实现可能会忽略扩展名,并通过其标头中的magic
字段标识内容的格式(见b3dm格式说明)。
3D Tiles对JSON格式和编码具有以下限制。
3D Tiles使用URI来引用tile内容。这些URI可以指向相对外部引用(RFC3986),也可以是将资源嵌入JSON的数据URI。嵌入式资源使用“数据” URI方案(RFC2397)。
如果URI是相对的,则其始终相对于引用的tileset JSON文件。
需要客户端实现来支持相对的外部引用和嵌入式资源。可选地,客户端实现可以支持其他方案(例如http://
)。所有URI必须有效且可解析。
所有线性距离的单位是米。
所有角度均以弧度为单位。
3D Tiles使用右手笛卡尔坐标系;也就是说,x和y的叉积得出z。3D Tiles将z轴定义为局部笛卡尔坐标系的上轴(Z-UP)。tileset的全局坐标系通常位于earth-centered的WGS 84,earth-fixed(ECEF)的参考系(EPSG 4978)中,但不是必须这样,例如,一个发电厂可以完全定义在没有地理空间上下文的建模工具使用的局部坐标系中。
可以对tile应用附加的tile transform来将其从局部坐标系变换到其parent tile的坐标系中。
region包围体使用地理坐标系(纬度,经度,高度),特别的是EPSG 4979来指定空间范围。
region包围体比较类似于AABB包围盒,由于是使用地理坐标系的,region包围体形状上是
传送:
3dTile技术研究-开篇