在OpticStudio中构建DOE与Metalens的高效建模验证流程
2026/9/19 14:08:58 网站建设 项目流程

这两年只要碰光学设计方案,DOE和metalens几乎绕不开。AR眼镜的衍射光波导、车载激光雷达的固态扫描、手机3D结构光里的点阵投射器,核心元件都是这类衍射或亚波长结构。但不少工程师第一次用光学设计软件做这类元件时,容易走两个极端:一端是把整个纳米结构全部建模,结果追迹效率极低,系统级像差评估根本跑不动;另一端是拿一个普通球面透镜代替,像质分析跟实际加工件完全对不上。我在实际项目里用 Ansys Zemax OpticStudio 做过多轮DOE与超透镜(metalens)的系统级验证,慢慢攒出一套从相位模型到波动验证、再到严格电磁仿真的串联流程。这篇就把这套建模方法、关键参数设置和踩过的坑完整整理出来,给正在做衍射光学系统集成的同行参考。

1. 为什么必须建立高效的DOE与metalens建模流程

1.1 DOE与metalens的工程现状

衍射光学元件和超透镜在消费电子、车载光学、AR/VR里已经是“标配级”选项了。DOE常用在光束整形、结构光投射、分束合束和光栅波导上;metalens则因为能把传统多片式透镜缩成一片平面结构,正在被大量评估用于TOF发射端、微型投影和极短焦成像系统。但这两类元件的共同点很让人头疼:局部特征尺寸在亚波长量级,而整个系统的工作口径又往往是毫米甚至厘米级。如果直接把纳米柱、台阶结构一个个建出来,系统级的MTF、鬼像、公差分析几乎没有可能在工程周期内做完。

传统做法是只对“宏观系统”用光线追迹,把DOE或metalens简化成一个理想透镜。这样做前期是快,但衍射效率、级次串扰、相位量化误差这些真正决定产品能不能用的因素全部被丢掉了,仿真结果很容易与实测相差巨大。

1.2 从“画结构”到“建相位”的建模思路转变

想同时保住速度和精度,唯一可行的路径是先“建相位”,而不是一上来“画结构”。DOE和metalens的物理本质都是通过表面微结构引入一个特定的相位分布:比如kinoform台阶式DOE是把连续相位按2π量化,metalens则是用亚波长单元柱在各个位置匹配目标相位。对系统设计来说,真正做决定的是这个宏观相位分布,而不是每个单元柱的长宽高。

这就好比做电路板设计,系统架构阶段没人会用器件级晶体管仿真去验证整块芯片的功能,一定先是寄存器传输级模型跑行为验证,再针对性做关键单元的晶体管仿真。同理,在OpticStudio里先用衍射相位型面(比方说Binary Surface、Grid Phase)把DOE或metalens的相位行为表达出来,等系统指标稳定达标以后,再把关键单元结构放到严格电磁求解器里校核效率和工艺可行性,这才是高效的顺序。

1.3 三层验证工作流:相位模型、波动验证、严格求解

我在实际项目里习惯把建模验证拆成三个层次,每一层有明确的输入输出和判断标准。

第一层是“相位模型层”,在OpticStudio序列模式里用Binary 2或Grid Phase把元件等效成相位面,快速看系统像差、准直效果、点列斑是否在预算内;第二层是“波动验证层”,用Physical Optics Propagation(POP)做相干光束传播,看PSF、Strehl Ratio、聚焦光斑形态是否满足最终光场要求;第三层是“严格电磁层”,把设计好的相位分布对应到具体单元结构,用RCWA或FDTD算每个单元的实际振幅和相位响应,再反哺到第一层修正模型。

这套流程最核心的价值是“每层都有明确能回答的问题”。第一层回答“系统结构选型对不对”,第二层回答“衍射/干涉效应下最终光场行不行”,第三层回答“工艺上能不能做出来、效率会不会掉很多”。三层彼此校准,而不是互相替代。后面几个小节就按这个顺序把具体操作和参数讲透。

2. DOE建模核心:从相位型面到Binary Surface

2.1 DOE本质与衍射级次的选择

DOE的相位分布一般可以写成周期或准周期性函数,入射光通过元件后,相位被调制,不同衍射级次分开。一条最常用的判断公式是光栅方程 mλ = Λ(sinθ_i + sinθ_m),其中m是目的级次,Λ是特征周期,θ_i和θ_m分别是入射角和衍射角。做系统布局时,这个公式能快速估算DOE的工作角范围,也决定了你后续在OpticStudio里该把衍射级次填成几。

比如要做1×3分束器,设计目标是使用+1、0、-1三个级次,建模时就不能只在单次追迹里看一个级次,而是要建立三个配置,分别设置对应级次来模拟不同状态。很多人第一次用Binary Surface时直接把衍射级次保持默认的0,结果发现仿出来的像一个普通折射透镜,问题就出在这条参数上。

在OpticStudio里,Binary系列面型会在指定面上叠加相位函数,光线经过时直接按你设置的衍射级次改变传播方向。这里的“衍射级次”就相当于光栅方程里的m,是整个DOE建模中最先要确认的输入。

2.2 Binary 1、Binary 2与Grid Phase的选型边界

不同DOE形态在OpticStudio里对应不同面型,选错了会导致要么拟合精度不够,要么光线追迹效率非常差。我整理了一张常用对照表,实际项目里可以先按这个表做初选。

元件类型推荐面型适用场景主要限制
旋转对称连续相位DOEBinary 1准直镜、旋转对称光束整形只支持按径向半径的多项式
非对称连续相位DOEBinary 2任意二维相位分布、分束、投影、定制光场整形项数有限,高阶拟合可能振荡
深浮雕/任意相位图Grid Phasemetalens相位图、随机相位板、实测相位导入数据文件体积大、插值精度要注意
周期光栅分束Grating surface、Surface Grating规则周期光栅、一维分束只适合周期结构,不支持任意面型
特殊矢高公式User Defined Surface供应商有特定工艺型面需要开发DLL,集成成本高

工程上我做DOE时,旋转对称场景基本先用Binary 1看看结果;如果相位图带有明显非对称特征,比如斜入射补偿、离轴设计,那就直接用Binary 2。Binary 2的相位函数是x和y的二元多项式,灵活性足够覆盖大多数连续相位DOE设计。只有遇到深浮雕随机相位板或者metalens这类需要逐点相位表的场景,我才改用Grid Phase。

2.3 Binary 2的关键参数设置与系数填充

Binary 2面型把相位写成关于局部坐标x、y的多项式,形式大致是:

Φ(x, y) = Σ A_{ij} x^i y^j

在Extra Data Editor里,第一步是把“Diffraction Order”填成设计目标级次(比如1),第二步设置“Maximum Term Number”控制要用多少项,第三步按x幂次和y幂次递增顺序填入拟合系数A_{ij}。

这里有两个实操上特别容易翻车的细节。

第一是系数阶次不要盲目拉高。二元多项式拟合相位时,阶次越高越容易在边缘出现振荡,尤其相位图上带着残余像差或量化台阶时,高阶项会把误差放大。我一般先只用到4到6阶,看拟合残差的RMS,如果残差已经小于λ/50就不再往上加项。

第二是口径边界处要加过渡带。DOE实际加工件在口径边缘往往有圆角或工艺修剪区,模型里如果直接把多项式作用到整个通光口径,边缘相位与真实件会差很多。我的习惯是建模时在System Explorer里设置一个比有效口径略小的孔径,把边缘效应留给工艺层去处理,设计层先保证中心有效区域正确。

填充系数的方式也不建议手算。先用Python、MATLAB或Zemax的ZPL脚本把目标相位分布算出来,再用最小二乘拟合得到多项式的各项系数,最后批量写入Extra Data Editor。这样既能保住精度,也方便后续做公差或容差分析时批量修改。

3. Metalens建模:相位拟合与Grid Phase导入

3.1 双曲相位分布的计算与拟合

Metalens的标准设计是双曲相位分布,目的是把平面波完美聚焦到焦点:

φ(x, y) = - (2π / λ) · (√(x² + y² + f²) - f)

其中f是设计焦距,λ是工作波长。这个公式所有做超透镜光学设计的人都绕不开。拿到相位分布以后,接下来就是怎么把它准确塞进OpticStudio。

我通常先写一个非常短的脚本生成相位分布,然后把分布转成两种格式之一:一种是拟合系数,写入Binary 2;一种是网格相位图,写入Grid Phase。相位分布生成脚本大概是这样的思路:

import numpy as np wl = 0.940 # 波长,单位um f = 125.0 # 焦距,单位um pitch = 0.500 # 网格间距,单位um N = 301 # 网格数 x = (np.arange(N) - N // 2) * pitch X, Y = np.meshgrid(x, x) phase = -2.0 * np.pi / wl * (np.sqrt(X**2 + Y**2 + f**2) - f) # 折叠到[-pi, pi],方便后续处理与显示 phase = (phase + np.pi) % (2.0 * np.pi) - np.pi np.savetxt("metalens_phase.txt", phase, fmt="%.4f")

这个脚本本身不复杂,但后面两步很容易被忽略。

第一,网格间距pitch要和meta单元尺寸匹配。你后续如果打算用RCWA逐单元校验,网格间距就应该对应设计单元周期,否则相位分布和真实结构对不上。第二,拟合或导入前必须做相位解包裹处理。如果直接用折叠到[-π, π]环域的相位图去拟合连续多项式,会在2π跳变处产生不连续,拟合出来全是振荡。

3.2 Binary 2拟合法与Grid Phase导入法的取舍

Metalens在OpticStudio里最常见的两种实现方式,各有优劣,我分别说。

Binary 2拟合法相当于把一个连续相位分布用多项式近似。优点很直接:面型参数少,文件干净,后续做优化、公差分析时变量少,跑起来也快。缺点也非常明显,双曲相位其实不是纯多项式能完美表达的,尤其在边缘之前的高NA区域,拟合残差会明显增大。如果金属透镜设计NA大于0.6,我只把Binary 2拟合法当成粗看方案,不会拿去做最终焦点光斑评估。

Grid Phase导入法是把实际相位分布按网格文件完整读进去。OpticStudio的Grid Phase面型支持读取标准网格相位文件,里面的相位数据可以是文本矩阵或二进制格式。优点是保留了原始相位图的全部细节,拟合残差为零,适合给最终设计做验证;缺点是文件比较大,且插值算法会引入轻度平滑。更关键的是,网格间距必须足够小,否则相位梯度大的地方(比如边缘)采样不足,仿真结果会出现伪衍射条纹。

有一种实用组合方式:先用Binary 2快速扫出系统参数范围,比如焦距、后焦距离、工作波长对像质的灵敏度;锁定参数后再换成Grid Phase做最终验证。这样两者优势都能用上,又不会在前期被Grid Phase的调试时间拖慢。

3.3 标量相位模型的边界:极化、色散与高NA

所有相位型面模型本质上都基于标量衍射近似,也就是默认入射光经过每个位置时只被加了一个相位,振幅大小不变。这个假设只在结构特征尺寸远大于波长、且单元响应近似各向同性时才成立。metalens的单元柱直径常常只有几百纳米,工作波长如果是940nm或更短,标量近似的误差已经不能忽视了。

具体来说,标量相位模型无法捕捉三类物理效应:一是极化转换,二是一阶衍射效率的单元差异,三是在大入射角下单元响应的非对称性。这些效应会直接影响焦点效率、杂散光水平和偏振相关像质。

所以真实工作流里,System级用相位模型确定布局,元件级一定要回到严格电磁仿真。我会把金属透镜对应的不同位置单元柱分别提取出来,用RCWA算透射相位和振幅响应,形成一个“单元库”。然后检查单元库实际响应和目标相位分布的偏差,如果偏差超出阈值,就把偏差修正回OpticStudio的相位模型里重新跑系统。这个迭代过程才是metalens建模验证闭环的关键。

4. 验证闭环设计:POP波动传播与RCWA/FDTD对照

4.1 POP物理光学传播的设置要点

光线追迹只能看到“光线到达哪里”,看不到干涉、衍射和光斑能量分布细节。DOE和metalens本身是波动器件,最终焦点光斑要靠衍射形成,所以必须用Physical Optics Propagation做完整的相干传播验证。

POP的起点是选择一个“主光束”(pilot beam),并指定它在哪个面、以什么束腰和发散角开始传播。对DOE或metalens验证来说,通常把主光束放在元件前的入射面上,用平面波或与系统输入匹配的高斯光束作为起点。然后一路传播到焦点面,探测器面上直接读出光斑的辐照度分布。

POP窗口里真正决定结果质量的是采样网格参数。网格数量要设置成2的幂次,建议至少256×256起步;网格物理尺寸要覆盖元件的有效口径,最好再留20%到30%的过渡区,防止边缘截断泄漏。还有一个很微妙的点:网格间距要能分辨最大空间频率,否则高频相位信息会被混叠。我的经验是,放松网格尺寸到系统最高NA对应的衍射极限频率的4倍以上再跑一次,对比两次结果差异,如果差异大于几个百分点,说明网格还不够密。

4.2 用PSF、Strehl Ratio和能量集中度做量化判断

验证不能只看仿真图好看,必须落到能量指标上。我通常会在POP探测器上同时看三个指标。

第一个是斯特列尔比(Strehl Ratio),也就是实际焦点峰值辐照度与衍射极限系统峰值辐照度的比值。聚焦类metalens和DOE设计里,我一般要求相位模型下的Strehl Ratio达到0.9以上,否则实际加工后大概率连0.8都保不住,中间损耗都在工艺和材料层。

第二个是点扩散函数(PSF)的半高全宽和旁瓣形态。DOE多级次对应多个PSF峰值,侧边级次强度、杂光背景都需要在仿真阶段确认不能压过传感器的动态范围。

第三个是环围能量或桶能量(Encircled Energy)。对激光雷达发射端来说,焦点光斑贯穿到目标面上的能量集中度比PSF漂亮程度更重要。在POP里可以直接在探测面加一个半径可变的孔径积分能量,快速判断如果接收端只有一定尺寸,真正耦合进去的能量有多少。

下面是我常用的一组阈值,供参考。

指标目标值说明
Strehl Ratio≥ 0.9相位模型下的衍射受限程度
PSF旁瓣峰值比≤ 0.3避免相邻级次串扰超过系统容忍度
环围能量(D=1.2×艾里斑直径)≥ 80%保证能量集中度够用
拟合残差RMS≤ λ/50相位模型与目标分布的一致性

4.3 与RCWA/FDTD严格求解器的交叉校验

相位模型验证通过不等于真机就能达标。原因是严格电磁效应没法完全装进一个相位面里。我在最后阶段一定会做一次“严格电磁交叉校验”。

具体做法是把metalens或DOE按位置采样成一系列代表性单元,比如沿径向取10到20个点,分别建出对应的纳米柱或台阶单元结构。然后用RCWA算每个单元在目标入射角下的相位响应和透射效率,得到一张“相位-位置-效率”对照表。把这张表和OpticStudio里用的目标相位分布做差,如果偏差超过允许范围,就把偏差补偿进设计相位,回到第三部分所述流程重新建模。

如果团队里有FDTD工具,还可以抽一个完整的小口径meta透镜做整面验证。虽然全口径FDTD计算量很大,通常只能做几十微米直径,但足够校验中心、边缘和过渡区的真实响应。我用这个方式查出来过一次由单元间近场耦合导致的边缘相位偏移,这是纯标量模型完全看不出来的。

5. 常见问题与排查技巧实录

5.1 光线“直接穿过”或追迹行为像普通折射面

这是DOE建模时最常犯的问题。我在评审里见过很多次,现象是Binary Surface设了,但光线传播方向和普通平板玻璃几乎没有区别。原因九成是衍射级次填了0。级次为0时,DOE相当于一个没有衍射能力的相位面,光线直接按折射Snell定律走。排查时先把Surface Type选成Binary 2,再进Extra Data Editor确认“Diffraction Order”是不是目标级次,比如+1级就填1。

如果多级次同时出现,比如分束器要-1、0、+1三个级次同时工作,那就不是能在单一组态里看到的事。我会把系统建成三个Configuration,每个Configuration里同一面的衍射级次分别设为-1、0和+1,然后在多重组态分析里观察三个级次的光斑分布和能量比例。这里要记住一点:OpticStudio的光线追迹不会自动分配能量到各个级次,级次间的效率分配需要靠光栅公式或严格电磁仿真结果输入。

5.2 POP结果中出现伪条纹或无法收敛

POP做出来PSF上多出一圈圈奇怪的同心纹,或者中心光斑周围有明显假的次级峰,一般不是元件设计错了,而是采样或边界设置不对。先检查网格数量和尺寸,尤其是网格间距是否小于奈奎斯特条件;其次看边界截断,如果网格范围刚好卡在元件口径边缘,截断衍射会产生很强的高频纹路,把网格往四周扩展至少20%再试试。

还有一次让我印象深刻,POP结果怎么看都收敛不了,后来发现是入射光束定义里的束腰半径远大于元件口径,导致光束本来就严重截断。定义主光束时要注意,束腰半径最好与元件实际入光口径匹配,否则物理上就不对,数值结果自然也是错的。

5.3 相位拟合残差大或边缘振荡

导入Grid Phase后焦点光斑出现明显非对称或额外杂散光,很大概率是边缘相位梯度没采够。双曲相位的边缘斜率极高,如果网格间距太大,相邻点相位差超过π,插值时就会产生相位混叠。碰到这种情况,我的处理方法是把网格间距减到原来的1/2,并检查相位图中相邻点最大相位跳变量。若相邻点相位差还大于0.5π,要么继续加密网格,要么在导入前对相位图做分块插值。

如果用的是Binary 2拟合,边缘振荡通常是多项式过拟合导致的。可以降低阶数、改用带权重的最小二乘拟合,让拟合算法把权重放在有效口径内部。另一个技巧是先做Zernike拟合再转换到笛卡尔多项式,一些情况下Zernike基组的数值稳定性比直接二元幂函数好不少。

现象可能原因排查与解决
光线行为像普通折射面衍射级次=0或级次设置错误检查Extra Data Editor中的Diffraction Order
多级次缺少部分级次单组态只支持一个衍射级次使用多重Configuration分别设置级次
POP出现规则伪条纹网格太粗或边界截断提高网格密度,扩展网格范围20%
PSF焦点能量下降相位拟合边缘振荡降低多项式阶次,检查相位跳变
Grid Phase混叠网格间距过大加密网格,确保相邻相位差小于π/2
仿真与实测效率对不上标量模型无法表达亚波长单元用RCWA/FDTD做单元级校验后再回代

6. 几点工程落地心得

做完这一整套流程,我体会最深的是“建模效率”不等于“建得快”,而是“每一层模型都能回答一个明确的问题”,并且层与层之间能够互相校准。DOE和metalens如果一上来就无脑往严格电磁仿真里扎,系统级和工艺级都会很痛苦;反过来,如果永远停在相位模型里,加工出来往往货不对板。先相位、再POP、最后RCWA/FDTD,是我目前验证下来性价比最高的一条路径。

工具层面还有个容易被低估的点:Zemax本身的脚本接口,也就是ZPL和Python API,可以把大量重复操作自动化。每次改完相位系数以后,自动跑一次POP、自动读出Strehl Ratio和环围能量,再自动生成报告,这个过程能省掉大量手工操作时间。我习惯把第一节那个相位生成脚本、拟合脚本和POP分析脚本串成一条简单流程,新的设计进来时只要改几个初始参数,几分钟就能出一份初步评估结果。

最后分享一个小技巧:即使目标元件是metalens,我也会把同一个相位分布同时用Binary 2和普通折射偶次非球面各建一个模型。普通非球面模型用来快速做系统初始布局和公差分配,Binary 2或Grid Phase模型用来做最终衍射验证。两个模型的差异本身就是很好的“置信度探针”,如果两者结果差很多,说明设计对相位敏感度很高,真正打样之前一定要先解决敏感度问题。这个习惯帮我在不少项目里提前避开了加工窗口过窄的坑。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询