声明:文中所有观点仅代表个人见解,若有不妥之处欢迎指正。
这篇论文于2018年 被 SCI 1区 "Additive Manufacturing"录用。原文链接:http://hpcg.purdue.edu/bbenes/papers/Demir18AM.pdf
目录
2.1Search Subspace Creation 创建搜索子空间
2.3Configuration 确定组件的放置位置及旋转角度
1.Overview
输入:未标记的网格模型(三角面片无规则无组织无序),
(1)Cluster:通过定义的度量计算三角面片的相似性,得到最初的相似三角面片簇集,然后计算空间相似度对簇集进行合并和分割,得到最初搜索子空间(search subspace)
(2)Components-Minimization: 对搜索子空间进行剖分得到组件,然后迭代的减小目标函数,收敛得到最后的解集
(3)Configuration:确定剖分后的组件的放置位置及旋转角度
输出:上一步得到的剖分后的有明确位置及旋转角度的组件
打印->组装->End
2.Decomposition(剖分)
剖分分成两部分:创建搜索子空间,分割。
2.1Search Subspace Creation 创建搜索子空间
先介绍两个度量公式,均在作者15年发表的文章(“Coupled Segmentation and Similarity Detection for Architectural Models ”)中给出了定义:
形状差异性度量:
这里ti,tj代表两个三角面片,ai,aj是其面积,ei,ej是其边长,max为最长边,min为最短边,ni,nj是法向,通过这个公式计算差异度。
空间相似性度量:
这里Ta,Tb指两个簇集,ti∈Ta,tj∈Tb, 是一个函数,当ti,tj存在一条公共边,α=1,否则α=0;简单来说这个公式就是计算两个簇集中公共边的占比。若占比大于阈值,则这两个簇集相似,反之不相似。
Step1: 首先定义一个标准度量来计算两个三角面片之间的差异大小,差异包括面积,边及法向;即上述形状差异性度量。
本文定义当差异度不大于阈值时,将这些三角面片划分到一个簇中,通过实验发现阈值取0.6对本工作最为合适。
通过上述方法可以计算得出一个最初的包含相似三角面片的簇集。
Step2: 对上一步得到的簇集进行迭代的融合与分割,以平衡空间相似度和形状相似度。迭代到收敛为止。
定义一个标准度量计算簇集的相似性,即上述空间相似性度量。本文阈值取0.5,当空间相似性不小于0.5时,两个簇集合并,其中不存在公共边的划分为一个新的簇集。注意:这里的公共边指的是完整的一条边,若两条不等长的边重合,不算存在公共边。
左为未标记的三角面片模型,右为经过“创建搜索子空间”操作的结果。
2.2Segmentation 分割
这一步中要将得到的搜索子空间中的每个子空间分割到组件中。
首先制定一组需要进行优化的组件属性,以得到更好的打印效果。
组件属性:
(1)concavity凹度,图a中凹度多的模型需要更多的支撑结构(模型下方蓝色虚线维支撑结构)
(该公式定义于A SIMPLE AND EFFICIENT APPROACH FOR 3D MESH APPROXIMATE CONVEX DECOMPOSITION)
P(x)是三角面片顶点到当前簇集的凸壳(convex hull)的投影(投影以垂直表面),可以发现凸面的凹度为0,因为面越凹距离凸面越远。
(2)surface angle表面角度,认为打印版的平面精度最高,所以以xy水平面为基面,若面与基面的夹角平行或超过一定角度(越垂直越好),梯度效应越小
当面与基面的夹角平行或超过阈值,NH(f)=1,反之=0,∠(B)是基面与水平面的夹角,文中将最大的三角面片作为基面,但该基面还没有旋转到水平面。
(3)sizes/numbers,要在分割尺寸与分割数量中找到一个平衡值,所以最小化簇中的尺寸变化,让切割出来的大小尽量保持差不多
μs为簇内组件的平均尺寸,s(x)是当前簇的长宽高。
(4)deviation误差:组件所组成的完整模型与原模型间的误差要尽可能小,提高模型保真度
对上述四个属性建立一个最小化目标函数,
将目标函数最小的参数x输入到分割函数Ω中,得到一组不重叠的剖分,并限制x的范围。
近凸分割算法:
基于Mamou and Ghorbel 提出的 Volumetric Hierarchical Approximate Convex Decomposition (VHACD)方法得到的解集,通过上一步的目标函数收敛解集,得到最后的最佳分割。 其中使用了 Powell提出的BOBYQA算法搜索VHACD的参数空间。各凸分割方法的比较,f是本文方法。
剖分的逐步效果图:由少组件到多组件的划分。组件是簇集的凸壳,组件少时,与原模型的误差就会大。
2.3Configuration 确定组件的放置位置及旋转角度
对于每个组件,首先找到它的OBB(Oriented Bounding Box),然后旋转它,使包围盒的最小维度沿z轴方向(即最慢的挤压速度轴)。然后,调整对象的方向,使最大的面水平躺在打印床上。再找到每个组件的OBB的第二主导轴,并通过进一步旋转组件,将其设置为沿y轴放置,以获得更好的包装。使用贪婪包装算法将所有组件放置在足够近的位置以有效地打印,但又足够远,以避免在打印时合并组件。因为目标函数需要一个较少的组件数量,所以贪婪算法的计算量不会很大。
经过以上步骤得到的组件及其位置信息、旋转角度,经过打印,组装,得到最后的模型。
实验部分及结论部分参照论文,不做赘述。
Thanks for reading!