4. 几何体建模与导入:基本几何体、CAD模型与布尔运算
做杂散光分析,第一步就是把光学系统“搬”进FRED里。这一步要是歪了,后面所有分析都是白搭。我见过不少新手,花了两周追一个鬼像,最后发现是透镜的台阶面没建对——这种坑,踩一次就够了。
这一章,咱们就聊聊FRED里几何体建模的三种路子:基本体素、CAD导入、布尔运算。说白了,就是怎么又快又准地把你的系统搭出来。
4.1 基本几何体:FRED自带的“乐高积木”
FRED内置了球体、立方体、圆柱、圆锥、圆环这些基本体素。你想想看,大部分光学机械件,其实都能用这些拼出来。
核心原则:能用基本体素拼的,就别导CAD。FRED原生体素在光线追迹时计算效率最高,而且修改参数特别方便。
4.1.1 创建与参数化
在FRED的「Primitive Geometry」面板里,你可以直接拖拽生成。我个人习惯用脚本创建,因为参数可控,方便后期批量修改。
# 创建一个圆柱体,作为透镜的机械镜筒
cyl = fred.PrimitiveCylinder()
cyl.Radius = 25.0 # 半径 25mm
cyl.Length = 30.0 # 长度 30mm
cyl.Material = "Aluminum" # 赋予材料属性
cyl.Position = (0, 0, 50) # 定位到光轴上的 Z=50mm 处
小技巧:FRED里基本体素的坐标原点默认在几何中心。圆柱的中心在高度一半的位置,而不是底面。很多新手在这里栽跟头——我刚开始也搞错过,后来习惯在创建后立即用 SetOrigin() 调整到需要的参考点。
4.1.2 体素组合策略
实际项目中,一个遮光罩往往由多个圆柱和圆环组成。我的经验是:先画一个主圆柱,然后用「Copy」和「Translate」快速生成其他部分,最后用布尔运算合并。
| 体素类型 | 常用场景 | 参数要点 |
|---|---|---|
| 球体 | 光源模型、积分球、透镜表面近似 | 半径、球心位置、张角 |
| 立方体 | 探测器芯片、PCB板、机械基座 | 长宽高、倒角(可选) |
| 圆柱 | 镜筒、光阑、遮光罩、镜片毛坯 | 半径、长度、内外径(管状) |
| 圆锥/圆环 | 锥形遮光罩、螺纹、台阶面 | 起始半径、终止半径、高度 |
4.2 CAD模型导入:STEP/IGES实战
复杂结构——比如多级消光螺纹、异形遮光罩、柔性电路板——用基本体素硬建,效率太低。这时候就得靠CAD导入。
FRED支持STEP(AP203/AP214)和IGES两种主流格式。我个人更推荐STEP,因为它对实体和面的支持更稳定。
4.2.1 导入流程与设置
- 文件准备:在CAD软件里,把模型简化。去掉螺丝孔、倒角、刻字这些对杂散光没影响的细节。我曾经导入过一个带几百个M2螺纹孔的镜筒,FRED直接卡死了——后来把螺纹孔全填平,追迹速度提升了10倍。
- 导入操作:FRED菜单「File」→「Import」→「CAD Part」。选择文件后,会弹出导入选项对话框。
- 关键选项:
- 「Merge Coplanar Faces」:建议勾选。它能合并共面的小面,减少面数量。
- 「Tolerance」:默认0.01mm一般够用。如果模型有微小缝隙,可以适当调大。
- 「Import As」:选「Solid」还是「Surface」?做杂散光分析,我建议选「Solid」,因为FRED会自动识别内外表面,方便后续赋属性。
避坑指南:我曾经导入一个STEP文件,发现光线穿过了模型——查了半天,原来是CAD里有个面法线方向反了。FRED不会自动翻转法线。解决办法:导入后用「Surface」→「Flip Normals」检查并修正。或者,在CAD里导出前,用「检查几何体」功能跑一遍。
4.2.2 导入后的清理工作
CAD模型导入后,通常需要做三件事:
- 赋予材料:FRED不会保留CAD里的材料信息。你需要手动给每个零件赋光学属性(反射率、透过率、散射模型)。
- 简化面:用「Tools」→「Reduce Faces」把高密度网格简化。对于杂散光分析,面密度降到原始模型的30%-50%,精度损失可以忽略。
- 定位对齐:CAD模型的坐标系往往和光学系统不一致。用「Transform」→「Rotate/Translate」把模型摆到正确位置。
4.3 布尔运算:把零件“焊”在一起
布尔运算就是几何体的加减乘除。FRED支持三种操作:Union(并集)、Subtraction(差集)、Intersection(交集)。
你想想看,一个带中心孔的遮光罩——不就是一个大圆柱减去一个小圆柱吗?
4.3.1 三种操作详解
| 操作 | 符号 | 效果 | 典型应用 |
|---|---|---|---|
| Union(并集) | A ∪ B | 合并两个体,保留所有体积 | 把镜筒和法兰盘合并成一个零件 |
| Subtraction(差集) | A - B | 从A中挖掉B的部分 | 在遮光罩上开孔、挖槽 |
| Intersection(交集) | A ∩ B | 只保留A和B重叠的部分 | 提取两个透镜的公共区域 |
4.3.2 布尔运算的坑与技巧
嗯,这里要注意。布尔运算不是万能的。我遇到过几次运算失败的情况,总结下来主要是这几个原因:
- 面重合:两个体的面完全重合时,布尔运算会报错。解决办法:把其中一个体偏移0.001mm。
- 非流形体:如果模型有开口或自相交,布尔运算会失败。导入CAD前,先在CAD里用「实体检查」修复。
- 性能问题:布尔运算后的几何体,面数会暴增。运算后记得用「Reduce Faces」优化。
我的习惯:做布尔运算前,先把原始体复制一份藏到另一个图层。万一运算结果不对,还能回退。别问我为什么有这个习惯——问就是吃过亏。
4.4 本章知识体系
下面这张图,把几何体建模的三种路径和它们的关系梳理清楚了。你可以把它当作操作指南:
4.5 实战建议:三种路径怎么选?
说了这么多,到底什么时候用哪种?我按项目经验给你排个优先级:
- 优先用基本体素:标准镜筒、光阑、遮光罩、探测器封装。这些结构简单,参数化修改快,追迹效率最高。
- 复杂结构用CAD导入:多级消光螺纹、异形遮光罩、带散热片的机械件。别在FRED里硬画,浪费时间。
- 布尔运算做“减法”:在基本体素上开孔、挖槽、切边。比如在遮光罩上挖一个矩形窗口——一个立方体减去另一个立方体,几秒钟搞定。
一句话总结:基本体素是“搭积木”,CAD导入是“搬砖”,布尔运算是“装修”。三者配合,才能又快又准地把系统建好。