如何创建复杂的非序列物体
概述
这篇文章介绍了如何通过组合多个物体的方式创建复杂的非序列物体、如何通过拾取求解来锁定一组物体, 以及如何在非序列元件编辑器中复制一组物体。本文使用的附件请从以下链接处下载:
https://customers.zemax.com/support/knowledgebase/Knowledgebase-Attachments/How-to-Create-Complex-Non-Sequential-Objects/Complex.aspx
参数化的物体定义
在OpticStudio中,多数非序列物体都是参数化的,即他们的定义依赖于某个基本的方程。例如,标准透镜 (Standard Lens) 物体是通过如曲率半径、圆锥系数、中心厚度等参数来定义的。这样参数化的物体可以只通过修改非序列元件编辑器 (Non sequential Component Editor, NSCE) 中的数据值就可以进行修改。当物体的数据被手动修改, 或被滑块 (Slider) 工具、宏 (macro) 程序、扩展 (Extension) 程序,以及最关键的被优化器 (Optimizer) 修改时,物体能够快速地重建。
OpticStudio 同样支持非参数化的物体,如多边形物体 (Polygon Object) 或者导入的CAD物体 (Imported CAD Objects)。这些物体最终由一系列数据表示。在某些应用中,使用非参数化的物体有很多优势,例如在进行复杂的光机杂散光分析中,透镜的底座和其他机械件可以通过非参数化的定义方式快速导入。但是在设计阶段,我们需要方便灵活的更改物体的参数,以得到我们想要的结果,参数化的物体定义是这种情况下的理想定义方式。
在OpticStudio中,支持多种参数化的物体定义方式,并且更多新的参数化物体定义方式还会持续添加进来。您可以在用户手册中找到这些物体定义方式的完整列表。此外,OpticStudio还预留有一个自定义的接口允许您定义自己的参数化物体:用户自定义物体 (User-defined Object),它是非常强大的常用自定义工具。
您还可以通过组合已经存在的多个物体来创建一个新的复合物体,这是一个快速且灵活的,不需要编程的创建复杂物体的方式。使用这种方式的关键在于:
明确OpticsStudio支持的物体类型,您可以在用户手册中找到这些物体的完整列表
正确定义不同物体之间重叠的体积和表面的属性,详细信息请查阅用户手册中的“嵌套规则”一节。
用拾取求解将多个子物体关联在一起,以实现改变个别已定义的参数,就可以自动更新组合物体中所有其他参数。
本文示例的目的是创建一个90°弯曲的矩形丙烯酸树脂导光管,它通常用于电路板印刷过程中,将LED(发光二极管)的光线中继到仪器面板上,并分析当弯曲半径改变时,导光管另一端的辐照度会产生怎样的变化。我们还将在导光管中创建一个孔,以方便插入装配结构。并且在导光管的末端放置一个圆形孔径,这样仪器面板上得到的光斑则为圆形。同样,对参数做出的任何改变都会立即体现在所有分析中,而不会需要我们改变每一个参数值。
下图所示为我们要创建的导光管。需要注意的是,导光管末端的辐照度分布随着弯曲半径的变化而变化。由于这个物体是完全参数化的, 因此我们可以输入任意的弯曲半径值,并且物体会随着参数改变而动态重建。
探测器上显示出的多个椭圆光斑是由于光线在光管中发生了不同次数的全内反射导致的,我们可以从下图中清晰的看到全反射现象:
设置系统基本属性
查阅用户手册中的非序列物体列表可以发现,所有物体中并没有符合我们想要的物体形状,然而我们可以通过组合矩形体 (Rectangular Volume Object) 和矩形Torus体 (Rectangular Torus Volume Object) 来创建。
让我们从头开始,一步步创建这个导光管。
打开OpticStudio,点击设置 (Setup) 选项卡中的非序列模式 (Non-Sequential) 新建一个非序列文件。打开系统选项 (System Explorer) 中的单位 (Units),设置透镜单位 (Lens Units) 为毫米、分析单位 (Analysis Unit) 为瓦特每平方厘米 (Watts per cm2)。在波长 (Wavelengths) 中定义系统波长为0.55μm。最后在系统选项中的非序列模式 (Non-sequential) 中设置最大嵌套/接触物体数目 (Maximum Nested/Touching Objects) 为5。该选项定义了物体嵌套、交叉、连接的数量上限。不要将该数值设为超过所需物体的数量,否则它将占用更多的内存却不会带来额外的好处。
创建导光管主体:A
在非序列元件编辑器中,插入一个空物体(物体1)以及一个矩形体(物体2),如下所示。输入如下参数定义矩形体:
参考物体 (Ref Object): -1
材料 (Material): Acrylic
X1半宽 (X1 Half Width): 5
Y1半宽 (Y1 Half Width): 5
Z长度 (Z Length): 20
X2半宽 (X2 Half Width): 5
Y2半宽 (Y2 Half Width): 5
其他参数均为默认值
这里我们采用相对参考而非全局参考,这样做的好处会在复制导光管时体现出来。
为了帮助我们观察物体的位置和局部坐标的方向,点击物体2物体属性 (Object Properties) 中的绘制 (Draw) 选项卡,勾选“局部坐标轴 (Draw Local Axis)”选项。
打开3D布局图观察物体结构。
在非序列元件编辑器中,插入一个矩形Torus体作为物体3,设置如下参数:
参考物体 (Ref Object): -1
材料 (Material): Acrylic
外R (Outer R): 40
内R (Inner r): 30
起始角 (Start Angle): 0
终止角 (Stop Angle): 90
厚度 (Thickness): 10
其余参数均为默认值。
如前文所提到的,矩形Torus体只有在布局图中显示时才使用表面进行表示。在实际的光线追迹过程中,物体会使用实际的方程进行精确定义,定义精度为OpticStudio进行数值计算的精度。
现在我们需要指定合适的X, Y, Z轴位置,以便在不考虑外R参数时,矩形Torus体可以与矩形体正确地连接。需要注意的是,我们接下来马上会改变参数外R来分析光线传播过程的变化。我们将使用拾取解求解来连接两个物体,并使参数外R和内R的值总是相差10mm。
在非序列元件编辑器中,定义参数内R的求解类型为拾取求解 (Pickup Solve),如下图所示:
对于矩形Torus体物体,在非序列元件编辑器中,材料参数栏右侧的参数1栏 (Parameter 1) 表示外R,拾取求解会设置内R总是比外R小10mm。 矩形Torus体的一端应与矩形体+Z方向的面相连,您可以使矩形Torus体的Z轴位置与矩形体的Z轴位置(参数3)保持一致,如下图所示:
创建导光管主体:B
更新3D布局图
最后,我们需要将矩形Torus体在X轴上移动 -1*(外R-5mm) 的距离,如上图所示。将物体3的参数X位置的求解类型定义为拾取求解,如下图所示:
更新的3D布局图中,可以看到两者已经连接在一起。
根据下列参数插入第二个矩形体作为物体4:
参考物体 (Ref Object) : -1
材料 (Material) : Acrylic
X1半宽 (X1 Half Width) : 5
Y1半宽 (Y1 Half Width) : 5
Z长度 (Z Length) : 50
X2半宽 (X2 Half Width) : 5
Y2半宽 (Y2 Half Width) : 5
其他参数均为默认设置
在布局图中显示物体4的局部坐标轴。
创建导光管主体:C
我们需要将物体4绕Y轴旋转-90°,在非序列元件编辑器中,设置关于参数旋转Y (Tilt About Y) 为-90。OpticStudio使用右手坐标系,因此从Y轴正向看去,绕Y轴反向旋转是顺时针的。
物体4的Z轴位置参数应与参数外R相同(即-5mm),将矩形体Z轴位置的求解类型同样定义为拾取求解,参数设置如下图所示:
现在,系统布局图如下所示:
在导光管上创建洞
下一步是在物体4上放置一个孔(材料是空气)。插入圆柱体(Cylinder Volume)作为物体5,定义参数如下:
参考物体 (Ref Object): -1
Y位置 (Y position): 5
Z位置 (Z Position): 40
倾斜X (Tilt About X): 90
材料 (Material) : Blank (留空)
前R (Front R) : 2
Z长度 (Z length) : 10
后R (Back R) : 2
如果想要使矩形体(物体4)与圆柱体(物体5)的重叠体积为空气,则在本例中需要将圆柱体在非序列元件编辑器中的位置放置在矩形体之后,有关体积嵌套的详细规则,请参阅用户手册。
为了追迹光线穿过导光管,我们需要在物体1的左侧插入一个矩形光源 (Source Rectangle) 物体,其参数设置如下所示:
参考物体 (Ref Object) : -5(参考于一个空物体)
Z位置 (Z Position) : -10
陈列光线条数 (# Layout Rays) : 20
分析光线条数 (# Analysis Rays) : 400000
X半宽 (X Half Width) : 4.8
Y半宽 (Y Half Width) : 4.8
其他参数均为默认设置
其中放大的布局图显示了当前圆孔边缘处发生的全内反射现象,这是因为孔内的折射率低于矩形体的折射率。
在导光管末端放置光阑
为了在导光管末端放置一个圆形光阑,我们需要将两个面嵌套在一起,一个是矩形体的表面(作为阻挡光阑)以及一个圆形孔径(设置为空气)。首先按照如下参数插入一个矩形体作为物体7:
参考物体 (Ref Object) : -3(参考于物体4)
Z位置 (Z Position) : 50
材料 (Material) : Absorb
X半宽 (X Half Width) : 5
Y半宽 (Y Half Width) : 5
其他参数均为默认设置
再插入一个标准面 (Standard Surface) 物体作为物体8。它代表导光管末端的圆形光阑,其参数如下所示:
参考物体 (Ref Object) : -1
材料 (Material) : Blank(留空)
最大孔径 (Max Aperture) : 2.5
其他参数均为默认设置
如果此时更新布局图,您将会看到如下提示:
并且,如果此时点击分析选项卡中的光线追迹 (Ray Trace),您将会得到如下错误提示:
在本例中,产生几何错误的原因是因为我们违背了一个嵌套规则。如帮助系统 (Help System) 中“Setup Tab/Editors Group/(Setup Tab)/Non-Sequential Component Editor/Non-Sequential Overview/Object Placement”一节中的表述:表面物体不会与一个体积的表面共享一个边界,除非体积表面的属性是反射或者吸收,或者体积物体在非序列元件编辑器中位于表面物体之后(在这种情况下,共享边界的属性由体积物体定义)。 在本例中,物体8是空气(表面属性不是吸收或反射)与物体4的边界重叠。我们可以将光阑(物体7和物体8)的位置远离导光管1μm,使光阑的Z轴位置从50mm变为50.001mm
在布局图中可以看到,超出光阑部分的光线如我们预想的一样被阻挡。
将光线追迹至探测器
现在,我们放置一个探测器来进行光线追迹分析。插入一个矩形探测器 (Detector Rectangle) 作为物体9:
参考物体 (Ref Object) : -1
Z位置 (Z Position) : 20
材料 (Material) : Absorb
X半宽 (X Half Width) : 25
Y半宽 (Y Half Width) : 6
X像元数 (# X Pixels) : 400
Y像元数 (# Y Pixels) : 100
数据类型 (Data Type) : 0 (非相干照度)
颜色 (Color) : 0 (探测器查看器以灰度进行显示)
点击分析选项卡中的光线追迹,勾选“使用偏振 (Use Polarization)”选项,点击清除并追迹 (Clear & Trace)。勾选“使用偏振”是为了在计算过程中考虑由表面部分反射和体吸收所造成的能量损失。正如前文所讨论的,探测器上的多个椭圆形光斑是由于光线经过不同次数的全内反射导致的。
为了观察外R(参数1)改变时布局图中系统的变化,我们可以使用滑块工具,在优化选项卡中点击滑块,设置如下参数并点击动画 (Animate)。
从布局图中可以看到系统随弯曲半径的变化而变化:
您可以改变参数外R的值然后重新追迹光线,观察辐照度分布的变化。您也可以编写一个简单的ZPL宏将光线追迹到探测器并保存每个参数值对应的探测器分析结果。如下所示辐照度根据外R参数的变化而变化的动画就是用这样的宏来实现的。
复制导光管
让我们来创建另外一个完全相同的导光管,并把它放置在与第一个导光管Y轴方向的一定距离上。
在矩形探测器后,插入一个空物体,选择物体1(高亮显示)并在键盘上按住Shift键并同时点击下方向键,同时选择物体1至物体9。
右键鼠标选择复制对象(Copy Objects)。
选择物体10,再次右键,选择粘贴对象(Paste Objects),非序列组建编辑器将会变成如下样子:
在物体10(空物体)Y轴位置参数上键入20mm,来将第二个光管放在第一个光管+Y方向上20mm远的地方。同样将物体12外径R的解类型定义为拾取之前的矩形环面体的外径R。
布局图现在有两个距离为20mm的光管了。
我们在本例中采用了相对对象参考(relative object reference),即在物体参考参数( Ref Object )中使用负数来定义参考对象。如果我们使用绝对对象参考(absolute object referencing),我们将需要非常麻烦地为第二个光管修改参考对象的编号。
小结
本文表述了在OpticStudio非序列模式中如何嵌套体积对象和表面对象来创建复杂的物体。
我们得到的经验有:
参数化对象应该尽可能多地使用
用户手册中体积对象和表面对象的嵌套原则应该严格遵守
用组合物体的方式创建复杂的物体是一个非常实用的方法
正确的对象参考能够令复制一组物体变得轻松