|
这是我翻译的一篇技术文档,属于光学设计初学者的酵母片类型。它讲清楚了镜头的近轴属性设定的物理意义,和当你输入近轴属性数据时,光学设计软件在幕后究竟做了那些工作。
??今天,光学设计软件中的镜头数据都是以文件的形式保存在磁盘上;而在早期的镜头设计程序中并非如此。早年间的镜头数据都处于这样一种状态:一叠打孔的数据卡片上记录着镜头设计的初始数据,然后被读入计算机。
??那个时期,人们倾注了大量的精力在光学设计的数值计算方面,而镜头数据的处理则较少为人关注。随着镜头设计软件的广泛使用,人们发现,为了更正数据中的错误,设计者的大部分时间花费在卡片打孔和提交新的作业上。设计者经常会发现镜头设计最难的部分在准备一叠正确的镜头数据卡片上!
??经过数年的升级,光学软件的镜头数据处理功能已经得到了增强,从简单的数据处理转变为现在的镜头数据库管理。时下的任何一款光学设计软件都提供了简化镜头数据管理的功能,比如对镜头库的在线访问,交互式编辑,自动的绘图等等
??镜头数据库包含了描述光学系统的所有需要的数据项,不仅仅只是构建系统的必要物理参数(曲率、厚度等等),还包括系统的应用条件(物距、像距、视场等等)。有些软件还将优化数据也包含到镜头的数据库中,另外一些则提供单独的子程序来处理优化数据。无论如何,现在镜头数据库通常都是光学设计软件最大块的一部分。
??有两个因素使软件对镜头数据的管理复杂化。第一个是软件面对的光学系统的复杂度差异很大,这就需要很多不同的数据来描述。第二个因素是数据经常是间接描述的。比如,有时候常常指定了光线从某一面的出射斜率,而不是直接指定这个面的曲率。这种指定方式被称为solve,光学设计软件将近轴光线追迹和镜头数据组合到一起,使这种指定方式成为可能。
??时下的光学软件可以在几个微秒内完成实际光线(exact rays)的追迹,有意思的是,近轴光线追迹算法仍然应用于现在的软件(本文中的exact rays指的是实际的skew ray,现在的软件都将子午光线看作为skew ray的特例,采用专门的简化子程序追迹子午光线不会带来明显的计算效率。译者注skew ray就是籍由空间矢量运算来追迹的普通光线,算法参见OSLO的asyst_ccl.ccl文件中的cclrtest函数)。实际上,由于近轴光线的几个重要属性使得它们被组合到镜头的数据管理中。
??首先,近轴光线提供了一个线性模型,使得其中的光学系统分析是较为简单的双向线性变换。其次,近轴光线追迹不会失败,而实际光线可能会无法和某些面相交,或者发生全反射。最后,近轴光线决定了完美镜头系统的性能。在一个校正好的镜头中,像差已经平衡,使实际光线重合于近轴光线计算得到的像点,而不是其它的点。
??描述的光学系统的数据有两种基本类型。第一类是系统数据类型,它们将系统作为一个整体来描述。另一种就是面数据类型,描述的是单个的面和面的位置。通常,软件中将光学系统描述为一系列的面,始于物面,止于像面(实际的像是否成于其上并不重要)。这实际上假设设计者预先知道光线经过不同面的次序。对于这一假设不成立的系统,我们称其含有non-sequential面,后面再讨论。
系统数据
??系统数据描述的是光阑,视场,系统评价所用的波长,也可能还有指定评价模式的数据,渐晕条件等等。
孔径和视场
??孔径和视场描述了光学系统的使用条件。孔径是由axial ray(轴光线)指定的,轴光线由物面轴上顶点发出,经过入瞳边缘。视场由chief ray(主光线)指定,主光线由物的边缘发出,经过入瞳的中心。
??有好几种指定轴光线和主光线的方法。如果物距为无穷远,入瞳半径和半场角就比较合适。对于物象有限共轭系统,指定物方数值孔径和物高比较方便。
??有些软件允许用户直接指定像方近轴光线数据,如F/#和像高。由于这种指定方式需要程序完成一个迭代过程来决定起始光线的方向,从程序计算的角度来看,这这比较麻烦。
波长
??评价应用于多波长的系统,有必要在程序中指定使用了何种波长。为了计算一阶色差和二级色谱,至少要指定三个波长。对于通常的光学系统,指定更多的波长可以使评价更为准确,一些软件也因此允许指定更多的波长。不同的光学设计软件之间,并没有什么指定波长的统一标准。一些软件指定中心波长的序号为1,而另一些则指定最长或者最短的波长序号为1。波长的单位究竟采用微米还是纳米,也因不同的软件而不同。
其它的系统数据
??描述完整的光学系统还需要一些其它的系统数据,但是这些数据是什么,以及如何在程序中处理它们则随软件不同而有所不同。这里有必要提到的是光阑的设定。我们通常指定限制轴光线角度的那个面为光阑。指定了光阑,近轴入瞳和出瞳的位置就可以根据系统的成像特性来决定。近轴入瞳形式上决定了孔径和视场,光阑并不影响实际光线的路径(译注:只影响哪些光线可以到达像面)。
??我们通常用渐晕因子来表征理想离轴光线和实际离轴光线在光阑上的高度差异。更为重要的是,渐晕因子提供了实际光线在光阑上的比例坐标。通常有上限,下限和倾斜渐晕因子。渐晕因子的设定和处理也随软件不同而不同。
面数据
面位置
??有两种基本方法可以指定组成镜头的面的位置。一种是相对于前一个面的位置来指定。另一种是相对一个固定的面来指定(例如,第一个面)。这两种方法各自推导出局域坐标系和全局坐标系。局域坐标系适合于常见的由一系列共轴旋转对称面构成的光学系统。含有反射面,倾斜或者偏心面的系统适于使用全局坐标系。为了提高光线追迹的速度,光学软件在程序内部会将全局座标数据转化为局域座标数据。
??大多数光学软件采用标准的坐标系和符号规则,也有少数软件例外。每个表面定义的通常都采用右手坐标系,Z轴为对称轴,YZ平面为子午面。在采用局域坐标系记法的系统中,每个表面都定义了一个坐标系,同时用这一坐标系来表述这一表面数据,和下一个表面的坐标系的原点。通常采用Euler-angle记法规则来描述倾斜系统,绕X轴的倾斜记为α,绕Y轴的倾斜记为β,绕Z轴的倾斜记为γ。由于倾斜和偏心不具有累积效果,镜头文件中必须有一个数据来指定倾斜和偏心操作的先后次序。
表面轮廓
??在光学系统使用的各种面型中,最常见的是旋转对称面,表达式如下:
c是曲率,k是conic常数,d,e,f,g是非球面系数。这一公式通用于不同光学软件。光学设计软件中常常使用conic常数,而没有使用数学文献中常用的偏心率e。这主要是考虑到球面的conic常数为零,不需要额外设定数值(k=1-e^2)。尽管非球面包含所有不是球面的面型,但从设计的角度来看,仅仅使用conic常数的二次非球面和d,e,f,g描述的多项式非球面还是有很大区别的。前者的光线追迹只需要解二次方程就可以了,后者则需要数值迭代算法来求解光线与面的交点。
??很多光学软件中可以处理比上述更为复杂的表面,比如柱面,toric面, spline面,甚至一般的形式的非球面z = f(x,y),f(x,y)是任意多项式。软件对面型的一般处理,用简单旋转对称面就可以解释清楚。
??前面已经讨论过,近轴光线的重要性使得镜头数据常常会采用solve这种间接的方式指定。这使得设计者可以将近轴属性数据和镜头数据组合到一起,再不需要额外计算,优化得到镜头的近轴属性数据。考虑光学系统的第j个面,有如下关系:
yj=该面的光线高度
uj=像方光线斜率
cj=该面的曲率
nj=像方折射率
tj=像方厚度
近轴光线追迹公式如下

整理一下公式,我们即可由光线数据给出需要的曲率和厚度。参见下面公式:
??光学设计软件将通过solve指定的曲率,厚度和直接指定的数值同等对待。指定厚度的solve称为height solve,指定曲率的solve称为angle solve通常,我们采用轴光线在光学系统最后一面的height solve将像面自动设定到近轴像面处。同一个面上的主光线solve可以定位出瞳面,轴光线的angle solve可以用来锁定焦距(在入瞳口径固定的情况下)。一些软件中还提供其它类型的solve,例如center of curvature solves和aperture solves.
??如果籍由近轴光线数据间接指定镜头数据,也就是solve,这意味着只要镜头数据有变化,就至少要追迹两条近轴光线来计算solve数据的数值。在光学设计软件中,通常是lens setup子程序来完成这一工作。即使是一个小小的设计案例中,solve的计算也可能要做上千次,所以lens setup子程序的效率要非常高。
??Lens setup子程序还会完成一些其它工作,如预先计算折射率,坐标旋转传递矩阵等等这样一些后面会反复用到的数值。在很多软件中可以指定某些数据等于前一面的对应数据。这一功能称为pickup,在含有反射镜的系统,或者锁定几何尺寸的关系中常常用到。不支持pickup功能的软件通常会有替代的方法来锁定数据之间的关系。尽管Pickup的计算不需要近轴光线追迹,但它和solve一样也是由lens setup子程序计算得到的。
其它的面数据
??完整的描述一个面还需要一些其它的数据。其中最重要的是下面将要讨论的孔径,以及折射率。折射率常常是通过玻璃目录中的玻璃名称来指定。在lens setup子程序中,折射率是通过玻璃厂商提供的插值公式和系数,以及设计者指定的波长计算的。还有一些和面相关的数据,包括衍射面的相位数据,渐变折射率数据,全息面数据和膜系数据等等。
??在很多光学软件中,孔径的实际物理意义并不是很明确。尽管孔径对光学系统性能的影响至关重要,但它们通常并不直接出现在优化函数中。相反,优化过程中对孔径的控制是通过锁定边缘光线的高度来实现的。如果直接指定孔径,那么它就会阻断落在孔径外面的光线,继而造成优化过程的不稳定。相应的,一些光学软件中,在优化阶段忽略孔径。另外一些软件,指定经过孔径边缘的实际reference rays,以此来来考虑孔径的效应。
Non-sequential 表面
??在一些光学系统中,无法预先指定光线通过系统的时候,光线和每个面相交的次序。最常见的就是棱镜,比如在角锥棱镜中,光线与面相交的次序取决于光线入射的坐标。其它的例子还有light pipe器件和一些非成像用途的聚光器。很多光学软件中提供non-sequential面型,但是,这些软件并不是去设计这些non-sequential面。提供这些non-sequential面的主要目的,是将它们作为一个子系统,配合需要设计的其它光学部分。描述non-sequential面的数据比较复杂,光线追迹的速度也较慢。这其中的主要原因在于有多个表面需要遍历,以确认光线与何者相交。
Lens setup子程序
??无论数据是否处理完成,lens setup子程序都会根据现有数据构建镜头。它会计算pickup锁定的数据。如果系统包含孔径光阑,它也会计算入瞳位置。为了计算籍由solve指定的面数据,近轴轴光线和主光线会至少追迹一次,lens setup子程序还会预先计算一些其它的数据,比如孔径尺寸,折射率和近轴常数。
??由于使用频繁,lens setup子程序的计算效率必须非常高。不仅仅在镜头数据输入完成后lens setup子程序要运行一次,每一次程序内部修改了镜头数据,这一子程序也要运行,典型的是优化时对镜头参数的修改和multi-configuration系统的不同configuration间的切换。通常,lens setup子程序花费的时间(至多)在毫秒级,因此,除了显示的计算结果,用户感觉不到这一子程序的存在。
[此贴子已经被作者于2004-11-24 12:35:42编辑过]
|