出图指南
LensBench 的每张图都由三样东西组成,三者分开:
| 是什么 | 在哪里 | |
|---|---|---|
| 数据 | 求值器算好的纯数据(点列坐标、光扇、MTF 曲线……) | kernel/,经 Evaluator 取 |
| 视图规格 | 取样与显示选项,写成 .lens 里的 view 语句 | model/views.py |
| 样式 | 颜色、线型、字体、字号的令牌 | style.py,交互图与出版图共用 |
所以同一张图在 GUI 里看、用 lb plot 导出、在画廊里审,内容和配色都一致;换了光学引擎,出图层不用动。
图型
图型(kind) | 内容 | 对应 Zemax |
|---|---|---|
layout | 二维布局(YZ 截面);按视场着色(color=wave 按波长:每个波长各追一组,主波长画在最上面,色散分开处露出彩边)、光阑叶片、反射镜背面斜线、比例尺;多重结构 configs=all 各组态上下排开(同一 z 比例) | 2D Layout(Color Rays By Field / Wave) |
spot | 点列图;同比例方框、艾里斑圆、比例尺,框下是复色 RMS / GEO | Standard Spot Diagram |
spot_density | 点密度图:几十万条光线落点的能量密度伪彩(顺序色),每视场一格、同一方框,叠艾里圆;rays= bins= ref= box=,scale=sqrt/linear/log、norm=field/all、airy= | Geometric Image Analysis(点光源) |
fan | 光线像差扇;所有子图同一纵轴,标"最大刻度" | Ray Aberration |
opd_fan | 波像差扇(波长数) | OPD Fan |
mtf | 复色 FFT MTF(各波长复数 OTF 按权重合成);子午实线、弧矢虚线、衍射极限点线;规格点按过 / 不过着色;max_freq= sampling=auto/整数(见下面的「FFT 取样」) | FFT MTF |
mtf_vs_field | MTF 随视场:每个频率一种颜色,子午实线、弧矢虚线;f1= f2= f3=(如 30/mm;都不写 = 截止频率的 1/16、1/8、1/4 取整)num= sampling=auto/整数 | FFT MTF vs. Field |
through_focus_mtf | 离焦 MTF:一个频率上各视场 MTF 随像面离焦(视场色,子午实线、弧矢虚线),顶端三角标最佳焦面;freq= step= steps= | Through Focus MTF |
fieldcurv | 场曲(T / S)与畸变(F-tanθ) | Field Curvature and Distortion |
grid_distortion | 网格畸变:理想网格灰色虚线、实际网格深色实线,格点按畸变着色(发散色:桶形蓝、枕形红);n= wave=,exaggerate=(偏离放大倍数) | Grid Distortion |
image_sim | 图像仿真:理想像与仿真像并排;各波长按自己的 PSF 卷积、按波长颜色合成;mode=patch/full pattern=star/grid/bars/checker field= size= pixels= sampling= grid=,show=both/sim | Image Simulation |
longitudinal | 纵向像差:轴上子午光线与光轴交点相对像面的距离 vs 光瞳 | Longitudinal Aberration |
lateral_color | 垂轴色差:各波长主光线像高相对主波长,±艾里半径参考线 | Lateral Color |
focal_shift | 色焦移:近轴焦点随波长的移动,衍射极限焦深带 4λF#² | Chromatic Focal Shift |
through_focus | 离焦点列图:行 = 视场,列 = 像面前后的离焦位置 | Through Focus Spot Diagram |
seidel | 逐面 Seidel 贡献柱状图:每面一组七项,总和单列一组;unit=waves 看波像差系数 | Seidel Diagram |
footprint | 足迹图:各视场光束在某个面上的落点(本面局部坐标)+ 通光半口径;surface= 选面,surface=all 所有面一起看 | Footprint Diagram |
wavefront | 波前图:光瞳上的 OPD 伪彩(发散色,负蓝正红、零为中性灰,色标对称)+ 干涉图;field= wave= remove=none/piston/tilt,show=both/map/fringes | Wavefront Map / Interferogram |
psf | FFT PSF:像面上的点扩散函数(顺序色,单一蓝色调浅 → 深)+ 过峰值的 x / y 剖面,叠同一工作 F 数的衍射极限艾里剖面;field= wave= sampling=auto/整数 span=,scale=linear/log | FFT PSF / FFT PSF Cross Section |
glass_map | 玻璃图(nd–vd):横轴阿贝数反向,目录牌号小点(多厂商按厂商分色),本设计的玻璃大点并标牌号(标签自动避让);模型玻璃画成菱形,虚线连到最近的目录玻璃(圈出,即 glass-substitute 会换上的那块);catalogs=design/all,labels=on/off | Glass Map |
sag | 矢高表:上 = 矢高与最佳拟合球(过顶点与边缘),下 = 相对 BFS 的偏离(µm);两张图共用横轴;surface=(默认第一个非球面)num= | Sag Table |
field_map | 全视场像质图:二维视场上的复色 RMS 弥散斑 / 波前(顺序色热图:浅 = 好、深 = 差),等值线标数值,已定义的视场(白点)与最差处;data= ref= area=circle/sensor n= rings= arms= | Full-Field Aberration / RMS Field Map |
rms_field | RMS 随视场:各波长细线(波长色)、复色粗线、衍射极限点线;data=spot/wavefront ref=centroid/chief num= rings= arms= | RMS vs. Field |
zernike | Zernike 系数柱状图:每项一根柱,正负分色,横轴逐项标号,最大的几项(名称与数值)写在信息块;field= wave= kind=fringe/standard terms= grid= | Zernike Fringe / Standard Coefficients |
huygens_mtf | 惠更斯 MTF:画法同 mtf,由像面上的惠更斯 PSF 求(倾斜 / 弯曲像面、主光线斜入射时与 FFT MTF 不同);max_freq= sampling=(光瞳,默认 32) | Huygens MTF |
huygens_psf | 惠更斯 PSF:画法同 psf,像素在实际像面上(倾斜 / 弯曲像面、主光线斜入射时的拉伸都算进去);field= wave= sampling=(光瞳,默认 32)pixels=(像面网格,默认 128)delta=(像素间距,默认自动),scale=linear/log | Huygens PSF / Huygens PSF Cross Section |
encircled_energy | 包围能量:各视场一条曲线 + 衍射极限点线,50 / 80 % 参考线,圆点标 80 % 能量半径;method=diffraction/geometric ref=chief/centroid wave=(0 = 全部按权重)sampling= radius=,marks= | Diffraction / Geometric Encircled Energy |
relative_illumination | 相对照度:照度 / 轴上照度随视场(实线),透过的光瞳占比(虚线,几何渐晕),cos⁴θ 参考(点线);num= rays= wave=,cos4= vignetting= | Relative Illumination |
公差图不在 plot 里,由 lb tolerance --out tol.png 出(灵敏度是龙卷风图,蒙特卡洛是直方图加累计良率),图框与证据 id 同上。
视觉约定:视场色序蓝、绿、红…(12 色);波长按 λ 从短到长取色(F/d/C 为蓝/绿/红,单波长用绿),与输入顺序无关; 布局与足迹按视场着色,点列 / 光扇 / 场曲按波长着色;子午实线、弧矢虚线;单位写进标签,数值 4 位有效数字。 Seidel 七项用单独一组固定色序(style.SEIDEL_COLORS,相邻两项在色盲下也分得开),柱间留缝。
图框与信息块
每张出版图都有标题和信息块:
- 左栏:镜头名、LensBench 版本与引擎构建号(如「引擎 r7b3cab6f」)、日期;完整的引擎标识只记在证据登记里;
- 中栏:视场、波长,以及本图专属的信息(比例尺、方框边长、艾里半径、最大刻度、规格判定……);
- 右栏:证据 id 与模型哈希。
证据 id = 模型哈希 + 引擎标识 + 分析种类 + 取样参数。模型哈希只看光学:名称、注释、格式、var / op / let / default / view / spec / pack / tol / comp 都不进;玻璃取解析后的折射率数据(换了 AGF 文件、文本没变也能察觉)。所以:
- 改名称、加注释、重排格式 → 证据不变;
- 改点列图的
rings→ 只有点列图的证据变; - 改方框边长、开面号这类显示选项 → 证据不变;
- 升级或替换引擎模块、分析口径有修订(升级 LensBench 时)→ 证据全变(新旧口径的数字不会挂在同一个 id 上)。
在桌面端底部的命令行(或右侧「终端」页)敲 evidence <id>、或让 AI 调 evidence 工具,可以复查当时的命令、参数、文本哈希与引擎 (证据登记在会话里;系统命令行的 lb 没有这个命令)。
视图规格:view 语句
view spot rings=8 ref=centroid box=120um
view layout numbers=on fold=on first=3 last=7
view mtf max_freq=100/mm
view through_focus step=0.02mm steps=7- 每种图型的选项见 .lens 语法参考 的 view 一节;[取样]选项改变数据(与证据),[显示]选项只改画法。
- 有量纲的数值必须写单位(
120um、0.02mm、100/mm),不写会报E-UNIT-REQUIRED,不会默认补单位。 - 命令行:
lb view-set my.lens spot rings=8 box=100um(最小化编辑,同一图型合并成一行);GUI:视图底部浮动导航条上的「⚙ 本图选项」。 lb plot --view "…"可临时覆盖:只写选项、不写图型名,如--view "rings=8 box=100um"。
布局专有:fold=on 把长于其余部分总长一半的空气间隔压缩显示(画断开符号,信息块注明原长); first / last 只画一段面(Zemax 的 First/Last Surface);被挡或追不下去的光线画到挡它的面为止。
规格与验收:spec 语句与 lb verify
spec efl target=50mm tol=1%
spec fno max=2.0
spec ttl max=40mm
spec cra max=13deg
spec mtf freq=50/mm field=0.7 dir=T min=0.3
spec spot_rms max=10um
spec distortion max=2%
spec custom expr="max(RSCE(ring=3, Hy=0:0.25:1))" max=0.01 label="全视场 RMS(mm)"- spec 是验收,op 是优化目标,两者分开;spec 只存绝对目标值。
- 一阶规格(efl / fno / bfl / ttl / imh / cra)先守住;MTF 可按相对视场(0–1 或 all)与方向(T / S / both)写,点列 RMS 可按视场写; 畸变默认取绝对值,带符号写
signed。种类与对应的 Zemax 操作数见参考文档。 custom:自定义验收,expr=是一个表达式(MATLAB 风格,写法见 optimization.md「表达式」),只能调用 操作数与函数、不能引用 op 行或 let(验收与优化目标分开、自成一体);界限不带单位,用操作数自己的单位(长度 mm、波前 λ、 角度 °、畸变 %);结果是向量时每个元素都要过,结论里指出最差的那个;label=是显示名。取样就是表达式里写的操作数参数。lb verify用固定的规范取样独立复算(不读 view,不用优化器自报的数),给出每条的值、界限、过 / 不过与来源 (哪种分析、什么取样、用哪个命令能单独复算——规范取样都等于该命令的默认取样);--strict时有未过或无法判定的规格即失败(可作 CI 关卡)。证据 = 模型哈希 + 规格哈希:改 spec 只让判定过期,不触发分析重算。- 末尾附可制造性:装夹违例(穿模、负边厚)与透镜边厚小于 0.5 mm 的提醒(结构化结果里是
manufacturing); 只提醒,不算未过。素材包的可制造性表与结论用的是同一份检查。 - 多重结构按组态验收:
spec efl target=70mm tol=1% config=2只在组态 2 上验,spec ttl max=60mm config=all每个组态都验, 不写config=在当前组态上验(与以前相同,lb verify --config k换当前组态);组态号不存在报E-SPEC-CONFIG。 每个(规格, 组态)用该组态的求值器各判一次(视场 / 波长随组态),表里多一列「组态」,末尾列出每个组态的判定与证据 id; 每个组态一份证据,证据键 = 在该组态上验的那几条 spec 的哈希 + 组态号——改别的组态的 spec 不让它过期;可制造性每个组态各查一次。 签核记下各组态的结论与证据 id,素材包的验收表带组态与证据列、结论按组态写,报告核对按各组态的证据核数。 - 出图时与该图相关的规格画在图上,颜色就是 verify 的结论:MTF 三角、点列 RMS、畸变界限线、垂轴色差界限线、色焦移范围。 多重结构时只画在当前显示的组态上验的规格(
config=k的只画在组态 k 的图上)。 - GUI 右侧面板的「验收」页(Ctrl+Shift+V)列出逐条结果与可制造性,可以添加 / 删除规格,点「来源」切到算出这个数的分析页。
导出
lb plot my.lens spot --out spot.pdf # PDF:矢量,嵌入字体(TrueType / Type 42)
lb plot my.lens layout --out layout.svg # SVG:默认文字转路径,任何机器显示一致
lb plot my.lens layout --out l.svg --svg-text text # SVG 保留文字:可在 Word 里改字(需要字体)
lb plot my.lens mtf --dpi 600 --lang en # PNG(默认 300 dpi),英文出图
lb plot my.lens fan --full-table --json # 附完整数字页 / 原始数据- 格式由扩展名决定;出图语言默认跟随界面,
--lang可单独切换。 - 不写
--out时写到<镜头目录>/reports/<名字>_<图型>.png;多重结构的设计加--config k在第 k 个组态上出图(组态号进证据键)。 - 每张图都有数字页(同一份数据的表格):命令的文本输出附摘要,
--full-table附全部,--json给原始数组; MCP 返回给 AI 的就是这份数据,PNG 同时返回给 AI 看。 - GUI:视图底部浮动导航条的「⇪ 导出」(Ctrl+E)走同一条管线;「⧉ 复制图」(Ctrl+Shift+C)把位图与 SVG 同时放进剪贴板 (Word 2016 起可直接粘贴 SVG);「▤ 数字页」切到同一份数据的表格,Ctrl+C 复制。
字体:随包带 Noto Sans SC(OFL 1.1,GB2312 + 符号子集),缺字时回落到系统字体;所以同一张图在不同机器上出来一样。
画廊
lb gallery # 7 个参照设计 × 27 种图(波像差扇除外)→ reports/gallery/index.html
lb gallery my.lens --kinds spot,mtf --out reports/mine参照设计:Cooke 三片式、双高斯、Petzval、广角(100°)、远摄、折转镜、抛物面(桌面端主页 › 参照设计里都能打开)。 画廊把每张图排在一页里,适合一次看完一个设计的全部图,页面顶部列了看图要点。
口径说明
- 场曲 / 畸变在像面局部坐标里算:旁光线对求交(与 Zemax 同法),畸变以近轴实际主光线在实际像面上的缩放为参考, 每个波长各自定标。像面不在近轴焦点时(如 Cooke 样例像面在焦点前 0.23 mm),不能拿 EFFL·tanθ 去比。 折转系统与展开的同轴系统结果完全相同(有测试保证)。
- 焦点偏移、纵向像差按传播方向取正(反射像方的符号约定待 Zemax 核实)。
- 点列图坐标在像面局部坐标里,相对参考点(主光线或质心);艾里半径 = 1.22·λ·F#,F# 为轴上实际边缘光线算的工作 F 数。
- 点密度图:点列图几千个散点只看得出轮廓,看不出能量往哪儿集中;点密度图在光瞳上做
rays × rays分层抖动采样(每个方格里随机取一点, 种子固定、结果逐位可复现;按面积均匀,没有规则网格在焦散处画出的莫尔纹),默认 301 × 301(圆内约 7.1 万条)× 每个波长, 各波长按权重;落点(像面局部坐标、相对参考点)用云中格(双线性)分到bins × bins网格,密度单位是「本视场到达像面的能量占比 / µm²」。 方框默认包住各视场 99.5 % 能量(× 2.16 取整)。默认平方根刻度(亮处不饱和、弱的弥散也看得见),scale=log看三个量级;norm=all各视场共用刻度,比哪个视场能量更集中。纯离焦的圆盘与解析值一致(盘内密度 1/(πR²) 差 < 1 %、RMS = R/√2,有测试)。 RMS 口径:点密度图的 RMS 是光瞳上按面积均匀积分的收敛值(与独立的 Gauss 求积差 < 0.3 %,有测试);点列图的 RMS 按六角形采样的光线等权平均(与点列图上画的点一致),环数少时两者差几个到十几个百分点(Cooke 20°:13.04 vs 11.55 µm)。 - 垂轴色差 = 各波长主光线像高 − 主波长主光线像高;"最长 − 最短"即 Zemax 的 LACL 口径(w2 − w1,w1 省略为最短、w2 为最长)。
- 色焦移 = 近轴焦点(轴上近轴边缘光线与光轴的交点)随波长的移动;C 减 F 等于近轴 AXCL(同 Zemax 的 w2 − w1,有测试独立核对)。
- Seidel 系数按 Welford 公式自算(与
lb seidel同一份数据),正透镜欠校正球差 S_I > 0;逐面波像差系数 W040 = S_I/8λ、W131 = S_II/2λ、W222 = S_III/2λ、W220P = S_IV/4λ、W311 = S_V/2λ、W020 = C_I/2λ、W111 = C_II/λ。 坐标断点不占一组;偏心 / 倾斜的有焦度面超出一阶模型时整张图不可用(会说明原因)。 - 足迹在本面局部坐标里(与本面的通光半口径同一坐标比较;45° 折转镜上圆光束的截面拉长 √2),主波长、六角形采样。 光束轮廓是真实的边界光线,不是拟合的圆:每个光瞳方位角上取能到达本面的最大光瞳半径(光瞳边缘光线能到达就用它; 被前面的面挡掉时沿半径二分到被挡的边界),渐晕系数(VDY / VCY…)同样反映在形状上(VCY=0.3 → 光束高约 70 %,有测试)。 在本面之前被挡掉的光线不画;到达本面但落在固定口径(
semi=)之外的照样画,计入「超出口径的光线」。 注意:与 Zemax 一样,通光半口径(semi)不挡光,只用来比较;默认看第 1 面;坐标断点与无穷远物面没有足迹。 - 波前图:光瞳上 65 × 65 网格(
grid=,奇数时中心与 ±1 正好是格点)的 OPD,单位波长,相对主光线参考球面——与 OPD 扇、 RWCE / RWCH 同一口径,主光线处为 0。remove=piston减平均值、remove=tilt再减最小二乘平面(看去掉倾斜后的像差形状); RMS 是去掉平均值后的均方根(面积均匀加权),P-V 是峰谷值,都按去掉之后的图算。被挡的格点(渐晕、遮拦、没打到面)留空。 干涉图亮度 ½(1 + cos 2πW),一条条纹 = 一个波长。纯离焦的抛物面镜与解析公式逐点一致(差 < 5e-4 λ,有测试)。 - PSF:FFT PSF,按衍射极限峰值归一(同一工作 F 数、无像差的圆瞳峰值 = 1),所以图上的峰值就是 Strehl。
wave=0(默认) 全部波长按权重合成(复色,Zemax 的默认):各波长的 PSF 按主光线垂轴色差平移到主波长的像素网格(三次插值)、按 w /(λF#)² 加权(单位能量时衍射极限峰值 ∝ 1/(λF#)²),峰值即复色 Strehl,衍射极限剖面同样加权;wave=k只看一个波长。复色以主波长 主光线像点为中心、单色以该波长的主光线像点为中心 (原点),像面局部坐标,µm。sampling=是取样(默认自动,见下一条),按它定光瞳采样与 FFT 网格,信息块印的是实际用的取样、光瞳采样与 FFT 网格, 像素 = λ·F# / Q(Q = FFT 网格 / (光瞳采样 − 1))。窗口默认自动:包住 95 % 能量的半径 × 1.3,至少 3 个艾里半径;span=20um指定半宽。 右边剖面过峰值(不一定过原点),点线是衍射极限艾里剖面 [2 J1(v)/v]²,v = π r /(λ F#),同一像素网格上取样;scale=log时 伪彩看四个量级、剖面看五个量级(旁瓣与散射一目了然)。完美抛物面镜与艾里公式逐点一致(差 < 5e-3),纯离焦的 Strehl 与 [sin(πW₀₂₀)/(πW₀₂₀)]² 一致(差 < 1 %),无色散反射镜的三波长复色 PSF 与加权艾里公式一致(差 < 3e-3),有测试。 注意:包围能量、PSF、惠更斯 PSF 的wave=0是「全部波长」,波前图、Zernike、相对照度、网格畸变的wave=0是「主波长」(这几种本来就是单色分析,同 Zemax)。 - 惠更斯 PSF:从出瞳参考球面上的每个采样点(光瞳
sampling×sampling均匀网格)向像面上每个像素做惠更斯–菲涅耳求和 U(P) = Σ a · e^{ik(nR − W)} / R · ½(1 + cos θ),W 是该点相对参考球面的光程差,倾斜因子按参考球面法线算。与 FFT PSF 的区别: FFT PSF 算的是垂直于主光线的平面,惠更斯 PSF 的像素就在实际像面上——像面倾斜、弯曲,或大视场主光线斜入射时,PSF 在像面上 沿倾斜方向拉长约 1/cos θ,Strehl 与能量分布随之变化;各波长共用同一张物理网格(不用插值平移)。归一:每个波长除以「同一光瞳、 零像差」在参考球心的峰值,复色按光瞳功率归一后按权重合成,峰值就是复色 Strehl(与 FFT PSF 同口径)。网格默认 129 × 129、 以主波长主光线像点为中心,像素间距自动(窗口包住几何弥散 95 % 半径 × 1.3 加一个艾里半径,至少 3 个艾里半径),delta=0.2um指定。耗时 ∝ 像素数 × 光瞳采样数。核对:理想透镜第一暗环与 1.22 λF# 差 < 0.5 %;像面倾斜 30° 时 y / x 暗环之比与 1/cos 30° 差 < 0.2 %(FFT PSF 照旧是圆的);正入射时与 FFT PSF 的 Strehl 差 < 1.5 %;彗差方向与几何点列 质心一致;有测试。 - 玻璃图:厂商目录里每个牌号的 nd(d 线)与阿贝数 vd(F / C 线),叠本设计用到的玻璃(从构建好的材料直接取,AGF、模型玻璃、 内置晶体也在内)。默认画本设计
catalogs里的厂商,catalogs=all画全部。显示范围取目录点的 0.5 %–99.5 % 分位(红外材料等 离群点不把光学玻璃挤成一团,个数写在信息块),本设计的玻璃一定在内。按 nd / vd 精确找牌号用lb glass。 - 矢高表:某个面沿本面局部 +y 从顶点到半口径的矢高 z(r)、过顶点与口径边缘的最佳拟合球(BFS,边缘吻合: R = (r² + z²) / 2z)、相对 BFS 的偏离(非球面度,µm)与面形斜率 dz/dr(°)。给加工方的数:最大偏离、P-V 偏离、最大斜率。 默认看第一个非球面 / 二次曲面;非旋转对称的面给 y 方向的剖面。矢高与偶次非球面闭式逐位一致,球面的 BFS 就是它自己、偏离为 0, 有测试。
- 全视场像质图:在二维视场网格上算复色 RMS(取样同 RMS 随视场),
area=circle是整个视场圆、sensor是内接的 3:2 传感器矩形 (看四角)。旋转对称的系统(没有坐标断点、非旋转对称面型、偏心口径)按视场半径算 2n + 1 个点再展开——与逐点算等价、快得多, 最差处是一整圈(虚线);其余系统逐点算(偏心 / 倾斜的不对称一目了然,最差处标 ×),圆外多算一圈只给插值做支撑。 出图在细栅格上渲染、按视场圆裁剪,没有方块台阶。 - RMS 随视场:沿 +y 从轴上到最大视场
num个点,各波长与复色的 RMS 弥散斑半径(µm)或 RMS 波前(λ)。高斯求积光瞳 (rings环 ×arms臂),与评价函数的 RSCE / RSCH / RWCE / RWCH 同一做法;ref=centroid相对质心(波前去倾斜)、chief相对主波长主光线(波前只去平移)。复色弥散斑按波长权重合在一起算,复色波前是各波长 RMS² 的加权平均再开方。arms默认 2 ×rings(默认 6 环 12 臂,弥散斑与波前相同,方位角同 Zemax),与 Ring = rings 的 RSCE / RSCH / RWCE / RWCH 逐位相同; 12 臂与 201 × 201 稠密网格只差 0.04 % 量级。衍射极限参考:弥散斑取艾里半径 1.22 λF#, 波前取 Maréchal 判据 0.072 λ。理想薄透镜(type=paraxial)的光程同 Zemax 的 OPD Mode(opd_mode):入射没有像差时 任何视场的波前都是 0。 - FFT 取样(
mtf、mtf_vs_field、psf;lb strehl同):sampling=auto(默认)自动选档——在 128 / 256 / 512 / 1024 里取 让 FFT 窗口(λ·F# ×(光瞳采样 − 1))不小于 4 倍几何弥散斑直径的最小一档。几何直径以该波长的主光线为中心、被挡的光线不算; MTF 看全部视场与波长(MTF 随视场看它的各个视场点),PSF 看本视场与所选波长;PSF 与lb strehl的自动取样最高 512 (1024 档一张复色 PSF 要两三秒),不够时照样提示,可显式写view psf sampling=1024。sampling=256这样的整数是固定取样 (32–1024)。 弥散斑比窗口大时 PSF 卷绕、低频 OTF 样点太稀,MTF 偏差很大:参照设计上窗口 ≥ 4 倍时整条曲线与取样 2048 差 ≤ 0.004, 不到 1.5 倍时差 0.02–0.5。信息块与命令输出印实际用的取样(自动时注明);窗口不到几何弥散斑直径的 1.5 倍、或去掉倾斜后相邻 光瞳样点的相位差超过半个波长时提示「取样不足」——像差大到取样 1024 也不够时,改看惠更斯 MTF / PSF。verify的 MTF 规格 也用自动取样,说明里写出用的取样。 - Zernike 系数:光瞳上的 OPD(相对主光线参考球面,与波前图同一组采样,入瞳归一化坐标 Px = ρ cos θ、Py = ρ sin θ, θ 从 +x 逆时针量)按最小二乘拟合成 Zernike 多项式。
kind=fringe(默认,Zemax Fringe 的 37 项排序,不归一:Z4 = 2ρ² − 1 离焦、 Z5 / Z6 像散、Z7 / Z8 彗差、Z9 = 6ρ⁴ − 6ρ² + 1 球差……);kind=standard(Noll 序号与归一,系数就是该项的 RMS,最多 66 项)。 另给 Zemax 文本页里的统计量:P-V / RMS「对主光线」(原始 OPD)与「对质心」(去掉平移与倾斜之后),拟合残差的 RMS, Strehl 估计 exp(−(2πσ)²)(Maréchal,σ = 对质心的 RMS;σ 大于约 0.1 λ 时明显偏低,看 PSF 的 Strehl)。图上不画平移项 Z1。 核对:纯离焦的抛物面镜,Z4、Z9 与解析波前的正交投影一致(差 < 0.2 % / 0.5 %),Standard 的 Z4 等于离焦 RMS;视场在 y 方向时 关于 x 的奇函数项(Z2、Z6、Z7、Z10……)为 0;合成波前的系数逐项还原;有测试。 - 惠更斯 MTF:每个视场、每个波长在像面上算惠更斯 PSF,沿 x 求和得 y 方向的线扩散函数(子午 T)、沿 y 求和得 x 方向的(弧矢 S), 在所求频率上直接做傅里叶变换、按零频归一。窗口取 PSF 的一个周期:离散的光瞳采样使惠更斯 PSF 在像面上以 λ / Δu 为周期 (Δu 是相邻采样点的方向余弦差投影到像面坐标轴上,像面倾斜时自然拉长),窗口内的能量就是全部能量,不会因截掉远处的翼而 高估 MTF;每个周期约 2.5 (s − 1) 个像素(奈奎斯特以上)。几何弥散 95 % 半径超过周期的 0.4 倍时 PSF 会与周期像重叠, 信息块与命令输出标出这些视场——加大
sampling。复色按复数 OTF 加权相加再取模(相对主波长主光线,含垂轴色差与各波长 OTF 的相位,即复色 PSF 的 MTF),与 FFT MTF 同一口径(同 Zemax)。核对:理想透镜与衍射极限差 < 0.01;像面倾斜 30° 时子午 MTF(f) 与衍射极限(f / cos 30°) 差 < 0.01;单色轴上与 FFT MTF 差 < 0.015(低频处 FFT MTF 受光瞳采样影响:14° 视场 3 /mm 处采样 64 差 0.04、128 时 0.017, 惠更斯 MTF 随采样收敛到同一个值);有测试。 - 包围能量:以参考点为圆心、半径 r 的圆内能量占比。
method=diffraction(默认)由各波长的 FFT PSF 积分:引擎的 PSF 是补零光瞳 FFT 的模方,网格样本正好是一个带限周期函数(频谱 = 光瞳自相关,网格内不混叠),所以圆内积分逐个频率解析地求 (∫ e^{2πi f·x} dA = r J1(2πrρ)/ρ),没有像素台阶、r → 0 也准;各波长的 PSF 以自己的主光线为中心,这里按主光线的垂轴色差平移 对齐后按权重合成。method=geometric用光瞳分层抖动采样(每边 4 ×sampling,约 5 万条 / 波长)的光线落点,不含衍射。 圆心ref=chief是主波长主光线像点、centroid是复色能量质心;wave=0全部波长按权重合成(与 PSF、波前图的wave=0= 主波长 不同:包围能量与 Zemax 一样默认看复色)。衍射极限 = 各波长 1 − J0² − J1² 按权重合成。完美抛物面镜与 Rayleigh 公式逐点一致 (< 2e-3)、纯离焦的几何包围能量 = (r/R)²(r50、r80 差 < 0.5 %),有测试。半径默认到最差视场 90 % 能量半径 × 1.5(至少 3 个艾里半径)。 - 相对照度:像面上某点的照度与轴上之比 = 出瞳在像方方向余弦空间里的面积之比(均匀朗伯物、辐亮度守恒;即像点看出瞳的投影立体角, Zemax 的定义)。光瞳上分层抖动采样(默认 101 × 101),每条光线两侧各偏一点追迹,有限差分求 ∂(L, M)/∂(Px, Py) 后积分; 渐晕、遮拦、光瞳像差、像方 F 数随视场的变化都计入,畸变不计入(与 Zemax 一样)。三条线都是 0–1 的比值,同一纵轴、不用双轴; 有效 F 数 = 1 /(2·√(A/π)) 在信息块与数字页。理想薄透镜与独立积分 ∫∫ f²/ρ⁴ dA 差 < 2e-4、加表面口径挡光后透过占比与照度 都与两圆交集的解析值一致(< 3e-3),有测试;反远距广角(examples/wide_angle)最大视场 1.009——入瞳随视场变大,抵消了 cos⁴, 用能量守恒法(物方光束截面 × sinθ ÷ 像面面元)交叉验证为 1.008。
- 离焦 MTF:与
lb mtf同一口径(FFT、复色按复数 OTF 合成)。像面沿自身法线移动、顺传播方向为正(折转系统也对),在光学系统的拷贝上移动,设计本身不变。最佳焦面 = (T + S)/2 最大处(离散最大值两侧抛物线插值);最大值落在 扫描端点时空心三角、标「在扫描范围外」,加大step或steps再看。默认 21 个位置、步长 λF#² 取整、频率为截止频率的 1/8 取整。 像面放在焦点后 0.05 mm 的抛物面镜,最佳焦面算出 −0.05 mm(差 < 1e-4 mm),像面上与 MTF 分析一致,有测试。 - 网格畸变:物方正方形网格(半宽 = 最大视场)的主光线像点 vs 理想(近轴)网格。角度视场按 tan 等距取格点,理想像就是正方形网格 (直线成像为直线即无畸变);理想像点 = 近轴倍率 ×(tanθx, tanθy 或物高),倍率 x、y 各自用小视场主光线外推定标(同场曲 / 畸变)。 每点畸变 100·(|r| − |r₀|)/|r₀|;TV 畸变按 SMIA:100·(A − B)/B,B = 中列高度、A = 左右边列高度的平均(桶形为负)。 网格角点超出最大视场(广角的对角约 59°)、引擎追不到时那几个点留空,理想网格照样完整,TV 畸变记「—」。
exaggerate=10把偏离放大十倍看形状(只改显示,信息块注明)。理想薄透镜处处为 0、边中点与场曲 / 畸变图的最大视场畸变逐位一致,有测试。 - 图像仿真:测试图(西门子星、网格、条纹组、棋盘,程序生成)定义在理想像的坐标里,所以左边的理想像就是测试图本身。 每个波长单独算,三通道按波长的颜色合成(短波蓝、长波红,各通道归一:白进白出)。
mode=patch(默认):相对视场field附近一小块,边长默认取艾里直径 × 40 与几何弥散 RMS 半径 × 20 中大的,块内 PSF 不变,各波长的 PSF 按主光线的垂轴色差 相对主波长错开——像散让某个方向的辐条先糊、垂轴色差让边缘出彩边,都直接看得见。mode=full:整个视场(正方形,角点在最大视场), 各波长按自己的主光线像高反查物方(畸变、垂轴色差),乘相对照度,再分 8 × 8 块、每块用该处的 PSF 卷积(沿 +y 算grid个视场的 PSF,转到块的方位角;旋转作用在 PSF 的采样坐标上,是精确的)。卷积时图外按镜像延拓,边上不会凭空变暗。 整幅模式的像素通常比 PSF 大得多(几十到上百 µm),主要看畸变与渐晕;像差的模糊用 patch 看。 理想薄透镜整幅:畸变 0、角点亮度 = 相对照度;完美反射镜 patch 几乎就是测试图本身;垂轴色差与主光线一致,有测试。 surface=all:每个面一格,按本面通光半口径归一(口径圆一样大),格下写半口径与光束占用。自动半口径按实际光线取, 占用必然约 100 %;固定口径(U)的面才看得出紧不紧——占用 ≥ 95 % 标琥珀、溢出标红,信息块写出最紧的那个面。