切片引擎,是3D打印技术的灵魂,其实质就是将3D模型进行分层,输出矢量集合,是应该归为图形学的一门技术,其对数学算法要求很高,复杂性主要体现在要对3D模型的不同的拓扑结构做出判断并输出与之相符合的矢量集合。就我个人的观点,目前世界上最优秀的切片引擎在这一点上也没有做的很好,所以对于这一门技术,可进步的空间是很大的,未知的空间非常辽阔。
非常有幸的是在我的上一家公司里面,我有机会开发这样的一个模块,我负责由3D模型生成矢量集合,另一位同事把我生成的矢量集合再生成为Gcode,据我所知,目前国内还没有相关的自主研发的成熟的软件。但也非常不幸,这个模块在最需要我突破的时候我由于更重要的原因离开了这家公司,在公司这样一个重要的模块,我几乎是独立开发的,我已经有了很多的想法,我想如果我继续做下去,我会发表论文,我有机会做成国内最优秀的软件,但这些只能是假设,我离开了,这一切似乎都结束了。但我想把我那段时间的所想所得分享出来,我所做的并不高明,我要学习的东西太多了,当下我更需要的是学习交流的机会(这是我离开公司的最重要原因),但如果我的东西能对您有一丁点的启发,我也会感到非常幸福,非常欣慰。
我就先简单提一下目前国际上做的最成熟的这类模块,一共有两款切片引擎:skeinforge和slic3r。
skeinforge是采用脚本语言python开发,是公司里面一直在用的模块,这款引擎首先是样式有些单一,采用双边打印,内部填充用的四边形填充(采用单一的四边形填充有其道理,只有四边形可实现以行为单位的连续打印,打印机暂停的时间最少),不像slice3r多边打印可以设置,填充样式也可以选择。但我认为skeinforge是目前最成功的引擎,原因是判断引擎的优劣主要是看对模型不同拓扑结构的判断及处理,在这一点上skeinfoege是非常成功的,它实现了对切片不同的拓扑结构采用了最合适它的处理,而且鲁棒性很强,它的简单自然有它的道理,它是真正的简约的软件。
slic3r是用c++开发的,相对于skeinfoege,它显得更为华丽,打印方式多样,打印的边数可以设置,填充方式包括:
同心填充,蜂窝填充,线填充,希尔伯特曲线填充,
阿基米德和铉填充,八角星螺旋填充。
另外支持可变层高(对斜率较小的模型结构实现了精细打印),该软件在不断的升级改进中,是很多国内3D
printer公司的首选,但就目前来讲,打印质量比skeinforge稍差,随着升级,未来会超越skeinforge。
对此,我总结了一下,一个成功的切片引擎软件应该符合一下几点:
1,打印出来的模型与原模型相似度最高
这是最主要的一点,给你一个猫的模型,你打印出来一只狗,总不合适吧,不过这也太夸张了,真正优越的切片
软件,总是可以对最精细的结构进行细微的实现,使其在打印出来的实体中栩栩如生的显示出来。对此,我曾经在公
司里面提出用工程力学的方式来动态组织填充矢量,而不是死板的用这几种填充方式,但可惜我不懂工程力学,也没
有及时的和这方面的专家联系(我的失误),但这的确应该是未来解决这类问题的思路,就好像骨小梁一样,根据力
学分布,动态的组织矢量集合!
2,打印出来的模型稳固性强——硬度高或者柔韧性强
就目前来说,流行的填充方式:线填充,蜂窝填充,同心填充。蜂窝填充的稳固性是最好的,在蜂窝填充里三角
形填充的稳固性较强,六边形填充的柔韧性较强。
3,省材料
4,打印时间短
要做到这几点,输出的矢量集合就需要:
1,灵活的填充矢量集合生成算法适应不同的模型的不同的拓扑结构,使得填充矢量对边界冲击力最小,又能很好的支撑住整个模型。
2,矢量集合有效组织,首尾相连,矢量数量最小,平均长度最大,方差最小。
3,多边打印,防止斜率小的时候上层塌陷以及保护外边界。
4,优越的支撑生成算法,支撑生成的越少越好,首先是为了省材料,其次与实体可以更容易的剥离。
对此我的切片程序实现了其中的大部分功能,已经能对模型进行较好的切片形成矢量集合,打印质量接近skeinforge,但是目前还没有成熟的引擎
该有的模型修补功能,clip算法也是最原始的(我的程序中的clip算法是自己写的,slic3r和cura两款引擎的clip算法都用的同一个程序:
clipper.hpp和clipper.cpp,里面的算法是出自一篇论文
(an extension of Bala Vatti‘s clipping algorithm:
"A generic solution to polygon clipping")),也没有很好的鲁棒性
。对一些不规范的模型切片会出现错误,算法方面也没有太大的闪光,但是不管怎样,在三个月的时间里,我已经实现了切片引擎的框架,我认为
也是有所得的。下面就是我的引擎的一些测试图片,在下一篇文章里,我将把其中的一些思想分享给大家。
1 同心填充(红色是边界,蓝绿相间是填充)
2同心填充加双边打印
3三角网格填充加双边打印
4六边形网格填充
5线填充加双边打印
OK,今天的内容大概就是这些,我们下篇文章见:)
参考资料: