第11章:预览、渲染、网格精度与性能优化
1. F5 与 F6
OpenSCAD 的预览和渲染不是同一件事。F5 预览速度快,适合交互检查;F6 渲染会执行真实几何求解,适合导出。许多模型 F5 看起来正确,但 F6 可能因为自交、非流形、共面或退化面失败。因此最终制造前必须 F6。
2. $fn、$fa、$fs
圆和曲面分辨率由特殊变量控制:
$fn:固定分段数。$fa:最小角度。$fs:最小片段长度。
$fn = 64;
cylinder(h = 10, d = 20);
原则:
- 小孔不需要过高
$fn。 - 大圆外观明显时可提高分辨率。
- 预览用低精度,导出用高精度。
- 不要在全局盲目设置
$fn = 200。
3. 局部精度控制
module screw_hole(d = 3.2, h = 10) {
cylinder(h = h, d = d, center = true, $fn = 32);
}
module visible_knob(d = 30, h = 15) {
cylinder(h = h, d = d, center = true, $fn = 96);
}
孔和外观件可以使用不同精度。局部控制比全局控制更合理。
4. 布尔复杂度
F6 慢通常来自:
- 高面数曲面参与大量布尔。
- 大阵列中重复复杂几何。
minkowski与高分辨率对象组合。- 导入的 STL 网格过密或质量差。
- 自交多面体导致几何内核处理困难。
优化思路:
- 先二维构造再拉伸。
- 减少无必要的球体和曲面。
- 用
hull替代部分minkowski。 - 分模块渲染定位瓶颈。
- 使用参数开关控制细节等级。
5. 细节等级参数
quality = "preview"; // "preview" or "render"
fn_round = quality == "preview" ? 24 : 96;
cylinder(h = 20, d = 30, $fn = fn_round);
命令行导出时:
openscad -D 'quality="render"' -o final.stl model.scad
6. 避免非流形
非流形常见来源:
- 零厚度面。
- 仅边或点接触的实体。
- 自交多边形。
- 面方向错误的 polyhedron。
- 共面布尔。
- 导入破损 STL。
解决方法是让实体有明确体积,让连接处有重叠,切除体穿透实体,检查多边形顺序,并使用网格检查工具。
7. 调试复杂模型
调试步骤:
- 用
!隔离单个模块。 - 用
#高亮切除体。 - 用
%显示参考对象。 - 暂时降低
$fn。 - 分段注释或
*禁用模块。 - 用
echo输出关键参数。 - 简化到最小复现模型。
8. 内存与时间
大型模型渲染可能占用大量内存。建议:
- 不在一个文件中生成过多独立零件。
- 导出时按零件拆分。
- 不把复杂纹理直接建成真实几何,除非制造需要。
- 不在全局创建大规模装饰阵列。
- 使用命令行批处理时设置合理并发,避免多个 F6 同时耗尽内存。
9. 预览图和最终模型分离
有些对象只用于说明,例如坐标轴、透明包络、装配爆炸线、文字标签。这些不应进入最终 STL。可用参数控制:
show_helpers = true;
if (show_helpers)
%cube([100,100,1], center = true);
part();
导出时用 -D 'show_helpers=false'。
10. 性能检查清单
- 是否区分预览质量和导出质量?
- 是否局部设置
$fn? - 是否避免大规模
minkowski? - 是否把复杂模型拆成模块定位瓶颈?
- 是否减少导入高密度网格的布尔?
- 是否消除共面和零厚度?
- 是否能在命令行稳定导出?