NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
之前我们介绍了 17 个风格各异的 3D 模型网站,通过这些网站,你可以获得丰富的 3D 资源,享受成为 Maker 的乐趣,而无需自己建模 . 但是,在你的 3D 打印机施展从零到一切的魔力之前,还有关键的一步:切片 3D 模型。
在细说Slicing的概念之前,让我们先简单了解一下3D打印的大致过程。
可以看到,获取3D模型只是步骤①的结束。 要让 3D 打印机开始打印,你需要将 3D 模型导入切片软件(以下简称切片器)并将切片结果(G Code)发送到 3D 打印机。
到目前为止,你可能想知道很多:为什么需要切片? 它是如何工作的? G代码到底是什么? 继续阅读,答案就在路上!
1、什么是切片
本质上,切片是一个翻译过程。
我们在步骤①中得到的3D打印模型是一个三维图形文件(比如STL文件)。 此类文件包含几何信息,这些信息由三角形面组成,用于表示对象的轮廓形状。
然而,您的 3D 打印机是一种机械设备,其操作需要 How To Do 的说明信息,而不是描述它是什么的几何信息。 因此,一个问题就出现了:3D打印机无法读取和理解模型文件中的几何信息,模型文件本身也不存储指令信息。 这样,3D打印模型和3D打印机之间就存在信息鸿沟。
切片是跨越这个鸿沟的桥梁。
它的作用是将3D模型文件中的几何信息“翻译”成3D打印机可以读取和理解的指令信息。 除了原有的几何数据,还可以通过切片机添加更多的辅助信息(如调整加热床或喷嘴的温度、添加支撑等),让3D打印机更好地构建模型。
我们可以将这种切片过程比作烹饪,以更好地解释它们之间的关系。
仅凭一张菜品图片(3D模型文件),无论厨师(3D打印机)技术再好,也几乎不可能完美还原图片中菜品的味道。 但是如果你做一个对应的菜谱(切片生成G Code),详细描述所有的食材,每份的用量,这道菜的烹调顺序,每一步的特殊技巧,问题就迎刃而解了。
另外,如果你对计算机数控有一定的了解,3D打印模型、切片软件、G代码之间的关系也可以类比为计算机辅助设计(CAD)、计算机辅助制造(CAM)之间的关系, 和计算机数字控制 (CNC)。
2、切片的工作原理
大致说明了切片的作用之后,我们就以目前最强大的切片器之一的Cura为例,简单介绍一下切片背后的工作机制(也就是所谓的Engine),以及涉及到的几个关键概念。
CuraEngine在对3D模型文件进行切片时,主要经过以下五个步骤。
3.1 优化 3D 模型
当你将 3D 模型导入 Cura 时,它会根据 Cura 的 OptimizedModel 进行优化。
上面说了,3D模型文件的几何信息其实就是对构成模型的三角形的形状和位置的描述。 所以CuraEngine的优化就是分析、建立和存储这些三角面之间的关系,官方称之为顶点-面关系。 更清楚地说,它分析了哪些三角形是相邻的。
例如,假设要求你记住一组数字:8、10、12、20、25、30,你可以选择简单的记住,也可以根据它们的关系记住:8、10、12 分别是2的4倍、5倍和6倍; 20、25、30分别是5的4倍、5倍和6倍。
更容易记住,对吧? Cura也是这么认为的。
优化模型,建立三角面之间的邻接关系,是Cura快速切分模型、构建Layerparts的关键前提。
3.2 将 3D 模型切片为 2D 图层
CuraEngine 在这一步的主要任务是将 3D 模型横切为 2D 平面(想象一下你如何切奶酪)。
结合3D打印机的机械结构,可以理解为3D模型是由X轴和Y轴构成的二维平面,以一定的Z轴高度(layer height)逐层切割而成。 当2D平面与构成3D模型的三角面相交时,就会得到相应的相交线。
切片的目的是在二维平面上得到二维图形,供打印机逐层打印。 然而,横切结果只是一堆线。 我们如何知道哪些线构成了封闭的二维图形?
优化模型中建立的三角面邻接关系就来了。
如果两个三角形面(如A和B)相邻并且都与同一个X-Y平面相交,则生成的相交线(如红线和蓝线)也必须相邻,这意味着它们可以形成一个封闭的与其他相邻线条的二维 图形。
因此,CuraEngine 可以快速识别单独的封闭二维图形。 此时,3D模型被切分成2D层,每一层由一个或多个闭合的2D图形组成。
3.3 构造分层部件
在最后一步中,我们在 2D 图层上获得了封闭的 2D 图形。 但是,每一层的图形数量不一定相同。 单个图层上的单独 2D 图形称为 LayerParts,这是 CuraEngine 中的一个基本概念。
引用CuraEngine官方的一个例子,如果你把一张桌子切成四条腿,Layer②有四个LayerPart,而Layer①只有一个LayerPart。
在这一步中,CuraEngine 将单独的闭合 2D 图形定义为不同的 LayerPart。 这样G Code会以LayerPart为单位进行编译,尽可能去除Layerparts之外的冗余信息,提高打印效率。
3.4 标记区域
在构建 LayerParts 之后,CuraEngine 将 LayerPart 的区域标记为 Insets、Up/Down Skins Areas 或 Sparse Infill Areas,并规划各自的打印模式。
对于同一个LayerPart,外线区域会被标记为Insets,线内区域会被标记为Up/Down Skins Areas或Sparse Infill Areas。 至于具体参数(如轮廓粗细、填充密度、图案等),可以在Cura中单独设置。 需要说明的是,该步骤只是标记不同的区域并规划相应的打印方式,并非实际路径。 下一步编译G Code时,会在不同的区域生成特定的打印路径。
3.5 生成 G code
在这一步中,CuraEngine会收集前面所有步骤涉及到的几何形状和参数信息,然后编译成G代码,引导3D打印机打印出目标模型。
如下所示,Cura 的官方文档列出了这个过程中的一些重要点:
- PathOrderOptimizer:顾名思义,喷嘴在移动时会选择距离最近的LayerPart进行打印,以提高效率。
- Infill:以线条的形式打印。
- 梳理:为避免拉丝,如果有其他路径可走,喷嘴将尽量不移动而不打印。
- GCodeExport:G Code生成过程分为两步。 首先,收集汇总每一层的所有路径信息; 其次,编译生成G Code。
4、如何阅读 G Code
作为切片的结果,G Code指示 3D 打印机进行打印。 由于其作为一种特殊编程语言的性质,G Code可以像 Java 或 Python 一样具有可读性。 只要掌握基本语法,不难判断不同G指令的含义。
G Code可分为G-code和M-code两种。
G-code(General code)关注几何信息,主要描述引导3D打印机移动等指令。 从命名上看,显然G-code是G Code的核心(听起来像绕口令)。
M-code(Miscellaneous code)是一种非几何指令,用于指定非几何参数,如加热床温度或风扇启动状态。
紧跟在字母 G 或 M 之后的数字表示不同的操作。 例如,G0 指令打印模块快速移动,G28 指令打印模块回原位。
其余参数通常由一个或多个字母数字组合组成。 字母通常表示执行动作的对象,而数字表示动作的具体参数。 例如,G0 X5 Y20指令通过X轴和Y轴的移动,指示打印模块快速移动到坐标为(5, 20)的位置。 然而,并非每个 G 指令都有特定的参数。 例如,M84 只是表示禁用电机,在这种情况下,以后不需要添加其他参数。
更多字母的含义请参考维基百科上的解释。
值得注意的是,不同核心固件的3D打印机可能对同一个G命令有不同的理解,从而执行不同的动作。 对于这种情况,有以下三种解决方案可供参考:
- 如果有的话,尽量选择适合你的 3D 打印机的专用切片机。
- 如果必须使用其他切片机,请尝试在切片机的打印机设置中找到你的打印机型号。
- 如果你的打印机不在列表中,可以在切片器中添加/创建新的打印机设置并选择正确的固件类型。 例如,Snapmaker 3D 打印机使用的核心固件就是 Marlin。
5、主流切片软件
综合口碑、实用性、价格,推荐以下六款切片软件。 无论你是专业人士还是新手,它们都是满足大部分切片需求的首选。
- Cura :免费,支持Windows, macOS, Linux
- IdeaMaker:免费,支持Windows, macOS, Linux
- Repetier:免费,支持Windows, macOS, Linux
- PrusaSlicer:免费,支持Windows, macOS, Linux
- Simplify3D: $150,支持Windows, macOS
- Snapmaker Luban:免费,支持Windows, macOS, Linux
6、常用参数和提示
众所周知,无论3D模型文件多么完美,在实际打印过程中总会出现各种意想不到的问题。 然而,在大多数情况下,可以通过调整切片器中的特定参数来缓解或解决这些问题。 接下来说说一些常用的切片参数和相关技巧。
- 层高
层高是指切片时层与层之间的垂直距离。 层高越低,打印时间越长,可以打印出更好的模型细节。 一般来说,我们想要细节,但是选择取决于具体的场景。 如果模型细节不多或者比较实用,可以适当增加层高,以节省时间和耗材。
- 外壁厚度
外壁越厚,模型的外皮越结实,反之亦然。 需要注意的是,壁厚最好设置为喷嘴直径的倍数。 否则,打印可能会受到影响。
- Retraction
3D打印模块行进时,喷嘴中熔化的灯丝会因重力作用向下渗出,导致打印件上出现细丝。 你需要解决这个问题的是 Retraction。
设置合适的回缩参数后,每当3D打印模块移动时,灯丝就会回缩一定距离,从而抵消渗出距离。 但是,如果参数设置不当,会导致打印机继续打印时挤出不充分,或者导致耗材堵塞喷头。 因此,你最好根据实际情况不断调整设置,避免串串,同时又不会产生其他问题。
- 填充密度
填充密度通常以百分比的形式表示。 如果设置为 100%,则目标区域将被完全填充。 但是,由于挤出体积有时不稳定,设置100%的填充密度很可能导致模型变形。 15%-30%对大多数印刷案例来说就足够了,既经济又省时。
- 支撑
当模型有悬垂时,支撑就登场了。 支撑的作用是作为悬垂部分的印刷底座。 前面说了,3D打印机是逐层打印的。 除初始层外,每一层都建立在下一层的基础上。 如果悬垂角度等于或超过90°,则悬垂的第一层下面没有任何东西可以支撑它的印刷。 当悬垂角度超过45°时,如果不加支撑,很容易出现印刷问题。 在Snapmaker Luban中,除了支撑位置,还可以设置支撑结构(线性、网格等)、密度、Z距等支撑参数。
- 初始层附着力
俗话说,好的开始是成功的一半。 与建造房屋类似,坚固可靠的初始层对于 3D 打印至关重要。 如果初始层的附着力不太好,可能会导致层偏移或翘曲。 考虑到它的重要性,大多数切片机都支持为初始层设置单独的参数,例如打印速度、行进速度、层高等。
原文链接:Slicing and G Code: The Bridge Between 3D Model and 3D Printer
BimAnt翻译整理,转载请标明出处