1. 光学设计正在从“试错艺术”变成“可计算工程”
1.1 我为什么在实验室里劝师弟师妹们早点学仿真
这几年带过不少硕博士新生,最明显的感觉是:光学设计这个方向,正在肉眼可见地分化成两种人。一种人还习惯性地泡在实验台上,拿着镜架、光源和探测器一点点搭光路,靠经验和直觉反复调;另一种人一开始就把大部分精力放在光学仿真软件上——建模、优化、公差分析,先在电脑里把方案跑通,再带着明确的目标进实验室。
我私下和很多同行聊过,大家一致的判断是:现在这个时间点,光学仿真已经不是“加分项”,而是“必选项”。原因很简单——光学系统的复杂度已经超出了传统试错法的能力边界。以前设计一个镜头,靠的是手算、经验表格、查专利和反复磨镜片,周期以月为单位;现在一个包含非球面、衍射元件、自由曲面的系统,手算根本算不完,必须用软件做光线追迹、评价函数优化、蒙特卡洛公差模拟。谁先掌握这套流程,谁的科研产出效率就直接翻倍。
所以听到“祝贺!做光学设计、仿真的硕博士都看一遍,以后将成为趋势”这种话,我的第一反应是:这句话说得太保守了。这哪是“以后会成为趋势”,这分明已经是现在进行时。尤其是那些做超表面、计算成像、AR/VR光波导、激光雷达扫描方案的课题组,如果博士生第一年还在用手工草图推光路,第二年基本就会被同门用仿真数据碾压。
1.2 所谓趋势,本质上是什么变了
近几年国内外顶尖光学组发的文章,几乎都有一个共性:论文里大量篇幅被仿真结果占据。有的是Zemax里做的成像质量分析,有的是FDTD里做的超表面单元结构扫描,有的是COMSOL里做的光波导模式仿真,有的是HFSS里做的天线近场分布。审稿人也会默认你附上仿真验证,实验数据只是作为佐证。
这里面有个非常重要的底层逻辑变化:光学设计从一门“经验驱动的技艺”变成了“计算驱动的工程”。以前老师傅积累的像差理论、玻璃库记忆、结构设计经验,当然仍然有价值,但已经不再是唯一壁垒。现在一个刚入门的硕士,只要会用光学仿真软件,能正确设置评价函数,能理解优化器的工作原理,就能在几小时内得到一套合理的初始结构,再结合公差分析判断可加工性——这在二十年前是不可想象的。
有人会担心:“仿真毕竟不真实,实验才是王道。”这个观点不算错,但放在当下的语境里已经过时了。仿真和实验不是替代关系,而是两层筛查机制。仿真的作用是把无效方案快速淘汰,把成功率最高的方案留给昂贵、费时的实验验证。一个做微纳光学的博士,如果不在FDTD里先把结构参数扫一遍,直接上电子束曝光,那大概率是在烧经费。
2. 工具选型:不同问题对应不同仿真武器
2.1 镜头与成像系统:Zemax/OpticStudio是事实标准
如果你做的是成像光学——镜头设计、照明系统、激光聚焦、光刻投影物镜——那Zemax(现在叫OpticStudio)基本是绕不开的。它是当前行业里对几何光学和部分物理光学仿真覆盖最完整的商业软件,支持序列模式(sequential)和非序列模式(non-sequential),前者适合经典成像系统,后者适合杂散光分析、照明系统、含有散射和反射元件的复杂光路。
我经常被问一个问题:“Zemax和Code V到底选哪个?”我的建议是:看行业流向。在消费电子、安防、车载镜头领域,Zemax的占有率明显更高,而且它的用户生态、教程资料、第三方工具(比如和Python的接口)都更丰富。Code V在高端军用、空间光学领域有很强积累,擅长全局优化和大公差下的像差平衡。但对大多数科研团队来说,Zemax足够用,而且上手门槛相对低。
跑一个Zemax仿真项目的标准流程大概是:
- 根据需求建立系统参数:焦距、F数、视场角、工作波段、像面尺寸。
- 选定或构建初始结构:可以从镜头库调,也可以从专利和论文中复现。
- 定义评价函数:通常是基于像差(Seidel像差、波前差、MTF)或自定义的操作数。
- 运行优化:局部优化加全局优化配合,监控关键像差的变化。
- 做公差分析:以灵敏度分析和蒙特卡洛模拟评估加工和装配误差的影响。
这里有个很多人会忽略的细节:初始结构太差,再好的优化器也救不回来。优化本质上是局部搜索,如果初始点在错误的山谷里,你只能收敛到局部极小值。所以跑Zemax的第一个本事不是调参数,而是学会找靠谱的初始结构——从专利、镜头库、论文里扒,或者用全局优化算法(比如Zemax自带的Global Search)先铺一遍。
提示:刚开始学Zemax的人最容易犯的错,就是一上来就点“Optimize”。正确做法是先手动改几个曲率半径和厚度,把光路理顺,让光线能正常到达像面,然后再启动优化。否则优化器会直接给你一个发散的结果。
2.2 微纳结构与超表面:FDTD类工具是主力
如果你的研究对象是超表面、光子晶体、亚波长光栅、等离激元这类结构——也就是特征尺寸和波长在同一量级甚至更小——那就不能只用光线追迹了。这时候需要求解麦克斯韦方程组,主流的数值方法是时域有限差分法(FDTD)和有限元法(FEM)。
我自己的经验是:单周期或小区域的微纳结构,用FDTD非常顺手。它的核心思路是把空间离散成网格,在时间域上逐步推进电磁场演化,直接得到透射率、反射率、电场分布、远场散射等结果。商业软件里Lumerical FDTD是很多光子学课题组的标配,开源方案里也有MEEP可以用,但后者的建模便利性和后处理工具链相对弱一些。
用FDTD仿真超表面单元时,有几点务必留意:
- 边界条件选择:周期性结构用Bloch边界条件,孤立散射体用PML边界条件。二者选错,结果直接错。
- 网格精度:网格太粗会高估损耗,网格太细会让内存崩盘。一般做法是先做网格收敛性验证,也就是把网格密度翻倍,看结果变化是否在可接受范围内。
- 光源设置:平面波入射时要注意入射角度是否匹配Bloch条件,用模式光源时要提前算好模式的偏振和传播常数。
- 监视器的安放位置:透射监视器不要贴着结构表面放,要放在稍远的平面上,避免收集到明显的倏逝场成分。
2.3 光场与系统级仿真:从几何光学到物理光学
除了Zemax和FDTD,还有一类场景需要更“中间层”的仿真工具。比如设计光波导显示系统、激光谐振腔、衍射光学元件、部分相干光成像,这时候纯几何光学不够,纯FDTD又算不动整个系统。常用的方案包括COMSOL Multiphysics(做波导截面模式、光力学耦合)、VirtualLab Fusion(做衍射和光场传播)、以及基于物理光学的自编程序。
我自己做光波导模斑转换的时候,试探过不少路径。最终稳定的组合是:COMSOL算波导模式和耦合效率,再用Lumerical或自编的传播算法算器件级性能。跨工具配合是常态,没有一个软件能通吃所有光学问题,关键是清楚每个工具的适用边界。
这里想多说一句:不少硕博士一上来就想“学会所有工具”,结果哪个都是浅尝辄止。我更建议按照自己课题的物理尺度做减法——如果你的实验里全是自由空间光路加透镜,那就死磕Zemax;如果你的课题是芯片上光子器件,那就精研FDTD和COMSOL。工具在精不在多。
3. 一个标准的光学仿真流程:从建模到公差分析
3.1 一个具体案例:双胶合消色差透镜的Zemax仿真
我在带新人的时候,特别喜欢让他们用Zemax跑一个双胶合消色差透镜作为练手项目。这个案例麻雀虽小五脏俱全:涉及玻璃选择、曲率半径、空气间隔、视场设置、像差评价、优化和公差分析,几乎覆盖了成像光学仿真的所有核心环节。
明确需求:设计一个焦距100mm、F/10的双胶合消色差透镜,工作波段为可见光(F、d、C光),视场设为0°、7°、10°三个视场。材料通常选冕牌玻璃(如BK7)和火石玻璃(如F2)组合,前者低折射率低色散,后者高折射率高色散,一正一负就能校正色差。
在Zemax里建模时,我会先用近轴光学的手算公式估算光焦度分配:
两个透镜的总光焦度满足:Φ = Φ1 + Φ2 - Φ1 * Φ2 * d(d为透镜间隔) 消色差条件:Φ1/ν1 + Φ2/ν2 = 0 其中ν是阿贝数。对于BK7(ν≈64)和F2(ν≈36),可以快速解出两片透镜的光焦度。这个手算步骤很重要,别上来就随便填半径。光学设计里所谓“会用软件”,不是会按按钮,而是知道软件背后要解什么物理问题。手算出来的是初始条件,软件做的是在这个初始点上往局部最优走。
3.2 评价函数与优化策略
光有初始结构还不够。Zemax的优化器需要一个“评分标准”,也就是评价函数。默认的RMS Wavefront Error(均方根波前差)是做成像系统的首选,因为它直接和系统分辨率关联。当然也可以用Spot Size(弥散斑尺寸)或MTF(调制传递函数)。我个人的习惯是:前期优化用RMS Wavefront,后期判断成像质量用MTF。
设置评价函数时,有几个关键的“坑”:
- 权重分配要合理。不要对所有视场都给相同权重。一般是中心视场权重大,边缘视场次之,因为边缘视场的像差本来就难校正。
- 玻璃变量要小心。把玻璃型号设为变量看起来诱人,但玻璃库是离散的,全局优化会自动尝试所有组合,算起来很慢,而且容易跳出合理范围。我更推荐先用固定玻璃对优化,后期再做玻璃替换(Substitute Glass)操作。
- 不要盲目增加操作数。有人喜欢堆几十个操作数,觉得越多约束越好。实际上评价函数要精简,你关注什么就约束什么。比如设计一个成像镜头,你直接约束焦距、后焦和像面尺寸就够了,额外约束大量中间厚度反而压制了解空间。
优化策略上,我习惯先跑Local Optimization,再看结果。如果MTF还是不够,再启用Global Search或者Hammer Optimization,让优化器跳出局部极小值去探索其他结构。全局优化不是万能的,它会很慢,但它能帮你发现一些意想不到的“另一个山谷”。
3.3 公差分析:仿真能不能落地,就看这一步
很多硕博士做仿真时最容易忽略的就是公差分析。他们在设计论文里放一张漂亮的MTF曲线,实验做出来却完全对不上,十有八九是没做公差分析。
公差分析的本质是回答一个问题:当每个表面的曲率半径、厚度、偏心、倾斜以及折射率都偏离名义值时,系统性能会劣化多少?制造和装配误差是必然存在的,仿真里不管这些误差,实验结果就不会陪你演戏。
Zemax里做公差分析的标准步骤是:
- 建立公差操作数列表:常用的有曲率半径公差TFRC、厚度公差TTHI、表面偏心公差TEDX/TEDY、表面倾斜公差TETX/TETY,以及折射率公差TIND。
- 我一般先用灵敏度分析(Sensitivity)模式。它逐个公差看影响,计算每个公差单独引起的性能变化,找出哪些公差对系统最“敏感”。
- 然后再做蒙特卡洛模拟(Monte Carlo),让所有公差同时随机变化,模拟1000个左右随机镜头,统计像质分布的期望值和置信区间。
做完这两步,你才能回答“这套系统按当前公差范围能不能批量造出来”。如果仿真结果对某个偏心量特别敏感,那你就要么收紧公差(成本飙升),要么重新优化降低敏感度。做过一轮之后你会理解,为什么工业界常说“一个光学设计师的功力,一半在公差分析上”。
4. 这些年我踩过的仿真坑:发散、不收敛与网格陷阱
4.1 优化发散:别让评价函数把你带沟里
遇到过不止一次,学生在群里喊“Zemax优化后系统全乱了”。打开文件一看,典型的发散特征:透镜厚度变成负值,空气间隔大得离谱,光线乱飞,像面位置跑到天上去。
排查思路很重要。不要直接重新优化,先看评价函数的结构。多数发散是因为在初始结构很差的情况下强行优化,评价函数梯度方向把系统推向了无物理意义的区域。做法是:
- 检查系统是否满足最基本的近轴条件:焦距、后工作距离、入瞳位置是否合理。
- 给玻璃厚度加边界限制,在评价函数里约束中心厚度和边缘厚度的最小可制造值,比如不小于1mm。
- 把视场设置从大视场逐步放宽,先在0°视场上优化,收敛后再加入大视场。这个小技巧大大降低发散概率。
类似的问题在FDTD里也有。比如仿真透射谱时出现非物理的尖峰,检查下来往往是网格边界条件没配对,或者PML层厚度不够,反射波绕了一圈又回来了。这时候我会先画电场分布快照,看看边界附近是否有反射驻波,如果有,就把PML层数从默认的20加到40。
4.2 网格收敛性验证:仿真的诚信底线
做微纳光学仿真,最容易被审稿人问的一句话是:“你的网格收敛性如何?”这个问题可以直接要了论文的命。所谓网格收敛性,是说当你把网格尺寸减半,仿真结果不应发生明显变化。如果变化显著,说明你之前的网格太粗,结果不可信。
我自己的实操习惯是:对同一个结构至少跑三档网格,比如每波长20个网格、40个网格、80个网格,对比关键指标(透射率、共振波长、电场增强倍数)。如果20到40变化了10%,而40到80只变化了1%,那我就用40档作为正式仿真数据,并在论文里附上收敛曲线。
这个方法很笨,但能保住学术清白。做超表面结构扫描参数时最痛苦,一组参数就是几十个单元跑一遍,叠加网格翻倍之后计算量爆炸。我的建议是:先用粗网格做参数扫描,锁定大概的共振区域,再用细网格做局部精确仿真。粗网格扫趋势,细网格出数据,这是效率和数据可信度之间的平衡点。
4.3 内存与算力:台式机的尽头是集群
很多初学FDTD的人会骄傲地把网格设置到极致,结果一运行就报“Out of Memory”。FDTD的网格是三维体积离散,内存占用随网格密度近似立方增长。你网格每加密一倍,内存需求就是原来的8倍,计算时间还要再乘一个时间步缩小因子。这就是为什么“网格越细越好”的想法在实操中行不通。
具体来说,一个10μm×10μm×1μm的周期性结构区域,如果按每波长30个网格加密到60个,内存需求翻了8倍,而这类仿真在台式机上本来就接近极限。实用解法是:
- 利用周期性边界条件,只仿真一个周期单元(unit cell),很多超表面和光栅问题都能这么干。
- 利用结构的对称性,例如垂直入射且结构对称时,可以只在1/4区域仿真,加对称/反对称边界条件。
- 改用二维仿真做初步筛选。FDTD对二维结构的仿真是三维的千分之一量级资源,很多物理规律在二维下就已经能看出趋势。
- 实在需要大规模三维仿真,就去课题组的计算集群上排任务,同时做好任务脚本的断点续跑。
注意:跑FDTD之前一定先估算“最大内存需求”。Lumerical里有个Meshing工具可以告诉你网格总量,你拿网格总量乘上每网格约140字节,心里就有谱了。算出来如果超过物理内存的80%,就别硬跑,先降网格或缩小仿真区域。
5. 光学仿真的行业趋势与硕博士的能力清单
5.1 超表面、计算光学与AR/VR:仿真成了唯一入口
这几年光学领域最热的方向,超表面、计算成像、AR/VR显示、激光雷达,有一个共同特征:设计复杂度高到“手算完全不可能”。一个超表面想把偏振、相位、幅度同时调制,单元的几何参数可能有十几个自由度,必须靠参数扫描和逆向设计(比如伴随优化、深度学习)去找最优解。而这种设计的唯一验证方式就是仿真。
甚至可以说,在这些方向上,仿真的角色已经从“验证工具”变成“设计引擎”。你在Zemax里把AR光波导的耦入耦出光栅几何做参数化建模,在Lumerical里算衍射效率,再把结果导回光路系统里做全链路评价——这个流程本身就是一篇高质量论文的完整方法学。我认识好几个做微纳光学的博士,他们科研的主要形式就是写脚本调参跑仿真,实验只是最后去验证几个关键点。
5.2 系统学习光学仿真的路线建议
经常被师弟师妹问:“老师每天讲理论、放PPT,我怎样才能系统地掌握光学仿真?”我给的建议一直是一条主线加两条辅线。
主线是软件操作能力。选一个主攻方向,成像类死磕Zemax,微纳类死磕Lumerical FDTD或COMSOL。先复现软件自带案例(很多软件自带tutorial),再找一个简单文献做复现,最后独立完成一个和课题相关的仿真项目。这个过程大概需要3到6个月。
辅线之一是光学理论。仿真软件只是把麦克斯韦方程组和几何光学公式数值化了,你不懂衍射理论、偏振光学、傅里叶光学,遇到问题只会盲调参数。建议随时翻《Principles of Optics》(Born & Wolf)和《傅里叶光学导论》(Goodman),不用从头到尾读,遇到仿真结果不合理时回去看对应章节。
辅线之二是编程能力。光学仿真很多环节需要写脚本:参数扫描、批处理、数据后处理、绘制图表。Zemax支持ZPL宏和Python API,Lumerical本身有强大的脚本功能,COMSOL可以用Java和Matlab接口。我的感觉是,会写脚本的人做仿真的效率是纯点鼠标的人的3倍以上,而且不太容易出错。
5.3 个人经验谈:仿真的价值不在“能跑通”
最后我想说一点很多人不爱听但是非常重要的话:仿真跑通了,论文出图了,只是第一步。真正拉开差距的,是你是否理解这个结果背后的物理。
我看到太多人把仿真当成一个“出图工具”,旋钮转几下得到一个漂亮谱线,截图放论文,完事。但审稿人一旦追问“为什么共振峰在这个波长”“为什么效率曲线在某个角度突然下降”,这类回答常常就卡壳了。做仿真最有价值的时刻,其实是你结果和预期不符合的时候。这时候你被迫回到理论,重新审视模型假设,调整边界条件,最后发现是某个倏逝波耦合路径被你忽略了——这种从数值异常到物理洞察的过程,才是仿真真正训练人的地方。
结合我自己的经验,给刚开始做光学仿真的同行们三个建议:
- 每跑一个仿真前,先在纸上写下你预期的结果和数值量级。如果最终结果和预期差了一个数量级,不要急着改参数,先怀疑模型对不对。
- 保存每一个版本的仿真项目,尤其是那些“失败”的版本。很多好的想法恰恰是在对比新旧版本差异时蹦出来的。
- 多读文献里的仿真方法部分,留意别人用什么边界条件、什么网格策略、什么评价函数。这些细节作者写得越具体,你复现起来越顺利。
光学设计和仿真的趋势已经足够明显:它正在成为这个领域的基本素养,就像做实验要会用光谱仪、搭光路要会调准直一样自然。工具会迭代,软件会更新,但这套“物理建模-数值求解-误差控制-结果解读”的方法论,会在未来很长一段时间里,持续定义光学工程师和光学科研工作者的核心竞争力。