news 2026/9/16 8:04:46

LightTools手动建模菲涅尔透镜:透镜旋转法详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LightTools手动建模菲涅尔透镜:透镜旋转法详解

做光学仿真的人,迟早会遇到菲涅尔透镜。用LightTools自带的库或者直接插入理想菲涅尔面,几秒钟就能出结果,但真要去做一个结构上能加工、能导出去的结构件,你会发现内置的功能往往不够用。尤其当你需要自定齿形、调整环带密度、或者复现一个专利里非标准齿形的时候,唯一的办法就是手动建模。

今天的主题,就是一步步拆解怎么在LightTools里用“透镜旋转”的思路,从零手动创建一颗菲涅尔透镜。这个方法属于看着绕、做起来上手的路子,但一旦掌握了,你对菲涅尔透镜的理解会比点几个参数深刻得多。

1. 核心思路:为什么用“透镜旋转”来构造菲涅尔面

先把原理说透。菲涅尔透镜的本质,是把一个完整透镜的连续曲面压缩到一个平面上,通过一系列同心环带,每一环带保留原曲面在该环半径处的局部斜率。大白话讲,就是把一个凸透镜切成一层一层的圆环,再把每层压扁,保留每个环上表面倾斜的角度,出射光线方向基本不变,厚度却大幅降低。

正因为每一环只需要“保留斜率”,所以就有了两种手动建模路线:一种是直接按环带半径、倾角一笔笔画截面再旋转成实体,另一种就是用今天讲的“透镜旋转”——先用完整透镜的几何关系算出每一环带在哪个半径处应该有多大的斜面角,然后直接旋转这个环带,让它的表面贴合原透镜的局部曲面。

LightTools里的核心操作是:先做一个完整的平凸球面透镜,然后把透镜拆成若干同心的环带实体,对每一环带执行“绕某轴旋转”的操作,让该环带的表面倾斜角等于原球面在此半径处的切线角。最终所有环带重新拼装后,就得到一个近视等价于原球面透镜的菲涅尔结构。

这么做的好处很直接:

  • 不需要手动绘制非球面曲线,只要给定曲率半径,所有环带的斜率自动跟随球面切角,不容易出错。
  • 环带数量可以随便改,齿形也保留了原曲面的平滑过渡,做出来的结构可直接用于后继的杂散光分析或结构导出。
  • 手法上接近真实加工工艺的逻辑(金刚石车削就是逐环走刀),方便你理解设计和制造的对应关系。

相比直接用LightTools内置的Fresnel Lens工具,手动方式是慢的,但可控性不在一个级别。内置工具能设齿高、最小齿宽,但齿形和面型的灵活性很有限。手动方法适合做逆向复现、非常规齿形、以及把菲涅尔面转成实体后继续做结构设计。

2. 准备与参数计算:先算清楚,手才不抖

动手之前,先确定几个基本参数:透镜口径 D、曲率半径 R(针对球面基底)、中心厚度 t0、环带数量 N。假如我们要做一个口径 50 mm,曲率半径 100 mm,中心厚度 3 mm,环带数 8 的平凸菲涅尔透镜,那它的简化模型就是把一个 R=100 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 方向位置和透镜中心厚度范围对齐。

然后在“布尔运算”里用:

完整透镜 减去(但不减中心圆柱) 得到保留的中心圆柱区域——这里建议反着做:先把中心区域圆柱复制出来作为中心环带,然后对剩余部分逐层减去外环。

实际操作时我更推荐另一种方式:先直接把完整透镜和每个环带的圆柱壳做交运算,每个环带单独成一个实体,这样每个环带都保留了原球面的表面。具体来说:

  • 中心环带:透镜 ∩ 圆柱(r=0~6.25)
  • 第2环:透镜 ∩ 圆环壳(r=6.25~12.5)
  • 第3环:透镜 ∩ 圆环壳(r=12.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.79
26.2512.59.3755.38
312.518.7515.6258.99
418.752521.87512.63

(注:如果环带数较多,建议用Excel或Python脚本直接算好角度,手动填容易看花眼。环带数多时我会直接在LightTools里用Scheme脚本循环创建,效率和准确率都高一大截,后面会讲。)

然后就是 LightTools 操作里最容易被绕晕的地方:旋转中心与旋转轴。 LightTools 对每个实体做旋转时,默认以该实体自身的坐标原点为基准。但我们拆出来的环带,其原点在原始透镜的坐标原点,也就是图中心(0, 0, 0),而不是在环带自身的几何中心。如果直接旋转,环带会绕着全局光轴转,完全不是我们想要的结果。

正确的做法分两步走:

  1. 先把环带平移到原点对齐。对每个环带而言,需要把它沿径向移动,让它的平均半径位置的截面中心落到光轴上,再执行旋转。
  2. 旋转完成后再平移回去,恢复到原来的环带位置。

举个例子,第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高度保持为 t0=3 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°,太大会掩盖透镜本身的像差,太小又不符合实际光源。

然后放置一个接收面在焦点附近。对 R=100、口径=50 的平凸菲涅尔透镜,近轴焦距 f ≈ R/(n-1),PMMA 的 n≈1.492,所以 f ≈ 203.3 mm。在 Z=203 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-intersect
  • ltos-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、R=100 时,等宽8环的最大弧高差在中心环内侧接近 0,外环处约 0.1 mm,注塑没压力。如果你把口径加到 100、R=100,外环弧高差会暴涨到接近 0.8 mm,这个尺寸就要慎重了,要么加密环带,要么采用非等宽设计,让外侧环带更窄一些。

5.6 为什么我设置的旋转角是对的,但光轴方向的焦距明显不对

这种情况八成不是几何建模的问题,而是材料折射率或光源波长设置的问题。PMMA 在 550 nm 时的折射率约 1.49,但在 450 nm 时会升到约 1.50,红光 650 nm 时会降到约 1.48。如果你在可见光宽带光源下仿真,焦点位置会有明显色差,不要拿单色光理论焦距硬套白光追迹结果。

另外要检查 LightTools 里是否给透镜实体正确赋予了体材料,有时偷懒只设置表面薄膜属性,光线追迹结果会变成表面反射为主,透射能量大幅减少,焦距自然也对不上。判断方法很简单:追迹完看光路图,如果光线在透镜前表面就发生了大角度弯折而不是穿透进入介质,那说明材料属性没生效。

6. 从手动建模到实际应用:一点个人体会

用“透镜旋转”方式手动创建菲涅尔透镜,最初是一种“没办法的办法”——内置工具不灵活,才逼着自己去拆环带、算角度、做布尔。但真正跑通之后,这套方法反而成了我最常用的设计手段之一,因为它能从底层告诉你每个齿是怎么来的,角度变化对光斑的影响是什么,哪些地方改了会对加工良率有致命影响。这些认知,是直接调内置参数永远得不到的。

对刚开始尝试的朋友,我的建议是:第一次做不要贪多,先用 4 到 6 个环带跑通全流程,确保每个环节都理解到位了,再逐步加密环带。过程中记得随时保存不同版本,尤其是布尔运算之前先存一个档,这比任何撤销操作都可靠。如果你后续要在 LightTools 里做公差分析或杂散光模拟,这版手动建模的菲涅尔透镜也可以直接作为基底,灵活度比内置元件高不少。

最后分享一个小经验:手动建模完成后,一定留出时间在三维视图里从侧面旋转视角检查一遍所有环带。菲涅尔透镜从正面看总是漂亮的同心圆,但侧面往往藏着你忽略的干涉、台阶错位和微小的面型断裂。这个检查动作只需要两分钟,却能替你省下后面追迹、导出、加工、装配一整条链路里的麻烦事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 8:04:24

如何做好超大文件的上传,以及相关的思考联想

关键的一点在于,把超大文件转换为小文件上传。因此,技术难点就会放在如何保障小文件的合并、不丢失和性能。我们先解决第一个问题,小文件的合并准确。小文件在前端采用统一的算法切分,要确保每次切分出来的文件都一样。并小文件和…

作者头像 李华
网站建设 2026/9/16 8:04:06

SpringBoot宠物医院管理系统开发指南

1. 项目概述与核心需求宠物医院管理系统是基于SpringBoot框架开发的毕业设计项目,主要面向计算机相关专业学生。这个系统旨在解决传统宠物医院手工记录效率低下、信息孤岛等问题,通过数字化管理提升宠物医疗服务的质量和效率。从技术角度来看&#xff0c…

作者头像 李华
网站建设 2026/9/16 8:03:14

Flash做网站导航的5个注意事项与Web替代方案

Flash做网站导航的5个注意事项与Web替代方案 域名解析指向错误,服务器SSL证书过期,网站打不开时,客户第一反应不是查代码,而是骂你“技术不行”。这种【域名服务器搞不懂】的混乱,往往源于前期架构没定死。很多老站长还在用Flash做网站导航,觉得动画酷、加载快,但2024年了,这玩意儿在移动端简…

作者头像 李华
网站建设 2026/9/16 8:02:58

Matlab边缘检测源码拆解:Canny、LoG与Susan算子从原理到调参

简介:这份基于Matlab的边缘检测资源包,面向计算机、电子信息及数学等专业学生,可作为图像处理课程设计、期末大作业或毕业设计的参考资料,重点解决边缘检测算法实现与验证问题。压缩包共14个文件,包含9个.m源代码文件、…

作者头像 李华
网站建设 2026/9/16 8:02:27

MATLAB夫琅禾费衍射仿真:fft2实现、坐标映射与光栅缺级

简介:基于MATLAB的光学仿真资源,聚焦夫琅禾费衍射、双缝干涉、平面光栅衍射与单缝衍射四个经典波动光学主题,适用于本科、硕士阶段的课程设计、实验报告和课题入门。压缩包共12个文件,包含4个.m源代码、7张运行结果图(…

作者头像 李华
网站建设 2026/9/16 8:02:08

STM32H750移植FATFS:寄存器库驱动SD卡完整攻略

简介:面向使用STM32H7系列单片机的嵌入式开发者,这份源码包以STM32H750为例,采用寄存器库直接驱动硬件的方案,实现了FATFS文件管理系统,适用于需要将运行数据、配置参数或日志记录到SD卡等存储介质的工业控制、数据采集…

作者头像 李华