如何在布局图中显示光瞳
概述
在OpticStudio的序列模式中,您可以在不影响其他面的情况下使用虚拟面 (dummy surface)和求解类型:拾取 (pickup)在透镜数据编辑器 (LDE)及布局图 (Layout)中显示系统的入瞳和出瞳。这篇文章介绍了如何在透镜数据编辑器中使用ZPL宏和主光线高度 (Chief Ray Height)求解厚度,以及如何在编辑器中隐藏虚拟面。本文使用的示例文件请从以下链接下载:
https://customers.zemax.com/ZMXLLC/media/Knowledge-Base/Attachments/12108_Double-Gauss-28-degree-field_pupils.zip
介绍
为了在透镜数据编辑器和布局图中显示入瞳和出瞳面,我们需要在透镜编辑器中插入虚拟面来模拟光瞳的位置。本文使用OpticStudio自带的Double Gauss 28 degree field.ZMX文件作为示例,该文件位于Zemax根目录下Samples > Sequential > Objectives文件夹中。对于序列系统,您可以在分析 (Analyze)选项卡 > 报告 (Report) > 详细数据 (Prescription Data)的报告中查看系统光瞳的数据。
对于本系统来说,光瞳数据如下所示:
在OpticStudio中,入瞳位置总是参考于表面1,出瞳位置总是参考于像面的。为了减少对系统的改变,我们需要现在第一片透镜前及像面前分别插入一个虚拟面。
根据光瞳的定义,光瞳的位置位于主光线与光轴的交点处,或者为主光线高度为0的地方。OpticStudio内置了便捷的厚度求解功能,该功能可以快速求解特定表面的厚度以满足近轴主光线在该表面处的高度为零。需要特别注意的是,这个求解类型与其他求解类型一样,需要设置在光阑面 (STOP)之后。因此我们只能使用厚度求解计算出瞳位置。对于入瞳位置,我们可以使用ZPL宏求解进行计算。OpticStudio内置的求解类型:光瞳位置 (Pupil Position)使用实际傍轴光线进行计算而非近轴光线,因此可以用于离轴系统或使用近轴光线无法准确计算光瞳位置的系统。但在这篇文章中,我们采用主光线高度的计算方法,因为近轴光线(计算迭代周期更少)和实际光线(计算稳定性更强)的计算结果偏差很小,在六位小数点精度之内。
在开始设置之前,我们需要插入四个虚拟面,其中两个面在表面1之前,两个在像面之前。本文将以D1-D4表示这些表面:
在开始实际计算之前,我们首先需要对这些表面进行设置。分别设置D2和D4表面厚度的求解类型为拾取,使其分别拾取D1和D3的厚度,并设置缩放比例为-1。完成后您将会看到厚度参数的求解类型标记为“P”:
然后我们需要设置这四个表面及D2的下一个表面(下表标记为D2+1)的表面属性 (Surface Properties),以使OpticStudio只画出这些表面而不画出经过这些表面的光线。您需要在表面属性中的绘图 (Draw)选项卡中进行如下设置:
现在让我们先设置比较容易的出瞳面位置。您只需要选中D3面,设置该表面的厚度求解类型为主光线高度 (Chief Ray Height)并保持高度值为0。设置完成后该厚度参数后会出现标记“C”。此时主光线的参考球面的曲率半径与出瞳面的厚度相同。因此您可以设置D4面的曲率半径拾取D3面的厚度并设置缩放比例为-1:
对于入瞳位置的确定,我们需要使用ZPL宏求解。首先,在界面上方导航栏的编程选项卡中点击新建宏 (New Macro)创建一个新的宏,并以LDE_EP为文件名保存。在这段宏程序中复制粘贴下面这段代码:
SOLVEBEFORESTOP
SOLVERETURN OPEV(OCOD("ENPP"),0,0,0,0,0,0)
如果宏无需使用光线追迹的数据并且该宏求解需要设置在光阑面之前时,关键词 (Keywords)“SOLVEBEFORESTOP”需要编写在ZPL宏的第一行,如上段代码所示。当宏需要使用光线追迹的数据时,使用该关键词进行的一些计算将不再有效,您可以浏览用户手册详细了解如何正确使用“SOLVEBEFORESTOP”。数值函数 (Numeric Functions) “OPEV(OCOD())”的组合是一个非常有效的方法来提取现有优化函数操作数所能计算的数值结果,而不用在优化函数编辑器中设置。
选中表面D1,设置厚度求解类型为ZPL宏 (ZPL Macro)并在宏名称一栏输入“LDE_EP”(输入时不带引号),需要注意的是该宏程序并非只能用于当前系统,还可以应用到其他系统之中:
现在您可以在布局图中查看表示系统入瞳和出瞳的两个虚拟面:
在某些系统中这个方法并不适用,例如在物方远心系统中系统入瞳位于物方无穷远处,因此光瞳无法在布局图中显示。