大家好,欢迎来到IT知识分享网。
3DTiles_overview
3DTiles是一种为了跨桌面、web、手机应用共享、可视化、熔合、交互、分析大量的各种3D地理内容的开放规则。3DTiles是以glTF为基础的,为有效流送和渲染3D模型和场景的开放式标准。
3D地理空间内容包括摄影测量影像/ 大量模型、BIM/CAD、3D建筑,实例要素、以及点云,可以转换成3DTiles,无缝结合组合成单一的数据集,且实时测量、可视化、风格和滤波分析。
3DTiles的基础是一种分层细节层次的空间数据结构,所以仅有可见tiles流送渲染,提高整体性能。
这个视图总结了3DTiles规则置顶的主要概念:
瓦片集和瓦片的总体概念,以及他们怎么组织大量数据集成为可以有效流送的元素。
- 预览:一个瓦片集示例
- 瓦片集和瓦片
3DTiles如何执行分层空间数据结构,可以有效渲染和交互。
- 体积边界
- 空间数据结构
分层层次细节概念,在任一尺度下平衡渲染表现和可视化质量。
- 几何错误
- 改进策略
3DTiles背后的概念是如何实现高效渲染和交互的。
- 3DTiles合理渲染
- 3DTiles空间查询
3DTiles不同瓦片格式技术细节
- 瓦片格式:介绍
- 瓦片格式
用另外要素扩展基础规则的可能性
- 扩展
基于元数据风格化信息可视化可能性
- 声明性样式
地理空间坐标系统和几何数据压缩等基本元素是如何集成到3D Tile中的。
- 通常定义
如果你想找3DTiles开始练习,Cesiumion(https://cesium.com/ion)有精确的3D瓦片集并且允许用户上传自己的数据创建,管理和流送。
预览:一个瓦片集实例
3D瓦片核心元素是瓦片集。瓦片集是一系列瓦片,以层级结构组织。瓦片集以JSON描述。下面是一个简单的瓦片集例子,介绍了最重要的概念和元素。每一个概念在以下的小节更详细的解释。
{
“asset”:{…},
“properties”:{…},
“geometricError”:{…},
“root”:{
“geometricError”:20,
“boundingVolumn”:{
“region”:[…]
},
“refine”:“ADD”,
“children”:[
{
“geometricError”:10,
“boundingVolumn”:{…},
“content”:{
“uri”:“house.b3dm”
}
“children”:[
{
“geometricError”:5,
“boundingVolumn”:{…},
“content”:{
“uri”:“detailsA.b3dm”
}
},
{
“geometricError”:5,
“boundingVolumn”:{…},
“content”:{
“uri”:“detailsB.b3dm”
},
}
]
},
{
“geometricError”:10,
“boundingVolumn”:{…},
“content”:{
“uri”:“tree.pnts”
},
}
{
“geometricError”:10,
“boundingVolumn”:{…},
“content”:{
“uri”:“fence.i3dm”
},
}
{
“geometricError”:10,
“boundingVolumn”:{…},
“content”:{
“uri”:“external.json”
},
}
]
}
}
每个瓦片可能涉及一个另外的瓦片集。这个允许组合多个更小的瓦片集成为一个更大的瓦片集。
主瓦片集JSON包含一个资产和总属性的基础描述。
几何错误(第5节)决定根瓦片何时应该渲染。
每个瓦片包含一个体积边界(第3节)围绕瓦片和子瓦片内容。也包含决定子瓦片何时渲染的几何错误。
这个例子中,第一个子瓦片涉及一个低细节层次的3D模型。例子中的模型瓦片格式是一个批量3D模型(第10.2节)。
子瓦片包含另外的模型细节。当需要一个更高的层次细节时被渲染。
这个例子中,子瓦片内容会添加到父节点模型的低层级模型代表上。或者,子瓦片包含更多代替低层模型的细节模型。这些是两个3D瓦片支持的改进策略(第6节)。
一个瓦片集可以包含不同的瓦片格式:这个例子中,第一个子瓦片涉及一个批量瓦片模型。另外的根节点子瓦片涉及一个点云(第10.4节)
另一个瓦片是一个实例3D模型(第10.3节),一个简单几何会在不同位置渲染多次。
渲染瓦片集时,瓦片会在临近的层次细节组合起来,生成最后的渲染效果:
瓦片集和瓦片
瓦片集是一系列组织成层级数据结构的称作数结构的瓦片。瓦片集本身包含一个根瓦片,并且每一个瓦片可能会有子瓦片。
一个瓦片也可以参考另一个瓦片。这使得灵活和分层地将瓦片组合成更大的瓦片成为可能。
每一个瓦片可能参考渲染内容。这个内容可能有不同的格式和可能代表,例如,纹理地形表面,3D模型,或者点云。不同的可能瓦片格式解释看第9节,“瓦片格式:介绍”。
瓦片集和瓦片以JSON来描述。瓦片集JSON文件包含瓦片集本身最基础信息和瓦片描述。
数据集属性:
根瓦片:一个瓦片集的根属性是一个代表瓦片根层级的瓦片
几何错误:几何错误用来量化如果瓦片集没有渲染的情况下可能发生的可视化错误。当可视化错误跳过一个确定的临界值后瓦片集和它所包含的瓦片被认为渲染了。几何错误的详细见第5节“几何错误”。
属性总结:瓦片的渲染内容可能有相关的属性。例如,当瓦片包含建筑是,个幢建筑的高度可以存储在瓦片里。一个瓦片集的properties对象为瓦片集中所有瓦片的属性值的最小最大值。
元数据:可以存储在瓦片数据集的asset属性中的3DTiles版本和应用程序特定信息。
瓦片属性:
内容:一个确定的渲染内容,和content属性下经由uri关联的瓦片一致。
孩子:瓦片层次结构是一个树状模型:每个瓦片可能会有孩子,在一个为children的数组下。
体积边界:每个瓦片都有一个与之一致的体积边界,不同类型的体积边界存在boundingVolumn属性里。体积边界的可能类型加第3节“体积边界”。每个体积边界围绕瓦片内容和所有子瓦片内容,依从体积边界的空间一致性层级。
几何错误:瓦片渲染内容可能有不同的层次细节。对于瓦片来说,geometricError属性量化相比最高的层次细节的瓦片的内容的规则程度。几何错误使用看第5节描述,“几何错误”,决定了子瓦片应该考虑何时渲染。
改进策略:当有一个确定层次细节的挖年可视化错误超过一个临界值时,然后考虑渲染子瓦片。会由改进策略决定采用从合并的子瓦片的额外细节进入渲染进程的方式。不同的改进策略在第6节解释,“改进”。
体积边界
每个瓦片集是由一系列瓦片以层级的方式组织起来的,每个瓦片有个与之一致的体积边界。这产生一个层级空间数据结构,可以合理渲染和有效空间查询。另外,每一瓦片可以包含一个有体积边界的渲染内容。对比瓦片体积边界,内容体积边界适合轻量级内容并且能用于可视化查询和查看切片提高渲染表现。
3DTiles格式支持不同类型的体积边界,不同的层级组织策略。
体积边界类型
3DTiles格式支持不同类型的体积边界,为以下数据结构选择合适的类型提供了可能:
球边界是一种简单的体积边界,允许简单有效测试。由中心点和半径定义。
对于几何来说,一个原始的边界盒子更适合体积边界,尤其是对于像CAD模型这种规则的技术结构。它有盒子中心点位置,和三个3D矢量定义,矢量定义方向和xyz轴的半长。
区域尤其适合地理空间信息系统,因为区域的边界用经纬度坐标定义,对于区域的西、南、东、北,和最小最大高wgs84坐标的经纬度在epsg4979中以弧度定义。最小最大高度在wgs84椭球上下以米来计。
详细的wgs84和epsg4979信息看第13节“通用定义”。
空间数据结构
瓦片集中的瓦片以树数据结构来组织。每个瓦片都有与之一致的体积边界。允许构建不同的空间数据结构。以下章节将呈现能用3D瓦片构建的所有不同空间数据结构。为了优化渲染表现,依赖精确的空间数据结构特征,运行时引擎可以使用空间信息。
空间一致性
3D瓦片中的所有体积边界和空间数据结构类型都有空间一致性,意味着父瓦片的体积边界总是围绕着它的所有子瓦片。
对于保守的测试和交互测试来说,空间一致性是重要的,因为当一个对象没有插入一个瓦片的体积边界时,也没有任何子瓦片内容。
相反,当一个对象插入体积边界,然后交互测试子瓦片体积边界。这和可以快速删减很大部分的层级,留下一部分为了交互必须测试的有精确瓦片内容几何的子瓦片。
用体积边界构建层级空间数据结构有不同方法。这些方法导致不同的空间数据结构类型,依赖构建的精确策略。
一个简单的空间层级可以沿着确定的轴分割瓦片迭代构建,直到遇到一个停止标准。在每一层级内容仅沿着单一轴分割时,结果是一个k-d树。3D瓦片也支持多种方式k-d树,每层沿着一个轴有多个分割。当z轴在一个层级,内容沿着xy轴分割时。结果是一个八叉树。当内容在内容体积边界中心分割时,结果是一个统一的八叉树。当内容在不同的点分割时,结果是一个不统一的八叉树。
在每一个层级层,可以从父节点的体积边界创建纯空间性的体积边界。替代性地,能够从节点的精确内容计算每个节点的体积边界。这个对于稀松的数据集是尤其有用的,因为它保证了每个层级层的很适合体积边界。
没有分割内容单一要素(模型)分割一个瓦片有时候是不可能的。因此创建宽松的八叉树和k-d树是可能的,在里边有重叠的子体积边界。这些树仍然包含空间一致性,父级体积边界仍然围绕着所有子内容。
在很多通用的案例中,瓦片集可能分割成一个不标准的格网。因为在3D瓦片的每一个空间层级节点可能有一个任意数量的子节点,并且非叶节点不再需要包含渲染内容,为了支持层级切割层级结构仍然以格网单元组织。
3D瓦片的通用空间数据结构允许构建所有构建方法的结果。每一个瓦片是一个层级节点,很合理地涉及几何内容或者包含所有子节点内容和单一瓦片集存储的不同体积边界类型的体积边界。
几何错误
3D瓦片的一个目标是有效地流送大量数据集到运行引擎,并且允许允许运行时有效渲染这些内容。因此在一个瓦片集中瓦片的层级结构组成了一层级层次细节的概念(HLOD):顶级层级瓦片包含低层次细节渲染内容的表现。子瓦片包含高层次细节内容。渲染运行时可以动态渲染层次细节,提供表现和渲染质量最好的平衡。
决定哪一个层次细节应该渲染的关键是几何错误。每个瓦片集和瓦片都有一个geometricError属性,量化相对精确几何的简化几何的错误。
运行时转换这些几何错误到屏幕空间错误(SSE)。屏幕空间错误量化多少几何错误可见,依据屏幕像素。
当屏幕空间错误超过一个确定的临界值,运行时将渲染高一级的层次细节。对于瓦片集来说,几何错误用来决定是否应该渲染根瓦片。对于一个瓦片来说,几何错误用来决定是否应该渲染子瓦片。
计算屏幕空间错误
运行时可以使用几何错误找到的表现和渲染质量之间最好的平衡信息:对于任何给定的瓦片集或者瓦片,运行时可以决定通过渲染瓦片可以提高多大的的可见质量,甚至不用精确下载和渲染瓦片内容。
为了完成这些,运行时必须计算给定几何错误的屏幕空间错误。用像素计的精确屏幕空间错误依赖视口配置,这是说,视口的位置和原点,这分辨率下最后渲染哪个图像。
因此,屏幕空间错误的计算必须考虑这些因子。精确的执行依赖使用哪种视口投影类型。如果不是标准的视口投影,一个可行的方法是用以下方法计算屏幕空间错误:
屏幕空间错误=(几何错误·屏幕高)/(瓦片距离·2·tan(fovy/2))
几何错误是瓦片集或瓦片存储的几何错误,屏幕高是以像素计的渲染屏幕高,瓦片距离是眼睛看到的瓦片距离,fovy是在y方向上视坠开放夹角。
改进策略
瓦片格式
一个瓦片的渲染内由瓦片JSON的URI包含。对于不同的模型内容,这个渲染内容可以存储成不同的格式:
批量3D模型:像纹理地形或者3D建筑的异质模型
实例3D模型:相同3D模型的不同实例
点云:大量点
一个瓦片集可以包含瓦片格式的任何组合。另外的灵活性是可以实现不同格式的瓦片组合成为一个组合瓦片(第10.5节)
一个瓦片的渲染内容包含不同的要素。对于批量3D模型来说,几何的每一部分可能是一个要素。对于实例3D模型来说,每一个实例是一个要素。对于点云来说,有两种选择:一个要素可以是单一点,或者代表模型可识别部分的一组点。
要素表和批量表
所有瓦片格式的通用元素(除了组合瓦片)是元素表和批量表。要素表和批量表的精确内容取决于瓦片格式,但是它们的结构和布局对于所有瓦片格式是相同的。
要素表包含渲染要素需要的属性。例如,在一个实例3D模型中,在要素表中存储实例的位置:
批量表可以包含另外的,为每一个要素程序指定的属性。例如:在一个批量3D模型中,元数据和在批量表中存储的模型联系:
展示:声明性样式
信息是存储在批量表中而不是为了渲染直接需要。但是批量表通常包含用于声明性样式的元数据,看第11节。
例如:批量表包含一系列在瓦片中表现的建筑的高度信息。这些信息可以让3D瓦片样式语言接受,修饰到模型表面。例如:建筑可以用不同的颜色渲染,且依赖高度:
瓦片格式
一个瓦片的精确渲染内容会存储成一个二进制对象。这个对象包含一个有结构信息的头,和包含精确有效负载的体。
瓦片格式头 瓦片格式体
瓦片格式头
每个瓦片格式头用一组四个神奇的字节开始。这些字节代表一个决定瓦片格式的4字母字符,后面是tile格式的版本号和瓦片数据的总长度(包括头部),以字节为单位。
头部的确切大小、内容和结构取决于瓦片的格式,因此在读取魔术字节之后就知道了。下面几节解释了每一种贴图格式及其标题的确切数据布局。
featureTableJSONByteLength大小,featureTableJSONByteLength,batchTableJSONByteLength和batchTableBinaryByteLength描述要素表和批量便代表部分的大小并参考包含精确便数据的瓦片格式体。
瓦片格式体
瓦片格式体包含瓦片数据的精确的有效负载。对于所有的瓦片格式(除了组合瓦片)这个体包含一个要素表和一个批量表,和其他对于瓦片格式来说特别的二进制数据。
要素表和批量表都包含一个JSON头和一个二进制体。每个元素的长度由在瓦片格式头的信息决定。
瓦片格式:要素表和批量表
瓦片格式:批量3D模型(b3dm)
一个批量3D模型瓦片包含各种模型渲染数据。这些模型可能是地形或3D建筑,例如,对于建筑信息模型或者工程应用。
批量3D模型精确渲染数据被存储为二进制glTF,一个GL传输格式的二进制形式。
通用定义
在3DTiles中批量3D模型和实例3D模型可以嵌入存储为二进制的glTF模型。这是GL传输格式的二进制表现,是一种3D内容有效传输的开放规范,由Khronos组织提供。
http://github.com/KhronosGroup/glTF
世界大地体统椭球wgs84
https://spatialreference.org/ref/epsg/4979/
https://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fifin.pdf
http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm
https://github.com/CesiumGS/3d-tiles/tree/master/specifification#transforms
https://github.com/CesiumGS/3d-tiles/blob/master/specifification/TileFormats/Instanced3DModel/README.md#quantized-positions
https://github.com/CesiumGS/3d-tiles/blob/master/specifification/TileFormats/PointCloud/README.md#oct-encoded-normal-vectors
ps:
原文地址:https://github.com/CesiumGS/3d-tiles/blob/master/3d-tiles-overview.pdf
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24117.html