【免费下载链接】optilandComprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.项目地址https://gitcode.com/gh_mirrors/op/optiland点击查看免费下载Optiland 是一款用 Python 编写的开源光学设计、优化与分析工具。本文以官方端到端案例 “Design a Doublet, End to End” 为主线带你走通无色散双胶合透镜achromatic doublet从需求定义到处方报告生成的完整设计流程——不需要切换任何商业软件一个 Python 环境即可闭环。为什么选双胶合透镜它是最简单的“值得认真设计”的镜头单片透镜无法消除轴向色差而双胶合结构恰好是能校正色差的最小系统。本文的需求 → 一阶布局 → 分析 → 优化 → 公差分析 → 处方报告闭环正是光学工程师的完整工作流程官方案例见 Tutorial_1e_Design_a_Doublet_End_to_End.ipynb。先安装环境pip install optiland 第一步写下设计需求确定“好”的量化标准光学设计永远从一张需求表开始。本案例的双胶合透镜规格如下需求项数值有效焦距 EFL100 mm入瞳直径 EPD20 mm即 f/5半视场角±2°波带可见光 F (0.4861 µm)、d (0.5876 µm)、C (0.6563 µm)目标近轴接近衍射极限全波段色差小在设计任何面型之前先算两个基准数字f/5 下可见光的Airy 半径约 1.22·λ·(f/#) ≈ 3.6 µm目标像元尺寸约 5 µm。因此RMS 光斑半径在个位数微米就算合格几十微米就是失败——这就是后文评判每步结果的标尺。GUI 的 System Properties 面板中的波长表与本案例需求完全一致F、d、C 三条可见光波长d 线为主波长Primary Yes。 第二步一阶布局用单片透镜做基线在选玻璃、斗像差之前先做“一阶”系统用一片正透镜满足焦距和口径要求。一块 R₁ ≈ 51.7 mm 的平凸 N-BK7 透镜即可给出约 100 mm 焦距。import numpy as np from optiland.optic import Optic from optiland.diagnostics import check_system singlet Optic(namef/5 Singlet (baseline)) singlet.surfaces.add(index0, thicknessnp.inf) # 物面无穷远 singlet.surfaces.add(index1, radius51.68, thickness8.0, materialN-BK7, is_stopTrue) # 前表面 singlet.surfaces.add(index2, radiusnp.inf, thickness95.0) # 后表面 singlet.surfaces.add(index3) # 像面 singlet.set_aperture(aperture_typeEPD, value20.0) # f/5 singlet.fields.set_type(angle) singlet.fields.add(y0.0) singlet.wavelengths.add(value0.5876, is_primaryTrue) check_system(singlet) # 光路完整性检查确保系统描述无遗漏 singlet.updater.image_solve() # 将像面移到近轴焦点 Optiland 遵循 “after” 约定thickness和material描述的是该表面之后的空间而非表面本身。规则细节见 docs/conventions.rst。结果如何近轴 RMS 光斑半径约85 µm——超过 Airy 半径二十倍。一阶需求焦距、口径达标了成像质量彻底失败。看三波长点列图就明白了三个波长落在三个不同的焦面上这就是轴向色差靠怎么“弯”单片透镜都无法消除——这正是双胶合结构存在的理由。调用lens.draw3D()可以随时获得这样的 3D 视图基于 VTK直观核对光路。 第三步换结构——胶合双片校正色差无色散双胶合透镜把一片正火石镜和一片负密晶镜胶合在一起。两种玻璃色散不同组合起来可以让 F 光和 C 光聚焦到同一点同时保持净正光焦度。本案例选用 N-BK7冕牌玻璃 N-SF5火石玻璃lens Optic(nameAchromatic Doublet, f/5, EFL 100 mm) lens.surfaces.add(index0, thicknessnp.inf) # 物面 lens.surfaces.add(index1, radius61.0, thickness8.0, materialN-BK7, is_stopTrue) # 冕牌前表面 lens.surfaces.add(index2, radius-44.0, thickness3.0, materialN-SF5) # 胶合面 lens.surfaces.add(index3, radius-129.0, thickness95.0) # 火石后表面 lens.surfaces.add(index4) # 像面 lens.updater.image_solve()三个曲率半径定义了整个结构冕牌前表面、胶合面、火石后表面。仅更换结构近轴 RMS 光斑就从 ~85 µm 降到几微米——与 Airy 半径相当。全视场仍不够好剩下的误差交给分析与优化处理。 第四步像差分析点列图与光线扇形图定位残余误差点列图SpotDiagram告诉你模糊有多大光线扇形图RayFan告诉你是什么像差曲线形状对应像差类型不同波长曲线的分离程度对应该差含量。from optiland.analysis import SpotDiagram, RayFan, RmsSpotSizeVsField SpotDiagram(lens).view() # 像点弥散程度 RayFan(lens).view() # 识别像差类型 RmsSpotSizeVsField(lens, num_fields16).view() # RMS 光斑随视场变化本案例的解读近轴曲线近乎平坦、略带 S 形——残余球差加少量二级光谱离轴曲线倾斜且相互分离——彗差与像面弯曲且随视场角增大。分析框架完整实现在 optiland/analysis/ 目录。 第五步透镜优化三个曲率半径做变量、焦距做硬约束Optiland 的优化永远是同三步声明变量 → 声明操作数“好”的定义→ 交给优化器。焦距是需求不是偏好所以给f2操作数高权重from optiland.optimization import OptimizationProblem, OptimizerGeneric problem OptimizationProblem() # 1. 变量三个自由曲率半径 for surface_number in (1, 2, 3): problem.add_variable(lens, radius, surface_numbersurface_number) # 2. 操作数锁住焦距硬约束高权重 problem.add_operand(f2, target100.0, weight10.0, input_data{optic: lens}) # 3 个视场 × 3 个波长的 RMS 光斑目标为 0 for Hy in (0.0, 0.7, 1.0): for wl in (0.4861, 0.5876, 0.6563): problem.add_operand(rms_spot_size, target0.0, weight1.0, input_data{optic: lens, Hx: 0.0, Hy: Hy, wavelength: wl, num_rings: 6, surface_number: -1}) # 3. 交给优化器 OptimizerGeneric(problem).optimize(maxiter200) lens.updater.image_solve() # 优化移动了焦点重新对焦优化后每个视场的光斑都比初始值更小。收益不算巨大——固定玻璃对的胶合双片自由度极少知道什么时候一种结构已“榨干”本身就是设计功力。想更好就要换结构拆开胶合面留空气间隔或更换玻璃对见 Glass Expert 案例 Tutorial_3e_Glass_Expert_Categorical_Optimization.ipynb。优化框架源码在 optiland/optimization/。 第六步公差分析验证设计能经得起制造只在标称参数下工作的设计不是设计。公差分析回答当曲率半径、厚度、装调落在真实制造带宽内时性能掉多少灵敏度分析Sensitivity每次只扰动一个参数找出最敏感的项——它决定你要给厂商提多严的公差蒙特卡洛Monte Carlo从真实分布中同时扰动所有参数跑几百次看结果分布。90 分位 RMS 光斑仍落在预算内设计才可制造该分布本身就是交付物。from optiland.tolerancing import Tolerancing, SensitivityAnalysis tolerancing Tolerancing(lens) # 示例半径 ±0.5 mm 扫描21 步、厚度 7.9~8.1 mm、倾斜 ±0.002 rad # ... add_perturbation(...) 若干次 ... sensitivity SensitivityAnalysis(tolerancing) sensitivity.run() sensitivity.view()蒙特卡洛部分使用高斯分布半径 1σ 0.1% 标称值倾斜 1σ ≈ 1 角分跑 100 次mc.view_histogram()直接出直方图。模块位于 optiland/tolerancing/。 第七步处方报告一行代码生成完整交付文档最后一步是生成可以交给同事或厂商的文档每个面、每种材料、一阶参数、残余像差一应俱全。from optiland.prescription import Prescription Prescription(lens).view() # 控制台打印 Prescription(lens).save(report.pdf) # 保存为 PDF其他扩展名导出纯文本Prescription默认包含 5 个 SectionSection内容SystemOverview系统总览名称、口径、波长、视场FirstOrder一阶性质EFL、F 数、后截距等SurfaceGeometryTable各面曲率半径与厚度表SurfaceMaterialTable各面材料表SeidelAberrationSectionSeidel 像差系数核心实现在 optiland/prescription/prescription.py各 Section 在 optiland/prescription/sections/console / plain text / PDF 三种渲染器在 optiland/prescription/renderers/。需要定制报告时传入自定义 Section 列表即可。️ 替代方案用 GUI 走通同样的双胶合设计流程不想写代码Optiland 自带完整 GUI同一个双胶合设计可以全程鼠标操作Lens Data Editor 编辑面数据、System Properties 配置波长与口径、Analysis 窗口跑点列图左侧栏还有 Optimization 与 Tolerancing 专用面板。GUI 快速上手指南见 docs/gui_quickstart.rst。 下一步从双胶合走向多片复杂系统完成这个案例后你已经拥有了完整的光学设计闭环。沿着官方案例继续走Tutorial_2c_Aberration_Analyses.ipynb——Seidel 系数、波像差学会“读懂”像差Tutorial_2d_OPD_PSF_and_MTF_Calculations.ipynb——衍射级的 MTF/PSF多数规格书真正使用的指标Tutorial_3d_Optimization_Case_Study_Cooke_Triplet.ipynb——把双片思路扩展到四片 Cooke 结构完整学习路线图见 docs/learning_guide.rst 与任务式索引 docs/how_do_i.rst。 附录案例相关文件速查文件 / 目录说明docs/examples/Tutorial_1e_Design_a_Doublet_End_to_End.ipynb本文对应的完整端到端案例optiland/prescription/处方报告生成模块optiland/optimization/优化问题、操作数与优化器optiland/analysis/点列图、光线扇形图等分析框架optiland/tolerancing/灵敏度分析与蒙特卡洛公差docs/quickstart.rst5 分钟快速上手docs/conventions.rst面参数“after”约定详解赞分享【免费下载链接】optilandComprehensive optical design, optimization, and analysis in Python, including GPU-accelerated and differentiable ray tracing via PyTorch.项目地址https://gitcode.com/gh_mirrors/op/optiland点击查看免费下载相关推荐Optiland透镜属性与处方报告指南如何读取一阶光学特性并生成专业设计报告Optiland透镜属性与处方报告指南如何读取一阶光学特性并生成专业设计报告 Optiland 是一个用 Python 实现的光学设计、优化与分析库支持 P如何永久保存微信聊天记录WeChatMsg本地化数据守护完整指南如何永久保存微信聊天记录WeChatMsg本地化数据守护完整指南 你是否曾经因为手机更换、系统升级或意外删除而丢失了珍贵的微信聊天记录那些与家人朋友的温馨对CCG Workflow 的 ui-ux-designer 子智能体从需求到可实施前端设计方案的完整实战指南CCG Workflow 的 ui ux designer 子智能体从需求到可实施前端设计方案的完整实战指南 导读 本文讲解 CCG Workflow 多模型人工智能AI 应用AI Agent多智能体Agent 工作流开发工具CLIdsh-plugin上一篇使用 CAMEL Loong Cookbooks 构建 LLM 强化学习环境单步环境、批量评估与多步博弈实战下一篇Zola 快速上手用单个二进制静态站点生成器从零搭建博客创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考