APP下载

利用面片法向量保留模型特征的3D打印自适应分层算法

2021-08-05朱敏党元清高思煜高强

西安交通大学学报 2021年8期
关键词:面片顶点台阶

朱敏,党元清,高思煜,高强

(1.哈尔滨工业大学电气工程及自动化学院,150001,哈尔滨; 2.哈尔滨工业大学机电工程学院,150001,哈尔滨)

3D打印技术是利用计算机技术逐层堆积打印出立体模型的方法。随着3D打印技术的不断普及和应用,打印精度和打印效率越来越受到重视。分层处理是3D打印中的重要一环。研究表明,三维打印精度和打印效率都与分层厚度有着紧密联系[1]:分层厚度越小,打印精度越高,但打印效率较低;增大层厚虽然可以提高打印效率,但会产生较大的台阶误差,而且容易导致模型特征的缺失,使打印精度大大降低,因此如何优化分层厚度至关重要。

现有的分层算法根据分层厚度是否可变主要分为等层厚分层算法和自适应分层算法。等层厚分层算法过程简单,易于实现,但是由于层厚固定,打印效率和打印精度不可兼得;自适应分层算法根据模型表面特征等要求自动调节分层厚度,协调了打印精度与打印效率之间的关系[2],具有明显优势。目前自适应分层算法处理的模型数据类型主要有STL模型、精确CAD模型和点云数据[3]。由于CAD模型常存在系统兼容性差和编辑环境复杂等问题,点云模型存在模型杂乱不规则、数据量庞大等问题[4-5],因而在分层切片算法中应用较少。STL模型的三角面片与分层平面的相交求解算法计算简单,同时它也是目前大部分3D打印设备系统支持的标准输入文件格式,因此本文选用STL模型研究自适应分层算法。

目前自适应分层算法确定层厚的依据主要有垂直分层轮廓曲线上点的切线角、模型表面曲率、面积变化率、三角面片法向量等。文献[6-7]利用垂直切片轮廓线上点的切线角确定分层切片的厚度,但该算法需要采样提取模型的垂直轮廓线,未提取轮廓线的部分易遗漏模型特征。文献[8-10]利用曲面在分层方向上的法曲率确定分层厚度,但是计算曲面上任意给定点的曲率比较复杂,而且在每次分层中需求出大量点的曲率,增加了算法的难度和复杂度。文献[11-14]通过比较相邻两层切片的面积来推测模型表面的几何特征,但是由于基准面积会发生变化,因此精度难以控制,而且如果相邻两层面积相同则该算法不再适用。文献[15-17]利用三角面片的法向量实现切片算法,计算过程简单但是仅考虑了台阶效应的影响。国内外学者还提出一些其他算法,文献[18]通过计算尖端高度对相邻层进行合并;文献[19]通过确定最优分层方向减小台阶误差;文献[20]将STL模型转换为改进边界八叉树数据结构后再计算分层厚度;文献[21-22]在具有曲面形状的特征部位采用曲面分层,普通部位则采用平面分层。通过文献调研发现,目前自适应分层算法的研究主要集中于如何在尽可能减少分层层数的情况下减小模型的台阶误差等问题,对于影响打印精度的模型特征丢失现象研究较少。文献[23-24]虽指出了模型特征的相关概念,但将特征点定义为局部最高或最低点具有一定的局限性,例如对于类似于马鞍面鞍点的复杂点无法识别。文献[25-26]通过建立体积误差模型实现自适应分层,但当存在未被切割的三角面片时,可能难以得到准确的分层厚度或者会导致特征遗失、体积偏差大等问题。

针对目前自适应分层算法计算复杂、不能有效反映模型特征的问题,本文提出一种基于STL模型中三角面片法向量的改进自适应分层算法。一方面,利用STL模型中的三角面片法向量信息进行分层,提取方便且计算简单;另一方面,该算法不仅考虑削弱台阶效应,还对模型特征进行识别和保留,有利于提高打印精度。

1 STL模型信息读取与存储

STL文件有ASCII和二进制两种形式,二者均包含模型中所有三角面片的顶点坐标及法向量信息,如图1所示。

(a)ASCII

(b)二进制

实现自适应分层前需要对STL文件中包括法向量在内的模型信息进行提取并作为后续计算的基础。本算法遍历STL文件中的每一个三角面片,利用哈希表滤去冗余数据,分别建立点表、面表存储信息。其中点表中的每个点都分配有点索引值,包含点的三维坐标、点所在面的索引值信息;面表中的每个面都分配有面索引值,包含面的三个顶点索引值、面的法向量、三个邻面索引值信息,存储结构如图2所示。该模型的读取与存储形式不仅方便点、面之间拓扑关系的重建,还可以减小数据的冗余度,节省内存[27]。

图2 点表与面表结构图Fig.2 Structure diagram of point table and surface table

2 自适应分层算法分析

2.1 减小台阶效应的分层算法

台阶效应是产生模型误差的一个主要因素,是由增材制造的原理造成的。增材制造实质为先分层后堆积。分层是利用垂直于分层方向的平行平面去截三维模型从而获得截面层片的过程。当层片厚度趋于无穷小时,打印实体与三维模型相同。但是受实际制造工艺等因素的制约,层片厚度的取值介于打印设备和工艺所允许的最大值与最小值之间。因此打印实体和输入的三维模型就有所偏差,即台阶效应。特别是当分层方向偏离模型表面一定角度时,3D打印会产生明显的台阶效应。如图3所示,STL模型中三角面片的台阶误差(阴影部分)与分层厚度d、该面片的倾斜角度α有关。在面片倾斜程度一定的情况下,分层厚度越小,台阶效应越小;当分层厚度不变时,模型表面在分层处倾斜角度越大,台阶效应越小。因此在三角面片倾斜角度小的地方采用较小层厚,可削弱台阶效应。

图3 台阶效应示意图Fig.3 Schematic diagram of step effect

设定Z轴正方向为打印方向,则三角面片与分层平面之间的夹角α∈[0°,90°],如图4所示,Nf为面片法向量,NZ为其Z向分量。根据削弱台阶效应的要求,当α接近90°时,在不损失表面质量的情况下可适当增加层厚。α越小,越需要细化分层。选用cosα作为分层依据,得到自适应分层厚度为

(1)

由三角面片的法向量可以得到夹角α为

(2)

将式(2)代入式(1)可得由面片法向量计算分层厚度的公式,又因STL模型中每个三角形面片的法向量都是单位向量,由图4的几何关系可将式(1)化简为

(3)

图4 三角面片与分层平面位置关系示意图Fig.4 Schematic diagram of the position relationship between triangular facet and layered plane

2.2 模型特征处识别与保留的分层算法

除台阶效应会影响三维打印精度外,模型中还存在一些微小特征处,包括锐边和复杂点。如图5所示,锐边和复杂点所在的三角面片倾斜角度接近90°,台阶效应并不明显,所以按照减小台阶效应的自适应分层算法并不能减小分层厚度。但实际上,若采用较大的层厚,容易产生模型特征的缺失或者畸变[28-29],因此也需要细化分层来保留模型特征。

图5 模型特征示意图Fig.5 Schematic diagram of model features

二面角可以作为判断锐边的依据,其大小能够反映模型三角网格边的光滑程度。如图6所示,F1与F2是STL模型中相邻的两个三角面片,其法向量分别是单位向量Nf1与Nf2。三角面片F1与F2的二面角β等于Nf1与Nf2夹角的补角,取值为(0°,180°]。计算公式为

β=π-arccos(Nf1·Nf2)

(4)

图6 二面角示意图Fig.6 Schematic diagram of dihedral angle

二面角越大表明两个三角面片之间的过渡越平缓。如果某两个三角面片之间的二面角小于一定阈值,则说明这两个面片的公共边为锐边[30],需要细化分层。选用cosβ作为分层依据,得到自适应分层厚度

(5)

模型的另一个特征是复杂点。可以通过对STL模型的拟合,计算出曲率较大的地方并确定为复杂点。但实际曲率计算复杂,算法实现起来较为困难。本文采用一种基于法向量的可反映顶点复杂程度的指标进行计算。STL模型中的顶点由多个三角面片相交形成,顶点的法向量可以反映该顶点处的方向情况,如图7所示,Nd为某顶点的法向量,Fi为该顶点相邻的所有三角面片。

图7 顶点法向量示意图Fig.7 Schematic diagram of vertex normal vector

Taubin顶点法向量是以面积为权值的相邻三角面片法向量的加权平均。实际应用表明,该顶点法向量的估算方法既简单又适用[31]。估算公式为

(6)

在求得顶点法向量后,即得到了该顶点处的平均方向特征。该顶点处的复杂程度与其所在的每个三角面片法向量和顶点法向量之间的夹角有关,夹角越大,表明该顶点处越复杂。考虑该顶点处所有三角面片的作用,可用z作为判断该点复杂程度的指标,计算公式为

(7)

z可以真实地反映三角面片模型各个顶点处的复杂程度。z的值越小,模型在该点处越复杂。自适应分层厚度

(8)

2.3 算法流程

图8为本文的自适应分层算法流程图。具体步骤如下。

图8 本文自适应分层算法流程图Fig.8 Flow chart of adaptive slicing algorithm in this paper

(1)输入三维模型在分层方向上的最小值Zmin与最大值Zmax,以及打印层厚范围dmin、dmax,然后对STL文件进行模型信息提取,建立点表、面表进行数据存储,并进行一些初始化设置。

(3)计算下一层的分层平面高度Zi+1=Zi+di。

(4)判断Zi层与Zi+1层之间是否有未被切割的三角面片,并对Zi+1进行修正。为了防止类似于图5中的模型特征遗漏,需要找出两层之间未被切割的三角面片。两层之间未被切割的三角面片应满足ZfmaxZi,其中Zfmax、Zfmin为三角面片在Z轴方向上的最值。以(Zfmin)min作为下一分层的平面高度Zi+1。特别地,受到最小层厚的限制,如果(Zfmin)min与上一层的切面高度Zi之间的距离小于最小层厚dmin,那么在确定下一层切面高度时需采用最小层厚,即Zi+1=Zi+dmin。

(5)判断分层平面高度是否超过模型高度。若平面高度超过模型高度则分层结束,否则继续循环确定下一层分层高度。最后输出每层的分层厚度di(i=0,1,2,…,N)。

3 实验结果与分析

以Visual Studio 2015为开发平台,在等层厚分层的CuraEngine代码基础上,采用C++语言实现上述自适应分层算法,将CuraEngine改进为自适应切片引擎,输出三维模型的自适应分层Gcode文件。为了验证本文分层算法的可靠性与有效性,下面将本文提出的自适应分层算法分别与普通等层厚分层算法、传统基于法向量的自适应分层算法[15]和考虑模型特征的自适应分层算法[23-24]进行对比,并给出相应的实验分析。本文选用尖端高度来度量台阶误差。尖端高度是指打印成品与STL模型表面的最大距离,计算公式为c=(d|NZ|)max。尖端高度越小,台阶误差就越小,打印精度就越高。同时使用模型分层数作为衡量打印效率的指标。分层数越多,打印越耗时,打印效率越低。

分别对龙猫模型(46 mm×56 mm×84 mm)、锥体模型(98 mm×98 mm×93 mm)、哑铃模型(79 mm×142 mm×79 mm)以Z轴为正方向进行上述分层实验,分层结果如表1~表3所示。

表1 龙猫模型分层结果对比

表2 锥体模型分层结果对比

从表1和表3可以看出,与等层厚分层算法相比,自适应分层算法在保证相同尖端高度的同时,可以采用较少的层数,兼顾打印精度与打印效率。为了更明显地观察模型特征处保留情况,对以上各类自适应分层算法下切片引擎生成的Gcode文件借助Cura软件模拟打印效果,并用颜色区分分层厚度,结果如图9~图11所示。

表3 哑铃模型分层结果对比

由3个模型的分层效果图可以看出,与传统自适应分层算法相比,本文算法虽然分层数有所增加,但是识别和保留模型特征(尤其是微小特征处)的性能较好。相较于考虑模型特征的自适应分层算法,本文的自适应分层算法具有一定优势:如对于龙猫模型和锥体模型,由表1和表2可知,本文算法的分层层数较少,分别减少了2.5%和1.2%,是由于该算法可以根据模型特征的复杂程度调节层厚的大小,能够尽量使用较小的层数保留模型特征。而考虑模型特征的自适应分层算法是在当模型特征复杂程度大于一定阈值时均采用最小层厚,不会因为模型特征的复杂程度而变化。对于哑铃模型,本文算法的分层数虽然较多,但却可以较好地识别并细分模型中部的特征点。一方面,本文算法会对分层过程中遗漏的三角面片进行检测,防止模型特征遗漏;另一方面,本文算法可以识别任意方向的特征点,而考虑模型特征的自适应分层算法只是将模型的局部最高点或者局部最低点作为模型的特征点,无法识别出类似于模型中部的特征点。因此,本文方法具有更好的适应性和适用性。

(c)本文自适应分层图9 龙猫模型分层效果图Fig.9 Slicing effect picture of chinchilla model

(a)传统自适应分层

(b)考虑模型特征自适应分层

(c)本文自适应分层图10 锥体模型分层效果图Fig.10 Slicing effect picture of cone model

4 结 论

(1)本文算法在确定层厚时仅以三角面片法向量为基础进行计算,方便提取且无需进行复杂的曲率计算,因此算法的复杂性较小。

(2)本文算法利用模型面片之间的二面角大小识别锐边,利用顶点复杂程度指标识别特征点,能够识别出传统算法(如等层厚分层算法、传统自适应分层算法、传统考虑模型特征的自适应分层算法)识别不出的非局部最高或最低特征点等微小特征,因此具有更广的适用性。

(3)本文算法可以根据锐边处二面角的大小和顶点的复杂程度自动调节模型的分层厚度,在保证相同尖端高度和保留特征的前提下,分层层数相比于传统算法较少。对于实验龙猫模型和锥体模型,分层数分别减少2.5%和1.2%,因此具有更好的适应性。

总体来说,本文算法不仅能够削弱台阶效应,还可以有效识别和保留模型特征。在高精度3D打印等技术的分层处理环节,本文提出的算法针对复杂模型具有实用性。

猜你喜欢

面片顶点台阶
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
过非等腰锐角三角形顶点和垂心的圆的性质及应用(上)
三维模型有向三角面片链码压缩方法
初次来压期间不同顶板对工作面片帮影响研究
革故鼎新 尘毒治理上台阶
走在除法的台阶上
甜面片里的人生
台阶
青海尕面片
数学问答