3D打印技术之切片引擎(1)

【此系列文章基于熔融沉积( fused depostion modeling, FDM )成形工艺】

       切片引擎,是3D打印技术的灵魂,其实质就是将3D模型进行分层,输出矢量集合,是应该归为图形学的一门技术,其对数学算法要求很高,复杂性主要体现在要对3D模型的不同的拓扑结构做出判断并输出与之相符合的矢量集合。就我个人的观点,目前世界上最优秀的切片引擎在这一点上也没有做的很好,所以对于这一门技术,可进步的空间是很大的,未知的空间非常辽阔。

       非常有幸的是在我的上一家公司里面,我有机会开发这样的一个模块,我负责由3D模型生成矢量集合,另一位同事把我生成的矢量集合再生成为Gcode,据我所知,目前国内还没有相关的自主研发的成熟的软件。但是,这个模块在最需要我突破的时候我由于更重要的原因离开了这家公司,在公司这样一个重要的模块,我几乎是独立开发的,我已经有了很多的想法,我想如果我继续做下去,我会发表论文,我有机会做成国内最优秀的软件,但这些只能是假设,我离开了,这个项目也暂时很难被支持的研发下去。但我想把我那段时间的所想所得分享出来,我所做的并不高明,我要学习的东西太多了,当下我更需要的是学习交流的机会(这是我离开公司的最重要原因),但如果我的东西能对您有一丢丢的启发,我也会感到非常幸福,非常欣慰。

       我就先简单提一下目前国际上做的最成熟的这类模块,一共有两款切片引擎:skeinforge和slic3r。

       skeinforge是采用脚本语言python开发,是公司里面一直在用的模块,这款引擎首先是样式有些单一,采用双边打印,内部填充用的四边形填充(采用单一的四边形填充有其道理,只有四边形可实现以行为单位的连续打印,打印机暂停的时间最少),不像slice3r多边打印可以设置,填充样式也可以选择。但我认为skeinforge是目前最成功的引擎,原因是判断引擎的优劣主要是看对模型不同拓扑结构的判断及处理,在这一点上skeinfoege是非常成功的,它实现了对切片不同的拓扑结构采用了最合适它的处理,而且鲁棒性很强,它的简单自然有它的道理,它是真正的简约的软件。

slic3r是用c++开发的,相对于skeinfoege,它显得更为华丽,打印方式多样,打印的边数可以设置,填充方式包括:

同心填充,蜂窝填充,线填充,希尔伯特曲线填充

阿基米德和铉填充,八角星螺旋填充

另外支持可变层高(对斜率较小的模型结构实现了精细打印),该软件在不断的升级改进中,是很多国内3D printer公司的首选,

但就目前来讲,打印质量比skeinforge稍差,随着升级,未来会超越skeinforge。

对此,我总结了一下,一个成功的切片引擎软件应该符合一下几点:

1,打印出来的模型与原模型相似度最高

这是最主要的一点,给你一个猫的模型,你打印出来一只狗,总不合适吧,不过这也太夸张了,真正优越的切片软件,总是可以对

最精细的结构进行细微的实现,使其在打印出来的实体中栩栩如生的显示出来。对此,我曾经在公司里面提出用工程力学的方式来

动态组织填充矢量,而不是死板的用这几种填充方式,但可惜我不懂工程力学,也没有及时的和这方面的专家联系(我的失误),

但这的确应该是未来解决这类问题的思路,就好像骨小梁一样,根据力学分布,动态的组织矢量集合!

2,打印出来的模型稳固性强——硬度高或者柔韧性强

就目前来说,流行的填充方式:线填充,蜂窝填充,同心填充。蜂窝填充的稳固性是最好的,在蜂窝填充里三角形填充的稳固性较

强,六边形填充的柔韧性较强。

3,省材料

4,打印时间短

5,鲁棒性强

平时会遇到很多不规范的3D模型(没有闭合或者存在大量相交的三角面片,多是由于3D美工的建模不专业所致),优秀的切片引擎需要对这些不规范的模型进行处理。

要做到这几点,输出的矢量集合就需要:

1,灵活的填充矢量集合生成算法适应不同的模型的不同的拓扑结构,使得填充矢量对边界冲击力最小,又能很好的支撑住整个模

型。

2,矢量集合有效组织,首尾相连,矢量数量最小,平均长度最大,方差最小。

3,多边打印,防止斜率小的时候上层塌陷以及保护外边界。

4,优越的支撑生成算法,支撑生成的越少越好,首先是为了省材料,其次与实体可以更容易的剥离。

5,对模型进行纠错及动态修补功能。

对此我的切片程序实现了其中的大部分功能,已经能对模型进行较好的切片形成矢量集合,打印质量接近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,今天的内容大概就是这些,我们下篇文章见:)

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cura 是一款开源3D打印机的切片引擎切片程序的主要过程如下:          i.             导入3D模型(STL,OBJ等等)。         ii.             分析并修复3D模型(源码里面貌似木有这一步…)。        iii.             将3D模型切割成2D层。        iv.             用上一步得到的2D图层形成LayerParts(他们自己的叫法),因为一层里面,很有可能有很多个不同的多边形,比如桌子,他的四个角,切出来后是四个圆形,上一步中只是得到了四个圆形,而没有确定这四个圆形是属于同一层的。         v.             进一步确定LayerParts中,各个part间的关系,比如得到了两个圆,大圆套小圆,我们就需要确认,小圆是空心的,而大圆和小圆形成的圆环是实心的。        vi.             将需要实心打印的部分标记出来(100%填充)。       vii.             将需要空心打印的地方打印出来(部分填充)。      viii.             根据生成的LayerParts生成每一层的G-code。 上述的每一步都有更多的逻辑关系在里面,但这只是一个工作的大概流程。切割引擎所有的数据都存放在一个叫SliceDataStorage的类里面。记住,上述的每一步都是基于前一步的数据来进行的。这里严格按照上述的流程来处理3D模型生成G-code。另外,在代码里面,坐标是用64位整数的形式存在的,比如,你在代码中看到的1000,他实际代表了1mm。这样做是因为Clipper使用了64为整数来表示距离。 标签:cura3d

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值