CN110956699B - 一种三角形网格模型gpu并行切片方法 - Google Patents
一种三角形网格模型gpu并行切片方法 Download PDFInfo
- Publication number
- CN110956699B CN110956699B CN201911184017.6A CN201911184017A CN110956699B CN 110956699 B CN110956699 B CN 110956699B CN 201911184017 A CN201911184017 A CN 201911184017A CN 110956699 B CN110956699 B CN 110956699B
- Authority
- CN
- China
- Prior art keywords
- edge
- gpu
- data
- edges
- layer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种三角形网格模型GPU并行切片方法,包括:步骤1:读取网格模型,在模型读入的同时构建半边数据拓扑结构;步骤2:对半边数据进行预处理;步骤3:根据切片方向的坐标值将数据分组,得到每层相交的边集合;步骤4:将步骤3得到的边集合发送给GPU,对其进行并行的轮廓装配;步骤5:GPU将数据返回到CPU,生成每层的轮廓信息。本发明通过采用哈希表去除了冗余数据,读取数据的同时构建半边数据结构,一定程度上可以去除网格模型的错误;同时在进行轮廓装配时在GPU上运行,采用哈希查找,并且层与层之间的轮廓装配是并行的,可以有效提高分层效率,减少分层时间,减少了物理内存的使用量并减轻CPU的计算负担。
Description
【技术领域】
本发明属于增材制造领域,涉及一种三角形网格模型GPU并行切片方法。
【背景技术】
3D打印技术也称为增材制造或快速成型,主要通过逐层累积的过程形成三维实体。一般流程是计算机三维建模软件建立数字模型,导出STL网格模型,经过各种不同分层软件对STL模型进行分层形成二维轮廓,根据工艺的不同对二维轮廓进行填充形成路径,对应生成机器代码,控制打印头完成路径的填充。
基于STL模型的分层算法有很多种,可以分为均匀分层和自适应分层,也可以分为建立拓扑信息后的分层切片算法和不建立拓扑信息的基于模型连续性的分层算法。不管是以上哪种算法,都是考虑在CPU中串行切片的算法。随着模型数据量的增大,模型复杂程度的增加,原始的基于单核串行切片方法耗时增加,需要等待的时间越来越长,将会延长整个打印过程的用时,因此已不再适用于未来大数据模型的应用,随着计算机CPU由单核发展为多核,GPU图形加速器等异构系统的出现,并行计算已经在很多行业应用,和串行计算相比,并行计算更适用于对增材制造中的复杂模型进行切片计算。
【发明内容】
本发明的目的在于克服上述现有技术的缺点,提供一种三角形网格模型GPU并行切片方法,该方法可以快速进行切片,能够显著减少模型切片时间,而且还减少物理内存的使用量并减轻CPU的计算负担。
为达到上述目的,本发明采用以下技术方案予以实现:
一种三角形网格模型GPU并行切片方法,包括以下步骤:
步骤1:读取网格模型,在模型读入的同时构建半边数据拓扑结构;
步骤2:对半边数据进行预处理;
步骤3:根据切片方向的坐标值将数据分组,得到每层相交的边集合;
步骤4:将步骤3得到的边集合发送给GPU,对其进行并行的轮廓装配;
步骤5:GPU将数据返回到CPU,生成每层的轮廓信息。
本发明切片方法的进一步改进在于:
步骤1中构建半边数据拓扑结构时,首先利用哈希表结构对冗余点去除,建立无重复点集合,然后通过面片包含的顶点序号建立半边数据拓扑结构。
步骤2中对半边数据进行预处理包括整理数据,使其适用于GPU处理,将半边结构简化成点集合和边集合,点集合存储所有顶点的坐标信息,同时集合存储所有的边信息,每条边包括四个值,两个顶点索引值和该条边所属的两个面片值。
步骤3将边集合进行分组的具体方法如下:
步骤3-1:给定分层厚度thickness和模型Z方向的最大值Zmax与最小值Zmin,设分层方向为Z轴,求得分层总数N为:
步骤3-2:遍历步骤2中的边集合,通过索引找到两个点的Z坐标,得到第i条边的Z坐标集合{(Zi)min,(Zi)max},再根据分层厚度thickness和模型Z方向的最小值Zmin,求得此条边相交的Z平面范围,具体如下:
从j1到j2依次将第i条边加入到相应层的相交边集合;通过以上遍历,得到每层分层内与Z平面相交的边集合。
步骤4中轮廓装配是将相交边集合发送给GPU进行轮廓装配,具体方法如下:
从任意一条边开始,确定第一个面片,然后通过第二个面片去找寻其他包含此面片的边,则这两条边必相邻,重复此过程,直到找寻到和第一个面片相同时停止;然后开始第二个轮廓搜索,直到遍历掉所有边为止。
步骤4通过使用哈希查找加快找寻过程,具体方法如下:
首先对每层内的所有边建立哈希查找表,遍历相交边,将每条边对应的面片值作为Key值,此条边序号作为Value值插入哈希表,对应的Value值为此面片拥有的两条边;如果此Key值存在,说明此时插入的是此面片对应的第二条边。
步骤5中将步骤4返回的具有顺序的边集合进行求交,得到相应的交点。
与现有技术相比,本发明具有以下有益效果:
本发明通过采用哈希表去除了冗余数据,读取数据的同时构建半边数据结构,一定程度上可以去除网格模型的错误;同时在进行轮廓装配时在GPU上运行,采用哈希查找,并且层与层之间的轮廓装配是并行的,可以有效提高分层效率,减少分层时间,减少了物理内存的使用量并减轻CPU的计算负担。
进一步的,本发明将相交边集合发送给GPU进行轮廓装配,由于每层内相交的边信息包含所属的两个面片信息,可以通过此条件将边进行轮廓装配,形成有序的轮廓顺序。
进一步的,本发明在哈希表建立完成后,进行查找完成轮廓装配。由于哈希查找有着非常高的查找性能,所以可以极大提高轮廓装配效率。
进一步的,本发明每层内的轮廓装配过程全部是在GPU上进行的。对于GPU而言,具有较多计算单元,让一个计算单元分别进行一层的轮廓装配,这样层与层之间互不干扰,达到并行计算的目的。
进一步的,本发明CPU将返回的具有顺序的边集合进行求交,得到相应的交点,由于边是有序的,因此求得的点也是有序的,也可以首尾相连形成封闭的轮廓环。
【附图说明】
图1为本发明所述方法的流程图;
图2为半边数据结构示意图;
图3为边分组示意图;
图4为邻边查找示意图;
图5为边求交示意图;
图6为实施案例中兔子示意图;
图7为采用本发明分层方法处理后的轮廓图。
【具体实施方式】
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,不是全部的实施例,而并非要限制本发明公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要的混淆本发明公开的概念。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
在附图中示出了根据本发明公开实施例的各种结构示意图。这些图并非是按比例绘制的,其中为了清楚表达的目的,放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
本发明公开的上下文中,当将一层/元件称作位于另一层/元件“上”时,该层/元件可以直接位于该另一层/元件上,或者它们之间可以存在居中层/元件。另外,如果在一种朝向中一层/元件位于另一层/元件“上”,那么当调转朝向时,该层/元件可以位于该另一层/元件“下”。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面结合附图对本发明做进一步详细描述:
参见图1,本发明基于一种三角形网格模型GPU并行切片方法,包括以下步骤:
读取网格模型,不局限于STL文件,还可以是OBJ,OFF等文件,在模型读入的同时构建半边拓扑结构,如图2所示;
在构建半边数据结构时,首先要利用哈希表结构对冗余点去除,建立无重复点集合,然后通过面片包含的顶点序号建立半边数据结构。
对半边数据进行预处理主要包含整理数据,使其适用于GPU处理,将半边结构简化成点集合和边集合,点集合存储所有顶点的坐标信息,每个顶点信息包括它的X,Y,Z坐标值,边集合存储所有的边信息,每条边包括四个值,两个顶点索引值和该条边所属的两个面片值。
根据切片方向的坐标值将数据分组,得到每层相交的边集合具体包括以下步骤:
用户输入分层厚度thickness=0.1mm,设定分层方向为Z轴,模型Z方向的最大值Zmax=190.092mm和最小值Zmin=9.996mm,可得分层总数N=1801。
遍历步骤2中的边集合,通过索引找到两个点的Z坐标,得到第i条边的Z坐标集合{(Zi)min,(Zi)max},再根据分层厚度thickness和Zmin,可以求得此条边相交的Z平面范围,具体公式如下:
从j1到j2依次将第i条边加入到相应层的相交边集合,如图3所示。通过以上遍历,可以得到每层分层内与Z平面相交的边集合。
使用GPU对分组后的边集合进行并行的轮廓装配的具体步骤如下:
由于每层内相交的边信息包含所属的两个面片信息,可以通过此条件将边进行轮廓装配,形成有序的轮廓顺序。从任意一条边开始,确定第一个面片,然后通过第二个面片去找寻其他包含此面片的边,则这两条边必相邻,重复此过程,直到找寻到和第一个面片相同停止,开始第二个轮廓搜索,直到遍历掉所有边为止。如图4所示,E1边的两个面属性是f0和f1,E2边的两个面属性是f1和f2,假设从E1开始,f0是起始面片,通过E1的第二个面片f1去查找,找到E2包含此f1面片,因此E1的相邻边为E2,再通过E2的第二个面片f2去查找与E2相邻的边,直到再找寻到f0面片和起始面片相同。
为了加快查找过程,使用哈希查找。首先需要对每层内的所有边建立哈希查找表,将面片值作为Key值,对应的Value值为此面片拥有的两条边。具体过程为遍历相交边,将E1边对应的面片值f0和f1作为Key值,E1边序号1作为Value值插入哈希表,再将E2边对应的面片值f1和f2作为Key值,E2边序号2作为Value值插入哈希表,f1值则对应了两个边序号1和2,通过哈希查找Key值可以快速找到这两个边值。
哈希表建立完成后,此时就可以进行查找完成轮廓装配。由于哈希查找有着非常高的查找性能,所以可以极大提高轮廓装配效率。
每层内的轮廓装配如上所述,并且以上过程全部是在GPU上进行的,因此需要提前分配好哈希表所需的内存空间。对于GPU而言,具有较多计算单元,让一个计算单元分别进行一层的轮廓装配,这样层与层之间互不干扰,达到并行计算的目的。
GPU将数据返回到CPU,生成每层的轮廓信息主要是通过GPU进行轮廓装配后形成有序的边集合,再通过每层的Z平面坐标和每条边进行求交运算,如图5所示,通过边信息的两个点索引得到边的两个端点P1(x1,y1,z1)和P2(x2,y2,z2),可以通过解析几何求得交点P的坐标。求得每条边的交点后就自动形成了收尾相连的封闭轮廓边环。
如图6所示,实施案例兔子模型具有1111144个三角面片,546876个顶点。本实施案例分别采用本发明方法和商业软件CuraEngine和Magics进行分层处理加以对比,本方法分层后如图7所示。分层厚度选择1mm、0.1mm和0.01mm,分层数目分别为181、1801、18010。
表1实施案例中兔子模型的各分层方法时间对比
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
Claims (1)
1.一种三角形网格模型GPU并行切片方法,其特征在于,包括以下步骤:
步骤1:读取网格模型,在模型读入的同时构建半边数据拓扑结构;所述构建半边数据拓扑结构时,首先利用哈希表结构对冗余点去除,建立无重复点集合,然后通过面片包含的顶点序号建立半边数据拓扑结构;
步骤2:对半边数据进行预处理;所述对半边数据进行预处理包括整理数据,使其适用于GPU处理,将半边结构简化成点集合和边集合,点集合存储所有顶点的坐标信息,同时边集合存储所有的边信息,每条边包括四个值,两个顶点索引值和该条边所属的两个面片值;
步骤3:根据切片方向的坐标值将数据分组,得到每层相交的边集合;将边集合进行分组的具体方法如下:
步骤3-1:给定分层厚度thickness和模型Z方向的最大值Zmax与最小值Zmin,设分层方向为Z轴,求得分层总数N为:
步骤3-2:遍历步骤2中的边集合,通过索引找到两个点的Z坐标,得到第i条边的Z坐标集合{(Zi)min,(Zi)max},再根据分层厚度thickness和模型Z方向的最小值Zmin,求得此条边相交的Z平面范围,具体如下:
从j1到j2依次将第i条边加入到相应层的相交边集合;通过以上遍历,得到每层分层内与Z平面相交的边集合;
步骤4:将步骤3得到的边集合发送给GPU,对其进行并行的轮廓装配;轮廓装配是将相交边集合发送给GPU进行轮廓装配,具体方法如下:
从任意一条边开始,确定第一个面片,然后通过第二个面片去找寻其他包含此面片的边,则这两条边必相邻,重复此过程,直到找寻到和第一个面片相同时停止;然后开始第二个轮廓搜索,直到遍历掉所有边为止;
通过使用哈希查找加快找寻过程,具体方法如下:
首先对每层内的所有边建立哈希查找表,遍历相交边,将每条边对应的面片值作为Key值,此条边序号作为Value值插入哈希表,对应的Value值为此面片拥有的两条边;如果此Key值存在,说明此时插入的是此面片对应的第二条边;
步骤5:GPU将数据返回到CPU,生成每层的轮廓信息;将步骤4返回的具有顺序的边集合进行求交,得到相应的交点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184017.6A CN110956699B (zh) | 2019-11-27 | 2019-11-27 | 一种三角形网格模型gpu并行切片方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911184017.6A CN110956699B (zh) | 2019-11-27 | 2019-11-27 | 一种三角形网格模型gpu并行切片方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110956699A CN110956699A (zh) | 2020-04-03 |
CN110956699B true CN110956699B (zh) | 2022-10-25 |
Family
ID=69976995
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911184017.6A Active CN110956699B (zh) | 2019-11-27 | 2019-11-27 | 一种三角形网格模型gpu并行切片方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110956699B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111681322B (zh) * | 2020-06-12 | 2021-02-02 | 中国测绘科学研究院 | 一种倾斜摄影模型的融合方法 |
CN112659544B (zh) * | 2020-12-02 | 2022-06-07 | 西安交通大学 | 五轴3d打印机的薄壁管状模型切片方法、系统及打印方法 |
CN113204372B (zh) * | 2021-04-28 | 2022-07-01 | 浙江大学 | 存储受限型哈希算法的加速装置及方法 |
CN113715338B (zh) * | 2021-08-30 | 2023-08-18 | 深圳市纵维立方科技有限公司 | 三维模型的切片方法、打印方法及相关设备 |
AT525686A1 (de) * | 2021-12-09 | 2023-06-15 | Mehmet Bugra Akin | Verfahren zur additiven Fertigung eines Werkstücks |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105389851A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种基于顶点和新边点统一调整的Loop细分实现方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8013851B2 (en) * | 2006-08-11 | 2011-09-06 | Siemens Product Lifecycle Management Software Inc. | System and method for lightweight polygonal topology representation |
US10332310B2 (en) * | 2015-12-22 | 2019-06-25 | Nvidia Corporation | Distributed index fetch, primitive assembly, and primitive batching |
US10723079B2 (en) * | 2017-08-23 | 2020-07-28 | Lawrence Livermore National Security, Llc | Fast, efficient direct slicing method for lattice structures |
CN109159425B (zh) * | 2018-08-21 | 2020-12-04 | 东莞中国科学院云计算产业技术创新与育成中心 | 三维模型的切片方法及三维打印装置 |
CN112947870B (zh) * | 2021-01-21 | 2022-12-30 | 西北工业大学 | 一种3D打印模型的G-code并行生成方法 |
-
2019
- 2019-11-27 CN CN201911184017.6A patent/CN110956699B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105389851A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种基于顶点和新边点统一调整的Loop细分实现方法 |
Non-Patent Citations (1)
Title |
---|
基于边收缩的渐进网格模型生成算法;侯宝明等;《计算机与现代化》;20130615(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110956699A (zh) | 2020-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110956699B (zh) | 一种三角形网格模型gpu并行切片方法 | |
CN102682103B (zh) | 一种面向海量激光雷达点云模型的三维空间索引方法 | |
JP4381743B2 (ja) | 境界表現データからボリュームデータを生成する方法及びそのプログラム | |
CN111709092B (zh) | 一种基于有限元单元节点的子午线轮胎胎面花纹有限元自动建模方法 | |
CN108711194B (zh) | 一种基于三次b样条插值的三维网格模型拼接方法 | |
WO2022121525A1 (zh) | 三维场景数据的渲染方法及装置、存储介质、电子装置 | |
CN101609564B (zh) | 一种草图式输入的三维网格模型制作方法 | |
CN103970949B (zh) | 一种快速成型中三角面片模型的逐边分层方法 | |
KR20140139984A (ko) | 3d 모델링된 오브젝트의 압축 및 압축해제 | |
CN102298795A (zh) | Stl三角网格模型的三维分段方法 | |
CN111710022B (zh) | 一种避免轮廓相交的快速成型切片处理方法 | |
CN107680168B (zh) | 三维重建中基于平面拟合的网格简化方法 | |
JP2024515867A (ja) | マッピング三次元モデルのスライス方法、印刷方法、装置及びデバイス | |
CN109325316B (zh) | 基于共点焊接排序的stl模型高效并行切层方法 | |
CN115661374B (zh) | 一种基于空间划分和模型体素化的快速检索方法 | |
Gregori et al. | Slicing triangle meshes: An asymptotically optimal algorithm | |
Liu et al. | A new insertion sequence for incremental Delaunay triangulation | |
CN106445981A (zh) | 一种基于小波变换的stl网格模型切片数据自适应压缩方法 | |
CN113343546B (zh) | 一种基于vbo的切削加工过程高效几何仿真方法 | |
CN114398691A (zh) | 一种轮胎模具二维视图智能设计方法及设备 | |
Guan et al. | Development of 3D printing entity slicing software | |
Spielman et al. | Parallel Delaunay refinement: Algorithms and analyses | |
CN112659316B (zh) | 一种3d水泥打印的快速分层方法 | |
CN112819108B (zh) | 一种多源异构模型的切片融合方法、系统及存储介质 | |
CN111696111B (zh) | 一种基于ssdf衰减图聚类的3d模型网格分割方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |