尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ZEMAX双高斯镜头设计全流程:从初始结构到像质优化

ZEMAX双高斯镜头设计全流程:从初始结构到像质优化 聊起ZEMAX里的经典镜头设计双高斯结构是绝对绕不过去的一课。无论是55mm标准定焦、人像镜头还是入门级定焦双高斯的变化体几乎覆盖了中长焦大光圈镜头的半壁江山。这套结构最大的魅力在于它能用相对不多的镜片数量同时把球差、彗差、像散和场曲校到很不错的水平对称形式又天然抑制了垂轴色差和畸变特别适合做全画幅或APS-C画幅上的定焦镜头。这篇文章我就拿一个55mm焦距、F/2.0光圈的照相物镜当例子完整走一遍从初始结构搭建、评价函数设计、局部优化到像质分析的全流程顺便把我这些年用ZEMAX踩过的坑和调试经验一起写出来给正在学ZEMAX光学设计、准备入门镜头设计的朋友一份可以直接照着操作的手册。1. 项目概述与设计目标1.1 为什么选双高斯结构做照相物镜双高斯结构的历史可以追溯到19世纪末后来经过Taylor等人的改良成为照相镜头中生命力最强的形式之一。它最典型的特征是以孔径光阑为对称中心前后两组近似镜像对称每组通常由一枚正透镜和一枚负透镜构成。这个对称布局带来一个很大的好处垂轴像差比如彗差、畸变和倍率色差在对称条件下会自动抵消大半。用生活化的方式理解双高斯结构就像一支两边重量非常平衡的扁担光阑放在正中间前后各挂一组透镜。光线从物方进来时前组把光束收拢、后组把光束重新扩展中间由一个近乎对称的布局把各种像差抵消掉。相比望远结构或反远距结构双高斯的光焦度分配更均匀场曲也更容易压平所以在覆盖中等视场角、中等相对孔径的场景里双高斯往往是性价比最高的起点。在设计实践中双高斯也是很多新手的“第一课”。原因并不复杂它的初始结构容易从专利或教材里拿到镜片数量适中优化变量不算太多老版本ZEMAX跑起来也很快。更重要的是双高斯折射出的像差平衡思路能让人直观理解“为什么镜头设计不是单纯堆镜片”。1.2 55mm/F2.0设计指标拆解任何一个光学设计项目开工前必须先定清楚设计指标。相比“随便先跑跑看”先想清楚边界条件能省掉后面一半的返工时间。这个项目我给自己定的核心参数如下参数项指标值备注有效焦距55mm经典标准镜头焦段相对孔径F/2.0入瞳直径27.5mm像面尺寸全画幅 43.3mm对角线半像高21.65mm工作波段486.1nm ~ 656.3nmF光、d光、C光后焦距≥ 15mm留出镜筒与快门结构空间设计目标RMS半径小于艾里斑半径尽量接近衍射极限这里有个很关键的细节指标里的“半像高21.65mm”是怎么来的。全画幅传感器的成像区域尺寸是36mm × 24mm对角线就是sqrt(36²24²)约等于43.3mm半像高就是21.65mm。这个数值直接决定了视场设定。对于无穷远物距的照相物镜ZEMAX里我习惯用Image Height这种视场类型而不是用视场角因为后面分析畸变和相对照度时更直观。焦距55mm对应的人眼视角大约在46°左右全画幅对角线视角约43°属于标准镜头范畴。标准镜头最讲究“中庸”既要保证中心分辨率够高又要兼顾边缘像散和色差所以双高斯结构在这个焦段上特别有发挥空间。相对孔径F/2.0不算极致大光圈但已经能让双高斯结构展现出它的优势区间。F/1.4或者更大的光圈经典6片4组双高斯会显得吃力通常需要增加镜片或者引入非球面。F/2.0刚好是个分水岭用传统球面镜片也能得到不错的平衡对新手非常友好。2. 初始结构搭建与系统参数设置2.1 ZEMAX工作环境与基本设置打开ZEMAX OpticStudio之后第一步不是急着往Lens Data Editor里敲数据而是先把系统级参数设置好。在System Explorer的Aperture选项卡里我把Aperture Type设为Image Space F/#数值填2。很多人习惯用Entrance Pupil Diameter但在做实际镜头设计时我更推荐用Image Space F/#因为像方F数才是最终要保证的指标ZEMAX会根据物方无穷远自动计算出相应的入瞳直径。接着设置视场。在System Explorer的Field选项卡里选择Image Height类型输入几个有代表性的像高0mm、5mm、10mm、15mm、21.65mm。这里为什么要中间隔几个点因为后续优化和像质评价都需要看不同视场的变化趋势如果只设置边缘视场很容易出现中心好、边缘崩掉的局部最优解。多点视场能逼着优化器把全视场的像差平衡好。最后设置波长。在System Explorer的Wavelength选项卡里添加F光486.1nm、d光587.6nm和C光656.3nm主波长设为d光。对于普通照相镜头这三个波长的色差评价已经足够。暂时不用设置更复杂的波长权重初版优化阶段先求稳等结构收敛了再细化。2.2 初始镜头数据表输入很多人第一次做双高斯时最头疼的就是“初始结构从哪来”。其实双高斯的经典起始结构在很多光学设计教材里都有结构上就是围绕光阑对称的6片4组形式。我拿到的一个比较顺手的初始结构如下单位是毫米玻璃用的是成都光明玻璃库里的牌号面号曲率半径R厚度d玻璃OBJ无穷大无穷大-120.006.00H-LAK32250.000.50-314.002.50H-F448.506.00-STO无穷大5.50-6-8.502.50H-F47-14.000.50-8-250.006.00H-LAK39-20.0020.00-IMG无穷大--这个结构的思路很清晰第1片是正光焦度的H-LAK3冕牌玻璃第2片是负光焦度的H-F4火石玻璃两者靠近光阑一侧形成前组。光阑之后是严格镜像对称的后组。H-LAK3的折射率在1.717左右配合H-F4的1.620左右一正一负产生足够的像差校正自由度同时又不会让单面光焦度过于极端。在Lens Data Editor里输入时第2面的250mm大曲率半径其实是近似平面它的作用不是产生多少光焦度而是给第1片正透镜一个比较大的半径比用来控制球差的符号。这一点新手容易忽略总想着把所有半径都弄得很夸张其实初始结构里留一些“松弛面”反而更好优化。输入完成后按快捷键CtrlL打开2D Layout看一眼光路形状。正常应该是一个左右对称的“蝴蝶形”光路光线从左边进来经过前组收窄在光阑附近形成一个较窄的束腰再经过后组发散到像面。如果看到有光线明显爬出镜头边界或者交叉得很乱先检查数据是否输错尤其是正负号。2.3 一阶焦距快速缩放初始结构输入后系统的实际焦距大概率不是精确的55mm。这里有一个ZEMAX里非常实用但很多人不知道的功能菜单栏Tools → Modify → Scale Lens。它能按当前系统的有效焦距比例整体缩放所有曲率半径和厚度使系统焦距精确匹配目标值。使用这个功能前需要先在Merit Function Editor里定义EFFL操作数来读取当前焦距或者直接在System Explorer的“System Data”里查看Effective Focal Length。比如当前系统计算出来是43mm目标55mmScale Lens会直接把所有尺寸缩放55/43倍。缩放之后F数保持不变视场角会对应变化但只要后焦距也跟着变了整体结构比例是协调的。这个操作非常推荐在优化前做一次。如果初始焦距离目标太远优化器可能陷入一个错误的局部解或者变量太多导致过程极其缓慢。先缩放让系统“在正确的焦距附近起步”后面的优化会顺很多。3. 核心优化流程从初始结构到像质收敛3.1 优化变量与约束条件初始结构搭好之后接下来就是把镜头从“能用”变成“好用”的关键环节变量设置和评价函数设计。在ZEMAX里双击Lens Data Editor中“Curvature”列旁边的方框或直接把变量列设为V就能把曲率半径变成优化变量。厚度列同理设为V后优化器可以自由调整镜片间距和镜片厚度。我的变量设置习惯是所有曲率半径先全部设为变量包括大半径的近似平面让优化器自己判断需不需要变弯所有空气间隔设为变量但光阑两侧的间隔我会稍微小心设了变量但会加边界条件防呆镜片中心厚度暂不设为变量先固定等曲率优化一轮之后再放开。这个“先曲率后厚度”的策略能有效防止厚度在优化初期乱跑导致镜片交叠约束条件方面ZEMAX里系统自带一个默认的边界约束链。在Merit Function Editor里打开Optimization Wizard勾选“Assume Axial Symmetry”再勾选“Use Angle Solve”之类的选项前先把边界条件想清楚。我们需要保证空气中心厚度不小于0.3mm否则实际装配时会顶死镜片边缘厚度不小于1.0mm不然加工很容易崩边玻璃中心厚度不小于1.0mm太薄的镜片既难加工也容易变形这些边界条件对应ZEMAX中的MNCA、MXCA、MNEG、MXEG等操作数。我习惯在评价函数编辑器里手动追加一组例如MNCA命令后面跟目标面和最小厚度数值。边界条件不是越多越好但几个关键位置一定要守住否则优化完看到结果还得返工。3.2 评价函数构建策略评价函数是整个优化的“指挥棒”它的设计质量直接决定收敛结果。对于照相物镜我的默认选择是RMS Spot Size Centroid也就是以质心为参考的RMS弥散斑尺寸。这是最贴近实际成像效果的指标之一因为点列图上的弥散斑尺寸直接反映了光点落在像面上的紧凑程度。在优化向导里Optimization Wizard的设置如下Type: RMS Spot SizeReference: CentroidPupil Integration: Gaussian Quadrature环数6臂数12视场权重默认相等即可如果有特别要求比如中心视场更重要可以手动加权设置完默认评价函数后还需要手动加入两个关键操作数来控制焦距和畸变。焦距控制用EFFL操作数目标值55权重设为1畸变控制用DIMX操作数权重视情况而定初版优化可以先不约束畸变等像质收敛后再说。评价函数里的权重是一门学问。权重设置太大会引导优化器优先满足焦距而牺牲像质太小则焦距漂移。我的经验是EFFL权重设为1让优化器把它当成“重要但不压倒一切”的约束。在此基础上RMS Spot Size的默认权重由ZEMAX自动分配整体平衡性比较好。3.3 分阶段优化路线双高斯这种对称结构最忌讳一上来就全变量、全约束一起优化。变量多了评价函数地形复杂局部最优解特别多。我通常把优化分成三步走。第一步只优化曲率半径所有厚度固定。先把焦距拉到位让光线走到正确的像面附近。这个阶段迭代次数可以少一些看到RMS半径从几十毫米快速降到几个毫米就说明方向对了。第二步放开空气间隔和后焦距曲率半径继续作为变量。这个阶段主要校正轴外像差像散和场曲会明显改善。如果RMS下降停滞试着把某个视场的权重稍微加大打破优化器当前的“平衡点”。第三步把玻璃厚度也设为变量同时增加边缘厚度约束。这个阶段是把初版结构从“光学上可用”推向“工程上可加工”的关键一步。很多人在前两步做完了就急着看MTF结果一检查边缘厚度全是负数这就是没走这一步。每一步优化后都看一眼2D Layout确认透镜没有交叉、光路没有异常折转。这里分享一个我踩过的坑某次优化完RMS已经很好但2D Layout里第二片镜片边缘厚度为负数镜片变成了“中间厚边缘也厚”的怪形状检查边界条件才发现是之前把MNEG写错了表面号。边界条件一定要写着有效ZEMAX不会替你检查这种低级问题。4. 像质分析与设计迭代4.1 点列图RMS半径与艾里斑优化到RMS半径不再明显下降时先打开点列图Spot Diagram看看弥散斑分布。对于F/2.0这种相对孔径艾里斑半径大约可以用1.22 × λ × F/#估算以587.6nm主波长计算约1.22 × 0.0005876mm × 2 ≈ 1.43μm。如果全视场的RMS半径都小于这个值说明系统已经接近衍射极限。不过实际工程里我一般不强求全视场进入艾里斑。中心视场进入艾里斑是基本要求边缘视场允许到2倍甚至3倍艾里斑只要MTF在奈奎斯特频率附近还能保持合理对比度就行。人眼对照片边缘的“模糊”宽容度其实比中心高不少。点列图里还要留意弥散斑的形状。如果中心视场是圆形对称边缘视场出现明显的拖尾或明显不对称那多半是彗差或倍率色差没校干净。对称双高斯结构按理说彗差不大如果出现这种情况检查一下光阑两侧的透镜是否真的对称了或者光阑位置是否偏离了设计中心。4.2 MTF曲线判断分辨率的硬指标MTF调制传递函数是评判照相物镜分辨率最硬核的指标。在ZEMAX里打开MTF vs. Field或FFT MTF看不同视场在各空间频率下的对比度。对于全画幅CMOS传感器像素尺寸假设3.76μm奈奎斯特频率大约在133 lp/mm。实际评价时我一般看30 lp/mm、50 lp/mm和100 lp/mm三条线。30 lp/mm决定大对比度细节100 lp/mm接近传感器极限全画幅镜头能在这个频率保持30%以上对比度就算不错。初版优化结果如果MTF掉得太快尤其是中频段塌陷最常见原因是高阶球差没有校干净或者色差残余偏大。这时候回到优化阶段尝试将某个面的曲率半径重新设为变量或者把胶合面拆开改成分离透镜往往能获得额外自由度。还有一个容易被忽视的点MTF曲线在零视场附近出现周期性起伏通常意味着系统存在少量焦移这时候可以检查后焦距是否正好在最佳像面位置。ZEMAX有Quick Focus功能能在当前后焦距附近自动搜索最佳像面这个功能对初版设计特别有用。4.3 畸变、场曲与色差控制畸变在双高斯结构里一般不会太大因为对称结构天然抵消了径向畸变。打开Field Curvature/Distortion图如果畸变控制在1%以内这个设计基本合格。注意照相镜头的畸变一般用TV畸变和光学畸变两个口径ZEMAX里显示的通常是光学畸变如果想看TV畸变需要额外写宏或者用Image Simulation分析。场曲方面双高斯结构的优势是匹兹伐场曲相对容易压制。但仍要注意子午场曲和弧矢场曲是否拉开差距。如果两者差别过大像散明显可以尝试增大光阑两侧负透镜的曲率半径差或者微调负透镜的玻璃折射率。色差控制主要看轴向色差和倍率色差。打开Longitudinal Aberration图如果F光和C光的焦点分离过大说明轴向色差偏大通常需要调整正负透镜的色散搭配。双高斯设计里把正透镜用低色散冕牌玻璃、负透镜用高色散火石玻璃就是为了平衡色差。H-LAK3和H-F4这个组合已经算合理但如果色差超标可以把正透镜换成色散更低的H-FK类玻璃负透镜换成色散更高的H-ZF系列。5. 加工可行性与公差分析5.1 边界条件与工艺规范优化到光学像质满意之后进入工程可行性复查。这一步对实际项目来说生死攸关光学设计做得再漂亮加工装不出来也是白搭。首先是检查每个面的入射角。如果某一个表面光线入射角过大比如超过45°反射损失会显著增加镀膜压力也大。ZEMAX里可以查看各面入射角若发现某面异常考虑将附近表面的曲率半径重新分配。其次是镜片形状。双高斯结构里靠近光阑的负透镜通常弯向光阑方向弯度大加工时容易遇到“非球面度检查”或“中心厚度不足”的问题。我把每个镜片的中心厚度和边缘厚度列成表格逐一确认。中心厚度小于1mm、边缘厚度小于0.8mm的镜片对于冷加工来说废品率会明显上升。最后是口径链的匹配。照相物镜要配合机械镜筒镜片外径通常做成台阶状方便压圈固定。ZEMAX里的半口径是一个参考实际机械设计时会在此基础上加余量。如果某片镜片半口径突然比相邻镜片小很多机械结构上会很难处理这时候微调厚度或曲率让口径过渡更平缓。5.2 公差分析快速入门公差分析是很多自学ZEMAX的人最容易跳过的一步。实际上在工业流程里公差分析是设计交付前的必要环节。简单来说公差分析回答的问题是“按当前的加工和装配精度最终镜头性能能保住多少”在ZEMAX里打开Tolerance tab设置如下基本公差项曲率半径±0.02mm厚度±0.05mm表面偏心±0.02mm镜片倾斜±0.2′折射率±0.001然后选择Compensator为后焦距或最后一片镜片间隔实际装配时通过调焦环微调统计方式用RMS Spot Radius运行100次Monte Carlo模拟。如果模拟结果显示90%的样本RMS半径在2倍艾里斑以内说明这套公差设计基本合理。如果灵敏度分析发现某个表面对偏心或倾斜特别敏感那说明这个表面放大了像差敏感度。常见解决方案是调整光阑位置或重新分配光焦度让光线在该面上的入射高度降下来。双高斯结构里光阑前后那两片负透镜往往是最敏感的元件设计时就要有心理预期。6. 常见问题与实战调试技巧6.1 优化不收敛的几种典型原因用ZEMAX做双高斯设计优化不收敛或者优化结果极差我十次里能碰到八次是以下原因。第一个原因是变量太多评价函数地形过于复杂。新手特别容易把15个变量一次性全打开ZEMAX一跑就是几小时结果评价函数稳定在一个巨大的数值上。解决方法是拆阶段优化先把曲率半径设为变量优化50轮再看趋势。趋势对了再放开厚度变量给优化器一个相对平稳的初始环境。第二个原因是边界条件写错。常见错误包括MNCA设置成最小空气厚度反而约束了玻璃厚度或者某几个表面连在一起导致约束矛盾。我建议每加一条边界约束就运行一次Evaluate Merit Function看贡献值有没有异常巨大。如果某条操作数贡献值比其他大几个数量级优先排查它。第三个原因是最佳像面漂移。有时候优化器把所有像差都压低了但RMS还是几十微米一查发现是后焦距偏离了当前视场的最佳像面位置。这时候用Quick Focus先把像面找回来再继续优化。6.2 ZEMAX宏脚本常见报错排查现在越来越多人在设计流程里写ZPL宏做批量分析或自定义评价。ZEMAX宏语法其实不复杂但常见报错很让人头疼。最典型的就是“unknown symbol getthickness”。这个报错我遇到过很多次基本上两种原因。第一种是你用的ZEMAX版本较老不支持GetThickness这个函数此时换成RAGZ(surface)就能解决RAGZ返回指定表面到下一表面的厚度是最通用的厚度获取方法。第二种是宏里变量名和保留字冲突比如把某个自定义变量叫了Thickness或Surface也会被解析器认成函数名。改一下变量名报错就消失了。如果你在宏里要获取某个面的曲率半径用CV(surface)取曲率注意ZEMAX里默认存的是曲率而不是半径1/CV才是半径。这个“曲率和半径”的坑比“unknown symbol”坑的人还多。6.3 高阶优化工具Hammer与Global Search局部优化陷入平台期时光靠Local Optimization很难跳出来。我的经验是先用Global Search或者Hammer Optimization这类全局工具去探索更优解空间。Hammer Optimizaiton会在当前局部最优解的邻域随机扰动多个参数组合试图跳出局部极小值。它适合在局部优化已经收敛但像质不达标时使用。操作上非常直接在Optimization选项卡里选择Hammer Current保持评价函数不变让它跑一段时间。多数情况下它会给出一个比当前解更好的方案。Global Search则是从多个随机初始点并行搜索一般在项目起步阶段对初始结构不确定时使用。双高斯结构的初始结构比较明确我用Global Search的机会不多但遇到高级变体设计时会用。跑一次Global Search通常需要较长时间电脑性能允许的话可以挂机过夜。需要提醒的是全局优化给出的“最优解”很可能是个非物理解比如镜片厚度为负或者某个半径小得离谱。拿到全局结果后第一件事是检查2D Layout和边界条件而不是直接惊喜地开始加工。6.4 扩展从球面到非球面与自由曲面经典6片4组双高斯全用球面镜片设计到F/2.0已经接近极限。如果想做到F/1.4或者想进一步提升边缘像质最直接的方法就是引入非球面。在ZEMAX里把某个表面类型从Standard改成Even Asphere然后选择圆锥系数和几项非球面系数作为变量重新优化。非球面的放置位置有讲究。对于双高斯结构来说把非球面放在光阑附近收益最大因为那里的光线高度最低非球面对轴上球差和子午彗差的校正效果最明显。但非球面制作和检测成本高实际设计中要权衡。更高阶的自由曲面设计通常用在非成像或离轴系统中比如扩展多项式面型Extended Polynomial在AR/VR、HUD、车灯中的自由曲面反光镜设计。序列模式下用扩展多项式优化需要注意项数不要一开始就开太多否则评价函数会变得极其不稳定。建议先加圆锥系数再逐步增加2~3项多项式每加一轮都重新优化并观察当前像差的变化。非序列模式则更适合做照明系统的分光棱镜或导光结构分析和成像镜头设计的路数不同。写在最后一点个人体会这套55mm双高斯流程走下来最深的体会是光学设计不是“把参数交给ZEMAX然后等结果”的纯体力活而是每一步都要理解“优化器在干什么、为什么这么干”。双高斯结构之所以适合练手正是因为它让球差、彗差、像散、场曲这些像差项变得可以被你亲手操控。每调整一个曲率半径你都能在点列图和MTF上直观看到响应。我自己的习惯是每个设计项目保留一个“设计日志”记录初始结构、变量设置、评价函数里的关键操作数以及每轮优化的RMS值变化。这样做的好处是当优化陷入死胡同时能很快倒回去分析是哪个环节出了问题而不是把所有参数推倒重来。最后再分享一个小技巧ZEMAX里按CtrlShiftD可以快速打开当前表面的详细分析窗口做单面像差追踪时非常方便比一层层点菜单顺手得多。希望这篇流程对正在啃双高斯设计的你有帮助。
返回列表