
设计师和工程师经常需要使用软件来调整、修复和敲定用于 3D 打印的 3D 模型。幸运的是,手动网格编程的时代早已成为过去。
今天,一系列专用工具均提供自动和手动 STL 修复功能。对于大多数模型来说,自动向导足以满足其需求,修复微小错误,例如孔洞和松散壳体,但是具有更严重错误的模型则需要一个独立的解决方案。
在本指南中,我们将介绍修复 STL 文件的工作流程,以及如何使用五个最佳 STL 修复软件工具来全面修复模型,以完成 3D 打印准备。
Formlabs 的 PreForm 软件等高级打印准备工具,均提供自动修复功能。免费下载 PreForm,欢迎试用。

为何要修复 STL 文件?
3D 设计师通常使用复杂的表面处理方法来构建模型,从而生成由曲线和样条定义的几何形状,从数学角度来说,这种几何形状堪称“完美”。在 3D 打印中,曲面会转换为网格格式,将几何形状描述为连接三角面和顶点的云。
网格转换就像是将一个完美光滑的镜子打碎,然后再把所有碎片粘合在一起,使其外观上恢复如初。如果转换效果不佳,模型会出现各种边缘、孔洞和浮动部件,以及许多不属于这些区域的相交三角面。如果转换完成度高,3D 打印模型会是一个无孔的流形网格,与原始设计并无二致。

如何修复 STL 文件
通常,STL 文件修复工作流程包含以下步骤:
-
自动修复。STL 修复软件的向导会尝试修复所有严重错误,包括孔洞、分离壳体和相交区域。
-
分离壳体。 网格由相互连接的三角面集合组成。其中可以包含多个连续曲面;理想情况下,这些曲面应连接在一起,并去除掉无用曲面。
-
填充孔洞、弥合间隙。一些全面性 STL 修复程序支持不同的孔洞填充方式,如平面、切线、规则或曲面。
-
解决重叠和相交。这通常需要重新计算网格的整个部分。
-
过滤掉双面、双顶点、反转法线和尖锐的窄三角形。
-
缝合开口边缘和剩余孔洞。
-
通过删除和创建三角面进行手动修复。
-
重新划分网格,以优化三角面数量。
-
导出为选定的网格格式。
最常用且便于存储的格式是 STL (StereoLiThography),在本文中,我们就使用这种格式。建议将 STL 文件保存为二进制格式,以便进一步缩减文件大小。正如在 Meshmixer 教程中所述,还有其他几种有用的格式(如 AMF、Collada、OBJ 和 PLY),它们均具有用于存储材料、颜色、渲染、3D 扫描和 3D 打印信息的专用功能。
注:一些软件包包含网格修复功能,如 FreeCAD、SketchUp、3D Studio Max 和 Rhinoceros,以及在线服务,如 Willit 3D Print、MakePrintable、3DPrinterOS、SculptGL 和 Shapeways。对于 Formlabs 客户,PreForm 打印准备软件已经嵌入了 Autodesk Netfabb 的自动化修复和部件打包功能,在导入时即可准备好 3D 模型。这样通常可以保证模型的完整性,所以只有在需要更高级的功能时,使用其他工具即可。

STL 文件修复软件工具比较
有效性 | 效率 | 用户界面 | 多功能性 | 网格重分 | 自动修复 | 高级功能 | 目标用户 | 成本 | |
---|---|---|---|---|---|---|---|---|---|
Meshmixer | ★★★★ | ★★★ | ★★★★ | ★★★★ | ★★★★★ | ★★★★ | 用户界面、网格重分与自动修复 | 3D 设计师 | 免费 |
Netfabb | ★★★ | ★★★ | ★★★ | ★★★★ | ★★★ | ★★★ | 填充物和支撑 | 工程师 | 免费(教育版) |
Magics | ★★★ | ★★★ | ★★★ | ★★★★★ | ★★★★ | ★★★ | 手动修复 | 工程师 | 付费 |
Blender | ★★★★ | ★★ | ★★ | ★★★ | ★★★★ | ★ | CG 设计师 | 免费 | |
Meshlab | ★★ | ★ | ★ | ★★★★ | ★★★★★ | ★ | 3D 扫描 | 免费 |
根据我们的了解,Meshmixer 是最佳 STL 维修工具。该工具兼具用户友好的界面与修复复杂网格错误所需的所有选项。之所以是最佳工具,因为它还具有额外功能,同时可以免费使用。Meshmixer 作为一个实用工具,还可以编辑 STL 文件、重塑整体,以及优化和最终确定 3D 模型。阅读我们的 Meshmixer 教程和 15 个专业技巧,以编辑用于 3D 打印的 STL 文件。
Autodesk 的 Netfabb 以其高级 3D 打印准备功能在工程师群体中脱颖而出。
Magics 是一个专业的 STL 编辑器解决方案,它提供了各种各样的 STL 文件修复功能,但通常也需要进行更多的手动修复操作。因此,Magics 名列第三位。
虽然 Blender 的功能更倾向于 3D 建模,且用户界面复杂,但它仍然提供了成功修复网格所需的大部分功能。
最后要说的 Meshlab 是一个必备的轻量级网格查看器和编辑器,它的高级网格重分脚本功能弥补了其在文件修复能力和用户友好性方面的不足。
高级 STL 修复软件教程
在下文中,我们将使用衣帽挂钩的复杂 3D 模型对五种 STL 修复工具进行测试,该模型有几个主要错误,包括孔洞、间隙、相交和浮动三角面。挂钩需要与安装筒相结合,以形成一个严密网格。
继续阅读,以了解如何使用五个最佳 STL 修复程序逐步完成修复过程。
目录:
- Meshmixer
- Meshlab
- Magics
- Blender
- Netfabb

Meshmixer
Meshmixer 是一个易于使用的多功能网格编辑程序。不仅可以优化三角网格,还可以重建整体、设置模型样式,或添加有用的功能。
在 Meshmixer 中加载衣帽挂钩并启动 Analysis(分析)→ Inspector(检查器)时,可以发现它确实显示了所有网格错误。在 Shaders(着色器)下,选择 X 射线模式以提高可视性。请确保选择正确的 Hole Fill Mode(孔洞填充模式),然后通过点击点指示器或运行 Auto Repair All(全部自动修复)来修复人为错误,此操作在大多数情况下都能充分完成修复任务。

另一种孔洞修复方法是选择孔洞的周围区域,并从弹出菜单中使用 Edit(编辑)→ Erase and Fill (F)(擦除和填充 (F))操作。将 Type(类型)设置为 Smooth MVC(平滑 MVC)以获得良好的连续填充效果。Edit(编辑)→ Make Solid(生成实体)或 Edit(编辑)→ Replace and Fill(替换和填充)均可以生成封闭网格。RobustSmooth 雕刻刷是一种附加方法,用于将优化区域完全融入模型。
如果模型由分离壳体组成,转至 Edit(编辑)→ Separate Shells(分离壳体),打开 Object Browser (Ctrl + Shift + O)(对象浏览器 (Ctrl + Shift + O))。现在,逐次选择两个壳体,并从弹出窗口中点击 Boolean Union(布尔联合)。在新打开的子菜单中,Precise(精确)或 Max Quality(最大质量)模式可保持两个对象之间的相交曲线,而 Fast Approximate(快速近似)速度更快,并足以满足日常需求。
如果布尔运算失败,则会显示两个红色对象。在这种情况下,请将 Search Depth(搜索深度)参数调高,并降低 Target Edge Scale(目标边缘比例),以增加成功可能性。选中 Use Intersection Curves(使用相交曲线)也可以提高质量。如果所有这些均失败,只需在 Edit(编辑)→ Transform(变换)部分将其中一个壳体移动百分之几毫米即可。
Auto Repair All(全部自动修复)将删除浮动部分并修补所有区域轮廓线。在本例中,我们希望手动连接其中一个支柱的间隙。这就是 Bridge(桥接)工具的作用所在。该工具最适用于直线段,由于这是圆形环之间的间隙,因此最好分段修补。选择 Edit(编辑)→ Select(选择)并突出显示两侧需要连接的三角面。然后从弹出菜单中点击 Edit(编辑)→ Bridge (Ctrl + B)(桥接 (Ctrl + B)),并将 Refine(细化)参数设置得足够高以实现平滑连接。在间隙周围的几个区域重复执行 Bridge(桥接)命令,然后使用 Inspector(检查器)填充剩余孔洞。一个避免出错的好方法就是在修复前使用 Edit(编辑)→ Remesh(网格重分),以提高和平均相关区域的三角化程度。

Meshlab
Meshlab 软件套件专门用于执行与 3D 扫描数据相关的网格操作,并提供许多重新三角化和高级修复算法。可以选择 Filters(过滤器)→ Remeshing, Simplification and Construction(网格重分、简化和构建)→ Simplification (Quadratic Edge Collapse Decimation)(简化(二次边坍缩抽取)),在此过程中系统会重根据目标面数重新计算网格。选中 Planar Simplification(平面简化)可以最好地保留平面。另一种精简三角面的方法是 Filters(过滤器)→ Cleaning(清理)和 Repairing(修复)→ Merge Close Vertices(合并相邻顶点)。
可在项目窗口中右键单击部件并选择 Split in Connected Components(分割连通组件)以检测浮动元件。然后可以分别删除分离壳体,或通过利用 Union(求并)运算符的 CSG Operation(CSG 操作)进行合并。

在 Meshlab 中也可以进行基本的网格修复操作。例如,Filters(过滤器)→ Cleaning and repairing(清除和修复)→ Select Self Intersecting Faces(选择自相交面)→ Apply(应用)将选择所有相交的三角面,然后按 Delete 键将其删除。Filters(过滤器)→ Cleaning and repairing(清除和修复)→ Remove Duplicated Faces(删除重复面)和 Remove Duplicated Vertex(删除重复顶点)是非常有用的操作。下一步是使用 Filters(过滤器)→ Remeshing, Simplification and Construction(网格重分、简化和构建)→ Close Holes(闭合孔洞)来修复孔洞。Filters(过滤器)→ Quality Measure and Computations(质量度量和计算)下的 Compute Geometric Measures(计算几何度量)操作将显示网格是否密闭。如果没有,请使用 Render(渲染)→ Show Non Manif Edges(显示非流形边)和 Show Non Manif Vertices(显示非流形顶点)检测相关区域。
如需桥接间隙,可使用工具栏上的 Select Faces in a Rectangular Region(在矩形区域中选择面)工具删除三角面组。按住 Alt 键可将背面排除在选区之外,使用 Shift + Ctrl + D 取消选择。选择单个三角面时,单击工具栏上的 Z-Painting(Z 绘制)工具并选择红色笔刷图标。左键单击选择三角面,右键单击擦除选区,点击 Delete 以删除三角面。由于 Meshlab 不具备三角面创建功能,曲面生成方法置于 Filters(过滤器)→ Remeshing, Simplification and Construction(网格重分、简化和构建)→ Surface Reconstruction: VCG(曲面重建:VCG)。如果将 Voxel Side(体素边长)值设置得足够低,并将 Geodesic Weighting(测地加权)和 Volume Laplacian Iterations(体积拉普拉斯迭代次数)值设置得足够高,即可生成平滑的流形网格。通常推荐使用此方法,而不是 Filters(过滤器)→ Remeshing, Simplification and Construction(网格重分、简化和构建)→ Screened Poisson Surface Reconstruction(屏蔽泊松表面重建)。另一种方法是先生成 Alpha Complex(Alpha 复合体),然后再生成一个 Alpha Shape(Alpha 形状),有时在数值正确的情况下也可以使用此方法。对于网格重分操作,Meshlab 可在 Filters(过滤器)→ Remeshing, Simplification and Construction(网格重分、简化和构建)→ Uniform Mesh Resampling(均匀网格重采样)下提供体素化算法,以生成流形网格,并提供一个用于创建空心部件的偏移参数。
注:完成每次重要操作后务必保存网格!Meshlab 无撤销功能,因此需要重新导入原始网格。

Magics
Materialise Magics 是一款专业的 3D 打印数据准备工具,可提供大量网格手动控制功能,包括壁厚分析、镂空、重画网格、平滑、布尔运算和剪切操作,以及解决孔洞、坏边和最复杂的三角面错误。
通常可使用红色十字图标的 Fix Wizard(修复向导)完成错误修复。单击 Go to Advised Step(转至建议步骤)打开诊断表,以检查需要修复的不同错误。对于大型网格,建议取消勾选重叠三角面片和交叉三角面片,并首先修复主要错误。选择 Update(更新)后,再次单击 Go to Advised Step(转至建议步骤),然后单击 Automatic Fixing(自动修复),以修复大多数错误。
如果修复向导无法修复坏边和重叠三角面片,在足够高的容差设置下,通常可以选择 Fix Wizard(修复向导)菜单中 Stitching(缝合)下的 Stitch(缝合)功能。对于剩余的重叠三角面片,可再次运行修复向导或从 Fix Wizard(修复向导)菜单的重叠部分选择检测重叠。此操作将选择所有重叠,然后点击 Delete Marked(删除标记)将其删除。同样,也可以在 Triangles(三角面片)→ Detect Intersecting(检测交叉)下,对交叉三角面片执行相同操作。如果缝合剩余间隙无法完成修复,现在可以通过 Create(创建)按钮手动填充剩余间隙。也可以在主菜单的 Marking(标记)选项卡下手动标记面片。可从 Noise Shells(干扰壳体)部分中删除浮动面片。对于大的非平面孔,可使用 Fix Wizard(修复向导)菜单中 Hole(孔)下的 Freeform(曲面)选项进行手动填充,并可获得最平滑的填充补丁效果。Ruled(规则)选项则支持指定孔方向,在本例中,手动创建了数个桥接三角面片后,该选项将用于桥接花蕊中的圆柱形间隙。
有时 Fix Wizard(修复向导)不会在网格中合并不同的壳体。要修复此问题,请在主屏幕上的 Part Pages(零件页面)→ Part List(零件列表)菜单中右键单击零件,并选择 Shells to Parts(壳体转为零件)。此操作可创建单独的网格,并且在选中网格时,现在可以使用 Tools(工具)→ Boolean (Ctrl + B)(布尔算法 (Ctrl + B))功能进行组合。

Blender
Blender 是一款免费的开源网格创建环境,包括 3D 建模、套索、渲染和动画功能。在下方工具栏中 Mesh(网格)菜单上的 Edit Mode(编辑模式)中提供数个 STL 修复功能。CellBlender 插件则提供了网格分析工具来检查流形并查找流形错误。在开始任何修复脚本之前,请确保已选中相关的网格或部分。
Mesh(网格)→ Normals(法向)→ Recalculate Outside (Ctrl + N)(重新计算外侧 (Ctrl + N))可翻转任何具有反转法线的三角面。检查顶部信息窗格中的结果,如果生成四边面,可以使用 Mesh(网格)→ Faces(面)→ Triangulate Faces (Ctrl + T)(面三角化 (Ctrl + T))将其转换为三角面。Mesh(网格)→ Degenerate(简并)→ Dissolve(融并)可以删除无面积的边和面。使用 Mesh(网格)→ Vertices(顶点)→ Remove Doubles(移除重复顶点)可以删除重复顶点并将边焊接在一起。

在 Blender 中填充孔洞的最简单方法是首先通过 Select(选择)→ Select Boundary Loop(选择区域轮廓线)以选择区域轮廓线,或 Select(选择)→ Select All by Trait(按特征全选)→ Non Manifold (Shift + Ctrl + Alt + M)(非流形 (Shift + Ctrl + Alt + M))以选择全部非流形边,然后点击 Mesh(网格)→ Faces(面)→ Make Edge/Face (F)(创建边/面 (F))或 Mesh(网格)→ Faces(面)→ Fill (Alt + F)(填充 (Alt + F)),以改进填充效果。可以通过右键单击边或顶点,Shift + 右键单击第二个边或顶点并按 F 键来创建单个三角面。在编辑过程中,可以在底部工具栏的三个图标所指示的 Vertex Select(顶点选择)、Face Select(面选择)或 Edge Select(边选择)模式之间切换。如需选择特定的区域,则可以通过 Select(选择)→ Circle Select (C)(刷选 (C))来完成,其工作原理类似于笔刷选择。使用鼠标滚轮或数字加/减号按钮更改笔刷大小,按住 Shift 键可取消选择。Mesh(网格)→ Faces(面)→ Beautify Faces (Shift + Alt + F)(完美建面 (Shift + Alt + F))有时可以提高选定区域的网格质量。可以使用 Alt + 右键选择单独的区域轮廓线。选择两个开放的区域轮廓线,选择 Mesh(网格)→ Edges(边)→ Bridge Edge Loops(桥接循环边),可平滑连接两个区域。
选择 Mesh(网格)→ Vertices(顶点)→ Separate(分离)→ By loose parts(按松散块)将在项目浏览器中按壳体创建一个对象。此操作可删除不需要的网格对象。分离壳体可以通过 Boolean Modifier(布尔修改器)连接在一起。如果所有这些操作均失败,则执行 Remesh Modifier(重构网格修改器)并将八叉树算法深度增加到 8 左右,或者直到结果令人满意为止。要增加某些区域的壁厚,请转至 Sculpt Mode(雕刻模式),并使用下方菜单中的 Brush(笔刷)→ Sculpt Tool(雕刻工具)。
Netfabb
Autodesk Netfabb 是一种高级 3D 打印文件准备工具,其自动修复功能已嵌入到 Formlabs PreForm 等软件中。该工具提供有标准版、高级版和旗舰版三种版本,其中前两种版本可免费用于教学。
Netfabb 额外提供了网格编辑程序,如镂空、自定义支撑构建,以及 Lattice Assistant(晶格助手)和 Lattice Commander(晶格命令),这些都是开发轻量级零件的重要辅助工具。旗舰版还提供了 Optimization Utility(优化实用程序),可以使用 FEA analysis(FEA 分析)根据施加的载荷优化零件结构。
凭借 File(文件)→ Import CAD File as Mesh(将 CAD 文件导入为网格)功能,用户不仅可以导入各种格式的网格模型,还可以导入来自 Catia、Siemens NX、SolidWorks、SolidEdge、Rhinoceros、ProE、Sketchup 的本地文件,并支持 STEP、IGES、SAT 和 Parasolid XT 文件。如需要导入网格,请单击 File(文件)→ Add part(添加零件),并在对话框中勾选 Extended Repair(扩展修复)。这可以解决 3D 可打印文件中出现的大多数错误。
在开始修复操作之前,我们有必要对零件进行分析。在任务栏中的 Analysis(分析)图标下,或在 Parts(零件)→ Analyse(分析)→ New Analysis(新分析)→ Add part(添加零件)下右键单击零件后,可以快速检查壁厚。右键单击零件,然后选择 Analyse(分析)→ New Measurement(新测量)或从任务栏中选择标尺图标,该图标支持在特定点进行线性、半径、角度和壁厚测量。

单击任务栏上的红色修复图标,打开 Part Repair(修复零件)部分。如果自动修复脚本在导入时效果良好,则 Status(状态)选项卡中的 Mesh is Closed(网格闭合)和 Mesh is Oriented(网格已定向)显示为绿色对勾。在 Actions(操作)选项卡中,如果存在相交,则可以进一步优化文件。在 Self Intersections(自相交)下,选择 Detect(检测),然后选择 Trivial(基本体)进行默认孔修复,例如 Stitch Triangles(缝合三角形)、Remove Double Triangles(移除重复三角形)、Remove Degenerate Faces(移除退化面)或 Split Off(分割),然后 Remove(删除)相交部分。Wrap Part Surface(包裹零件曲面)与体素化处理类似,只留下流形外层。此外,请确保 Shells(壳体)选项卡下不存在干扰壳体。

在尝试弥合间隙时,Netfabb 会填充需要进一步手动修复的孔洞。点击主工具栏上的 Select Surfaces(选择曲面)图标,选择整个孔洞,然后点击 Delete(删除)。或者,使用 Brush Selection(画笔选择)工具,并使用 Ctrl + 转动鼠标滚轮和 Plus/Minus (+/-) 按钮来改变画笔大小和选择。选中三角形后,选择 Remove Selected Triangles(移除选定的三角形)图标,然后使用 Add Triangles(添加三角形)按钮手动添加缺失的三角形以及一些桥接三角形。通过 Repair(修复)→ Close all Holes(闭合所有孔)完成网格修复。最后,我们可以使用 Mesh Edit(编辑网格)→ Remesh(重新划分网格)命令细化网格,该命令将根据 Target Edge Length(目标边长)参数重新计算模型。选中 Maintain Edge(保持边)选项可优化尖锐边缘周围的模型完整性。
开始使用专业 3D 打印技术

需要合适的工具来实现您的设计?高精度立体光固化 (SLA) 和选择性激光烧结 (SLS) 3D 打印机快速且经济高效,可用于生产具有平滑表面和精细细节的模型。
可索取免费的样品部件,详细了解 3D 打印机并亲身感受 Formlabs 3D 打印机的品质。