3Dtiles翻译学习记录之一

一、tileset样例

  • 3DTiles的核心元素是Tiles。每一个TIles集是一组tile,以层次结构组织起来。瓦片集是用JSON描述的。下面是一个简单的瓷砖集的例子,介绍了最重要的概念和元素。下面的部分将更详细地解释每个概念.
  • 主要的tileset包含了基本信息的描述和基本的属性。
  • geometric error 用于确定何时应该渲染根tile
  • 每个tile包含一个包围体,包含了tile和所有子tile的内容。它还包含一个几何错误,该错误决定何时应该呈现子对象。
    在这里插入图片描述

二 Tilesets and Tile

tilesets是一组tile的集合,它们被组织成一个分层的数据结构,称为树。tile本身包含根tile,每个tile可以有子tile。一个tile也可以引用另一个tileset。这可以灵活地将多个tile组合成更大的tile。每个tile可以引用可渲染的内容。这些内容可以有不同的格式,可以表示,例如,纹理地形表面、3D模型或点云。tile和tiles都是用JSON描述的。tileset JSON文件包含了tileset本身的基本信息,以及tile的描述。
在这里插入图片描述

Tileset Properties

  • Root tile: 一个tilesets的根属性是一个tile,它表示瓷砖层次结构的root.
  • Geometric error: geometricError属性用于量化如果没有呈现瓦片集将会发生的视觉错误。当视觉>误差超过某个阈值时,就会考虑渲染瓦片集及其包含的瓦片。
  • Property summaries: tile的可渲染内容可能具有相关的属性。例如,当tile包含建筑时,那么每个>建筑的高度都可以存储在tile中。tilesets的属性对象包含tilesets中所有tile的选择属性值的最小值和最大值。
    原文附上:The renderable content of tiles may have associated properties. For example, when the tiles contain buildings, then the height of each building can be stored in the tile.The properties object of a tileset contains the minimum and the maximum of select property values for all tiles in the tileset.
  • Metadata : 关于3D Tiles版本和特定于应用程序的版本信息可以存储在tile集合的资产属性中

Tile Properties

  • Content: 与tile相关联的实际可呈现内容是通过content属性中的URI来引用的。
  • Children: tile的层次结构被建模为一个树:每个tile都可以有子tile,这些子tile位于一个名为children的数组中。
  • Bounding Volume: 每个tile都有一个关联的边界卷,不同类型的边界卷可以存储在boundingVolume属性中。包围卷的可能类型将在第3节“包围卷”中介绍。每个边界体包含了贴图的内容和所有子块的内容,从而产生了空间上连贯的边界体层次结构。
  • Geometric error: 瓦片的可渲染内容可能有不同程度的细节。对于瓦片,geometricError属性量化了瓦片中内容的简化程度(与最高级别的细节相比)。几何错误在第5节“几何错误”中描述,用于确定何时应该考虑渲染子瓦。
  • **Refinement strategy: ** 当具有特定细节级别的贴图的视觉错误超过阈值时,将考虑渲染子贴图。子tiles的附加细节被整合到呈现过程中的方式由refine属性决定。在第6节“细化”中解释了不同的细化策略。

三 Bounding Volumes

每个tileset是一组以分层方式组织的tile,每个tile都有一个相关的边界体。这就产生了一个分层的空间数据结构,可以用于优化的呈现和高效的空间查询。此外,每个tile可以包含实际可渲染的内容,也有一个边界体。与tile包围体相比,内容包围体只与内容紧密贴合,可以用于可见性查询和视图截锥剔除,以进一步提高渲染性能.
包围体有三种格式:
sphere: 边界球是一个简单的边界体,它允许简单而有效的相交测试。它由它的中心位置和半径来定义。
box: 一个有方向的包围盒使包围体更符合几何形状,特别是对于常规的技术结构,如CAD模型。它由盒子的中心位置和三个三维向量定义。这些向量定义了x、y和z轴的方向和半长。
region: region特别适合于地理信息系统,因为区域的两侧是用纬度和经度坐标定义的,包括区域的西、南、东、北,以及最小和最大高度。纬度和经度在EPSG4979定义的wgs84基准面中,以弧度为单位。西、南、东、北最小高度。在WGS 84椭球面上或下面的最小高度和最大高度以米表示。在这里插入图片描述

四 空间数据结构

tileset中的tile以树状数据结构组织。每个tile都有一个相关的边界体积。这允许对不同的空间数据结构进行建模。下一节将介绍可以使用3D Tiles建模的不同类型的空间数据结构。运行时引擎可以使用空间信息来优化渲染性能,而不依赖于空间数据结构的实际特征。

空间相干性(spatial coherence)

3D Tiles中的所有类型的边界体和空间数据结构都具有空间一致性,这意味着父tile的边界体总是包含其所有子tile的内容。
空间一致性对于保守可见性测试和交集测试来说至关重要,因为它保证了当一个对象不与tile的边界体积相交时,它也不会与任何子tile的内容相交。
相反,当对象与边界体相交时,则测试子对象的边界体是否存在交集。这可以用来快速修剪层次结构的大部分,只留下一些叶子tile,在这些地方对象必须与实际的tile内容几何图形进行交叉测试。
在这里插入图片描述

空间数据结构的类型

有不同的方法来构造具有边界体的分层空间数据结构。这些方法通常会产生不同类型的空间数据结构,这取决于用于构造的确切策略。
一个简单的空间层次结构可以通过沿着特定的轴递归地分割贴图的内容来构建,直到满足停止条件。当内容在每个关卡中只沿着单个轴分裂时,结果便是k-d树。3D Tiles也支持多种k-d树,即每个关卡都有沿着一个轴的多个分割。当内容在每个层次上沿着x、y和z轴被分割时,结果就是一个八叉树。当内容在内容包围体的中心被分割时,结果是一个统一的八叉树。当内容在不同的点拆分时,结果是一个非一致的八叉树。
在层次结构的每一层,bounding volume都可以从父节点的边bounding volume在空间上创建。或者,每个节点的bounding volume可以从节点的实际内容计算出来。这对于稀疏数据集特别有用,因为它确保了在层次结构的每个级别上紧密匹配的bounding volume。
有时,如果不分割内容的单个特征(模型),就不可能分割一个瓦片。因此,可以构造松散八叉树和松散k-d树,其中子树的边界体重叠。这些树仍然保持空间一致性,因为父边界体仍然包含所有子节点的内容。
在最一般的情况下,一个tilesets可以分成一个不均匀的网格。由于3DTiles中的空间层次中的每个节点可以有任意数量的子节点,并且非叶块不需要包含可呈现的内容,网格单元格仍然可以组织成一个层次结构,以支持层次剔除。3DTiles中的通用空间数据结构允许对所有这些构造方法的结果进行建模。每个tile都是层次结构的一个节点,可以选择引用几何体内容,或者只存储包含其所有后代内容的bounding volume,不同类型的bounding volume可以存储在单个tile集合中。

五 Geometric Error 地理误差

3DTiles的目标之一是高效地将大量数据集流到运行时引擎,并允许运行时高效地渲染这些内容。因此,tile集合中的tile的层次结构包含了层次化细节级别(hierarchical Level of Detail, HLOD)的概念:位于层次结构顶部的tile包含了可呈现内容的低层次细节表示。子块包含具有更高细节级别的内容。呈现运行时可以动态选择提供性能和呈现质量之间最佳权衡的细节级别。决定应该呈现哪个层次的细节的关键是几何误差。每个tile集合和每个tile都有一个geometricError属性,用于量化与实际几何相比的简化几何的误差,运行时将这个几何错误转换为屏幕空间错误(SSE)。SSE根据屏幕上的像素量化几何误差的可见程度。
在这里插入图片描述
当SSE超过某个阈值时,运行时将呈现更高级别的详细信息。对于一个瓷砖集,几何误差被用来确定是否应该渲染根瓷砖。对于一个贴图,几何误差被用来确定是否应该渲染贴图的子元素。

计算屏幕空间错误(SSE)

  • 运行时可以使用提供的信息几何误差之间找到最佳平衡性能和渲染质量:对于任何给定的tileset或者tile,运行时可以决定多少视觉质量可以提高通过渲染tile,实际上即使没有下载和渲染tile的内容.

  • 为了实现这一点,运行时必须为给定的几何错误计算屏幕空间错误。实际的屏幕空间误差(以像素为单位)将取决于视图配置,即查看器的位置和方向,以及最终图像将呈现的分辨率.
    因此,在计算上证综指时必须考虑这些因素。确切的实现也取决于所使用的视图投影的类型。但对于标准的透视投影,计算SSE的一种可能的方法如下:

          sse = (geometricError ⋅ screenHeight) / (tileDistance ⋅ 2 ⋅ tan(fovy / 2))
    

其中,geometricError是存储在tileset或tile中的几何错误,screenHeight是渲染屏幕的高度(以像素为单位),tileDistance是tile到眼睛点的距离,fovy是视图截锥在y方向上的打开角度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值