在学习的过程中,接触到了 3Dtiles 和tileset json ,发现官方文档讲的十分详细,但是可读性很差,就干脆一劳永逸,自己学习的时候顺便翻译一下,方便自己后续回顾和小伙伴的学习
Introduction (简介)
3D tiles被设计用于流式传输和渲染大量3D地理空间内容(如摄影测量、3D建筑、BIM/CAD、实体特征和点云)。它定义了一种分层数据结构和一套可提供可渲染内容的瓦片格式。3D tiles没有为内容的可视化定义明确的规则;客户端可以根据自己的需要对 3D Tiles 数据进行可视化。
在 3D Tiles 中,瓦片集是在空间数据结构(树)中组织的一组瓦片。瓦片集由至少一个瓦片集 JSON 文件描述,该文件包含瓦片集元数据和瓦片对象树,每个瓦片对象都可引用以下格式之一的可呈现内容:
格式 | 用途 |
Batched 3D Model (b3dm) | 批量3D模型 |
Instanced 3D Model (i3dm) | 实例3D模型(用于表示大量重复的模型实例,如建筑或树木,这有助于提高渲染效率) |
Point Cloud (pnts) | 点云(可以存储大量的点,每个点包含位置、颜色和其他属性信息) |
Composite (cmpt) | 复合数据(用于组合多种类型的3D Tiles数据,例如同时包含点云和3D模型的数据集) |
Json | Tileset JSON 文件,用于描述整个数据集的结构和层级,包含对各个数据块(如 b3dm 或 i3dm 文件)的引用 |
注:这些格式的具体介绍可看其他文档或者博客介绍。
3DTiles是一个抽象的数据定义,表现在其没有统一的数据格式,而仅仅是一种命名(也就是说Cesium中的数据到处都可以称为3DTiles格式,但到底什么是3DTiles格式呢?并没有统一的数据格式)。
3D Tiles 是一种用于流式传输大型三维地理空间数据集的开放规范,主要由 Cesium 创造。实际上它定义数据的基本框架是瓦片集,瓦片集包括瓦片集数据(tileset.json)和瓦片数据(tile),其中瓦片数据可以是多种文件类型。
瓦片集数据是对整个瓦片集的说明以及瓦片的空间组织结构的存储,瓦片数据负责存储单个瓦片内的所有三维地理信息数据,包括模型数据、属性数据等。 原文链接:https://blog.csdn.net/angins/article/details/104852684
Cesium相关3D数据简介_b3dm和3dtiles区别-CSDN博客
传统的3D数据格式并不适合大规模地理空间数据集的高效流式传输和渲染。3D Tiles 旨在解决这个问题,通过分层级和按需加载的方式,使得大型数据集可以在各种设备上高效地渲染和导航,无论数据集有多大。
瓦片的内容(瓦片格式的单个实例)是一个二进制 blob,具有特定于格式的组件,包括一个 Feature Table和一个 Batch Table。
具体内容包含一些地物信息,如代表建筑物或树木的三维模型,或者是点云中的点。每个地物的纹理特征和位置信息都存储在瓦片的特征表中(tile's Feature Table,),其他特定于应用程序的属性存储在批处理表中(Batch Table)。客户端可以在运行时选择特征,并检索其属性以进行可视化或者分析。
b3dm(The Batched 3D Model )和 i3dm (Instanced 3D Model) 格式是基于 glTF 构建的,glTF 是一种开放式规范,用于高效传输 3D 内容。这些格式的瓦片内容在二进制体中嵌入了包含模型几何和纹理信息的 glTF ,而点云格式不嵌入 glTF。
瓦片是以树形结构组织的,这种树形结构结合了分层详细程度(HLOD)的概念,用于优化空间数据的渲染。每个tile都有一个边界体(bounding volume),用于包含该tile呈现的内容。树状结构具有空间连贯性;子瓦片的内容完全位于父瓦片的边界容积内。
瓦片集可以使用类似于光栅和矢量瓦片方案(如网络地图瓦片服务(WMTS)或 XYZ 方案)的二维空间瓦片方案,该方案提供多个详细程度(或缩放程度)的预定义瓦片。不过,由于瓦片集的内容通常是不均匀的,或者可能不容易仅以两个维度进行组织,因此树可以是任何具有空间连贯性的空间数据结构,包括 k-d 树、四叉树、八叉树和格网。
Tileset JSON
3D tiles 使用一个主要的 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 有四个顶级属性:asset、properties、geometricError 和 root。
asset 是一个包含整个tileset元数据的对象。asset.version 属性是一个定义 3D Tiles 版本的字符串,它指定了瓦片集的 JSON 模式和瓦片格式的基本集。tilesetVersion 属性是一个可选字符串,用于定义特定于应用程序的瓦片集版本
properties 是一个对象,包含tileset中每个特征属性的对象。此瓦片集 JSON 代码段用于 3D 建筑,因此每个瓦片都有建筑模型,每个建筑模型都有高度属性。属性中每个对象的名称都与每个特征属性的名称相匹配,其值定义了最小和最大数值,这些数值对于创建样式的颜色斜坡等非常有用。
https://blog.csdn.net/u013929284/article/details/138187004
(未完待继续)