跳转至

非平面切片与真 3D 路径

结论先行:把切层方向从固定的 [0,0,1] 松开,90° 悬挑就不需要支撑了 —— 因为每一层都能压在上一层上。 代价是碰撞、Z 单调、层厚一致性全部要自己管。落地有两条现实路径: 一是后处理改切片产物(不改硬件,当天能试),二是两段式(主体标准切片 + 顶面二次成型),后者材料 +9% 而时间 −9%。

一、为什么换了切层方向就能免支撑

平面切片的三轴打印有一条硬约束:每一层都必须是水平面,层法向固定为 [0,0,1]。于是当零件表面接近竖直(悬挑接近 90°)时,上下两层在水平方向的接触宽度趋近于零 —— 每层只搭住上一层的极小一条边,重力一拉就掉,必须加支撑。

非平面切片的做法是让层平面随表面倾斜:

平面切片(层法向 = [0,0,1])        非平面切片(层法向随曲面转)

   ────────  ← 每层水平             ╱╱╱╱  ← 层沿曲面切向堆叠
   ────────                         ╱╱╱╱
   ────────                         ╱╱╱╱
   悬挑面越陡,接触宽度越小          每条挤出线压在相邻线的侧上方
   → 支撑必需                       → 90° 悬挑也能自承

几何上的关键是接触宽度的定义变了:平面切片里接触宽度是「同一条竖直线上的重叠」,非平面里接触宽度是「相邻两条挤出线之间的侧向搭接」。后者只要线间距小于线宽就存在,与表面倾角无关。这就是「免支撑做 90° 悬挑」的全部机理。

源页把这条路线拆成四项技术:

技术 含义 落地难度
90° 悬挑无支撑 在三轴机上用非平面切片实现 中(受碰撞与 Z 单调限制)
阳台悬挑(Balcony Overhang) 逐层偏移,让每层向外延伸一小段,形成外扩结构 低(可后处理实现)
子体积分割 同一零件分区域用不同切片策略(一部分平面、一部分非平面) 中(需要分区与拼接)
平面切片器模拟非平面 用 Cura / PrusaSlicer 的后处理做出非平面效果 最低

力学上的收益不止「省支撑」:

  • 层间粘接方向可控 —— 层界面不再一律水平,可以把界面转到受力较小的方向,把应力分散掉;
  • 连续纤维可沿受力方向铺设,这在纤维增强材料上比几何精度更值钱;
  • 外形与表面直接对齐,曲面零件没有台阶纹,省掉后处理打磨。

代价同样明确:层厚在倾斜面上会沿实际法向变化,挤出量必须跟着变;喷嘴与已打印部分存在干涉风险;三轴机上 Z 必须单调,不能下探。这三条决定了非平面只能在「斜率受限 + 单向前进」的范围内用。

层厚为什么会随倾角变化

设切片层厚(垂直方向)为 t,表面与水平面夹角为 α,则沿表面法向的真实层厚是:

t_eff = t / cos α
表面倾角 α 1/cos α 相对挤出量 说明
0°(水平顶面) 1.00 1.0× 正常顶面
30° 1.15 1.15× 基本无感
45° 1.41 1.41× 需开始降速
60° 2.00 2.0× 流量翻倍,多数热端到顶
75° 3.86 3.9× 已超出常规流量能力
85° 11.47 11.5× 模型失效

这张表说明两件事。第一,「层厚不变」在倾斜面上是假的:垂直层厚固定 0.2 mm、表面 60° 时,法向层厚是 0.4 mm,挤出量必须翻倍,否则欠挤出。第二,当 α 趋近 90° 时这个模型自己崩掉(1/cos α → ∞),说明「靠加大挤出量维持层厚」这条路在竖直面上走不通。90° 悬挑必须靠另一套机制:相邻挤出线的侧向搭接,也就是非平面切片把层平面转到接近竖直、让每条线压在邻线侧上方。这两套机制的分界大概在 α = 60–70° 之间 —— 再往上就该换模型,而不是继续加流量。

二、开源方案盘点:四条路线,63 个项目

对 GitHub 做了四轮检索(60+ 组检索词、去重 730 个仓库)后,能真正生成 3D 路径的项目有 63 个,按落地难度分成四条路线:

路线 代表项目 门槛 适用场景
① 后处理变形派(不改硬件、不换切片器,把平面 G-code 变成非平面) NonPlanarInfill、GCodeZAA、Fuzzyficator、RotBotSlicer-Nonplanar_Slicing 最低,现有三轴机直接跑 快速验证、曲面外观件
② 独立非平面切片器(三轴机打曲面层) CurviSlicer(Inria)、AtomSlicer、atomizer、MageSlicer 中,多为论文参考实现 曲面分层、研究中试
③ 多轴 / 机器人切片(4–6 轴真 3D 自由度) Open5x、S³-Slicer、ORNLSlicer、NEPath、Fractal-Cortex 最高,但最贴近工业落地 机械臂打印、大幅面构件
④ 体积层析(彻底脱离「层层」) drtvam(EPFL)、CAL-software、SwissVAMyKnife.jl 高,属另一条技术线 与光固化/体积成型同源

最值得先读的八个(星数为调研当天口径):

项目 ★ 为什么值得看
TengerTechnologies/Bricklayers 2201 社区最热的非平面后处理:交错内壁抬升半层,装上就能试
FreddieHong19/Open5x 1186 三轴机改五轴的完整开源标杆(Duet3D 平台,FormNext 展出过)
FullControlXYZ/fullcontrol 1006 Python 全控制路径框架,这一派的事实标准
AndyGlx/FullControl-GCode-Designer 594 同系 VBA 版设计器,老但可直接参考参数化出码
mfx-inria/curvislicer 260 Inria 曲面层切片,三轴机可用,有论文 + 代码
zhangty019/S3_DeformFDM 175 SIGGRAPH Asia 最佳论文,通用多轴切片框架(支撑自由 / 强度 / 表面质量统一)
ORNLSlicer/ORNLSlicer 93 国家实验室级工业切片 + 路径规划框架,长期活跃
WangY18/NEPath 70 IQOP 非等距路径 + 连通费马螺旋,也是「等值线零空移」那条路线的权威出处,Boost 许可可商用

另有 xavierchermain/atomizer(39★)走「用 atoms 替代切片」的路子,无碰撞紧贴几何,SGP 荣誉提名 —— 思路值得读,但离产品很远。

三、后处理变形派:门槛最低的那条

这一派的共同点是输入是普通切片器出的平面 G-code,输出是变形后的非平面 G-code,不需要换主板、换固件、换切片器。

做法 机制 效果
交错内壁抬升半层 把内壁路径在 Z 上偏半层,使内壁与外墙错位 层界面错开,侧向强度提升
路径 Z 调制 按表面高度函数改写每条路径的 Z 顶面随形,消除台阶
逐层偏移(阳台悬挑) 每层向外偏一小段,累积成外扩 局部悬挑不再需要支撑

优点是当天能跑;缺点是只能改 Z,改不了拓扑 —— 它无法把一段路径掰成真正垂直于当前的曲面层,只是把平面路径「抬起来」。而且适配性依赖固件与切片器版本,必须实机验证后再信。

如果目标只是「曲面外观 + 少支撑」,这一派够了;如果要真正在接近竖直的面上做多层堆叠,就必须换到路线 ②③,或者用下面的两段式。

四、两段式:主体标准切片 + 顶面二次成型

这是把「非平面」压缩成一个可交付工程问题的最省钱做法。核心思路:不去改切片器,而是把零件拆成两段,界面做成平面贴平面。

z = 88.1 mm ┬─ 顶部随形网格层(底平顶曲的过渡块,TPMS 立体填充)
            │   无外墙 / 无顶底 / 网格上表面 = 原模型顶面
z = 38 mm   ├─ 对接面(平面贴平面,两段各切各的,此处合并)
            │   主体(标准平面切片,普通外墙 + 填充)
z = 0       ┴─ 模型底面

总高不变、总层数不变(45 层),改动只发生在 38–88 mm 这 50 mm 的填充方式上。四步流程:

  1. 提取顶面曲面:从模型上方打 16,074 条射线,命中 16,034 条 ⇒ 得到 f(x,y),值域 54.1–88.1 mm(起伏 34 mm);
  2. 造「底平顶曲」过渡块:底面取 z = 38 平面、顶面取 f(x,y)、侧壁封边 ⇒ 32,068 顶点 / 64,132 面,水密判定通过,体积 5,130 cm³(分界线先取 39.1,后对齐到层高网格取 38);
  3. 网格块切片:无外墙、无顶底、TPMS 立体网格填充;
  4. 两段合并:主体截到 z = 38,接网格段,自动补 Z 偏移、重编层号。

实测产物:45 层 / 53 MB / 回抽 50 次 / G0 45 次 —— 注意 G0 正好等于层数,说明这是「一层一次跳转」的标准切片节奏,不是连续路径。

用量对照很反直觉:

段 高度范围 线材 时间
主体(标准切片) 0–38 mm 455.3 m ≈ 11.5 h
顶部随形网格(TPMS) 38–88 mm 436.6 m ≈ 11.1 h
合计 0–88 mm 891.9 m ≈ 22.6 h
对照:整件标准切片 0–88 mm 815.7 m 24.8 h

材料多 9%,时间反而少 9%。 原因很直接:顶部换成网格后实心体积下降,但网格路径更密、单段更短,机器几乎不空跑 —— 省下的时间来自「没有大段空移」。这条结论对成本敏感的大件很有用:填充策略的改动可以同时买到外观和节拍。

为什么界面必须是平面

源页在结构图上专门标了「关键:界面是平面贴平面」。这不是排版讲究,而是两段能合并的前提:

  • 界面若是平面,两段在同一 Z 上共享完全相同的截面轮廓,合并时只需对齐 XY 原点与 Z 偏移,接缝处的线宽与层高天然一致;
  • 界面若是曲面,两段各自切出来的层轮廓在界面层上不重合,接缝处必然出现重叠(过挤)或空隙(冷缝),而且偏移量随位置变化,无法用一个常数修正。

由此可以把这个做法泛化:任何「局部需要非平面」的需求,都可以拆成「平面界面 + 局部二次成型」 —— 主体走成熟切片器,只有需要随形的那一段自己造几何。这条思路把非平面从「换一个切片器」降级成「多切一次 + 合并一次」,是它最实际的工程价值。

四个实测坑

# 坑 表现 修法
1 网格块不水密 切片器直接报 Polygonal slicer failed to complete due to errors in the mesh 顶点必须按「网格点」共享,不能每个格子独立造顶点
2 切片器把模型沉到床上 切出来的 Z 从 2 开始而不是 38 从头部 o X … Y … Z <dz> 行读出偏移再补回(本例 +38.000 mm),否则两段错位
3 两段层号都从 0 开始 查看工具串层 第二段层号接续重编(本例 +19)
4 预览器按距离抽稀 正确路径显示成「一堆大直线」 抽稀只允许发生在层间,层内保留全部细节

第 4 条是最贵的一课:TPMS 的真实段长中位数只有 0.55 mm,按 min_len 25 抽稀后相邻点被并成 25 mm 直线,于是被判定「路径完全是错的」。错在预览器,不在路径。 判据还是段长分布:中位数 / p99 / max 三个数一列出来,真假立辨。

还有一个隐藏坑:切片器只在 Z 变化时输出 Z 字,解析时必须继承上一个 Z,否则平面层会丢掉绝大部分点(实测丢失 97%)。

目前暴露的真实问题

TPMS 在曲面变换后局部过密:120×120 mm 窗口单层就有 24,000 段,估算线间距平均 1–2 mm,但波谷处不足 0.4 mm —— 小于喷嘴宽度,实际打印会糊在一起。

解法是调 TPMS 单元尺寸(各向异性单元尺寸参数 ui_cell_side_ratio_xy_z)或降填充密度,把最小间距拉到 ≥ 0.8 mm。这条阈值可以当作所有立体网格填充的通用下限:最小线间距 ≥ 2 × 喷嘴宽度。

五、Universal slicing 框架:理论坐标与适用边界

把这堆做法收进一个坐标系,最省事的框架是两级分类:

级别 切片路径方向 切片几何 层厚
Class 1 静态 [0,0,1] 平面或非平面(任意几何体) 固定
Class 2 可变(弯曲 / 过渡) 可变(平面 ⇄ 非平面) 可变

Class 1 里再按几何体细分为八类:平面、半球凸、半球凹、锥面(用于旋转倾斜喷嘴)、贝塞尔曲线波浪、NURBS 波浪、倾斜平面(传送带打印机的 45° XY)、点状凸起。

这个框架的价值在于把「非平面」从一种技巧变成一组可命名的几何体。对应到具体实现:

切片器 / 方案 支持级别 来源
MetatronSlicer Class 1 + 2 自研(xyzdims)
EnochSlicer Class 1 + 2 自研(xyzdims)
DotXControl Class 1 + 2 商用
Ai Build Class 1 + 2 商用(需 NDA)
Slicer4RTN 锥面切片 旋转倾斜喷嘴专用

对挤出式打印的适用边界,要分清三件事:

  1. 它是分类学,不是工艺模型。 框架只回答「层方向怎么变、几何怎么变、层厚怎么变」,不含流量、压力、层间粘接、材料开放时间这些挤出式打印的实际约束。落进工程必须自己补上「层厚 → 挤出量」的映射。
  2. Class 1 静态方向可以在三轴机上真跑,只要 Z 单调、无碰撞;这是唯一不需要额外轴的自由度。
  3. Class 2 可变方向几乎必然要多轴。三轴机只有一个 Z,层方向一变就意味着要么 Z 不单调(不可能),要么把变化摊到 XY 上做近似(会牺牲层厚一致性)。锥面切片之所以需要「旋转倾斜喷嘴」,就是这条几何约束的直接后果。

对照一下混凝土打印的诉求就更清楚:非平面切片让悬挑不需要支撑,可变层厚让精细区密、填充区粗,多轴路径才能覆盖真正的空间曲面 —— 三条都落在这个框架里,但三条都需要比三轴更多的自由度,或者像两段式那样把非平面压缩成一个局部问题。

六、选型判据

你的情况 选哪条 理由
只想消掉顶面台阶,机器是三轴 后处理变形派(Bricklayers / Fuzzyficator / GCodeZAA) 不改硬件,当天验证
曲面零件、顶面质量优先、可接受两段拼接 两段式(主体 + 顶面二次成型) 界面是平面贴平面,最可控;材料 +9% / 时间 −9%
零件有接近竖直的外壁、要求无支撑 独立非平面切片器(CurviSlicer 一类) 需处理碰撞与 Z 单调
大幅面建筑构件、机械臂可用 多轴/机器人切片(Open5x、ORNLSlicer、S³-Slicer) 唯一能覆盖真 3D 自由度的路线
需要真正脱离层层堆叠 体积层析(drtvam 一类) 另一条技术线,与光固化同源
层间强度是主要指标 连续路径 + 空间填充曲线 见 连续路径生成

三条工程红线,任一条不满足就不要上非平面:

  • Z 必须单调(三轴机)—— 任何需要下探的层方向都是不可实现的;
  • 最小线间距 ≥ 2 × 喷嘴宽度 —— 曲面变换会压缩局部间距,波谷最先糊;
  • 层间水平偏移不得超过丝宽 3–5 倍 —— 参数化路径里振幅 30 × 波数 14 × 层高 4 的组合,相邻层局部偏移可达十几毫米,远超挤出悬垂极限,必须限幅限速。

七、诚实边界

  • 开源生态里绝大多数是研究原型,不是产品。多轴/机器人项目多数是论文参考实现,「能跑」不等于「能上产线」,别按产品预期排期。
  • 星数与活跃度是调研当天抓取的口径,会变。
  • 两段式的用量数据来自单件实测(枕形件),换几何、换填充形态后比例会变,但「网格替代实心能省时间」的机制不变。
  • TPMS 局部过密的问题在源头仍未定案 —— 单元尺寸、网格层厚度、网格形态三个参数需要一起定,最小间距 0.8 mm 是当前的下限约束。
  • 后处理派的适配性依赖固件与切片器版本,需实机验证后再信。

相关阅读