常见三维数据模型梳理_3d模型数据-程序员宅基地

技术标签: cesium  图形渲染  

1.三维数据模型

三维数据模型(3D data models)是用于表示三维空间中的物体和场景的计算机数据结构。常见的三维数据模型包括以下几种:

  • 多边形网格(Polygon Meshes)
  • 体素模型(Voxel Models)
  • 参数化表面(Parametric Surfaces)
  • 隐式表面(Implicit Surfaces)
  • 点云(Point Clouds)

这里仅做简单的科普介绍,如要深入了解可以看我之前的这篇笔记https://www.luxd.space/posts/%E5%87%A0%E4%BD%95.html,或者虎皮书Fundamenttals of Computer Graphs的第十二章Data structures for Graphis也有相关知识的深入讲解

[1]多边形网格(Polygon Meshes)

多边形网格是一种常见的三维模型表示方法,通常采用三角形或四边形作为基本元素。多边形网格由顶点(vertices)、边(edges)和面(faces)组成。顶点记录三维坐标信息,边连接顶点,而面则由边围成。多边形网格可以表示各种复杂的三维物体,例如在计算机图形学和游戏开发中广泛使用

大多数现实世界的模型都由共享顶点的三角形组成。这些通常被称为三角形网格或三角不规则网(TIN),有效处理它们对许多图形程序的性能至关重要。

[2]体素模型(Voxel Models)

体素模型是一种将三维空间离散化为规则的体素(Voxels,体素即Volume Pixels)格子的表示方法。每个体素可以存储颜色、密度等属性数据。体素模型通常用于表示具有内部结构的物体,如医学影像(CT、MRI)和地质数据等领域。

[3]参数化表面(Parametric Surfaces)

参数化表面是通过数学函数或参数方程来定义的表面。常见的参数化表面有NURBS(非均匀有理B样条曲面)和Bezier曲面等。参数化表面具有良好的数学性质,便于精确控制几何形状。它们在计算机辅助设计(CAD)和建筑设计等领域得到了广泛应用。

[4]隐式表面(Implicit Surfaces)

隐式表面是通过隐式方程定义的三维表面,例如 f ( x , y , z ) = 0 f(x, y, z) = 0 f(x,y,z)=0。隐式表面可以表示复杂数学形状,如球体、圆锥体、超平面等。在计算机图形学中,隐式表面用于实现柔和的物体融合、建模和形状变形等效果。

[5]点云(Point Clouds)

点云是由大量离散的三维点组成的数据结构。每个点包含了位置信息,可能还包含颜色、法向量等属性。点云通常来源于三维扫描仪或者深度相机,用于表示实际环境中的物体和场景。点云数据可以被进一步处理,生成多边形网格等其他类型的三维模型。

2.桌面端常见的三维模型数据格式

三维模型数据格式多种多样,常见的有OSGB,DAE,OBJ,STL,3DS,CLM,IFC,PLY等数据格式。这些主要是桌面软件所支持的数据格式,结构较为复杂,不适于网络传输,也就是意味着如果要在web端使用这些模型一般需要进行转换压缩。

[1]OSGB

OSGB(OpenSceneGraph Binary):OSGB是一种基于OpenSceneGraph(OSG)的二进制文件格式。OSGB文件可以存储三维模型的几何信息、嵌入式链接纹理数据(.jpg)和场景图层信息。OSGB格式的优点是加载速度快,支持分层级细节(LOD)技术,适用于大规模三维场景的实时渲染。(在桌面端适用的很好)

优点:

  1. 快速加载:OSGB是二进制格式,加载速度比文本格式快得多。
  2. 节省存储空间:由于OSGB是二进制格式,所以文件大小比文本格式小得多,可以在存储和传输方面节省空间和时间。
  3. 数据安全:由于OSGB是二进制格式,不容易被修改或篡改。
  4. 支持大型场景:OSGB格式支持大型场景和复杂的模型,因此适用于需要处理大型3D数据集的应用程序。

缺点:

  1. 不可读:由于OSGB是二进制格式,所以不能直接读取和编辑。这使得调试和修改变得更加困难。
  2. 不可扩展:OSGB格式是封闭的,不支持添加新的数据或扩展数据。这使得它不适合需要动态生成或编辑3D场景的应用程序。

OSGB格式解析

还有就是需要构建索引才能在ContextCapture Viewer中预览所有数据块,没有索引只能一块一块的查看。

[2]OBJ

OBJ文件格式是一种常用的三维模型文件格式,它是一种人类可读的文本格式,可以包含三角形、四边形、多边形和其他几何体的描述信息。OBJ文件格式最初由 Alias|Wavefront 公司开发,用于创建三维图形和动画。

很适合用于3D软件模型之间的互导,比如Smart3D里面生成的模型需要修饰,可以输出OBJ格式,之后就可以导入到3dsMax进行处理;或者在3dsMax中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。

目前几乎所有知名的3D软件都支持OBJ文件的读写,OBJ文件还是一种文本文件,可以直接用写字板打开进行查看和编辑修改。

OBJ文件格式通常由多个文件组成,其中包括OBJ文件(模型文件)、MTL文件和图片文件。这些文件通常被放在同一目录下,以方便引用和管理。

  • OBJ文件:通常以“.obj”扩展名结尾,包含了三维模型的几何信息,如顶点、面以及纹理坐标等。OBJ文件是一个文本文件,可以使用文本编辑器打开和编辑。
    OBJ文件格式通常包含两个部分:顶点数据和面数据。顶点数据包括模型中的所有顶点的位置、法向量、纹理坐标和颜色信息。面数据包括模型中的所有面的顶点索引信息,用于描述如何将顶点连接起来形成面。
    下面是一个简单的OBJ文件格式的例子:
# 一个简单的OBJ文件格式示例
v 0.0 0.0 0.0    # 第一个顶点的位置
v 1.0 0.0 0.0    # 第二个顶点的位置
v 1.0 1.0 0.0    # 第三个顶点的位置
f 1 2 3          # 三角形面的顶点索引

OBJ文件格式的具体格式如下:

  1. 顶点数据(可选):以“v”命令开头,包含顶点的位置坐标。例如:
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 1.0 0.0
  1. 顶点法向量数据(可选):以“vn”命令开头,包含顶点的法向量信息。例如:
vn 0.0 0.0 1.0
vn 0.0 0.0 1.0
vn 0.0 0.0 1.0
  1. 纹理坐标数据(可选):以“vt”命令开头,包含顶点的纹理坐标信息。例如:
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
  1. 面数据:以“f”命令开头,用于描述面的顶点索引。例如:
f 1/1/1 2/2/1 3/3/1
f 1/1/1 3/3/1 4/4/1

在这个例子中,顶点索引的格式是“v/vt/vn”,分别表示顶点、纹理坐标和法向量在各自列表中的索引。如果某个属性不存在,则用“-”代替。例如,如果没有纹理坐标,则格式为“v//vn”。
此外,OBJ文件格式还支持一些其他命令,例如:

  1. “mtllib”:用于指定材质库文件的路径。
  2. “usemtl”:用于指定使用的材质名称。
  3. “g”:用于定义组信息。
  4. “s”:用于指定平滑组信息
  • MTL文件:通常以“.mtl”扩展名结尾,包含了三维模型的材质信息,如颜色、纹理、透明度等。MTL文件也是一个文本文件,可以使用文本编辑器打开和编辑。
    例如,下面是一个MTL文件的示例:
# 一个MTL文件示例
newmtl material1     # 定义一个新的材质
Ka 0.2 0.2 0.2       # 环境光颜色
Kd 0.8 0.8 0.8       # 漫反射颜色
Ks 1.0 1.0 1.0       # 镜面反射颜色
map_Kd texture.jpg   # 漫反射纹理贴图
  • 图片文件:通常以“.jpg”、“.png”等扩展名结尾,包含了三维模型的纹理信息。图片文件可以使用任何支持的图像编辑软件打开和编辑,例如Photoshop或GIMP。在OBJ和MTL文件中,图片文件通常被引用为纹理贴图。

示例
image.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQcPgYsP-1691561372691)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504164123038.png#id=zbqce&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]

[3]FBX

FBX是一种通用的三维模型格式,由Autodesk公司开发和维护。它是一种二进制文件格式,旨在支持不同3D软件之间的数据交换和互操作性。FBX文件可以包含几何体、材质、动画、灯光、相机、约束等多种类型的数据。

FBX格式的优点之一是在不同的3D软件之间转换时的高度兼容性。许多3D软件都支持导入和导出FBX文件,包括3ds Max、Maya、Blender、Cinema 4D等。这使得FBX成为一种常见的数据交换格式,可以在不同的软件之间轻松地共享3D模型和相关的数据。

FBX还支持动画数据的存储和传输,包括关键帧动画和骨骼动画。这使得FBX成为游戏开发、影视制作等行业中常用的格式之一。在游戏开发中,开发人员可以使用FBX格式将3D模型和动画从艺术家或外部制作公司导入到游戏引擎中。

  • FBX文件结构:FBX文件由多个块组成,每个块代表一种类型的数据,比如几何体、材质、动画轨迹等。每个块都有一个头部,其中包含块的类型、大小和版本信息等元数据。这种结构使得FBX文件非常灵活和可扩展,可以根据需要添加或删除特定类型的数据。
  • **常见应用领域:**由于其高度兼容性和支持动画数据的存储和传输,FBX广泛应用于游戏开发、影视制作、建筑设计、工业设计等领域。在游戏开发中,FBX格式常用于导入3D模型和动画到游戏引擎中。在影视制作中,FBX格式常用于在不同软件之间交换3D场景和角色数据。在建筑设计和工业设计中,FBX格式常用于展示和交流3D模型和设计方案。

示例:https://sketchfab.com/3d-models/placeholder-cube-1-7b56b13a97df40c48d678c799d6e7231

[4]STL

STL是一种常用的三维模型数据格式,它是由3D Systems公司在1987年开发的。STL代表“STereoLithography”,是一种用于快速原型制造的文件格式。STL文件以二进制或ASCII格式存储,其中包含物体的表面几何信息

STL文件由一系列三角形组成,每个三角形都由三个顶点和一个法线向量定义。STL文件中的三角形数量决定了物体的精度和细节程度。STL文件中不包含材质、纹理、颜色、动画等其他信息。因此,STL文件通常用于制造原型或快速建模,而不是用于渲染或动画等高级应用。

优点:

简单性和通用性。几乎所有3D软件都支持导入和导出STL文件,因此可以在不同的软件之间轻松共享3D模型。此外,STL文件非常小,可以快速加载和处理,这使得它们在快速原型制造和3D打印等应用中非常有用。

局限性:

由于STL文件只包含表面几何信息,因此无法描述内部结构、孔洞、壳厚度等特性。另外,STL文件的精度受到三角形数量的限制,当三角形数量不足时,模型的曲面会出现锯齿状或平滑度不足的问题

[5]3DS

3DS是3dsMax建模软件的衍生文件格式,做完MAX的场景文件后可导出成3DS格式,可与其他建模软件兼容,也可用于渲染。

优点:

  • 3DS文件的优点之一是其广泛的支持。许多3D软件都支持导入和导出3DS文件,例如3ds Max、Maya、Blender、Cinema 4D等。这使得3DS成为一种通用的三维模型数据格式,可以在不同的软件之间共享3D模型。
  • 3DS文件中包含的数据类型非常丰富,包括几何体、材质、动画、相机、灯光、约束等。这些数据可以描述三维场景中的不同方面,例如物体的形状、外观、动作等。此外,3DS文件还支持多种类型的动画数据,包括关键帧动画、物理动画、路径动画等。

局限性:

由于其二进制格式,3DS文件不容易进行版本控制和修改。此外,3DS文件的文件大小通常很大,因为它们包含了大量的数据类型和细节。另外,3DS文件的精度受到三角形数量的限制,当三角形数量不足时,模型的曲面会出现锯齿状或平滑度不足的问题。

[6]DAE

DAE(Digital Asset Exchange)是一种基于XML的开放式三维模型交换格式,由Collada工作组开发。DAE文件包含了三维模型、材质、动画、灯光等信息,可以在不同的3D软件之间进行导入和导出。

优点:

  • DAE文件的优点之一是其开放式标准。由于DAE是一种开放式标准,因此可以在不同的3D软件之间进行交换和共享,从而实现数据的无缝转移。此外,由于DAE是基于XML的格式,因此可以方便地进行版本控制和修改。
  • DAE文件还具有良好的兼容性。它可以与多种三维软件和引擎进行交互,包括3ds Max、Maya、Blender、Unity、Unreal Engine等。这使得DAE成为了一种通用的三维模型交换格式,可以在不同的软件和平台之间共享3D模型。

局限性:

  • DAE文件的缺点之一是文件大小较大。由于它是基于XML的格式,因此文件大小比二进制格式(如FBX、GLB等)要大很多。此外,由于DAE文件中包含了大量的数据和细节,因此在加载和渲染时需要消耗更多的时间和资源。

[7]PLY

PLY(Polygon File Format)是一种用于存储三维模型的文件格式,由斯坦福大学图形实验室开发。PLY文件格式既可以存储三角形网格模型,也可以存储点云模型,是一种非常灵活和通用的三维模型数据格式。

优点:

  • PLY文件格式的优点之一是其简单性。PLY文件格式采用ASCII或二进制格式存储三维模型数据,数据结构简单明了,易于理解和解析。此外,PLY文件格式支持自定义属性和注释,可以存储更多的信息和元数据。
  • PLY文件格式的另一个优点是其通用性。PLY文件格式可以被多种3D软件和引擎所支持,例如MeshLab、CloudCompare、Unity、Unreal Engine等。此外,PLY文件格式也被广泛用于科学计算、医学成像、机器人控制等领域,具有广泛的应用场景。

局限性:

  • PLY文件格式的缺点之一是其文件大小较大。由于PLY文件格式存储的是离散化的三维数据,因此文件大小比其他格式(如OBJ、FBX等)要大很多。此外,由于PLY文件格式不支持压缩,因此在传输和存储时需要消耗更多的时间和资源。

3.Web端常见的三维模型数据格式

常见的Web渲染引擎支持的三维数据格式

以下是常见的Web渲染引擎(Cesium、Three.js、Babylon.js、deck.gl、Mapbox GL JS)支持的三维数据格式:

  1. Cesium:

    • glTF (.gltf, .glb):Cesium的主要支持的三维数据格式,用于表示3D模型和场景。
  2. Three.js:

    • glTF (.gltf, .glb):Three.js支持的主要三维数据格式。
    • OBJ:一种常见的3D模型格式,Three.js可以加载和显示OBJ文件。
    • FBX:Autodesk的3D模型格式,Three.js可以加载和显示FBX文件。
    • Collada (.dae):一种基于XML的3D模型格式,Three.js可以加载和显示Collada文件。
    • JSON:Three.js的自定义JSON格式,用于表示3D模型和场景。
  3. Babylon.js:

    • glTF (.gltf, .glb):Babylon.js支持的主要三维数据格式。
    • OBJ:Babylon.js可以加载和显示OBJ文件。
    • FBX:Babylon.js可以加载和显示FBX文件。
    • Collada (.dae):Babylon.js可以加载和显示Collada文件。
    • STL:一种用于3D打印的模型格式,Babylon.js可以加载和显示STL文件。
    • Babylon (.babylon):Babylon.js的自定义格式,用于表示3D模型和场景。
  4. deck.gl:

    • GeoJSON:deck.gl支持加载和显示GeoJSON文件,用于表示地理空间数据。
    • MVT(Mapbox Vector Tiles):一种用于表示矢量地图数据的格式,deck.gl可以加载和显示MVT文件。
  5. Mapbox GL JS:

    • GeoJSON:Mapbox GL JS支持加载和显示GeoJSON文件,用于表示地理空间数据。
    • MVT(Mapbox Vector Tiles):Mapbox GL JS可以加载和显示MVT文件,用于表示矢量地图数据。
    • Terrain-RGB:一种用于表示地形数据的格式,Mapbox GL JS可以加载和显示Terrain-RGB文件。

对于Web端,因为网络传输性能的瓶颈,是不太适合直接使用桌面端常见的三维数据格式的,因为其文件通常很大,还有一些兼容性的问题,常见的Web渲染引擎也不支持。

[1]glTF

glTF(全称为GL Transmission Format)是一种基于JSON的开放标准的三维模型文件格式,由Khronos Group开发,旨在提供一种在WebGL、OpenGL和Vulkan等3D图形API中高效传输和加载三维模型的标准格式。glTF支持几何体、材质、纹理、动画、骨骼和节点层次结构等多种三维模型和场景元素。

glTF 1.0与glTF 2.0

glTF 1.0和glTF 2.0是glTF规范的两个版本,它们之间有很多的区别和改进。下面是它们的主要区别:

  1. 文件格式:glTF 1.0使用JSON格式来描述3D模型的几何形状、材质、动画和其他相关信息,可以包含多个文件,例如二进制文件、纹理文件和其他资源文件。glTF 2.0使用JSON格式来描述3D模型的几何形状、材质、动画和其他相关信息,可以包含多个文件,例如二进制文件、纹理文件和其他资源文件,也可以使用glb二进制格式来存储所有的模型数据。
  2. 材质:glTF 1.0使用基于Phong模型的材质系统,可以定义漫反射、镜面反射和环境光反射等属性。glTF 2.0使用基于PBR(Physically Based Rendering)的材质系统,可以定义金属度、粗糙度、环境光遮蔽和法线贴图等属性,可以更加真实地模拟光照效果。
  3. 动画:glTF 1.0支持基于关键帧的动画,可以定义位置、旋转和缩放等属性的动画。glTF 2.0支持基于节点层级的动画,可以定义节点的变换矩阵、权重和可见性等属性的动画,可以更加灵活地控制动画效果。
  4. 扩展:glTF 1.0支持一些扩展,例如KHR_materials_common扩展,可以定义基于传统渲染管线的材质属性。glTF 2.0支持更多的扩展,例如KHR_texture_transform扩展,可以定义纹理的平移、旋转和缩放等属性,可以更加灵活地控制纹理效果。
  5. 性能:glTF 2.0相对于glTF 1.0来说,可以更好地支持GPU加速和压缩,可以更快地加载和渲染3D模型,可以更好地适应WebGL和OpenGL等图形API的要求。
.gltf与.glb

.gltf是一种开放标准的三维模型文件格式,它使用JSON格式来描述三维模型的几何形状、材质、动画和其他相关信息。.gltf文件可以包含多个文件,例如二进制文件、纹理文件和其他资源文件。.gltf文件可以在WebGL和OpenGL等图形API中使用,可以在Web浏览器中直接加载和渲染。
image.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnHYRGvW-1691561372692)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504181927988.png#id=r6Hkh&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]

.glb是.gltf的二进制版本,它将所有的模型数据存储在一个二进制文件中,包括几何形状、材质、动画和其他相关信息。.glb文件比.gltf文件更紧凑,因为它们不需要加载多个文件

cesium示例中的glb模型:
image.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bbj0xwjk-1691561372693)(%E4%B8%89%E7%BB%B4%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3.assets/image-20230504182917773.png#id=JxpTY&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]

注意事项
  • glTF 1.0和glTF 2.0都可以使用.gltf和.glb这两种文件格式
  • .gltf和.glb都是glTF文件格式的一部分,它们的区别在于文件的存储方式。.gltf文件使用JSON格式来描述三维模型的几何形状、材质、动画和其他相关信息,可以包含多个文件,例如二进制文件、纹理文件和其他资源文件。.glb文件是glTF的二进制版本,将所有的模型数据存储在一个二进制文件中,包括几何形状、材质、动画和其他相关信息。
  • glTF 1.0和glTF 2.0是两个不同的版本,它们之间有一些区别和改进。glTF 2.0相对于glTF 1.0来说,增加了更多的功能和特性,例如支持PBR材质、动态加载、GPU纹理压缩等。但是,glTF 2.0仍然可以使用.gltf和.glb这两种文件格式。
  • 因此,可以使用.gltf和.glb这两种文件格式来存储glTF 1.0和glTF 2.0的三维模型数据。选择使用哪种文件格式,取决于具体的应用场景和需求。
  • GLTF、GLB(二进制gLTF文件)
  • 三维瓦片:3DTiles(倾斜摄影、人工模型、三维建筑物、CAD、BIM、点云数据等)

[2]高效三维数据格式:3D Tiles

3D Tiles 是 Cesium 提出的处理三维地理大数据的数据格式,从结构关系上看,3DTiles 归属于Primitive,具有很高的数据加载效率。

3D Tiles定义

3D Tiles 是 Cesium 于2016 年3月定义的一种三维模型瓦片数据结构。3DTiles 将海量三维数据以分块、分层的形式组织起来,这样就大大减轻了浏览器和图形处理单元(GPU)的负担。3D Tiles数据的特点如下:

  1. 开放且灵活:作为一种开放式数据规范,3D Tiles 的切片方案灵活可变,三维模型的切片大小和覆盖范围可以人为设置。此外,3D Tiles 还能够适配三维空间中多种空间分区方案,包括KD树、四叉树、八叉树、普通网格,以及其他空间数据结构等。
  2. **质性支特:**通过一组已定义的文件格式,可以将多种类型的三维地理空间要素(包括倾斜摄影数据、BIM/CAD 数据、三维建筑模型、实例化要素和点云数据)转换为三维形式的单个数据集,同时又允许多种不同格式标准的模型显示在同一个场景中。
  3. **专为三维可视化设计:**3D Tiles 建立在gITF 格式之上,并引人了三维图形领域的技术,3D Tiles 格式的基础就是树状模型对象的层次结构(hierarchicallevels of detail, HLOD)。传统的细节层次模型会访问场景中所有对象或者节点,针对每一个节点判断是否符合渲染的条件;而 HLOD 具备层次结构,当不满足细化渲染添加的时候,场景只会渲染父级对象或节点,不会访问子节点,因此计算量会相对较小。
  4. 可交互:3D Tiles 支持交互旋转和样式的设置,在 WcbGL 中优化后,三维瓦片文持对单个模型的交互,如高亮显示鼠标悬停位置的模型,或删除一个三维建筑模型。还支持对单个模型的材质修改,如根据建筑高度和年代,可以设置不同的显示效果而不需要重新更新代码。3D Tiles 用于流式传输三维空间信息,包括建筑物、树木、点云和矢量数据等。
3D Tiles数据结构

3D Tiles数据结构由两部分组成,一个是JSON格式的数据组织文件tileset.json,另外是每个瓦片节点对应的模型文件,3Dtiles支持的模型文件格式有.b3dm、.i3dm、.pnts、.vctr、.cmpt五种:
在1.0 版本的规范中,瓦片所引用的二进制的瓦片数据文件,有四种类型:.b3dm、.i3dm、.pnts、.cmpt

格式名称 说明
Batched 3D Model( * . b3dm) 用于具有不同几何、材质或贴图的异质模型网格
Instanced 3D Model( * . i3dm) 实例化的模型,应用同一个三维模型,用于树木等相同的地物可视化
Point Cloud ( * . pnts) 用于点云数据的可视化
Vector Data ( * . vctr) 用手矢量数据的可视化
Composite( * . cmpt) 上述几种格式的组合

image.png
一个tielset.json文件中最层级的对象中通常有这四个属性:

  • asset是一个包含了整体tileset 元数据属性的对象,其中 version 属性是定义3D Tiles 版本的字符串,版本号定义了 tileset. json 的JSON 格式和瓦片格式的基础。tilesetVersion 属性是一个选填的宇符串,用于定义特定应用中 tileset 的版本,可以用于更新 tileset。
  • properities规定了瓦片集最大外包矩形地理空间范围,由经度、纬度、高度三个属性的最大值和最小值界定
  • geometricError定义了一个非负误差(以米为单位),在这个误差下瓦片集不被渲染
  • root用于定义根瓦片,root.geometricError 与最高层级tileset. json 的geometricError 不同。后者是整个瓦片集不被渲染的误差,前者是只有根瓦片被渲染的误差
  • children 定义子瓦片对象的数组。每个子瓦片都有 bounding Volume,这个边界体被父瓦片的 bounding Volume 完全包围,通常子瓦片的 geometricError 要小于父瓦片的 geometricError。对于叶子瓦片而言,子瓦片数组的长度为零。
  • 瓦片对象记录的就是瓦片的元数据,真正瓦片的本体数据在content所引用的二进制文件中
  • 瓦片还可以再引用 3dTiles 数据集(套娃)

这里重点说说root瓦片及其children:
树结构对于三维空间数据的组织有很大的优势。3dTiles在空间上允许数据集使用如下几种树结构:

  • 四叉树:四叉树允许使用传统的均匀四叉树,也允许使用松散四叉树等变种(例如,允许子节点,即子瓦片允许存在空间范围重叠)。四叉树对在高度上不太好切分的数据比较适合,而如果追求极致的空间分割和分级(例如点云数据),那么八叉树更合适。
  • **八叉树:**八叉树也允许使用各种变种。
  • KD树
  • **格网结构:**格网结构的树允许瓦片存在多个子瓦片,通常出现在倾斜摄影数据上,但是这会导致网络请求过多的问题。
3D Tiles的生成方法

目前主要将四类三维数据格式模型 BIM、3ds Max 模型、倾斜摄影数据模型、简易三维模型生成为3D Tiles以在web端使用

坐标系统

3dTiles采用的是WGS84椭球,但是并未采用经纬度记录数据:因为相对于精细三维模型来说,经纬度不足以提供足够精确的空间分割(要照顾图形显示问题)。所以,同样是那个形状,3dTiles使用了同一个WGS84椭球,但是更方便计算的坐标:空间直角坐标。(三维笛卡尔坐标)
用经纬度记录数据的WGS84坐标系,WKID是4326,用地心为坐标原点的空间直角坐标来记录数据的坐标系,WKID是4979.
3dTiles 用的就是4979坐标系。

study source link:

4.体积渲染

体积渲染(Volume Rendering)是一种用于可视化三维数据的技术,它通过对数据的密度、颜色和透明度进行处理,将数据转换为图像或动画。与表面渲染不同,体积渲染不需要先将数据转换为表面网格,而是直接对数据进行处理,从而能够更全面地呈现数据的内部结构。

体积渲染的原理是基于光线追踪和体积光学的原理。在渲染过程中,光线从视点出发,经过数据中的每个点,并在每个点处计算出颜色、透明度等属性,最终形成一幅图像或动画。由于数据通常是非常大的,因此需要使用高性能计算机和专用的体积渲染软件来实现。

体积渲染在医学、科学、工程、地质和气象等领域都有广泛的应用,能够帮助人们更好地理解和分析数据,以便做出更好的决策。

  • OBJ(Wavefront Object): OBJ是一种简单的三维模型数据格式,主要用于表示三维几何形状。它是一种纯文本格式,易于阅读和编辑。OBJ文件通常包含顶点坐标、纹理坐标、法线和面信息。这种格式广泛应用于3D建模和动画软件,如Blender、3ds Max和Maya等。
  • STL(Stereolithography): STL是一种常用于3D打印的文件格式。它表示三维模型的表面几何形状,通过一系列三角形面片来描述模型。STL文件可以是ASCII格式(纯文本)或二进制格式。由于其简单的结构和广泛的兼容性,STL已成为3D打印行业的标准文件格式。
  • FBX(Filmbox): FBX是一种用于存储三维模型、动画和材质的文件格式。它支持多种3D软件,如Autodesk 3ds Max、Maya和Cinema 4D等。FBX文件可以包含复杂的场景信息,如骨骼动画、材质和纹理等。此外,FBX还支持二进制和ASCII两种格式。
  • PLY(Polygon File Format): PLY是一种用于存储三维扫描数据的文件格式。它可以表示点云、面片和其他几何形状。PLY文件通常包含顶点坐标、颜色信息和面信息。这种格式主要用于计算机图形学和三维扫描领域,如点云处理和三维重建等。

5.测绘领域中的4D产品

  1. DEM(数字高程模型-栅格):DEM是一种数字地形模型,用于表示地表高度。它由点阵数据组成,每个点都有一个高度值。DEM可以用于地形分析、水文学、土地利用规划等领域。DEM数据可以从激光雷达、雷达高度计、卫星测高等多种方式得到。
  2. DOM(数字正射影像图-栅格):DOM是一种数字影像产品,用于表示地表的真实颜色。它可以用高分辨率遥感影像数据生成,与DEM结合使用可以实现三维地形表面的可视化。DOM广泛应用于城市规划、农业、林业、环境监测等领域。
  3. DLG(数字线划图):DLG是一种矢量产品,用于表示地物的线条、点和面等几何形状。它是通过数字化地图或者遥感影像等数据得到的。DLG数据可用于更新地图、制作专题图等应用,广泛应用于城市规划、交通规划、土地利用规划等领域。
  4. DRG(数字栅格图):DRG是一种数字影像产品,用于表示地表的图像。它通常是由正射影像或者航空照片等数据生成的。DRG广泛应用于地图制作、军事规划、城市规划等领域。与DEM结合使用可以实现三维地形表面的可视化。

6.倾斜摄影三维建模软件

[1]ContextCapture(Smart3D)

它原是摄影测量软件开发商 Acute3D 的主打产品,后来 Acute3D 被 Bentley 公司(没错,就是和汽车品牌宾利一个名字,但不是同一家公司)收购,更名为 ContextCapture。

它可以通过使用不同的图像和激光扫描数据,创建高精度的三维模型。ContextCapture软件可以将从无人机、航空或地面扫描仪中获取的图像和激光扫描数据进行处理,从而生成高度准确的模型。

ContextCapture具有多种功能和特点,包括:

  1. 处理大型数据集:ContextCapture可以处理大型数据集,包括大量的图像和激光扫描数据,以生成高精度的3D模型。
  2. 自动化处理:ContextCapture可以自动化处理图像和激光扫描数据,从而减少人工干预和提高工作效率。
  3. 多种导出格式:ContextCapture可以导出多种格式的3D模型,包括OSGBOBJFBXCOLLADASTL等,以便在其他软件中使用。
  4. 高精度模型:ContextCapture可以生成高度准确的三维模型,这对于需要进行精确测量和分析的应用非常有用。
  5. 应用广泛:ContextCapture可以应用于多种领域,包括建筑、土木工程、地质勘探、城市规划和文化遗产保护等。

[2]Pix4Dmapper

Pix4Dmapper是一款由瑞士公司Pix4D开发的专业无人机影像处理软件,是一款专门用做测绘的软件,从数据采集(pix4Dcapture)到DOM、DSM及三维模型生产都有涉及。但是三维效果相对于samrt3D来说还是有些差距,但DOM正射影像生成更胜一筹。它可以将无人机采集的航拍图像、激光雷达数据和其他传感器数据转换为高精度的3D模型和地图。该软件的主要功能包括图像处理、点云生成和三维建模等。

Pix4Dmapper的主要特点和优势包括:

  1. 高精度:Pix4Dmapper可以通过使用多个图像和传感器数据,生成高精度的3D模型和地图,精度可以达到亚厘米级别。
  2. 自动化:Pix4Dmapper可以自动处理数据,减少人工干预,提高工作效率。
  3. 多种导出格式:Pix4Dmapper可以将生成的3D模型和地图导出为多种格式,包括OBJ、FBX、PLY、LAS和GeoTIFF等。
  4. 应用广泛:Pix4Dmapper可以应用于建筑、土木工程、地质勘探、农业和环境保护等多个领域。
  5. 支持多种传感器:Pix4Dmapper可以处理多种传感器数据,例如RGB相机、热像仪、激光雷达和GPS等。

[3]PhotoScanz

PhotoScan是由Agisoft LLC研发生产,是一款全自动生产三维模型的建模软件。我用这款软件较少,处理过少量的数据,把结果分项给大家,效果一目了然。这款软件操作简单,无特殊和难理解的参数需要设置,但是对于数据处理的容错率较低,易报错

7.常见的三维建模软件

  1. 3ds Max:由Autodesk公司开发的三维计算机图形软件,可用于建筑、工程、建设、影视、游戏和广告等领域的三维设计和建模。
  2. Maya:由Autodesk公司开发的三维计算机图形软件,可用于影视、游戏、动画、建筑、工程等领域的三维设计和建模。
  3. Blender:一种开源的三维计算机图形软件,可用于建筑、工程、影视、游戏等领域的三维设计和建模。Blender具有丰富的功能和工具,包括建模、动画、渲染、剪辑等。
  4. SketchUp:由Trimble公司开发的三维建模软件,主要用于建筑和室内设计等领域。SketchUp具有简单易用的用户界面,可用于快速建模和可视化设计。
  5. SolidWorks:由Dassault Systèmes公司开发的三维计算机辅助设计软件,主要用于工程设计和制造。SolidWorks具有丰富的工具和功能,可用于创建机械、电子、建筑等方面的三维模型和装配体。
  6. Rhino:由McNeel公司开发的三维建模软件,主要用于工业设计、建筑设计、珠宝设计等领域。Rhino具有强大的建模工具和灵活的曲面建模功能,可用于创建高质量的三维模型和曲面。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NOSaac/article/details/132187008

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签