保持装配模型外观的轻量化方法研究

2022-09-07 05:05邓灿灿盛步云付高财
现代计算机 2022年13期
关键词:面片视点轻量化

邓灿灿,盛步云,付高财

(1.武汉理工大学机电工程学院,武汉 430070;2.数字制造湖北省重点实验室,武汉 430070)

0 引言

随着信息化技术和计算机图形学的发展,三维设计模式逐渐取代部分二维图形的应用场景,相对于二维图形,三维图形具有更强的直观性和鉴赏性,更符合大众的认知能力。但是,类似于装配体这种大体量三维模型,在网页上进行实时渲染会出现模型数据量过大,加载速度慢,模型特征丢失等问题,必须采取一系列措施对该装配体模型进行轻量化,尽可能多地剔除在实时渲染过程中不重要的零件和特征,减少渲染系统中需要处理的图元数量,在保障模型精度的前提下提高渲染帧率,达到对模型实时渲染的目的。因此,模型简化的同时如何更好地保留模型的外观特征是本文研究的重点。

近年来,国内外提出了许多对模型进行轻量化的方法,根据模型类别的不同,可分为实体模型的简化和网格模型的简化两大类。由于实体模型在简化后很难较好保持原模型的几何结构和拓扑结构,为此本文主要针对的是网格模型的简化。李建军等提出了一种基于特征的半边折叠层次细节模型简化算法,解决了LOD 算法对模型特征处理不足的问题。柳伟等提出了一套面向装配的复杂模型轻量化算法,以零部件抑制、基于特征缝合的模型表面处理和模型整体抽壳等技术为手段,实现了复杂装配模型几何与结构的简化,但简化后模型的外观不能很好地保持。葛超群利用Pro/E 提供的二次开发接口,采用零部件特征删除以及零部件融合技术来减少装配体的数据量,但得到的模型仅有特征标识,无法进行特征操作。董健等提出基于复杂装配体特征抑制的轻量化方法,抑制干扰装配的无关零部件,并通过特征标识号识别微小特征。殷明强等提出了保持外观的CAD 模型轻量化技术,在保持模型外观不变的前提下剔除了装配体中隐藏的零件和特征,但用户无法获取到装配模型完整的装配关系和模型内部信息。以上研究都没有给出一个有效的算法在减少模型数据的同时,有效保留模型的外观特征。

基于上述研究成果存在的问题,本文根据装配体的特点对其轻量化技术进行了深入研究,并在此基础上提出了一种保持模型外观的轻量化方法,通过该方法来对大装配体中隐藏的零件和不重要特征进行识别和简化,从而避免不可见零件和特征进入渲染管线,减少渲染的工作量。首先设计算法识别和剔除隐藏的零件和特征,然后通过特征之间的装配关系来对装配体外部的细小零件和特征进行抑制,从而完成整个装配模型轻量化流程,保持装配模型外观轻量化的总体框架如图1所示。

图1 基于外观特征保留的装配模型轻量化总体框架

1 装配模型隐藏零件的简化

大规模装配模型是由很多个小装配体和零部件组成,每个零件又包含无数个特征,其中具有相互配合的几何元素及元素之间装配关系被称为装配特征,是用来描述子装配体、零件和装配相关的体、面的几何关系及装配工艺的信息集合。如果直接将其在Web 端进行渲染优化,由于数据量过于庞大,远远超出了普通PC 能够处理的数据量,根本达不到实时渲染的要求,所以必须采取一定措施对大装配体模型内部隐藏零件进行简化。

1.1 隐藏面片的识别

装配体所包含的零件,有些是被隐藏的,有些是可见的。而每个零件又含有多个特征,在简化之前需要把这些隐藏零件和特征识别出来。首先遍历装配体的所有零件,利用光线追踪算法选取多个视点从不同方向对模型进行光线投射来与面片进行求交,每次投射都沿着一根光线,然后记录最近的交点,并通过返回的结果来判定光线是否与面片相交,从而判别出面片的可见性。由于面片的数量过于庞大,如果每相交一次都记录一次交点的信息,那么计算量将非常大,所以在光线与面片求交时必须进行优化。为了加速光线追踪的渲染性能,本文首先给装配体封装一个大包围盒,遍历大装配体模型的所有零件,然后给每个零件再封装一个包围球,视点选择在包围盒的八个顶点上,最后以包围盒的八个顶点作为视点向包围盒中心发射射线。先判定射线与包围球是否相交,如果不相交说明一定不会和包围球里面的物体相交,则不进行后续判断;如果相交,再继续判断是否和它的子节点相交,一直递归下去直到光线打到叶子节点,如果和叶子节点有交点,那么和叶子节点的所有物体都相交,图2为3种不同的空间划分。通过该方法确实可以加快射线与物体求交的速度,但同时存在缺陷,因为同一个物体可能与多个节点相交,即存在于不同的节点上。因此本文利用BVH 技术来进行物体划分,来避免一个物体出现在多个叶子节点里,并通过配合光线追踪技术,从多个视点对装配体进行投射来对面片进行求交,从而完成面片的识别。

图2 空间数据结构图

1.2 隐藏面片的简化

通过判断出模型中面片的可见性来对隐藏的零件和特征进行简化,对于隐藏零件的状态可以分为以下两种情况:①零件部分被隐藏;②零件完全被隐藏。对于零件部分被隐藏的情况,由于特征之间存在依赖关系,在某些隐藏零件特征之外还可能存在可见特征,针对这类零件,如果我们把其中的一个隐藏特征剔除掉会影响到模型的可见子特征。对于零件完全被隐藏的情况,因为该零件的所有特征信息全部被隐藏了,不存在可见特征,故可以利用NX 系统的二次开发接口来对完全隐藏的零件进行剔除。

如图3 所示,是该装配模型的依赖特征,也就是其他大部分零件的特征都需要与该特征建立依赖关系,类似于网格图形3(a)中的公共顶点一样,通过它作为桥梁来与其他三角网格之间建立依赖关系。每一个三角形代表一个零件,其中为可见特征,其余、、、、均为隐藏特征,与相连的三角形有△和△,该零件特征之间存在依赖关系,而其余零件特征都为隐藏特征且不存在依赖关系,故可直接剔除。

图3 装配模型特征依赖图

这些隐藏的零件和特征被删除后,就可以得到简化后的三维装配模型。本文中特征的删除可以通过调用CAD 系统提供的二次开发接口NX OPEN 中UF_OBJ_delete_object()函数来进行删除。利用本文的隐藏零件简化算法得到的结果如图4(b)所示,从减速器剖切图可以看出模型内部的一些隐藏零件和特征得到了简化,但同时也可以看出模型外部也有一些不重要的零件和特征被保留了下来,本文隐藏零件简化算法流程如图5所示。

图4 二级减速器剖切图

图5 装配模型隐藏零件的简化流程图

2 保持外观特征的模型轻量化

模型表面一些不影响模型外观的不重要零件和特征,在轻量化的过程中可以将其识别出来,在保证模型主外观不变的前提下,通过设计算法流程并结合CAD 系统提供的接口将其剔除,从而减少模型的数据量。

2.1 不重要零件抑制

图6 装配特征关系图

图7 不重要零件抑制效果图

2.2 非依赖特征抑制

对不重要零件进行抑制后,模型的外部还有许多不重要的隐藏特征,虽然这些特征所在零件含有装配接口,但该零件有部分特征与其他零件的特征之间不存在依赖关系,可以直接剔除掉。

利用LOD 技术将装配体模型分成不同的细节层次,从高到低依次遍历并对模型进行等级划分,等级越高,特征信息就越多,将装配模型放入根节点包围盒中,然后从根节点开始进行BVH 物体划分,如果是小装配体则继续进行BVH 划分,直到零部件被划分到每个叶子节点上,给装配体结构树遍历后的每个节点都封装一个包围盒。依据装配树形图的层次结构特征来设计非依赖特征抑制的简化过程如下:

(1)从顶层元件节点依次往下递归遍历,直到遍历到叶子节点,获取叶子节点的所有零件特征;

(2)获取到每级遍历后叶子节点内物体的特征,给每个零件的特征进行编号并分配一种颜色,通过颜色来区分不同零件所具有的特征;

(3)选择包围盒的八个顶点作为视点,视点方向指向包围盒的中心,分别从所选择的视点位置对每个节点所在包围盒依次进行光线投射,返回投射的结果并读取帧缓冲区中每个特征的像素值;

(4)观察该特征所在的零件是否含有除了本身所具有的颜色像素外其他颜色的像素,如果有,则说明该特征与其他零件特征具有依赖关系,从图8 可以看出C、D 零件共用了特征、,而该零件的其他特征如、、、等与其他零件特征不具有依赖关系,可以直接被剔除;如果没有,则转向(3),改变视点的位置对模型节点继续重复以下步骤;

图8 装配体结构关系树形图

通过以上特征简化流程实现了非依赖特征的抑制。保持外观特征的模型轻量化流程如图9所示。

图9 保持外观特征的模型轻量化流程图

3 应用验证

按照本文提出的保持装配模型外观的轻量化方法,以机械中的装配模型为简化对象,来对本文中的简化结果进行分析。图10(a)是KR301焊接机器人网格模型,图10(b)是采用本文算法得到的效果图,对比可知,在使用本文算法后该模型的零件数由128 降到52,面片数由4880479 减少为4012411,剔除掉装配模型隐藏的大量零件的同时,模型重要特征也得到了较好的保留,外观几乎没变。

图10 本文算法简化效果图

本文算法除了应用于工业中的KR301 焊接机器人模型,M442Z 小塑料导柱注塑模外,也应用到了其他大型装配模型,例如六轴工业机器人模型、五轴CNC 转台、减速器等。在不改变模型外观的条件下,对这些工业模型进行简化,如表1 所示。本文定义的物体简化率=(1-/)×100%,其中表示简化后模型面片数,表示简化前模型面片数。

表1 装配体模型简化结果比较

由表1 可知,经过隐藏零件的识别和简化,装配模型的零部件数量和三角面片的数量都得到了大幅度减少,不同装配体模型简化后的效果也有差别,这主要与装配体的形状、复杂度以及细微零件数量有关。在本文实验中被剔除的零件大多为模型外部体积较小的零件(螺栓螺母)或者是装配体内部完全隐藏的零件,因此剔除掉这些零件并不会影响模型的外观。从图10(a)和图10(b)以及10(c)和10(d)的对比可以看出,装配体外部一些可见细小零件被剔除,是因为这些零件对装配模型的外观并不会产生影响,故可以将其剔除。

4 结语

本文提出了一种保持装配模型外观的轻量化方法,通过识别出面片的可见性,来对装配模型的隐藏零件和可见零件进行简化。实验证明,该算法在对复杂装配模型进行简化时,可以很好地保留模型的外观特征,简化效果也很明显。

本文主要针对单个装配体模型来进行简化,因此所选择的视点都处于模型外部,而对于复杂的装配场景来说,由于它是由多个装配模型组装而成,因此内部也包含了许多子装配体,在渲染过程中也需要展示出来,故可以在场景内部设置多个视点并结合空间数据结构来加快计算,该问题值得后续进一步研究。

猜你喜欢
面片视点轻量化
轻量化材料在商用车白车身的应用
基于ABAQUS的某轻卡车蓄电池支架轻量化
某商用车前护板轻量化结构优化及分析
微视点
基于MATLAB的STL模型切片分层算法
一种轻量化自卸半挂车结构设计
一种轻量化自卸半挂车结构设计
河沿面片
河沿面片
环境视点