3. 序列与非序列模式:光线的两种追迹哲学

做光学仿真,你首先得搞清楚一个问题:光线在系统里是怎么跑的?

Zemax 给了我们两种选择——序列模式和非序列模式。很多人刚接触时觉得这只是个软件设置,选哪个都行。但我在项目里吃过亏,选错了模式,仿真结果跟实测差了十万八千里。今天我们就来彻底讲明白这两种模式的区别。

3.1 序列模式:光线追迹的“流水线”逻辑

序列模式,说白了就是光线按你定义的顺序,一个面一个面地走。就像工厂里的流水线,每个工位只处理经过它的零件。

核心特征:光线严格按照“面序号”依次传播,不会回头,不会跳过,不会分叉。

在序列模式下,你定义的是“面”(Surface),而不是“物体”。每个面有曲率、厚度、材料。光线从物面出发,经过第1面、第2面……直到像面。

我个人习惯用序列模式做成像系统的初始设计。为什么?因为计算快,优化方便。你想想看,一个镜头系统可能有20个面,序列模式只需要追迹一条主光线和几条边缘光线,几毫秒就能算出像差。

序列模式的追迹流程

  1. 定义面序列:从物面到像面,按顺序排列
  2. 设置光线参数:视场角、波长、光瞳位置
  3. 逐面追迹:光线在每个面上应用折射/反射定律
  4. 输出结果:像面坐标、光程差、波前等

这里有个关键点:序列模式默认光线不会“碰到”非序列物体。如果你在序列模式下插入一个棱镜或光栅,它会被当作一个“面”来处理,而不是一个实体。

我曾经踩过的坑:有一次做分光棱镜仿真,我用序列模式,把棱镜的两个面分别定义,结果光线直接穿过去了,根本没发生分光。后来才意识到,分光需要非序列模式来处理光线分裂。

3.2 非序列模式:蒙特卡洛方法的真实世界

非序列模式就完全不一样了。光线不再按固定顺序走,而是像真实世界一样,在三维空间里自由传播。光线可能碰到任何物体,可能反射、折射、散射、吸收,甚至分裂成多条光线。

这种模式的核心算法是蒙特卡洛方法。说白了,就是随机抽样。我们发射大量光线,每条光线的路径由概率决定,最后统计所有光线的行为,得到统计意义上的结果。

核心特征:光线在三维空间中自由传播,可以分裂、散射、多次反射,最终由探测器收集。

蒙特卡洛方法的三个步骤

步骤 描述 我的经验
1. 光线生成 按光源特性随机生成光线方向、位置、能量 光源模型越精确,结果越可靠
2. 光线传播 光线在物体间传播,遇到界面时按概率决定行为 注意设置合理的“光线分裂”阈值
3. 结果统计 探测器收集光线,统计照度、强度分布 光线数量不够,噪声会很大

你可能会问:为什么要用蒙特卡洛方法?因为真实世界太复杂了。一个LED灯,光线可能经过透镜、反射杯、扩散板,最后打到目标面上。中间有无数次反射和散射,序列模式根本处理不了。

我记得有一次做汽车尾灯仿真,用了非序列模式。尾灯里有几十个LED,每个LED发出数万条光线,经过反射镜、导光条、透镜,最后形成特定的光型分布。如果我用序列模式,光是定义面序列就能让我崩溃。

3.3 两种模式的核心差异

为了让你一目了然,我整理了一个对比表:

对比维度 序列模式 非序列模式
光线路径 固定顺序,逐面传播 自由传播,可分裂
计算速度 快(毫秒级) 慢(秒到小时级)
适用场景 成像系统、镜头设计 照明系统、杂散光分析
优化能力 强(支持自动优化) 弱(主要靠手动调整)
物体定义 面(Surface) 实体物体(Object)
光线分裂 不支持 支持

3.4 选择策略:什么时候用哪个?

这个问题没有标准答案,但我可以给你一些实战建议:

我的选择原则:如果系统里光线路径是确定的、没有分叉的,用序列模式。如果光线可能走多条路径、有散射或分光,用非序列模式。

优先选序列模式的场景

  • 传统镜头设计(手机镜头、相机镜头)
  • 光学系统初始优化
  • 像差分析(球差、色差、彗差等)
  • 系统公差分析

优先选非序列模式的场景

  • 照明系统设计(LED灯具、汽车大灯)
  • 杂散光分析(太空相机、高精度测量)
  • 光导、背光模组设计
  • 激光雷达系统仿真
  • 生物医学光学(组织散射)

嗯,这里要注意一个特殊情况:有时候你需要混合使用两种模式。比如,先用序列模式优化镜头,再把镜头导入非序列模式做杂散光分析。Zemax 支持这种混合仿真,我经常这么干。

3.5 知识体系总览

下面这张图总结了本章的核心逻辑:

序列与非序列模式知识体系 光线追迹模式 序列模式 逐面传播,固定顺序 快速计算,支持优化 适用:成像系统、镜头 非序列模式 自由传播,光线可分裂 蒙特卡洛方法,统计结果 适用:照明、杂散光 选择策略:路径确定用序列,路径复杂用非序列

3.6 实战案例:一个简单的选择判断

假设你要设计一个手机摄像头镜头。光线从物体出发,经过几片透镜,最后到达传感器。路径是确定的,没有分叉。这时候,序列模式是你的最佳选择。你可以在几分钟内完成初始结构,然后优化像差。

再假设你要设计一个LED台灯。LED发出的光线经过反射罩、扩散板,最后照亮桌面。光线在反射罩上可能多次反射,在扩散板上发生散射。这时候,非序列模式才是正确的选择。你需要发射几万条光线,用蒙特卡洛方法统计桌面的照度分布。

我的建议:如果你不确定该用哪种模式,先问自己一个问题——“光线会不会分裂?”如果答案是“会”,用非序列模式。如果答案是“不会”,用序列模式。