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 知识结构图:几何约束建模全景
下面这张图,是我自己整理的知识框架。每次做新设计前,我都会过一遍这个结构,确保没有遗漏。
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,这样能保证焦点位置准确。
好了,这一讲的内容就到这里。几何约束建模是镜头设计的硬功夫,你把这些基础打牢了,后面讲像差约束、公差约束的时候,就会轻松很多。记住:光线追迹是手段,约束方程是工具,最终目标是让光线按照你的意愿走。