做光学设计的同行应该都有这种感觉:LightTools里做非球面、自由曲面,靠自带的建模工具就能搞定,但一到菲涅尔透镜就头疼。尤其是需要手动创建的时候,齿高、环距、脱模角、圆角这些参数一旦处理不好,lighttools里看起来挺正常,一追迹就出现杂散光、效率上不去,甚至直接报错。
我过去几年里用LightTools做过不少菲涅尔结构,从用于投影照明的小尺寸透镜,到大口径太阳光模拟器里的聚光镜都碰过。刚开始几次也是反复折腾,建模建到一半发现齿形不对,只能推倒重来。后来慢慢摸索出一套比较顺的手动建模流程,这里把其中最核心的5个技巧整理出来,配合我在实际项目中踩过的坑和验证过的参数,给刚接触菲涅尔透镜建模的朋友做个参考。
如果你正打算在LightTools里手动建立菲涅尔透镜模型,这篇文章应该能帮你省下不少试错时间。不管你是做LED准直、投影系统、太阳能聚光,还是做VR光学里的菲涅尔结构,这套方法都是通用的。
1. 内容整体设计与思路拆解
1.1 为什么需要手动创建菲涅尔透镜,而不是直接调用库文件
很多人拿到设计需求的第一反应是去LightTools的库里面翻现成的菲涅尔透镜模型。软件本身确实提供了一些透镜库,网上也能找到lighttools下载附带的标准库资源。但做过实际项目就会明白,库文件里的菲涅尔透镜往往是通用规格,齿形参数、材料折射率、口径大小都跟你手头的设计对不上。投影照明里的菲涅尔透镜要求齿高控制在几十微米级别,太阳能聚光用的可能要求毫米级齿高,这两种工况下透镜的衍射损耗、散射特性完全不一样。
另一个问题是库里的模型往往是理想化的,齿顶尖角、齿根圆角这些细节没有体现出来。而恰恰是这些细节,决定了你的透镜在真实加工出来之后是什么表现。LightTools虽然能做公差分析,但你得先有一个符合真实加工形态的模型,公差分析才有意义。
所以就我个人的经验,做菲涅尔透镜设计,手动建模不是一个可选项,而是必经之路。你把齿形控制在自己手里,后面做参数扫描、优化、公差分析才谈得上。
1.2 手动建模的整体思路:不是画一个个齿,而是先生成基体再切出齿形
新手最容易犯的错,是试图一个个画出每个齿的轮廓,然后拉伸成环带,再一个个拼接起来。理论上可以,但效率极低,而且齿与齿之间会有微小的间隙或者重叠,一旦出现,追迹时光线会在这些缝隙处产生非预期的反射。
我用的思路是反过来的:先做一个完整的平凸或平凹基体,然后用环形齿面去切割基体表面。这个思路跟机械加工里“用车刀车出螺纹”的道理很像——你不是去把每个螺纹牙拼出来,而是先在光轴上放一根棒料,再用刀具切出牙形。在LightTools里这样做的好处是,基体天然是连续的,齿间不会产生物理缝隙,同时你只需要定义一条齿形轮廓曲线,然后做旋转阵列,就能覆盖整个口径。
1.3 方案选型:旋转体与线性阵列两种拓扑结构的选择
菲涅尔透镜有旋转对称和线性两种基本拓扑结构。旋转对称的用于点光源准直和聚光,线性结构的用于条形光源或者需要一维准直的场合。
在LightTools里,旋转对称结构用环绕光轴的环形齿带组成,建模时我倾向于用Revolved Surface来做基体,再用环形面去切;线性结构则是把相同的齿形轮廓沿一个方向拉伸出棱柱条,再用阵列铺满整个口径。两者的核心流程一致,只是在最后“铺满”这一步操作上有所区别。
后面我会详细讲两种结构具体怎么操作。但无论哪种,都要落到一个核心问题上:齿形参数的确定。
2. 核心细节解析与实操要点
2.1 技巧一:先用数学公式确定齿高和环距,而不是在软件里瞎试
我在最初的几次建模中,拿到一个菲涅尔透镜的设计需求,直接就进LightTools开始画,结果就是反复改参数、反复重建,非常浪费时间。后来我养成了一个习惯:任何一个菲涅尔透镜,动鼠标之前先用纸笔把齿形算出来。
核心公式其实不复杂。对于一个旋转对称的菲涅尔透镜,每个环带等效于一个微型棱镜,棱镜的顶角决定了光线偏折的方向。设透镜材料折射率为n,光线入射角为θ1,出射角为θ2,那么每个环带的斜面角α满足以下关系:
n * sin(α) = sin(α + θ2 - θ1)
实际计算中,如果你做的是准直系统,光源位于焦点位置,那么θ1就是齿位到焦点的连线与光轴的夹角,θ2是出射光与光轴的夹角(一般设计为0,即平行光出射)。这时斜齿面角α可以直接通过反正切函数求出。
举个例子,假设透镜口径为100mm,焦距为100mm,材料折射率为1.49(PMMA的典型值)。在半径为25mm处的环带,光源到该点的入射角θ1 = arctan(25/100) ≈ 14.04°。代入折射定律,出射角θ2 = 0时:
tan(α) = n * sin(θ1) / (n * cos(θ1) - 1)
带入数值,α ≈ 22.08°。这个角度就是该环带齿面的倾斜角。
有了斜面角α之后,如果你选定环距p(相邻环带之间的径向距离),齿高h就可以算出来:h = p * tan(α)。例如环距取0.5mm,齿高就是0.5 * tan(22.08°) ≈ 0.203mm。
我一般会在Excel里做好计算模板,把口径按环距分成几十个环带,逐个算出每个环带的斜面角和齿高,然后再去LightTools里建模。这样你有了一组精确的目标值,建模时只需要按照计算值建模即可,不用瞎试。
2.2 技巧二:用“一段齿形轮廓+旋转阵列”代替逐齿建模
这个技巧是我觉得效率提升最大的一个。明白了齿形分布规律之后,你不需要为每一个齿单独建模,只需要画出单个齿的截面轮廓,然后用阵列工具铺满整个口径。
具体来说,在LightTools中我常用的方法是:在XY平面(或XZ平面,视你的光轴朝向而定)上绘制一个齿的截面轮廓,包括齿顶面、齿斜面、齿根面三段。这个轮廓必须是封闭多边形,且齿顶和齿根要留出一点平面段,模拟真实加工中刀具圆角过不去的残留平台。
画好单个齿形之后,用阵列工具(Pattern)沿着径向复制。这里有个关键细节:如果环距是等距的,直接用线性阵列即可;但大多数菲涅尔透镜的齿高是随半径变化的,也就是每个环带的斜面角都不同,这时候就需要分成多个批次来阵列,每批对应一个斜面角,或者使用渐变阵列来过渡。
实际操作中,我更推荐的做法是:先按2.1节的方法,在Excel中算出每个环带的齿高和斜面角,然后在LightTools中逐个环带建立旋转轮廓,再合并成一个整体。这样做虽然前期计算量大一点,但后期不用反复调整,而且每个环带的尺寸都在设计值上,加工出来不会出问题。
2.3 技巧三:齿顶尖角和齿根圆角必须“做出来”,不要用理想尖角
这一点是很多LightTools教程不会讲的,但我认为是非常重要的实操经验。理想化的菲涅尔齿形是带尖角的三角形截面,追迹时效率很高,但实际加工中,无论是车削还是注塑,齿尖都不可能做成绝对尖锐,一定会有圆角。
如果你建模时用了理想尖角,那么在LightTools里追迹的光线会全部按设计路径偏折,效率看起来会很高。但实际加工出来的透镜跟模型对不上,实测效率远低于仿真值。这是因为齿尖圆角处会产生杂散光,导致部分能量偏离预定方向。
我的做法是,在建模阶段就预留圆角。在LightTools里,绘制齿形轮廓的时候用圆弧过渡齿顶和齿根,圆角半径一般取齿高的10%~20%。如果你做的是注塑件,圆角可以更保守一点。这样仿真出来的结果虽然效率略低于理想模型,但跟实测结果非常接近,更有参考价值。
我在一个LED准直项目中,对比过理想尖角模型和带R0.02mm圆角的模型,两者的仿真效率相差大约6个百分点。而实际加工件测出来的效率,跟带圆角的模型误差只有1%左右,跟理想模型的误差却有5%以上。所以到底用哪种模型更靠谱,一目了然。
2.4 技巧四:用布尔运算切割生成“真实”齿面
前面提到,我的建模思路是先生成基体,再用齿面去切。这里说的“用齿面去切”,在LightTools里的具体操作就是布尔运算。
我通常这样做:先生成一个圆柱体或平凸透镜作为基体,然后在基体表面位置上生成一系列环形齿状实体(用旋转体或阵列生成),最后用布尔减运算把齿状实体从基体中减去,剩下的就是带有齿形的菲涅尔表面。
这里要注意的是,布尔运算前一定要做好备份。LightTools的布尔运算有时会产生非流形几何(Non-manifold Geometry),一旦出现,后面追迹时会报错或者出现异常的漏光现象。我的习惯是每做一次布尔运算就另存一个版本,出了问题时好回退。
另外一个细节是:布尔运算之后,齿面之间的过渡处可能会生成微小的碎面。在追迹之前,要检查一下是否有破碎面,如果有,需要用清理几何的工具处理一下,或者直接重新生成,不要让碎面残留。
2.5 技巧五:在透镜表面属性里同时设置光学属性与机械属性
这一步看起来简单,但很容易被忽略。费了大劲把菲涅尔透镜的几何模型建好了,结果设置表面属性时只设了透射率,忘了设置表面的粗糙度和镀膜属性,导致仿真结果跟实际相差很大。
在LightTools里,表面属性(Surface Properties)可以同时设置光学和机械两方面的信息。光学方面你需要设置透射率、反射率、吸收率,而且要注意设置波长的属性,因为菲涅尔透镜是有色散的,不同波长的透过率会有差别。机械方面则需要设置表面的粗糙度参数,这直接影响追迹时的散射行为。
我在一个红外聚光项目中,因为没设置表面粗糙度,仿真出来的焦斑能量集中度非常高,但实测的打在探测器上的能量分布明显发散。后来查了半天,才发现是表面属性里没有给透镜表面加粗糙度参数。加了一个RMS为20nm的粗糙度之后,仿真和实测就对上了。
所以建模做完之后,一定要养成检查表面属性的习惯。在LightTools里用Surface Properties检查每一个透镜表面的属性设置,确认透射率、反射率、粗糙度都设置正确,再进行追迹。这一步虽然简单,但能避免很多后期的问题。
3. 实操过程与核心环节实现
3.1 实操准备:单位设置与材料库确认
动手建模之前,先把单位系统确认清楚。我踩过一次坑:LightTools默认单位是毫米,用一个老项目的模型改尺寸时,没注意单位设置,结果导入的模型整体大了25.4倍,光路全乱了。
建议在开始任何新模型之前,点击Units,确认长度单位是毫米、角度单位是度。这会影响到后面做阵列时的间距、齿高的数值输入,必须提前统一。
材料方面,LightTools自带材料库里有常用的光学塑料,比如PMMA、PC、OKP4等。如果你用的是PMMA,折射率一般取1.4913(在587.56nm的d光下);如果做红外透镜,可能要用硅或锗,需要手动导入材料参数。材料库没有的材料,可以通过自定义材料的方式添加,把折射率、阿贝数、透过率等参数填进去。注意折射率要填准,尤其是多波长仿真时,一定要把不同波长的折射率数据填对,否则仿真出来的色散关系就是错的。
3.2 第一步:绘制齿形截面轮廓
打开LightTools,在默认的正视图(Front View)下新建一个草图。在草图里绘制齿形的截面轮廓:一条水平齿根线、一条斜齿面线、一条水平齿顶线,然后封闭成一个多边形。
绘制时需要注意几个细节:
- 齿根线不要画成从原点开始,而是从距离光轴一定半径的位置开始,这样阵列的时候才不会在中心产生重叠。
- 齿面斜线通过旋转或角度约束来精确控制,不要靠鼠标拖拽,否则角度稍有偏差,最终透镜光学性能就会受影响。
- 最后用标注工具标出齿高和齿距,确认跟自己计算的一致性。
如果你在2.1节算好了一系列齿高,这一步可能需要绘制多个不同角度的齿形,分别用于不同半径区段。
3.3 第二步:把截面轮廓旋转成实体
草图绘制完成后,退出草图,使用旋转体功能让截面绕光轴旋转一周。旋转的角度设为360度,获得一个完整的环形齿状实体。
操作上需要注意:旋转轴必须是光轴,而不是草图的默认坐标轴。如果不小心选错了,生成的就是一个形状奇怪的环,从侧剖面看还是齿形,但从轴向看就偏了。检查方法很简单:旋转之后用剖切显示看一眼,确认齿形轮廓在XY平面内的位置没跑偏。
这一条环形齿带,就是你的第一个菲涅尔环带。
3.4 第三步:阵列生成完整齿面
单个环带生成之后,用阵列功能复制出所有环带。这里有两种做法,取决于你的齿形是否一致:
- 如果所有环带的齿形角度一样(这种情况一般出现在做线性菲涅尔透镜的时候),直接用线性阵列,指定阵列数量和间距即可。
- 如果在旋转对称菲涅尔透镜中,每个环带的斜面角是逐步变化的,就不能用一个阵列命令搞定。你需要绘制多个不同齿形截面的环带,把每个环带旋转成实体,然后按照计算的径向位置逐一放置。
我初学的时候图省事,曾经试图用一个倾斜角度的齿形阵列覆盖整个口径,结果仿真出来近轴区域和边缘区域的光线传播方向跟设计值差了很多。原因是边缘环带需要更大的偏折角,而你用一个固定齿形角去套,边缘光线自然偏折不足。
安排好不同环带的径向位置和角度之后,把它们沿光轴方向对齐,就得到了一个完整的菲涅尔齿面组。
3.5 第四步:基体生成与布尔减运算
接下来生成透镜基体。设计中的菲涅尔透镜一面可以是平面,另一面是菲涅尔齿面。你需要先生成一个圆柱体,或者一面是球面/非球面、一面是平面的基体。
基体尺寸要稍微大于齿面的最大口径,避免在布尔运算时出现边缘缺料的问题。如果你设计的透镜带有安装法兰边,基体还要额外建出法兰环。
然后是布尔减运算:用前面生成的完整齿面组去减基体,得到的就是一面光滑、一面带有齿形微结构的菲涅尔透镜实体。
这里有一个我自己遇到过的坑:齿面组和基体之间如果存在微小的间隙,布尔运算后会出现残留薄片。这些薄片肉眼可能看不出来,但追迹时会突然出现异常的散射光线,让人排查很久。建议在布尔运算之前,用几何检查工具确认齿面组和基体接触面的贴合情况,把潜在麻烦扼杀在摇篮里。
3.6 第五步:设置光学属性并开始追迹
布尔运算完成后,给透镜实体赋予材料(PMMA或PC),给两个光学表面赋予表面属性,也就是我之前强调的透射率、反射率、粗糙度。如果你还需要加增透膜,可以在表面属性里设置膜层参数。
设置完之后,建议先做一次少量光线追迹,比如只追100根光线,看看光路大致走向是否合理。如果出现异常光线或者效率明显偏低,先不要急着调参,用光线路径分析检查是哪一部分出了问题。
确认光路正常后,再加大光线数做正式追迹,比如100万根,得到照度分布和效率。
3.7 关键参数记录表格:我的常规检查项
在正式追迹之前,我会用一张检查表把关键参数过一遍,这里分享给你:
| 检查项 | 常见值/建议值 | 备注 |
|---|---|---|
| 长度单位 | 毫米(mm) | 不一致会导致模型尺寸异常 |
| 材料折射率 | PMMA:1.4913 @ d光 | 多波长仿真需逐波长设定 |
| 齿高与环距比 | 0.2~0.5之间 | 太大会导致脱模困难,太小会导致衍射效率下降 |
| 齿顶圆角 | 齿高的10%~20% | 过小仿真值过于理想,过大效率下降 |
| 表面粗糙度 | RMS 10~50nm | 对红外光学影响尤其明显 |
| 追迹光线数 | >100万 | 过少会导致照度分布噪声大 |
这张表我一般贴在工位旁边,每次做新透镜之前都看一眼。上面的数值不一定适合所有场景,但作为起步参考值够用了。
4. 常见问题与排查技巧实录
4.1 追迹效率异常低,先查齿顶是否“穿模”
有次我在做一个大口径菲涅尔透镜,仿真效率只有设计值的60%,排查了很久。后来用剖面视图仔细检查齿形,发现相邻两个环带在径向出现了重叠,重叠区域在布尔运算之后产生了一个很窄的残留薄片,薄片位置的光线发生了全反射,能量直接损失掉。
解决办法是,在做阵列展开时,给每个环带径向宽度上留出0.5%~1%的间隙,让齿形之间不那么紧密。这个间隙在光学上几乎不影响效率,但能避免大量非预期反射,建模也稳定得多。
4.2 出现“杂散光”,先怀疑齿根圆角过小
还有一个常见的毛刺现象:仿真做出来,目标面上除了正常的焦斑,还会有一圈环形的杂散光。这个杂散光的能量占比不高,但如果你做的是对杂光要求很高的投影系统,这圈光就是不可接受的。
排查下来,往往都是齿根的圆角过小。光线打到齿根圆角附近时,会发生一个非预期的反射或折射,形成一个环状的光斑。把齿根圆角从0.01mm增加到0.03mm,杂散光就会明显减少。但也别加得太大,加太大会导致齿的有效面积减少,透射效率下降。
所以圆角取值跟效率、杂散光之间是有最优解的,建议自己在模型里做一个小参数扫描,找到最合适的值。
4.3 阵列生成特别慢?可以先建子区再阵列
亲身经历过一次:口径200mm、环距0.5mm的菲涅尔透镜,如果按0.5mm逐环生成,我需要做400个环带。在LightTools里一次性生成400个旋转体,软件会卡到怀疑人生。
后来我的办法是:先建一个包含10个环带的子模块,然后再把子模块阵列成40个。这样操作起来流畅很多,而且子模块出问题时,只需要修改一次,再重新阵列,不用推倒重来。实际上,很多光学设计软件在处理重复结构时都是这个思路,重叠的计算量交给软件去处理,而不是让几何体数量直接爆炸。
4.4 导入CAD模型之后不能追迹?先修复几何
有朋友经常遇到这种情况:从外部CAD导入的菲涅尔透镜模型,明明看着挺好的,但一追迹就报错或者漏光。这通常是因为CAD模型存在破面、重叠面或者不连续的法线方向。
LightTools提供了一些几何检查和修复工具,导入之后先用这些工具扫一遍模型。如果发现碎面,可以用修复功能自动处理;如果自动处理不了,就回到CAD软件里针对问题面重新建模。我个人的经验是,在CAD里做菲涅尔透镜最好还是用专业的光学插件去生成,纯手工画的模型大概率会出问题,不如直接按本文方法在LightTools里建模。
4.5 关于节温:环境温度对材料折射率的影响
这一点可能有点超纲,但如果你做的是高功率照明系统,最好留意一下。PMMA等光学塑料的折射率随温度变化明显,温度升高时折射率降低,导致透镜焦距偏移。LightTools虽然标准功能不太侧重热光学耦合,但你可以手动修改材料折射率,模拟温度变化后的效果。
我做一个车灯光学系统时,环境温度从25℃升到80℃,PMMA折射率从1.4913降到约1.484的消息,最终导致焦斑偏移了约2mm。对于尺寸敏感的照明系统,这个偏移量已经足够影响均匀性了。
4.6 高斯分布设置与导出注意事项
顺带提一下题目里出现的热词。做菲涅尔透镜设计时,高斯光束的设定是个常见的需求。在LightTools的光源设置里,你可以选择光源类型为高斯光束,然后设置光束的发散角、束腰半径等参数。光源位置设在菲涅尔透镜的焦点处,光线方向指向透镜即可。
另一个常见的操作是结果导出。LightTools的追迹结果可以导出成IES文件、CSV格式或TXT格式的照度数据,方便在Excel里做进一步分析或者导入到其他软件里。导出的文件格式一般是在分析模块里设置输出路径,然后在结果窗口里选对应的导出选项。
这些操作在技术上不复杂,但如果不熟悉菜单位置,最容易卡住。如果你拿到某个版本的lighttools教程,可以重点看一下光源设置和结果导出这两个章节。
5. 经验总结与后续扩展建议
5.1 我的建模习惯:参数驱动、逐步存档
做了这么多菲涅尔透镜模型之后,我养成了几个习惯,这里一并分享:
第一,所有关键尺寸都在Excel里算好,模型里的数值一律从计算表引用,不在软件里随手填。这样当改动口径或者焦距时,只需要更新Excel,模型重建也有据可查。
第二,每完成一个阶段就另存一个新文件,文件名带编号。菲涅尔透镜的建模步骤多,有时候一次改参改歪了,需要退回上一步。如果没有版本存档,就得重画一遍,非常浪费时间。
第三,把所有参数扫描的结果集中记录在一个表格里,包括齿高、环距、圆角、效率、杂散光指标,方便横向对比。有了这些数据,后面做相似类型的设计时可以快速起步。
5.2 后续扩展:把手动建模升级为参数化模组
当你按照这套流程做过几个菲涅尔透镜之后,你会发现手动建模的核心步骤其实是可以参数化的。齿高、环距、口径、焦距、圆角都可以设置成变量,在LightTools里用参数化功能改变尺寸,自动重建模型。
更进一步,你还可以把建模过程录制成脚本,调用API实现批量生成不同规格的菲涅尔透镜模型,然后批量追迹、批量导出结果,这样可以形成一个小型的透镜自动设计流程。手动建模的意义不仅仅是做出一个模型,更重要的是通过建模过程理解每个参数对光学性能的影响,为后续的自动化设计打下基础。
我自己的体会是,手动建模会让你非常清楚地记得齿高变大一点效率会怎么变,圆角增加一点杂散光会怎么变,环距加密一点中心亮度又会怎么变。这些手感是直接调库里的现成模型得不到的,也是做好光学设计最值钱的积累。