
做光学仿真的人迟早会遇到菲涅尔透镜。用LightTools自带的库或者直接插入理想菲涅尔面几秒钟就能出结果但真要去做一个结构上能加工、能导出去的结构件你会发现内置的功能往往不够用。尤其当你需要自定齿形、调整环带密度、或者复现一个专利里非标准齿形的时候唯一的办法就是手动建模。今天的主题就是一步步拆解怎么在LightTools里用“透镜旋转”的思路从零手动创建一颗菲涅尔透镜。这个方法属于看着绕、做起来上手的路子但一旦掌握了你对菲涅尔透镜的理解会比点几个参数深刻得多。1. 核心思路为什么用“透镜旋转”来构造菲涅尔面先把原理说透。菲涅尔透镜的本质是把一个完整透镜的连续曲面压缩到一个平面上通过一系列同心环带每一环带保留原曲面在该环半径处的局部斜率。大白话讲就是把一个凸透镜切成一层一层的圆环再把每层压扁保留每个环上表面倾斜的角度出射光线方向基本不变厚度却大幅降低。正因为每一环只需要“保留斜率”所以就有了两种手动建模路线一种是直接按环带半径、倾角一笔笔画截面再旋转成实体另一种就是用今天讲的“透镜旋转”——先用完整透镜的几何关系算出每一环带在哪个半径处应该有多大的斜面角然后直接旋转这个环带让它的表面贴合原透镜的局部曲面。LightTools里的核心操作是先做一个完整的平凸球面透镜然后把透镜拆成若干同心的环带实体对每一环带执行“绕某轴旋转”的操作让该环带的表面倾斜角等于原球面在此半径处的切线角。最终所有环带重新拼装后就得到一个近视等价于原球面透镜的菲涅尔结构。这么做的好处很直接不需要手动绘制非球面曲线只要给定曲率半径所有环带的斜率自动跟随球面切角不容易出错。环带数量可以随便改齿形也保留了原曲面的平滑过渡做出来的结构可直接用于后继的杂散光分析或结构导出。手法上接近真实加工工艺的逻辑金刚石车削就是逐环走刀方便你理解设计和制造的对应关系。相比直接用LightTools内置的Fresnel Lens工具手动方式是慢的但可控性不在一个级别。内置工具能设齿高、最小齿宽但齿形和面型的灵活性很有限。手动方法适合做逆向复现、非常规齿形、以及把菲涅尔面转成实体后继续做结构设计。2. 准备与参数计算先算清楚手才不抖动手之前先确定几个基本参数透镜口径 D、曲率半径 R针对球面基底、中心厚度 t0、环带数量 N。假如我们要做一个口径 50 mm曲率半径 100 mm中心厚度 3 mm环带数 8 的平凸菲涅尔透镜那它的简化模型就是把一个 R100 mm 的完整平凸透镜切成 8 个环带然后逐环旋转。先解释关键几何关系。一个环带的内半径为 r1外半径为 r2把它对应到完整球面上该处球面法线与光轴的夹角 θ 满足sinθ r / R其中 r 是该环带的平均半径或边缘半径取决于你想让哪个位置对齐。 这个 θ 就是环带需要旋转的角度。旋转后的环带表面将近似平行于原球面在该半径处的切面从而保证过该环的光线偏折方向和原完整透镜在此处一致。弧高差 h 的计算也免不了。 球面一个环带内外半径处的矢高差近似Δh ≈ (r2² - r1²) / (2R)这个 Δh 决定了每个环带的齿深也决定了你在后续建模时每个环带在 Z 轴方向的最低点位置。手动建模时你可以把所有环带都做成相同厚度的薄环实体旋转后不需要再去追求完全没有台阶因为菲涅尔透镜本来就有设计台阶你要控制的只是各环带之间的相对位置不要重叠、不要漏光。参数建议直接列个表参数数值说明口径 D50 mm决定了所有环带的最大外径曲率半径 R100 mm球面基底曲率决定各环倾角中心厚度 t03 mm中心环的厚度基准环带数 N8齿数可后续加密边缘环最大倾角arcsin(25/100) ≈ 14.48°最外环的旋转角注意一点如果 R 偏小、口径偏大边缘环带的倾角会快速增加LightTools里旋转操作时不觉得但后续加工或导入机械软件时可能出现倒扣结构齿形变成刀具无法加工的负角。因此设计时最好先评估一下最外环的 θ 是否超过 30°超过的话建议加大 R 或减少有效口径或者改用非球面基底的菲涅尔设计不过那就是另一个话题了。3. LightTools中的实操步骤从完整透镜到菲涅尔环带3.1 第一步创建完整的平凸球面透镜打开LightTools新建一个光学系统。建议先把默认单位设为毫米默认坐标系的光轴沿 Z 方向。在系统导航器里新建一个透镜元件方式很多我习惯直接用“Lens Component”里的 Biconvex/Plano-Convex 模板类型选 Plano-Convex。曲率半径设为 100 mm注意 LightTools 里 Surfaces 表中要填曲率不是焦距。口径Clear Aperture / Diameter设为 50 mm。中心厚度设为 3 mm。完成后你会在三维视图里看到一个平凸透镜。此时先别急着拆右键该透镜表面在属性里把它的分辨率Resolution设成 300 或者更高尤其是球面否则后面做布尔运算或面型判断时容易出现三角网格不够密导致的破面。3.2 第二步拆出环带——用圆柱环做布尔运算这一步的思路是用一组同心的圆柱环体与完整透镜做布尔减运算把透镜一层层“抠”出来得到独立的环形实体。先在镀膜/结构树里新建一个圆柱体尺寸为外半径 6.25 mm对应第一个环带外边界内半径 0 mm中心环带用圆柱不是环高度略大于透镜厚度即可比如 10 mm。把这个圆柱体放在透镜中心Z 方向位置和透镜中心厚度范围对齐。然后在“布尔运算”里用完整透镜 减去但不减中心圆柱 得到保留的中心圆柱区域——这里建议反着做先把中心区域圆柱复制出来作为中心环带然后对剩余部分逐层减去外环。实际操作时我更推荐另一种方式先直接把完整透镜和每个环带的圆柱壳做交运算每个环带单独成一个实体这样每个环带都保留了原球面的表面。具体来说中心环带透镜 ∩ 圆柱r0~6.25第2环透镜 ∩ 圆环壳r6.25~12.5第3环透镜 ∩ 圆环壳r12.5~18.75这个流程里 LightTools 的“Intersect”布尔运算稳定性和速度都还可以前提是中间不会出现零厚度的面片。为了保险每个圆柱壳的厚度方向Z轴范围要能完整包住透镜的曲面。把圆柱壳拖进透镜的“SubComponent”层级下然后做 Boolean Intersect生成每个环带的实体。完成后记得把原来的完整透镜设为隐藏仅保留 8 个环单元逐个检查边界是否干净不应出现“悬空面”或细碎的三角片。3.3 第三步计算每个环带的旋转角并执行旋转现在进入了“透镜旋转”的核心环节。对第 i 个环带定义其平均半径r_c (r_i内 r_i外) / 2该环带需要旋转的角度θ arcsin(r_c / R)按我们上面的参数8 个环带等宽分环的中心半径和旋转角度如下表环带编号内半径 r1 (mm)外半径 r2 (mm)中心半径 rc (mm)旋转角 θ (°)106.253.1251.7926.2512.59.3755.38312.518.7515.6258.99418.752521.87512.63注如果环带数较多建议用Excel或Python脚本直接算好角度手动填容易看花眼。环带数多时我会直接在LightTools里用Scheme脚本循环创建效率和准确率都高一大截后面会讲。然后就是 LightTools 操作里最容易被绕晕的地方旋转中心与旋转轴。 LightTools 对每个实体做旋转时默认以该实体自身的坐标原点为基准。但我们拆出来的环带其原点在原始透镜的坐标原点也就是图中心0, 0, 0而不是在环带自身的几何中心。如果直接旋转环带会绕着全局光轴转完全不是我们想要的结果。正确的做法分两步走先把环带平移到原点对齐。对每个环带而言需要把它沿径向移动让它的平均半径位置的截面中心落到光轴上再执行旋转。旋转完成后再平移回去恢复到原来的环带位置。举个例子第3环带中心半径 15.625 mm在X方向上要先把环带沿X负方向平移 15.625 mm让环带中心半径处对准旋转轴Y轴然后绕Y轴旋转 8.99°旋转后再沿X正方向平移 15.625 mm 回去。这里旋转轴的选择取决于你的光轴走向。如果光轴沿Z方向、口径在X方向那么旋转轴是Y轴。如果口径在Y方向展开则绕X轴旋转。我个人习惯总是把口径沿X方向布置统一绕Y轴旋转这套流程熟悉后肌肉记忆就有了。LightTools里移动和旋转都是在“Move/Rotate”面板里输入数值。来回平移的两次操作不能合并也没有“绕任意点旋转”的快捷方式这是这个软件的实际使用上一个绕不过去的不便。如果你频繁做这类操作强烈建议记录下每个环带两个关键数值——偏移量和旋转角——做成一个表按表操作不要临场心算。3.4 第四步拼装环带调整Z向间隙所有环带旋转之后你会发现它们之间的平面位置又回到了原来的同心布局但每个环带表面不再是连续球面而是在各自环带内近似于球面切面的斜平面。拼装时容易出两个问题环带之间在Z方向上有错位邻接边缘处互相干涉。错位的原因在于每个环带旋转时它被旋转的是整个3D实体环带的厚度方向和位置都变了。理论上在R足够大的前提下旋转后的环带表面应该平滑衔接但由于每个环带是有限的环宽而不是一个点旋转角度取的是平均半径处的角度内外边缘处会和理想球面略有偏差。实际处理时我不去追求理论上的完全无间隙拼接而是直接给每两个相邻环带之间留 0.01~0.02 mm 的径向间隙避免出现实体干涉、布尔报错。这个间隙在光学仿真中造成的边缘漏光几乎可以忽略不计而且更接近真实注塑/车削零件的形态。Z方向位置需要依次微调。以第一个中心环带为基准它的上表面Z高度保持为 t03 mm。然后第2个环带在旋转后其外边缘处和中心环带外边缘的高度差可能不是正好 0需要手动把整个第2环沿Z方向平移让相邻环带的上表面在交界处高度差小于 0.005 mm。这个微调用LightTools的“Snap”辅助功能比较方便或者在Move面板直接输入计算后的Z偏移。对我个人来说Z方向的调整往往是整个流程里最耗时的一步。但这一步决定最终结构能不能作为光滑表面去仿真值得耐心。建议每调完一环就做一次光照验证用一个准直光源正入射看该环带区域的出射光斑是否均匀汇聚到焦点附近。3.5 第五步设置材料、表面属性并验证光路实体拼装完成后给所有环带统一赋上PMMA或者你实际要用的PC、玻璃牌号。LightTools里从材料库拖入材质很简单右键每个环带的实体属性在Material里选择即可。注意这里不是只设置表面光学属性而是要设置体材料的折射率和色散这样后续做色差或白光分析才有意义。光源设置上如果你想看准直入射下的聚焦效果我常用一个发光面直径为 40 mm 的准直光源波长 550 nm位于透镜前方 20 mm 处能量分布选均匀或高斯分布都行。LightTools里设置高斯分布光源的路径是光源属性 → Spatial 分布或Angular 分布 → 选择 “Gaussian”然后编辑半高宽或标准差。很多人第一次找这个设置都找不到它不在光源默认面板里需要点开Distribution选项卡才能看到。 设置高斯分布时空间高斯主要影响光源发光面的能量分布——通常用在模拟雷射或LED封装发光面角度高斯则影响出射发散角设计准直光路时常用角度高斯来控制光源的朗伯分布或窄束发散角。我做菲涅尔透镜的平行光聚焦测试时一般把角度高斯的标准差设为 1°~3°太大会掩盖透镜本身的像差太小又不符合实际光源。然后放置一个接收面在焦点附近。对 R100、口径50 的平凸菲涅尔透镜近轴焦距 f ≈ R/(n-1)PMMA 的 n≈1.492所以 f ≈ 203.3 mm。在 Z203 mm 处放一个接收面开启光线追迹查看光斑大小和功率分布。如果各环带旋转角正确、Z向高度差控制得当你会看到一个直径不大但带有同心环状结构的光斑——环带边界处有轻微的衍射和散射条纹这是正常现象不需要慌张。如果你的光斑出现明显分裂或大块能量偏到外围优先检查某个环带的旋转方向是否反了顺时针/逆时针Z向平移是否累积误差太大以及布尔运算时环带面是否有反向法线。LightTools里可以用“表面法线显示”检查每个环带上表面的法线方向是否都指向出射方向这个检查习惯我从做照明设计时就一直保留着。4. 进阶技巧用Scheme脚本批量生成环带手动做 8 个环带还能忍做到 16 环、32 环就真会怀疑人生。LightTools 自带的Scheme脚本接口就是为了应对这种情况的同时也是手动建模思路的价值最大化之处。把“逐环计算角度、平移、旋转”这套流程脚本化以后你可以任意指定环数、口径、曲率几秒钟生成完整菲涅尔实体。Scheme脚本的核心思路是用LightTools的API函数访问实体、执行变换。伪代码逻辑如下(define D 50.0) (define R 100.0) (define n_rings 16) (define ring_width (/ D (* 2 n_rings))) (for i 0 (- n_rings 1) (begin (define r_inner (* i ring_width)) (define r_outer (* ( i 1) ring_width)) (define r_center (/ ( r_inner r_outer) 2)) (define theta (asin (/ r_center R))) ;; 新建圆柱壳 ;; 与基底透镜做 intersect ;; 平移 -r_center ;; 绕 Y 轴旋转 theta ;; 平移 r_center ))这里的关键API是LT-OS系列的实体操作函数比如ltos-create-cylinder或对应圆柱体创建接口ltos-boolean-intersectltos-move-entity/ltos-rotate-entity不过需要说明一点不同版本LightTools的Scheme函数名和参数顺序差异不小官方文档里的帮助文件写得不算友好我也是靠“示例脚本反复试错”才跑通。如果你刚接触Scheme建议先用宏录制功能手动操作一次环带的创建和旋转脚本面板会生成对应代码然后拿那段代码做模板改参数比自己从头查函数库要省事得多。脚本跑完后建议做一个自检把所有环带按实体列表遍历一次输出每个环带的包围盒和表面面积检查是否有环带缺失或尺寸与理论值偏差超过 0.001 mm。这一步能拦截大部分“脚本跑通但结果不对”的隐性错误尤其是当你以后开始做非等宽环带设计时这种自动化检查几乎是必需的。5. 常见问题与排查技巧实录5.1 旋转后环带位置完全错乱这是我最早做手动菲涅尔时摔得最惨的一跤。原因就是前面反复强调的LightTools旋转默认绕实体自身坐标原点而没有先平移到旋转轴对齐。 症状表现为环带飞出圆心有的跑到X负半轴有的堆在一起。解决办法先记录目标环带旋转前的坐标做完“平移-旋转-平移”三步后用坐标数值验证是否回到了预期位置。注意第一次平移时要记录的是平移量不是平移后的绝对坐标。养成这个习惯之后基本不会再犯。5.2 环带边缘出现尖点或扭曲出现这种问题大概率不是操作错了而是布尔运算时基础透镜的分辨率不够。LightTools的布尔引擎基于多边形网格如果球面的网格太粗交运算后环带边缘就会因为三角面片失真而出现锯齿或尖点。遇到这种情况回到原始透镜表面属性里提高曲面分辨率一般取 500 以上。分辨率的代价是布尔运算时间变长以及文件体积变大。如果是 32 个环带且分辨率设得很高运行速度会明显下降但现代普通工作站跑这些布尔运算问题不大放心开高。给个经验值口径 50mm 的球面分辨率设 400 到 600 之间效果和速度最均衡。如果后续要导出到 SolidWorks 做结构设计建议在 LightTools 里就保持高分辨率因为导出成 IGES 或 STEP 后再修复网格比在 LightTools 里重新做一次布尔要麻烦得多。5.3 追迹结果光斑异常但表面检查没发现问题表面连续性看起来都对但追迹结果却发散得一塌糊涂。此时先别急着动几何结构去看看每个环带面的“法线方向”。 LightTools 里布尔运算有时会把某些面的法线翻转尤其是内圆柱面参与运算后导致光线进入透镜后又立即从错误的表面方向射出。排查方法很简单选中可疑环带上表面查看法线向量是否指向 Z出射方向。如果法线显示向下用“Flip Normal”功能翻转。这里有个小窍门在做布尔运算之前把所有环带的圆柱壳都设置为薄壁空心实体布尔后法线一致性会好很多直接用厚实体做交运算反而更容易出法线反转的问题。5.4 导出到机械软件后破面手动建模的菲涅尔透镜拿到光学仿真里用没问题但要导出给结构工程师去做壳体设计时经常出现破面、缝合失败的情况。我测试过几条路径经验是LightTools 直接导出的 SAT 文件在 SolidWorks 里打开比较稳定但到有些国产CAD里容易丢面导出 STEP 格式兼容性也不错但要注意单位一定要核对免得出现 50 mm 的透镜导入后变成 50 m 的大家伙。另外导出前把所有环带“合并”成一个组件Component再导出结构工程师那边会省很多事。如果确实遇到了破面最实用的土办法是把 LightTools 里的实体导出为 STL然后在机械软件里做曲面重建。STL 网格模型精度建议设 0.005 mm这样导出的面型精度足够用于工程评估。损失是导出的是网格而非参数化曲面后续改尺寸不方便所以能直接修 SAT 还是优先尝试。5.5 环带数怎么选做菲涅尔透镜手动建模时经常纠结环带数。环带太少每个环带的斜平面和理想球面偏差大焦点处光斑变大环带太多建模和加工成本直线上升。理论上来讲只要环带宽度远小于局部曲率半径斜平面逼近就够用但光学上真正决定环带数的是“齿高”——也就是每个台阶的高度。台阶太高会引入明显遮挡和衍射损失。工程上常见注塑菲涅尔透镜齿高在 0.05 到 0.5 mm 之间。用弧高差 Δh ≈ Δr²/(2R) 可以估算口径 50、R100 时等宽8环的最大弧高差在中心环内侧接近 0外环处约 0.1 mm注塑没压力。如果你把口径加到 100、R100外环弧高差会暴涨到接近 0.8 mm这个尺寸就要慎重了要么加密环带要么采用非等宽设计让外侧环带更窄一些。5.6 为什么我设置的旋转角是对的但光轴方向的焦距明显不对这种情况八成不是几何建模的问题而是材料折射率或光源波长设置的问题。PMMA 在 550 nm 时的折射率约 1.49但在 450 nm 时会升到约 1.50红光 650 nm 时会降到约 1.48。如果你在可见光宽带光源下仿真焦点位置会有明显色差不要拿单色光理论焦距硬套白光追迹结果。另外要检查 LightTools 里是否给透镜实体正确赋予了体材料有时偷懒只设置表面薄膜属性光线追迹结果会变成表面反射为主透射能量大幅减少焦距自然也对不上。判断方法很简单追迹完看光路图如果光线在透镜前表面就发生了大角度弯折而不是穿透进入介质那说明材料属性没生效。6. 从手动建模到实际应用一点个人体会用“透镜旋转”方式手动创建菲涅尔透镜最初是一种“没办法的办法”——内置工具不灵活才逼着自己去拆环带、算角度、做布尔。但真正跑通之后这套方法反而成了我最常用的设计手段之一因为它能从底层告诉你每个齿是怎么来的角度变化对光斑的影响是什么哪些地方改了会对加工良率有致命影响。这些认知是直接调内置参数永远得不到的。对刚开始尝试的朋友我的建议是第一次做不要贪多先用 4 到 6 个环带跑通全流程确保每个环节都理解到位了再逐步加密环带。过程中记得随时保存不同版本尤其是布尔运算之前先存一个档这比任何撤销操作都可靠。如果你后续要在 LightTools 里做公差分析或杂散光模拟这版手动建模的菲涅尔透镜也可以直接作为基底灵活度比内置元件高不少。最后分享一个小经验手动建模完成后一定留出时间在三维视图里从侧面旋转视角检查一遍所有环带。菲涅尔透镜从正面看总是漂亮的同心圆但侧面往往藏着你忽略的干涉、台阶错位和微小的面型断裂。这个检查动作只需要两分钟却能替你省下后面追迹、导出、加工、装配一整条链路里的麻烦事。