发明内容
为了解决上述问题,本发明提出一种基于3D Tiles的工程三维模型LOD输出方法,可实现将各类专业三维软件生成的特定格式的三维模型文件在轻量化三维引擎进行加载和渲染的目的。3DTiles规范和LOD技术能够有效地解决大数据量、复杂的工程设计模型在轻终端进行渲染和漫游的问题,为实现数字化工厂提供重要的技术基础。
本发明的一种基于3D Tiles的工程三维模型LOD输出方法,基于HLOD技术对工程三维模型建立多分辨率层次结构进行输出,在不影响视觉效果的前提下减少特定视图下需要显示的模型的几何复杂度;所述对工程三维模型建立多分辨率层次结构包括:树节点的字段构成设计、基于Morton码的树节点编码、数据分割、基于MeshID的HLOD层次结构建立以及基于Hausdorff距离的几何误差计算。
进一步的,所述树节点的字段构成设计包括:
每一个树节点包含以下内容:指向父节点和子节点的指针、节点的包围盒、节点表示的数据内容、节点内容中包含的三角形的数量和节点编号;
进行空间分割时只有实节点指向的三维数据内容不为空,其余节点均为空;MeshID字段中存储当前节点或其子节点指向的三维数据所包含的构成三维场景的基本对象的ID,便于模型层次结构建立时快速查找到这些基本对象。
进一步的,所述基于Morton码的树节点编码包括:
立方体网格中,对于在树中同一父节点的八个子节点,其中具有最小(x,y,z)值的节点编号为0,而其余节点的编码基于相邻节点的编号,沿x轴方向加1,沿y轴方向加2,沿z轴的方向加4,并将父节点的编号前缀到子节点编号之前,根节点编号为0。
进一步的,所述数据分割包括:
在分割时以组件的最小包围盒的中心点来近似该组件,以避免同一组件被分割成两段或者多段;分割依据是判断该组件的中心位于分割面的左边还是右边,若位于当前分割面的左边,则在左节点中,否则在右节点中。
进一步的,所述基于MeshID的HLOD层次结构建立包括:
在HLOD树结构结构中,每一层中的图块组合成一个完整的特定分辨率的模型,层次越深模型的几何细节越丰富;在该树结构中,每个子节点包含其父节点的一个子集,每个子集的内容在几何细节上更详细,但表示的空间范围更小;在模型读取数据组织部分,为构成模型的每个基本组件生成一个唯一性标识码MeshID,在分割非0层模型建立层次结构时,模型中的每一个组件会根据MeshID寻找到对应的父节点进行初步的分块,然后调用数据分割算法生成HLOD树结。
进一步的,所述基于Hausdorff距离的几何误差计算包括:
Hausdorff距离表示简化模型上的每个顶点与最高分辨率的模型上的顶点之间的最短距离的最大值,Hausdorff距离是描述两个集合间相似度的一种量度,是两个集合间距离的一种定义形式,计算公式如下:
H(A,B)=max[maxmin||a-b||,maxmin||b-a||],a∈A,b∈B (1)
其中,A、B为欧式空间中的两个集合。
本发明的有益效果在于:
本发明基于HLOD技术对工程三维模型建立多分辨率层次结构进行输出,可以减少特定场景中模型的几何复杂度,这对于渲染大规模、复杂场景时具有重大意义的。通过对模型建立分块、分层结构,可降低硬件的渲染负载,加速模型的渲染,使得大规模复杂三维场景渲染成为可能。
本发明可实现将各类专业三维软件生成的特定格式的三维模型文件(如PDMSRVM二进制格式文件)在轻量化三维引擎进行加载和渲染的目的。基于的3DTiles规范和LOD技术能够有效地解决大数据量、复杂的工程设计模型在轻终端(如基于WebGL技术的浏览器端的轻量化三维引擎)进行渲染和漫游的问题,为实现数字化工厂提供重要的技术基础。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现说明本发明的具体实施方式。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明将图形学研究、电影行业以及游戏行业的技术引入三维地理空间,3DTiles定义了一种空间数据结构并针对三维内容设计了一系列的瓦片数据格式,而且对数据的流式传输和渲染进行了优化。三维模型的瓦片数据格式基于著名的图形语言交换格式glTF(GL Transmission Format)进行设计。
从一开始,3D Tiles就是为真正的三维设计的,配备了自由漫游相机,而不仅限于例如2.5维视角等。传统的地理空间要素,例如多变形和折线,可以再表面上进行绘制或者拉伸。但是3D Tiles已经超越了点、折线和多边形,而是考虑具有网格、材质和节点层次结构的完整的三维模型。3D Tiles支持交互式选择和样式设置,通过鼠标移动选择或者根据模型特有属性进行搜索选择等。
在3D Tiles中,tileset是在空间数据结构(树)中组织的场景图块的集合。tileset由至少一个tileset JSON文件描述,该文件包含tileset元数据和场景图块对象树。
图块集在结合了多分辨率细节层次(HLOD)的概念的树结构中组织,以便最佳地渲染空间数据。如图1所示,每一个场景图块具有包围体,包围体用来定义完全包围渲染内容的空间范围。空间树结构具有空间一致性,子图块的内容完全在父图像的包围体内。
1、Tile JSON组成
3D Tiles用一个主要的tilesetJson文件来定义tileset的入口点。其中tilesetJson文件不用遵循特定的命名规定。TilesetJson的主要内容由tile Json构成。
Tile Json对象由如图2所示的属性组成,其中:
boundingVolume属性定义了包含特定图块的包围体,用于确定在运行时哪些图块被渲染。
geometricError属性值是一个非负数,定义当该图块被渲染而其子图块没有被渲染时引入的以米为单位的几何误差。在运行时,该几何误差用以计算以像素为单位的屏幕空间误差(SSE)。SSE用于确定当前图块在给定的视图下,图层细节是否足够丰富,或者是否考虑其子图块。
refine属性值是“REPLACE”或“ADD”中的一个。前者用于替换细化,即用分辨率更高的子图块替换分辨率较低的父图块;后者用于添加细化,即保持父图块渲染不变的前提下渲染子图块的内容。在同一个tileset中refine属性值既可以是“REPLACE”,也可以“ADD”。对于tileset跟节点来说,该属性是必须的,在其它节点该属性是可选的。当某一节点的“refine”属性被省略时,其继承父节点的属性值。
content属性包含可渲染内容的元数据。其中content.uri用于标识渲染资源的位置,既可以指向标识图块的二进制文件,也可以指向另外一个tilesetJson文件。
children属性是一个定义子图块集的数组对象。每一个子图块内容完全被包含在其父图块的包围体中,而且通常来说子图块的geometricError属性值小于父图块的geometricError属性值。对于叶节点来说,该数组对象的长度为零,而且children属性可能没有被定义。
2、多分辨率LOD(即HLOD)
如今的大规模场景渲染算法主要关注两件事:
(1)减少CPU的处理量;
(2)减少通过***总线传输给GPU的数据量;
在LOD技术中能够很好的实现上述目标的算法被归类为多分辨率LOD(即HLOD)算法的范畴。在HLOD中模型被分割后存储在多分辨率空间数据结构中,例如四叉树或八叉树,最简化的模型被存储在树结构的根节点处。树节点存储一个图块,每个子节点包含其父节点的一个子集,每个子集的内容在几何细节上更详细,但表示的空间范围更小。最大深度处的模型表示最高分辨率的模型,如图3和4所示。
如果给定视图中当前节点具有足够的几何细节,则渲染该节点,否则该节点将被精细化,即该节点的子节点将被考虑进行渲染。这是一个持续递归的过程,直到整个场景被足够细节的场景图块渲染。
HLOD算法适用于现如今的GPU,由于GPU等硬件技术的已经发展到有助于实现本节开头提到的两个目标。在HLOD算法中CPU不在需要像CLOD算法中一样考虑单个的三角形,而只需要考虑每个场景图块,从而大大减少CPU的处理量。HLOD算法同样可以减少通过***总线传输到GPU的数据量,因为CLOD不同的是HLOD不需要在每次视点位置改变就传输新的数据到GPU,而是将与视点无关的场景图块缓存在GPU的静态顶点缓冲区中,用调用渲染。总的来说,HLOD算法通过***总线传输较少数量的大更新,而CLOD算法传输大量的小更新。
3、屏幕空间误差(SSE)
无论选择哪一种LOD算法,关键是在给定的视图下要选择合适的LOD模型用以渲染当前场景。通常是在不影响渲染效果的前提下尽可能的选择最简单的LOD模型进行渲染。基于如何判定当前LOD模型对于当前视图是否足够精细,是否能够详细的展现场景的几何细节的问题,提出了屏幕空间误差(Screen-Space Error,SSE)的概念。
一般通过考虑SSE所允许的最大值,来决定是否加载更精细的几何模型。SSE的计算公式如公式(1)所示:
其中,ε是以米为单位的几何误差,表示简化模型上的每个顶点与最高分辨率的模型上的顶点之间的最近距离不会超过ε;x是以像素为单位的显示器宽度;d表示图块到相机的距离,以米为单位;θ是以弧度为单位的相机的视场角。
本发明提供的一种基于3D Tiles的工程三维模型LOD输出方法,基于HLOD技术对工程三维模型建立多分辨率层次结构进行输出,在不影响视觉效果的前提下减少特定视图下需要显示的模型的几何复杂度。其中,对工程三维模型建立多分辨率层次结构包括:树节点的字段构成设计、基于Morton码的树节点编码、数据分割、基于MeshID的HLOD层次结构建立以及基于Hausdorff距离的几何误差计算。
优选的,树节点的字段构成设计包括:
每一个树节点包含以下内容:指向父节点和子节点的指针、节点的包围盒、节点表示的数据内容、节点内容中包含的三角形的数量和节点编号;
进行空间分割时只有实节点指向的三维数据内容不为空,其余节点均为空;MeshID字段中存储当前节点或其子节点指向的三维数据所包含的构成三维场景的基本对象的ID,便于模型层次结构建立时快速查找到这些基本对象。
优选的,基于Morton码的树节点编码包括:
立方体网格中,对于在树中同一父节点的八个子节点,其中具有最小(x,y,z)值的节点编号为0,而其余节点的编码基于相邻节点的编号,沿x轴方向加1,沿y轴方向加2,沿z轴的方向加4,并将父节点的编号前缀到子节点编号之前,根节点编号为0。编码示例如图5所示。
优选的,数据分割包括:
在分割时以组件的最小包围盒的中心点来近似该组件,以避免同一组件被分割成两段或者多段;分割依据是判断该组件的中心位于分割面的左边还是右边,若位于当前分割面的左边,则在左节点中,否则在右节点中。
优选的,基于MeshID的HLOD层次结构建立包括:
在HLOD树结构结构中,每一层中的图块组合成一个完整的特定分辨率的模型,层次越深模型的几何细节越丰富;在该树结构中,每个子节点包含其父节点的一个子集,每个子集的内容在几何细节上更详细,但表示的空间范围更小;在模型读取数据组织部分,为构成模型的每个基本组件生成一个唯一性标识码MeshID,在分割非0层模型建立层次结构时,模型中的每一个组件会根据MeshID寻找到对应的父节点进行初步的分块,然后调用数据分割算法生成HLOD树结。
优选的,基于Hausdorff距离的几何误差计算包括:
Hausdorff距离表示简化模型上的每个顶点与最高分辨率的模型上的顶点之间的最短距离的最大值,Hausdorff距离是描述两个集合间相似度的一种量度,是两个集合间距离的一种定义形式,计算公式如下:
H(A,B)=max[maxmin||a-b||,maxmin||b-a||],a∈A,b∈B (2)
其中,A、B为欧式空间中的两个集合。
在本发明的一个优选实施例中,如图6所示,构建多分辨率模型层次结构的具体步骤描述内容如下:
第一步:对不同细节层次的LOD模型,由分辨率低到高依次获取,准备进行分割,生成层次结构。设分辨率最低的模型层次为第0层,后续模型层次数依次加一。
第二步:判断当前准备处理的模型是否是分辨率最低的模型,即第0层模型。若为第0层,则此时的树结构为空,对当前模型直接进行分割,生成树结构;若不为第0层,则先根据上一层模型的分割结果对当前模型内容进行划分,因为当前模型是对上一层模型更精细几何细节的表现,所以需要先把当前模型的中的内容分配到已生成的树结构对应的叶节点中,然后进行分割,生成下一层级的树结构。
第三步:判断是否所有的细节层次模型以分割完成。若未完成,则回到第一步;若已完成,则将分割产生的obj格式数据转换成3D tiles数据。
以上步骤基于HLOD算法生成模型的分层结构,有助于前端在显示时基于视点分块调用模型用以渲染,能够很好地降低模型的复杂度,在不影响视觉效果的情况下完成复杂模型的渲染。
基于上述叙述,为了体现本发明基于3D Tiles的工程三维模型LOD输出方法的意义和优势,设计了如下实验:
通过渲染建立的多分辨率层次结构模型和位于该层次结构中最下层的具有最丰富几何细节的模型,以模型中心与视点的距离以及视角为控制因素,对比观察模型的渲染效果以及获取三维引擎加载当前场景时渲染的三角形数量,来总结分析对三维场景模型建立多分辨率层次结构的意义,呼应本发明通过对模型建立分块、分层结构降低硬件的渲染负载、加速模型的渲染,使得大规模复杂三维场景渲染成为可能的研究目的。实验中涉及到的模型的几何细节信息如表1所示。
表1层次结构模型几何细节统计表
在该组实验使用CesiumJS库作为三维引擎,对表1所示的根据同一模型的不同细节层次模型建立的多分辨率层次结构进行渲染,同时对层次级别编号为2的模型也进行分割渲染(以下统称为单分辨率模型),通过从多角度对比观察和统计当前场景选择渲染的三角形数量,可以发现多分辨率层次结构的模型可以用更少的三角形数量展现出与具有最丰富几何细节的单分辨率模型几乎接近甚至一样的视觉效果,以及与相应的渲染效果对应的场景中包含的三角形数量统计见表2所示。
表2三维场景中包含的三角形数量统计表
因此,可以得出基于HLOD技术对工程三维模型建立多分辨率层次结构进行输出,确实可以减少特定场景中模型的几何复杂度,这对于渲染大规模、复杂场景时具有重大意义的。
以上所述仅是本发明的优选实施方式,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。