• Cesium发布下一代3D Tiles规范预览


    11月10日,Cesium的CEO Patrick Cozzi发表了一篇《Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse》的文章,正式向社区介绍即将到来的下一代3D Tiles规范设计思路(文末有获取“3D Tiles Next Overview”的获取方式)。

    按照官方的规划,3D Tiles Next设计的内容会通过现有3D Tiles 1.0草案扩展的方式体现,同时这些内容未来有可能会被3D Tiles 2.0,主要新增的内容包括如下三个方面:

    1、更高效的传输语义元数据,其实这个部分简单点来说就是属性数据的挂接,这样一来应用就可以支持根据属性进行样式的渲染以及属性的查询,与3D Tiles 1.0 使用Batch Table进行元数据的存储类似,3D Tiles Next仍然利用了具有显著性能优势的“批处理”方式,这样一来就可以保证很多逻辑上独立的要素,比如建筑物以及他们的元数据,在调用图像渲染API的时候就可以通过“pre-batch”的方式处理成一个mesh以及一个draw call,但是在渲染过程中他们依然可以被独立的标识出来,这样就能保证逐瓦片的运行时的处理动作以及CPU的低消耗。

    3D Tiles Next在元数据扩展方面的设计主要集中在三个方面:

    • 预先定义好的类型系统以及更多的编码选项,比如二进制或者JSON;3D Tiles依赖于JSON的类型系统,而3D Tiles Next则具有更强的类型,包括classes, vectors, and matrices,元数据的编码方式包括如下三种方式:

    通过二进制方式,这个时候元数会和同一个mesh存储在一起,主要针pre-vertex的场景;通过JSON方式,这种方式主要应用于pre-tile的场景;通过栅格方式,这种方式主要针对pre-texel的场景

    • 更多存储粒度的选项,比如逐像元和逐瓦片;3D Tiles Next在元数据的挂接颗粒度上自由度更大,通过使用3DTILES_metadata 和EXT_mesh_features (a glTF extension)的方式支持如下几个级别的元数据存储:

    per tileset/per tile or tile content group(这个content group其实很类似于gis中的图层概念)/per feature/per GPU instance/per vertex/per texel

    • 元数据中增加语义含义,促进特定领域的语义系统的扩展支持;3D Tiles Next 旨在在整个世界的数字表示中实现类似游戏的元宇宙体验。在那个尺度上,不仅需要标识每个城市、每个建筑物、每个房间、每个门把手和每个对象的元数据,我们还需要知道元数据的语义,以便不同的应用程序知道元数据如何影响交互.。例如,混凝土与草地的摩擦系数会影响车辆的速度,并且知道门打开的方向会影响人群模拟。

    3D Tiles Next 提供元数据基础以促进生态系统,其中领域专家可以创建 3D Tiles 扩展来定义特定领域元数据和每个属性语义的字典。例如,土方工程施工可以为库存中的材料(例如石头或粘土)定义语义,并为预先计算的参数定义语义以在运行时加速体积和面积计算。

    2、通过空间索引支持大规模的模拟和分析;在 3D Tiles 1.0 中,空间剖分的结构是显示的在tileset.json 文件中明确定义,即每个瓦片的边界体积、内容和子瓦片,一直递归到叶瓦片,但是这种结构不太适应未来如下三类场景的需求:

    • 在大规模的模拟方面,需要能够在单个服务器或者跨多个计算单元场景下,支持高效的的 k最近邻和范围查询;

    • 光线追踪分析,光线跟踪和空间查询在均匀的空间索引下可以取得更高的效率;

    • 3D Tileset的一个子集需要被部分更新,比如一个城市模型中的一栋楼需要被更新;

    所以在3D Tiles Next中, 就引入了 3DTILES_implicit_tiling 扩展,该结构的设计主要包括如下几个方面:

    • 默认采用四叉树或者八叉树规则剖分;

    • 为层级结构中的每个瓦片,隐式的瓦片结构在同一个binary buffer存储两块信息:瓦片的可达性和内容可达性,比如下面这个例子,四叉树的层级+坐标会通过Morton Z码进行降维处理,这种降维的线性存储默认具备空间自相关性的特点,空间上相近的内容在物理存储上也会连续存储,这样便于计算机的快速获取。

    • 模板 URI 定义用于随机访问瓦片的 URI;

    3、与glTF软件以及衍生生态系统集成;3D Tiles Next使用 3DTILES_content_gltf来进行glTF的集成,通过这个配置项瓦片的内容就可以直接引用一个.gltf或者是.glb的文件,而不是引用一个嵌入了glTF的.b3dm或者是.i3dm。通过这种方式,说白了3D Tiles就可以直接使用glTF的一些成果,这样自己就专注做好核心的内容就好了,毕竟之前独立推进的b3dm或者i3dm的设计思路和glTF都是类似的,而且也是在嵌入了glTF的基础上实现的,Cesium也给出了集成模式下,3D Tiles Next和之前实现的差别:

    针对以前b3dm的使用场景,3D Tiles Next中的属性直接存储在了EXT_mesh_features扩展中,而不是Batch Table 

    针对以前i3dm这个使用场景场景,3D Tiles Next 直接使用 glTF 引用,使用 EXT_mesh_gpu_instancing 进行实例化,并使用 EXT_mesh_features 替换BatchTable以存储元数据。

    另外一个变化就是,3D Tiles 1.0中对点云的支持方案是:点云数据存储在一个.pnts二进制文件,一个feature table用于存储点的几何属性,一个Batch Table存储元数据,使用Draco进行压缩。而3D Tiles Next 中的点云会利用带有EXT_meshopt_compression压缩的glTF来支持,点的几何数据存储在glTF中,元数据存储在EXT_mesh_features中;顶点和法线的压缩可以利用EXT_meshopt_compression。

    在Cesium的蓝图规划中,未来元宇宙会有很大的机会,3D Tiles Next扩展还需要能够跨设备的支持将这种类似于游戏的地理空间体验带到开放的元宇宙领域,包括当下和未来出现的VR和AR穿戴设备。在3D Tiles Next标准的开发过程中,Cesium和Maxar公司保持了紧密的合作,以保证3D Tiles Next能够满足建模和模拟领域中在训练、仿真和操作过程中对高效实时的地形数据的需求。

    关于3D Tiles Next更多的介绍请访问github的地址:

    https://github.com/CesiumGS/3d-tiles/tree/main/next

    饮水思源,不忘初心。 要面包,也要有诗和远方。
  • 相关阅读:
    计算机中如何表示数字-01机器数与真值
    计算机中如何表示数字-06浮点数
    Java基础类型与其二进制表示
    char类型与Unicode的编码
    数组的详细总结
    Java中的instanceof关键字
    java 启动多线程
    elasticsearch7.2 集群搭建 插件安装 和kibana安装
    java读取 properties配置文件的两种方式
    查询mysql 库和表占的大小
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/15624411.html
Copyright © 2020-2023  润新知