3dTile技术研究-概念详述(1)

上篇:3dTile技术研究-概述

1. Tiles

Tiles由元数据构成,这些元数据:用来判定一个tile是否需要渲染、引用可渲染的具体内容和包含所有children tiles的数组。

1.1 Geometric error

将Tiles构造为合并了详细层次结构(HLOD)的树以便在运行时客户端实现需要确定一个tile是否足够详细以进行渲染,以及是否紧接着由较高分辨率的children tiles细化。一个实现将考虑最大允许的屏幕空间误差(SSE),该误差以像素为单位。

一个tile的geometric error定义了它的选择度量。这个值是非负数,它指定tile源几何图形简化显示的误差(以米为单位)。root tile是源几何图形的最简化版本,其几何误差最大。然后,每个连续级别的子级将具有比其父级低的几何误差,并且叶子tile的几何误差为0或接近0。

在客户端实现中, geometric error用来和其他屏幕空间度量(如tile和相机的距离、屏幕尺寸、分辨率)一起计算引入的SSE,决定这个tile是否需要渲染而它的children不需要。如果引入的SSE超出了最大允许限值,那么该tile需要被细化:考虑渲染它的children。

geometric error是根据诸如点密度,以米为单位的tile尺寸或该tile特有的其他因素之类的度量标准制定的。通常,较高的geometric error意味着将更积极地细化tile,并且将更快地加载和渲染children tiles。

参考3DTile 的geometricError含义

更通俗的说就是geometric error用来和其他一些因素一起计算SSE,判断其与最大SSE的大小来决定当前tile是否被渲染以及是否需要被其更详细的的children细化,即渲染它children。

1.2 Refinement

Refinement 决定了 当更高分辨率的children被选择渲染时,它的较低分辨率的parent tile的渲染行为的机制。允许的refinement types是 replacement ("REPLACE") 和 additive ("ADD")。如果一个tile的refinement type是"REPLACE",那就意味着它的children tile以替换parent tile的方式被渲染,也就是parent tile不再被渲染。如果一个tile的refinement type是"ADD",那就意味着除了该tile之外,它的children也要被渲染。

一个tileset可以只用"REPLACE"类型的refinement,也可以只用"ADD"类型的refinement,或者"REPLACE""ADD"类型的组合。

root tile必须要有refinement type;同时对于其它tile来说,refinement type是可选项,如果被忽略了,那么就继承parent的。

 

如果tile使用了"REPLACE"类型的refinement,当需要细化它时,就渲染它的children来替换它。

Parent TileRefined

如果tile使用了"ADD"类型的refinement,当需要细化它时,就同时渲染它和它的children。

Parent TileRefined

 

 1.3 包围体(Bounding volumes)

包围体定义了包围tile或tile内容的空间范围。为了支持各种数据集的紧密拟合体积,例如规则划分的地形,未与纬度或经度线对齐的城市或任意点云,包围体类型包括定OBB包围盒,包围球和地理区域(由最小和最大纬度,经度和高度定义)。

Bounding boxBounding sphereBounding region

1.3.1 Region

boundingVolume.region 属性是使用经度、纬度、高度定义包围地理区域的一个6个数值元素的数组,元素顺序是[west, south, east, north, minimum height, maximum height]。经度和纬度是在EPSG 4979 定义的 WGS 84基准中,且是弧度表示。高度是以米为单位标识在WGS 84 ellipsoid的上方还是下方。

"boundingVolume": {
  "region": [
    -1.3197004795898053,
    0.6988582109,
    -1.3196595204101946,
    0.6988897891,
    0,
    20
  ]
}

1.3.2 Box

boundingVolume.box 属性是一个12个数值元素的数组,它定义了一个在3-axis(x,y,z)的、Z-UP的笛卡尔右手坐标系中的OBB包围盒。前3个元素定义了包围盒中心的x,y,z坐标;接下来的3个元素(索引是3、4、5)x轴的方向和半轴长;再接下来的3个元素(索引是6、7、8)定义了y轴方向和半轴长;最后的3个元素(索引是9、10、11)定义了z轴的方向和半轴长。

"boundingVolume": {
  "box": [
    0,   0,   10,
    100, 0,   0,
    0,   100, 0,
    0,   0,   10
  ]
}

 

1.3.3 Sphere

boundingVolume.sphere属性是一个4个数值元素的数组,它定义了包围球。前3个元素定义了在Z-UP的3-axis(x,y,z)的笛卡尔右手坐标系中的包围球中心点。最后的一个元素(索引是3)定义了米为单位的球半径。

"boundingVolume": {
  "sphere": [
    0,
    0,
    10,
    141.4214
  ]
}

这里频繁的出现了OBB包围盒、Z-UP的概念,可参考我的另外两篇博客(直接点外链即可跳转)。

对于不同领域的数据可以使用不同的包围体,对于BIM行业来说OBB包围盒可能更适用一些。

1.3.4 可视请求体(Viewer request volume)

tile的viewerRequestVolume可以用在组合的异构模型中,也可以用和external tilesets一起使用。

下面的示例包含一个b3dm的建筑tile和在该建筑中的一个点云tile。点云tile的包围体是一个半径为1.25的包围球,同时它有一个更大半径(15)的可视请求体(viewerRequestVolume)。由于点云tile的geometricError是0,它总是需要被渲染的,包括初始请求时也是这样,当然前提是相机在定义的可视请求体(viewerRequestVolume)中的情况下。

{
  "children": [{
    "transform": [
      4.843178171884396,   1.2424271388626869, 0,                  0,
      -0.7993325488216595,  3.1159251367235608, 3.8278032889280675, 0,
      0.9511533376784163, -3.7077466670407433, 3.2168186118075526, 0,
      1215001.7612985559, -4736269.697480114,  4081650.708604793,  1
    ],
    "boundingVolume": {
      "box": [
        0,     0,    6.701,
        3.738, 0,    0,
        0,     3.72, 0,
        0,     0,    13.402
      ]
    },
    "geometricError": 32,
    "content": {
      "uri": "building.b3dm"
    }
  }, {
    "transform": [
      0.968635634376879,    0.24848542777253732, 0,                  0,
      -0.15986650990768783,  0.6231850279035362,  0.7655606573007809, 0,
      0.19023066741520941, -0.7415493329385225,  0.6433637229384295, 0,
      1215002.0371330238,  -4736270.772726648,   4081651.6414821907, 1
    ],
    "viewerRequestVolume": {
      "sphere": [0, 0, 0, 15]
    },
    "boundingVolume": {
      "sphere": [0, 0, 0, 1.25]
    },
    "geometricError": 0,
    "content": {
      "uri": "points.pnts"
    }
  }]
}

想了解更多的可视请求体信息, 参考 sample tilesetdemo video

可视请求体相当于提供了一种更灵活的控制目标对象可见性的方法,可视具体场景灵活使用。

传送:

3dTile技术研究-开篇

3dTile技术研究-概述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值