cesium之3D Tiles Next(下一代的3D Tiles)介绍
1. 概述
英文原文链接:传送门。英文好的可以直接看原文哈,本文加了自己的一点理解,若有出错的地方,请大家批评指正。
3D Tiles Next
的核心仍是大规模流式传输三维数据,3D Tiles Next是一组扩展,可以更好地:
- 有效流式传输语义元数据
- 空间索引性能优化
- glTF生态集成
3D Tiles Next
的扩展支持跨设备的向开放元宇宙类似于游戏流式传输的地理空间体验,包括当今和未来的VR和AR可穿戴设备。3D Tiles Next利用5G、云端边缘计算,在开放和可操作的生态系统中提高三维地理空间体验。
2. 元数据的有效流式传输
在3D Tiles Next
中,元数据的可用性和用户需求增加。就像今天车辆、传感器、计算机和摄影测量不断提高的几何和纹理分辨率捕捉现实世界的趋势一样,今天的人工智能算法越来越多地丰富元数据,以增加3D模型。
从3D Tiles
开始,需要通过存储这些元数据,如建筑物ID、点云分类,以及几何和纹理数据来实现可视化。这样元数据通常用于样式设置和筛选,例如基于分类的颜色渐变来从整体结构中区分植物,以及基于用户交互的考虑,在鼠标悬停时显示建筑物的楼层数。
3D Tiles Next
引入了新的元数据扩展:
- 明确定义了类型系统和更多的编码选项,如二进制或JSON;
- 更多存储层级的扩充,可以是纹理单元或者瓦片单元
- 规范了元数据的格式,促进特定领域语义扩展的生态。
与3D Tiles 1.0
使用Batched Table
存储元数据的方式类似,3D Tiles Next
遵循了3D Tiles的性能优势:批量处理。很多逻辑要素(例如单体建筑)及其元数据,在运行时将会被预先批处理成网格或者图形API绘制指令,但他们仍旧可以被唯一标识,因此每个瓦片运行时的处理更少,渲染对CPU的负担更小。
2.1 类型系统
新的3D元数据规范(传送门)定义了类型系统和元数据的编码方法。
3D Tiles 1.0依赖于JSON的类型系统,3D Tiles Next具有更强的类型,包括类、向量和矩阵的类型。
元数据的编码方式有:
- 二进制格式
- JSON格式
- 栅格格式
2.2 不同层级
使用3DTILES_metadata
和EXT_mesh_features
(glTF扩展)两个扩展项,3D Tiles Next可以在各个层级存储元数据,包括:
Tileset
(瓦片集)层级Tile/Tile Content Group
(瓦片或瓦片组)层级Feature
(要素)层级GPU
绘制实例层级Vertex
(顶点)层级Texel
(纹素)层级
示例如下:
纹素级别作为最精细的层级,允许元数据在此级别上变化。例如,使用两个三角形构成四边形,作为建筑物的一侧墙面,然后应用元数据纹理来定义其玻璃、砖和石头材质。这些都可以在分析中交互,例如光线如何在传播中反射,以及渲染过程中,如何将元数据映射到glTF
的基于物理渲染(PBR
)材质。
下图对倾斜摄影测量数据使用纹素级别的元数据,左侧显示要素分类的每个纹素颜色,右侧分类用于确定渲染材质属性。
2.3 语义规范
3D Tiles Next
旨在以整个世界的数字表示形式实现类似游戏的元宇宙体验。因此需要表示每个城市、每幢建筑物、每个房间和每个对象的元数据,还需要知道元数据的语义,以便应用程序如何使用元数据进行交互。例如水泥地和草地的摩擦系数会影响车辆的行进速度等。
3D Tiles Next提供元数据基础
以促进生态建设。在该生态中,各领域专家可以创建3D Tiles扩展来定制特定领域元数据的字典和每个属性的语义。例如在土方施工过程中,将材料库存(如石头、黏土)等定义语义,方便计算体积和面积。
3. 空间索引增强
3D Tiles Next优化了空间分割
方式,实现了更快速的空间查询、空间分析,有利于基于GIS和生态系统模拟的交互。
自3D Tiles 1.0以来,人们对大规模数据的分析和模拟越来越感兴趣。3D Tiles Next的控件数据结构不仅优化了可视化流,还优化了大规模模拟和分析,其中光线追踪和邻近查找算法均受益于空间分割。
由于这种空间分割方式,3D Tiles可以扩展到庞大的模型。一个模型被分成许多称为瓦片的流式块,然后创建瓦片的层级细节模型结构来增强使用核外层级细节技术基于云的视图流。
在3D Tiles 1.0
中,空间分割在一个或多个tileset.json
文件中明确定义,即每块瓦片的外包范围、内容、子瓦片等。
这种设计比使用全局四叉树的传统二维地图瓦片的组织方式更加通用。3D Tiles 1.0的空间分割方式可以自由搭配选择,需要遵循子瓦片的内容完全在父瓦片的空间范围内这一原则,实现运行时从任何来源流式传输3D Tiles。
3D Tiles 1.0中介绍的K-D树
、松散四叉树
、八叉树
空间数据组织方式,如下图:
3.1 隐式分割
3D Tiles Next引入了3DTILES_implicit_tiling
(传送门)扩展,引入预先知晓的空间分割索引方式,无需显式地记录瓦片的外包范围,可以随机访问区域内任意单个瓦片或任意数量的瓦片,有利于:
- 单服务器或跨服务器的大规模模拟计算。尤其是
k-nearest
最邻近和范围查询计算。 - 基于光线追踪或者射线的分析计算。统一的空间索引可以提高性能。
- 局部数据更新。当只需要更新瓦片集其中的一小部分时,如城市模型中的新建筑。
新的运行时流式数据传输
算法。例如在城市级别的流式数据、建筑区域中随时间更新的数字孪生变化等,这些都受益于上述的瓦片随机访问机制,而不需要原来的自顶向下的层级访问机制。
借助于隐式空间分割
索引机制,可以高效地对邻近瓦片进行查询,下图的城市大规模人群模拟才得以实现。
隐式瓦片分割机制,可以简洁地呈现瓦片集的空间数据结构,包括:
- 四叉树或八叉树
- 根瓦片(
rootTile
)的几何误差(geometricError
)和外包范围(bounding volume
),例如支持全局和布局和瓦片集 - 瓦片的可见性。在渲染过程中只需请求存在的瓦片,其他瓦片存储在二进制的莫顿z序曲线(
Morton z-order curve
)中 - 模板
URIs
,定义随机访问的瓦片的链接
下图左侧显示了瓦片集JSON的隐式分割机制,右侧表示使用Morton Z序曲线的四级空间分割。
与使用显示空间分割的方式相比,隐式空间分割可以节省tileset.json
文件的存储空间和降低网络传输压力。节省空间大小是有益的,但最重要的是隐式分割可以随机访问瓦片集中的任何给定瓦片,并且这些瓦片具有统一的分割规则,这两者都可以实现上面列出的新优化。
除了启用新算法外,在设计隐式分割的过程中还考虑了互操作性,并与二维GIS中的CDB、WMTS、TMS等集成实现。
3.2 S2分割算法
3D Tiles Next还包括3DTILES_bounding_volume_S2
(传送门)扩展,它能与显示和隐式瓦片分割一起使用,定义了新的空间外包范围类型。
S2分割是一种基于立方体的全局细分,同一级别的瓦片具有大致相同的面积。以四叉树分割相比,其在极点附加的瓦片非常“薄”,失真较小。
WGS84椭球面上的S2 Hilbert(希尔伯特)曲线如下图所示:
4.复合内容分层
常见的分层方式是将具有相同元数据的对象组合到一个图层中,例如高速公路图层、POI图层和建筑图层,可以对整个图层进行样式设置和切换等。
3D Tiles Next定义了3DTILES_multiple_contents
(传送门)扩展,可以在瓦片组中定义图层的元数据,将多个内容(如glTF)分配到该图层。
5. 与glTF的生态集成
在3D Tiles Next中使用3DTILES_content_gltf
(传送门),瓦片可以直接引用.gltf
或者.glb
文件,而不是引入带有嵌入式glTF的.b3dm
或.i3dm
。
这将使3D Tiles可以直接利用glTF社区的现有成果,如转换器、建模工具等。
3D Tiles Next通过以下方式加深3D Tiles与glTF规范和生态之间的协同:
- 3D Tiles直接使用glTF作为三维数据
- 将glTF用于点云格式
- 更好地利用glTF的扩展项,如纹理压缩等
5.1 直接使用glTF
3D Tiles 1.0
包括批量3D模型(.b3dm
)和实例化3D模型(.i3dm
)的瓦片格式。这些二进制格式中嵌入了二进制的glTF,包括头部数据和元数据。
下图左侧的.b3dm的3D Tiles 1.0由头部元数据(b3dm header
)、批次表(Batched table
)和具体的模型(glTF
)构成。而3D Tiles Next则直接使用glb文件,并使用EXT_mesh_features
代替批次表。
使用3DTILES_content_gltf
(传送门),瓦片可以直接链接到.glb
或者.gltf
文件。如果瓦片中的要素带有元数据,则通过启用glTF模型的EXT_mesh_features
扩展来代替对.b3dm的需求。
在实例多次绘制的过程中,如很多地方有不同比例的树,就可以使用glTF的扩展EXT_mesh_gpu_instancing
(传送门)来实现,以代替.i3dm瓦片,EXT_mesh_features
也可以一起使用来定义每个实例的元数据,如树的类型。
下图左侧是用于实例化glTF的.i3dm瓦片,右侧使用EXT_mesh_gpu_instancing
进行实例化和EXT_mesh_features
替换用于存储元数据的Bacth Table,而实现对glTF的直接引用。
直接引用glTF是为了3D Tiles和glTF能更好地实现跨行业领域的合作,以实现3D Tiles更好的兼容性。
5.2 点云glTF
下图是100亿个点云的数据:
3D Tiles Next中的点云使用glTF的扩展EXT_meshopt_compression
(传送门)来支持海量点云数据的可视渲染与交互,如样式设置、筛选和显示每个点的元数据。
在3D Tiles 1.0中,点云使用二进制的.pnts文件存储,包括点云几何属性的要素表、元数据的批次表,并且可以带Draco压缩。3D Tiles Next中直接将glTF生态用于点云数据:
- 将点云的几何数据直接存储到glTF中,元数据存储在
EXT_mesh_features
中 - 顶点和法线压缩使用
EXT_meshopt_compression
实现,它可以高效地编码、传输与解码,并在GPU内存中保持压缩状态。
在最终确定3D TIles Next
规范之前,官方还希望使用不同的三维点云压缩方式来补充EXT_meshopt_compression
扩展,包括LEPCC(传送门)和Draco(传送门)方式。
5.3 更好利用glTF扩展
由于3D Tiles Next
不再使用b3dm
、i3dm
、pnts
瓦片,因此glTF瓦片的所有内容都需要使用glTF扩展。这将促进3D Tiles、glTF生态和潜在的glTF_Geospatial_Profile
(传送门)更好地发展。
此外,3D Tiles Next将继续使用glTF扩展,如KTX 2.0
(传送门)和PBR Next
(传送门)材质。
KTX 2.0
支持纹理数据的跨GPU传输、运行时压缩,减少了对内存和带宽的需求,以提升硬件性能。
glTF的PBR Next将推动glTF的材质表现提升到一个新的高度,如金属粗糙度、镜面光泽度、光线的透视、反射等效果。
6. 研究进展
3D Tiles Next目前的研究现状是:
(1)起草了3D Tiles和glTF的相关扩展项(传送门):
- 3D Metadata Specification
- 3DTILES_metadata
- EXT_mesh_features
- 3DTILES_implicit_tiling
- 3DTILES_bounding_volume_S2
- 3DTILES_multiple_content
- 3DTILES_content_gltf
(2)开发人员资源
包括3D Tiles Next参考,示例数据和相关博客系列文章。
(3)在Cesium 1.87中实现,包括演示:
- CesiumJS 1.87 CHANGES,md
- PhotoGrammetry Classification Demo
- Property Textures Demo
- S2 Base Globe Demo
- CDB Yemen Demo
(4)开源的Cesium Native的实现正在进行中
(5)在GitHub上开源的CDB到3D Tiles Next的转换器正在开发中
(6)Cesium icon正在针对3D Tiles Next进行增加和优化。