Zemax OpticStudio 如何使用布尔物体

虽然 OpticStudio 能够创建简单的物体模型,但有些时候内置的物体类型无法满足我们的建模要求,今天技术文章的主角就是为了解决这一问题而生的。让我们共同了解:

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

概述

OpticStudio 支持使用其他非序列元件 (NSC) 的物体和表面创建复杂物体。
原生布尔物体、布尔物体和组合透镜物体可用于在非序列模式下,通过其他物体和表面创建复杂物体。
布尔物体参照体积物体进行布尔运算,而组合透镜物体使用非序列表面来构建并组合透镜的前后几何结构。这两种物体类型都将参考非序列元件编辑器中之前的物体。
本文说明了如何使用布尔物体,以及如何定义每个表面上的散射和衍射属性。本文还将演示如何使用合并物体工具来组合两个物体,并将产生的物体保存为 CAD 文件格式。

原生布尔物体

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


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

+ 将两个物体组合在一起(逻辑 A OR B)。
- 从第一个物体中减去第二个物体(逻辑 A AND NOT B)。
& 计算两个物体的交集(逻辑 A AND B)。
^ 产生属于一个或另一个物体但不同时属于两者的部分(逻辑 A XOR B)。
$ 从第二个物体中减去第一个物体(逻辑 NOT A AND B)。

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


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


下面为物体 A、B,上面为所生成的原生布尔物体。请注意,因为父物体为参数化形式,所以原生布尔物体也是如此。如果更改父物体中一个球体的半径,则原生布尔物体也会更新。父物体可由任何玻璃、材料组成,但原生布尔物体将忽略父物体的材料,而直接将玻璃材料或梯度折射率添加到原生物体物体上。
原生布尔物体的表面属性继承自父物体。每个球体物体都包含单一面,因此这些物体的布尔 A + B 包含两个面:


两个面都继承自父物体:


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


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


这样可以将“光线忽略物体 (Rays Ignore Object)”设置为“总是 (Always)”并勾选“不显示物体 (Do Not Draw Object)”。
“光线忽略物体”位于物体属性的“类型 (Type)”选项卡中,如果您不希望物体与光线相互作用,则使用此选项。


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


布尔运算

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


A AND B:语法 a&b

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


A XOR B:语法 a^b

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

A AND NOT B:语法 a-b

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


NOT A AND B:语法 a$b


生成的体块等于 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”中。

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


衍射和散射

父物体的衍射和表面散射属性也被布尔物体继承。例如,打开用户数据文件夹 {Zemax}\Samples\Non-sequential\Geometry Creation 中的文件“Boolean Example 3 - a diffractive scattering Boolean object.ZMX”。
在本例中,父物体是衍射光栅物体以及基于 LETTERC.UDA 文件的挤压物体:

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


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

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

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

零阶光线几何上完美聚集于抛物面焦点处(不过因镜面孔径而造成的衍射使得光斑不能无穷小:请参阅“什么是点扩散函数?”一文了解更多信息。)+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”。

六边形透镜是这两个物体的布尔 AND 组合结果,完全参数化控制,并且具有父物体的所有膜层/散射函数。
现在删除布尔物体,只剩下父物体。在非序列元件编辑器中,点击“Tools...Combine Objects”:

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

如果不再需要父物体,勾选“用新生成物体取替原物体”将简化编辑器。
您还可以预览物体,以确认已选择正确的布尔运算:

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


组合透镜物体

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


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

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

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

总结

几乎所有 NSC 元件表面物体都可用作组合透镜物体的父物体,并且可以根据要求添加其他表面。
OpticStudio 可通过其他非序列元件 (NSC) 的物体和表面创建复杂物体:
·原生布尔物体可在 OpticStudio 的原生 NSC 体积物体上执行布尔运算(加、减、交集)。
·布尔物体也可执行布尔运算,但应该用于具有 NURBS 表面表现形式的体积物体,例如 STEP 或 IGES 部件。
·组合透镜基于两个表面物体。它支持前后面不同的表面类型以及圆形和矩形孔径。
·合并物体工具能够轻松地执行 NSC 元件物体的布尔运算,并将创建的物体保存为 CAD 格式。