如何使用布尔物体、原生布尔和组合透镜物体以及合并物体工具

OpticStudio 支持使用其他非序列元件 (NSC) 的物体和表面创建复杂物体。

作者 Mark Nicholson & Sandrine Auriol

简介

原生布尔物体、布尔物体和组合透镜物体可用于在非序列模式下,通过其他物体和表面创建复杂物体。

布尔物体参照体积物体进行布尔运算,而组合透镜物体使用非序列表面来构建并组合透镜的前后几何结构。这两种物体类型都将参考非序列元件编辑器中之前的物体。

本文说明了如何使用布尔物体,以及如何定义每个表面上的散射和衍射属性。本文还将演示如何使用合并物体工具来组合两个物体,并将产生的物体保存为CAD文件格式。

原生布尔物体

启动 OpticStudio 并打开用户数据文件夹启动 OpticStudio 并打开用户数据文件夹 {Zemax}\Samples\Non-sequential\Geometry Creation中的文件“Boolean Example 1 - basic operations.zmx”。此文件包含两个球物体,即物体1和2,以及一个原生布尔物体,即物体3。移动至非序列元件编辑器的右侧可查看原生布尔物体的属性参数:

NSCE

原生布尔物体可拥有最多10个“父”物体,但在本例中,我们仅使用两个物体。原生物体可执行以下任何运算:

+ 将两个物体组合在一起(逻辑 A OR B)。

- 从第一个物体中减去第二个物体(逻辑 A AND NOT B)。

& 计算两个物体的交集(逻辑 A AND B)。

^ 产生属于一个或另一个物体但不同时属于两者的部分(逻辑 A XOR B)。

$ 从第二个物体中减去第一个物体(逻辑 NOT A AND B)。

您也可以组合使用这些运算。在布尔物体的“标注 (Comment)”字段中输入要执行的布尔运算即可:

Boolean object

这样可生成与“物体A或物体B”相同的体块:

Layout_1

下图为物体A、B,上图为所生成的原生布尔物体。请注意,因为父物体为参数化形式,所以原生布尔物体也是如此。如果更改父物体中一个球体的半径,则原生布尔物体也会更新。父物体可由任何玻璃、材料组成,但原生布尔物体将忽略父物体的材料,而直接将玻璃材料或梯度折射率添加到原生物体物体上。

原生布尔物体的表面属性继承自父物体。每个球体物体都包含单一面,因此这些物体的布尔A + B包含两个面:

Object_3_face_0

两个面都继承自父物体:

Both_faces_parent_objects

转到球体物体1的“膜层 (Coat)/散射 (Scatter)”属性框,并添加AR膜层。然后,查看原生布尔物体3的“膜层/散射”属性。原生布尔物体的0面继承了父物体1的表面属性:

Coat_scatter

父物体的几何结构决定了布尔原生物体的几何结构,父物体的“膜层/散射”属性决定了布尔原生物体的“膜层/散射”属性。此相关性与父物体相对于布尔物体的位置无关。因此,父物体可以位于系统中的其他位置,也可以隐藏并忽略。如果父物体未从原生布尔物体处移开,或者未隐藏并忽略,则光线将同时与布尔物体及其父物体进行相互作用。通常情况下,这不是预期的情况,因此建议移动或忽略父物体。

您可以右键点击父物体并选择“忽略并隐藏物体 (Ignore and Hide Object)”。

Ignore_and_hide_object

这样可以将“光线忽略物体 (Rays Ignore Object)”设置为“总是 (Always)”并勾选“不显示物体 (Do Not Draw Object)”。

“光线忽略物体”位于物体属性的“类型 (Type)”选项卡中,如果您不希望物体与光线相互作用,则使用此选项。

Rays_Ignore_Object

“不显示物体”位于物体属性的“绘图 (Draw)”选项卡中,如果您不希望在屏幕上显示该物体,则使用此选项。

Do_not_draw_object

布尔运算

OpticStudio 支持所有布尔运算以及各种布尔运算的组合运算。以下是基本运算。每个窗口的底部都标明了父物体A 和 B以供参考。

A OR B:语法 A+B

Layout_2

A AND B:语法 A&B

Layout_3

AND和OR很容易混淆。请记住,OR将得到由至少其中一个物体占用的体块,而AND将得到由两个物体同时占用的体块。

A XOR B:语法 a^b

Layout_4

这样得出由其中每一个物体(而非两者同时)包含的体块。在本例中,如果布尔物体由玻璃制成,则两个父物体之间的重叠区域中没有任何玻璃。

A AND NOT B:语法 a-b

Layout_5

这实际上是减法运算,即将物体A 和 B的重叠部分从物体 A 中移除。

NOT A AND B:语法 a$b

Layout_6

生成的体块等于B AND NOT A,即b-a,但有细微的差异:布尔物体和首先列出的物体拥有相同的坐标系。因此,a$b将产生空间中相对于与物体a有相同位置的体块,而b-a将产生相对于与物体b有相同位置的体块。

单个布尔物体或原生布尔物体可以有最多10个父物体,而该布尔物体也可以是其他布尔物体的父物体。这样可以创建非常复杂的物体。仅有的限制在于,在定义布尔物体之前必须在编辑器中定义其父物体,并且所有运算按照从左到右的顺序进行。

例如,以下是一个更复杂的布尔物体。它位于用户数据文件夹 {Zemax}\Samples\Non-sequential\Geometry Creation 中的示例文件“Boolean Example 4 - a lens mount.ZMX”中。

NSC_Shaded_model

原生布尔物体通过使用字符串a-b-c-d生成,可轻松完成简单但完全参数化的透镜物体。

衍射和散射

父物体的衍射和表面散射属性也被布尔物体继承。例如,打开用户数据文件夹 {Zemax}\Samples\Non-sequential\Geometry Creation 中的文件“Boolean Example 3 - a diffractive scattering Boolean object.ZMX”。

在本例中,父物体是衍射光栅物体以及基于 LETTERC.UDA 文件的挤压物体:

NSC_Shaded_model_2

这些物体在文件中设置为“不显示此物体”,因此不会在布局中显示,除非您更改此设置。布尔物体通过取这些物体的交集构成,即A AND B:

NSC_Shaded_model_3

现在,衍射物体的1面具有抛物线表面形状,并含有以下表面属性:

Coat_scatter_2

Diffraction

所以,此表面设置为反射面,并存在40% 的光线将可能根据Lambertian散射函数发生散射。此面未定义任何膜层,因此OpticStudio假定其具有铝膜层的反射率。此外还设置非散射光发生衍射,40% 为衍射级次 -1,40% 为衍射级次+1,以及20% 为衍射级次0。所有这些属性都被布尔物体继承:

NSC_Shaded_model_4

光线被布尔物体反射、衍射和散射,落在由挤压物体定义的孔径外部的光线会正常透射,您可以清晰地看到由布尔物体投射的C形阴影。查看布尔物体的聚焦区,我们可以看到:

Layout_7

 

零阶光线几何上完美聚集于抛物面焦点处(不过因镜面孔径而造成的衍射使得光斑不能无穷小:请参阅 " 什么是点扩散函数?" 一文了解更多信息。+1和-1阶光线显示了因衍射光栅增加相位而形成的彗差。

布尔物体

布尔物体和原生布尔物体类似,但仅当父物体为导入的CAD部件,或物体具有基于 NURBS 的表面时,才能使用布尔物体。布尔物体的工作方式是将每个父物体转换为基于NURBS的形式,然后进行一系列布尔修饰和组合运算,从而得到结果物体。

原生布尔物体不会将每个元件物体转换为基于NURBS的形式,而是使用父物体的原生几何形状。因此,原生布尔物体的光线追迹比原生CAD物体更准确,而且通常更快(最高可快10倍)。所以,应该将原生布尔物体用于OpticStudio中原生物体的布尔运算。

原生布尔物体与布尔物体相比更新,所以可能需要把具有布尔物体的旧文件转换为更高效的原生布尔物体。当物体类型从布尔物体更改为原生布尔物体时,OpticStudio将保留父物体编号,所以此更新不需要手动重新输入任何数据。

何时使用原生布尔物体和布尔物体?

拥有大量父物体的情况:

不推荐使用原生布尔物体和布尔物体。请考虑使用物体嵌套。

该情况下,原生布尔物体的光线追迹更准确,但光线追迹速度可能不会比布尔物体更快。这是因为光线仍然需要通过所有父物体进行追迹,并且需要考虑布尔几何运算。因此,如果需要组合多个物体,使用物体嵌套进行光线追迹的速度将很可能比使用布尔物体更快。

设计具有自由曲面的系统:

推荐使用原生布尔物体。

当OpticStudio原生高精度表面表现形式转换为基于NURBS的形式时,布尔物体可能会使精度降低。这不是OpticStudio软件的限制,而是任何表面的NURBS表现形式的固有属性。请参阅“CAD转换的准确度如何  ?” 了解更多信息。使用NURBS的另一个后果是需要更多内存来保存物体,因此光线追迹速度比原生布尔物体更慢。

父物体为CAD物体:

可使用两种布尔物体。

如果父物体不是OpticStudio中的原生物体,则原生布尔物体的光线追迹速度不会比布尔物体更快。

一般来说,原生物体始终会比布尔物体的表现更好,在可用时应尽量使用。如果需要,用户还可以自定义物体,编写所需的参数物体。然而,原生布尔物体和布尔物体可轻松快速灵活地定义不常见的形状。

合并物体工具

布尔物体允许同时进行最多10个物体的灵活运算,并且保留对生成物体的完全参数化控制。然而,在某些情况下只需要使用两个物体,并且不需要物体的参数化控制。在这些情况下,合并物体工具很有用。

首先,像往常一样定义两个父物体。在本例中,我们将使用挤压物体。提取一个OpticStudio .UDA孔径文件并将其拉伸到Z方向。打开用户数据文件夹 {Zemax}\Samples\Non-sequential\Geometry Creation 中的示例文件“Boolean Example 2 - a lens with a hexagonal edge.ZMX”。

NSC_Shaded_model_5

六边形透镜是这两个物体的布尔AND组合结果,完全参数化控制,并且具有父物体的所有膜层/散射函数。

现在删除布尔物体,只剩下父物体。在非序列元件编辑器中,点击“工具(Tools)>合并物体(Combine Objects)”:

Combine_objects

并按以下方式填写设置对话框:

Combine_objects_tool

如果不再需要父物体,勾选“用新生成物体取替原物体”将简化编辑器。

您还可以预览物体,以确认已选择正确的布尔运算:

NSC_Shaded_model_6

点击“OK”创建新物体。两个父物体被替换为CAD部件:STEP/IGES/SAT物体,具有以下设置:

CAD

组合透镜物体

布尔物体和合并物体工具实现NSC体积物体的布尔运算,而组合透镜物体通过两个NSC表面创建体块。组合透镜物体保留对产生物体的完全参数化控制,是非常通用的透镜物体。它支持前后面上不同的表面类型和孔径。圆形和矩形孔径都可使用。

组合透镜物体基于两个父表面物体。假设您有两个表面:一个非球面物体和一个环形面物体。

Aspheric_surface

Toroidal_surface

您可以定义基于表面物体1和2的组合透镜物体。

Compound Lens object

然后,您可以通过“Is Rectangular?”参数定义圆形或矩形孔径。对于圆形孔径,还可以定义延伸区和机械口径。例如,您可以定义净半口径为4mm、延伸半口径为5mm和边缘半口径为6mm的圆形孔径。

Layout_8

与布尔物体相反,组合透镜物体的“膜层/散射”属性不从父物体继承。

Coat_scatter_3

几乎所有 NSC 元件表面物体都可用作组合透镜物体的父物体,并且可以根据要求添加其他表面。

KA-01386

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助

评论

0 条评论

登录写评论。