3. 几何约束建模:光线追迹基础,孔径、视场、光阑的数学表达,边缘光线与主光线的约束方程

各位,咱们进入第三讲。前两讲我们聊了约束系统的整体框架和变量分类,今天要落地了——怎么用几何光学的基本语言,把那些抽象的「约束」变成可计算的方程。

说白了,镜头设计本质上就是跟光线打交道。你约束的不是镜片,而是光线走过的路径。我刚开始做设计那会儿,总觉得约束条件就是一堆公式往里套,后来被一个项目狠狠教育了——一个变焦镜头,视场角稍微偏一点,边缘像质全崩。从那以后我才真正理解:几何约束建模,是所有优化的地基。

3.1 光线追迹:你每天都在用的基本功

光线追迹不是什么高深理论,它就是逐面计算光线与光学表面的交点、折射或反射方向。你想想看,一个镜头少则五六片,多则十几片,光线从物面出发,穿过每一片透镜,最后落到像面上。每一步都要算清楚。

核心公式其实就两个:

  • 交点计算:给定光线起点和方向,求它与球面/非球面的交点
  • 折射定律(斯涅尔定律):n₁ sinθ₁ = n₂ sinθ₂

我在项目中习惯用近轴光线追迹做初始评估,再用实际光线追迹做精细校正。近轴近似虽然快,但遇到大孔径镜头就露馅了——这个后面会细说。

关键认知:光线追迹不是一次性的。优化过程中,每改变一个曲率或厚度,所有光线路径都要重新算。所以约束方程的求导效率,直接决定了优化能不能跑起来。

3.2 孔径、视场、光阑——三个最核心的几何参数

这三个概念,我建议你刻在脑子里。它们定义了镜头「能看到多少光」和「能看多宽」。很多新手搞混孔径和视场,其实它们是完全正交的两个维度。

参数 物理含义 常用符号 约束对象
孔径 决定通光量,控制像面照度 D, F/#, NA 边缘光线高度
视场 决定成像范围,控制物方覆盖 ω, FOV, y₀ 主光线角度
光阑 限制光束的实际物理开口 STO, EP, XP 光线通过与否

光阑的位置特别关键。我记得有一次设计一个广角镜头,光阑放得太靠前,导致边缘视场的光线被镜筒遮挡——这就是典型的渐晕问题。后来我把光阑往后移了两毫米,问题就解决了。嗯,有时候就是几毫米的事。

3.3 边缘光线与主光线:约束方程的主角

在几何约束建模里,我们通常只关心两类光线:

  • 边缘光线(Marginal Ray):从物面中心出发,经过孔径光阑边缘的光线。它决定了镜头的通光孔径和F数。
  • 主光线(Chief Ray):从物面边缘出发,经过孔径光阑中心的光线。它决定了视场范围和像高。

这两条光线,加上它们在不同视场和孔径位置的变体,构成了约束方程的主体。你想想看,一个镜头的像差校正,本质上就是在控制这些光线在像面上的汇聚程度。

我的习惯:在优化初期,我只约束边缘光线和主光线的位置和角度。等结构稳定了,再逐步加入更多光线做精细校正。这样能避免一开始就陷入局部最优。

3.4 约束方程的数学形式

好了,咱们来点硬核的。约束方程怎么写?

对于一个给定的光学表面,光线追迹可以抽象为:

// 光线状态向量
S = [x, y, z, L, M, N]ᵀ

// 其中 (x,y,z) 是位置,(L,M,N) 是方向余弦

// 经过一个表面后的变换:
S' = T(S, surface_params)

// 约束方程就是让 S' 满足某些条件
// 例如:边缘光线在像面上的高度 = 0
h_marginal = f(R, d, n, ...) = 0

实际工程中,约束方程通常写成:

  • 孔径约束:边缘光线在光阑面上的径向高度 = 光阑半径
  • 视场约束:主光线在像面上的径向高度 = 目标像高
  • 光阑位置约束:光阑面处的光线高度比 = 1(即边缘光线刚好通过光阑边缘)

我曾经在一个投影镜头项目里,因为漏掉了主光线的角度约束,导致整个系统的远心度超标。后来花了三天才排查出来——从那以后,我每次建约束模型都会列一个清单,逐条核对。

避坑指南:约束方程不是越多越好。过多的约束会让优化陷入死胡同。我一般遵循「最少必要约束」原则——先保证光线能通过、像面能成像,再逐步加码。

3.5 知识结构图:几何约束建模全景

下面这张图,是我自己整理的知识框架。每次做新设计前,我都会过一遍这个结构,确保没有遗漏。

几何约束建模知识结构图 几何约束建模知识结构 核心目标:光线路径可控 光线追迹基础 交点计算 + 折射定律 近轴 vs 实际光线 三大几何参数 孔径 · 视场 · 光阑 F/# · FOV · 渐晕控制 约束方程体系 边缘光线约束 主光线约束 工程实践:最少必要约束原则 设计流程建议 近轴评估 → 边缘光线约束 → 主光线约束 → 渐晕检查 → 全光线优化

3.6 一个简单的约束方程示例

咱们用一个双胶合透镜的例子,看看约束方程长什么样。

假设我们要设计一个焦距100mm、F/4的双胶合,那么:

  • 孔径约束:边缘光线在第一面入射高度 = 12.5mm(因为D = f/F# = 100/4 = 25mm,半口径12.5mm)
  • 视场约束:主光线在像面上的高度 = f·tan(ω),比如半视场10°时,像高 = 100·tan(10°) ≈ 17.6mm
  • 光阑约束:光阑通常放在双胶合的胶合面上,此时边缘光线在胶合面上的高度 = 光阑半径

写成方程就是:

// 边缘光线约束
y_marginal(surface_1) = 12.5 mm

// 主光线约束
y_chief(image_plane) = 17.6 mm

// 光阑位置约束
y_marginal(stop_surface) = R_stop

你看,就这么简单。但实际优化时,这些方程会随着镜片参数的变化而不断变化,所以我们需要用数值方法去求解。

小技巧:我习惯在优化变量里加入「光线高度差」作为评价函数项。比如让边缘光线在像面上的高度尽量接近0,这样能保证焦点位置准确。

好了,这一讲的内容就到这里。几何约束建模是镜头设计的硬功夫,你把这些基础打牢了,后面讲像差约束、公差约束的时候,就会轻松很多。记住:光线追迹是手段,约束方程是工具,最终目标是让光线按照你的意愿走。