Zemax OpticStudio 如何使用布爾物體
雖然 OpticStudio 能夠創(chuàng)建簡單的物體模型,但有些時候內(nèi)置的物體類型無法滿足我們的建模要求,今天技術(shù)文章的主角就是為了解決這一問題而生的。讓我們共同了解:
如何使用布爾物體、原生布爾和
組合透鏡物體以及合并物體工具
概述
OpticStudio 支持使用其他非序列元件 (NSC) 的物體和表面創(chuàng)建復雜物體。
原生布爾物體、布爾物體和組合透鏡物體可用于在非序列模式下,通過其他物體和表面創(chuàng)建復雜物體。
布爾物體參照體積物體進行布爾運算,而組合透鏡物體使用非序列表面來構(gòu)建并組合透鏡的前后幾何結(jié)構(gòu)。這兩種物體類型都將參考非序列元件編輯器中之前的物體。
本文說明了如何使用布爾物體,以及如何定義每個表面上的散射和衍射屬性。本文還將演示如何使用合并物體工具來組合兩個物體,并將產(chǎn)生的物體保存為 CAD 文件格式。
原生布爾物體
啟動 OpticStudio 并打開用戶數(shù)據(jù)文件夾 根目錄下\Samples\Non-sequential\Geometry Creation 中的文件“Boolean Example 1 - basic operations.zmx”。此文件包含兩個球物體,即物體 1 和 2,以及一個原生布爾物體,即物體 3。移動至非序列元件編輯器的右側(cè)可查看原生布爾物體的屬性參數(shù):

原生布爾物體可擁有最多 10 個“父”物體,但在本例中,我們僅使用兩個物體。原生物體物體可執(zhí)行任何以下運算:
+ 將兩個物體組合在一起(邏輯 A OR B)。
- 從第一個物體中減去第二個物體(邏輯 A AND NOT B)。
& 計算兩個物體的交集(邏輯 A AND B)。
^ 產(chǎn)生屬于一個或另一個物體但不同時屬于兩者的部分(邏輯 A XOR B)。
$ 從第二個物體中減去第一個物體(邏輯 NOT A AND B)。
您也可以組合使用這些運算。在布爾物體的“注解 (Comment)”字段中輸入要執(zhí)行的布爾運算即可:

這樣可生成與“物體 A OR B”相同的體塊:

下面為物體 A、B,上面為所生成的原生布爾物體。請注意,因為父物體為參數(shù)化形式,所以原生布爾物體也是如此。如果更改父物體中一個球體的半徑,則原生布爾物體也會更新。父物體可由任何玻璃、材料組成,但原生布爾物體將忽略父物體的材料,而直接將玻璃材料或梯度折射率添加到原生物體物體上。
原生布爾物體的表面屬性繼承自父物體。每個球體物體都包含單一面,因此這些物體的布爾 A + B 包含兩個面:

兩個面都繼承自父物體:

轉(zhuǎn)到球體物體 1 的“膜層 (Coat)/散射 (Scatter)”屬性框,并添加 AR 膜層。然后,查看原生布爾物體 3 的“膜層/散射”屬性。原生布爾物體的 0 面繼承了父物體 1 的表面屬性:

父物體的幾何結(jié)構(gòu)決定了布爾原生物體的幾何結(jié)構(gòu),父物體的“膜層/散射”屬性決定了布爾原生物體的“膜層/散射”屬性。此相關(guān)性與父物體相對于布爾物體的位置無關(guān)。因此,父物體可以位于系統(tǒng)中的其他位置,也可以隱藏并忽略。如果父物體未從原生布爾物體處移開,或者未隱藏并忽略,則光線將同時與布爾物體及其父物體進行相互作用。通常情況下,這不是預期的情況,因此建議移動或忽略父物體。
您可以右鍵點擊父物體并選擇“忽略并隱藏物體 (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

這樣得出由其中每一個物體(而非兩者同時)包含的體塊。在本例中,如果布爾物體由玻璃制成,則兩個父物體之間的重疊區(qū)域中沒有任何玻璃。
A AND NOT B:語法 a-b

這實際上是減法運算,即將物體 A 和 B 的重疊部分從物體 A 中移除。
NOT A AND B:語法 a$b

生成的體塊等于 B AND NOT A,即 b-a,但有細微的差異:布爾物體和首先列出的物體擁有相同的坐標系。因此,a$b 將產(chǎn)生空間中相對于與物體 a 有相同位置的體塊,而 b-a 將產(chǎn)生相對于與物體 b 有相同位置的體塊。
單個布爾物體或原生布爾物體可以有最多 10 個父物體,而該布爾物體也可以是其他布爾物體的父物體。這樣可以創(chuàng)建非常復雜的物體。僅有的限制在于,在定義布爾物體之前必須在編輯器中定義其父物體,并且所有運算按照從左到右的順序進行。
例如,以下是一個更復雜的布爾物體。它位于用戶數(shù)據(jù)文件夾 {Zemax}\Samples\Non-sequential\Geometry Creation 中的示例文件“Boolean Example 4 - a lens mount.ZMX”中。

原生布爾物體通過使用字符串 a-b-c-d 生成,可輕松完成簡單但完全參數(shù)化的透鏡物體。
衍射和散射
父物體的衍射和表面散射屬性也被布爾物體繼承。例如,打開用戶數(shù)據(jù)文件夾 {Zemax}\Samples\Non-sequential\Geometry Creation 中的文件“Boolean Example 3 - a diffractive scattering Boolean object.ZMX”。
在本例中,父物體是衍射光柵物體以及基于 LETTERC.UDA 文件的擠壓物體:

這些物體在文件中設置為“不顯示此物體”,因此不會在布局中顯示,除非您更改此設置。布爾物體通過取這些物體的交集構(gòu)成,即 A AND B:

現(xiàn)在,衍射物體的 1 面具有拋物線表面形狀,并含有以下表面屬性:


所以,此表面設置為反射面,并存在 40% 的光線將可能根據(jù) Lambertian 散射函數(shù)發(fā)生散射。此面未定義任何膜層,因此 OpticStudio 假定其具有鋁膜層的反射率。此外還設置非散射光發(fā)生衍射,40% 為衍射級次 -1,40% 為衍射級次 +1,以及 20% 為衍射級次 0。所有這些屬性都被布爾物體繼承:

光線被布爾物體反射、衍射和散射,落在由擠壓物體定義的孔徑外部的光線會正常透射,您可以清晰地看到由布爾物體投射的 C 形陰影。查看布爾物體的聚焦區(qū),我們可以看到:

零階光線幾何上完美聚集于拋物面焦點處(不過因鏡面孔徑而造成的衍射使得光斑不能無窮小:請參閱“什么是點擴散函數(shù)?”一文了解更多信息。)+1 和 -1 階光線顯示了因衍射光柵增加相位而形成的彗差。
布爾物體
布爾物體和原生布爾物體類似,但僅當父物體為導入的 CAD 部件,或物體具有基于 NURBS 的表面時,才能使用布爾物體。布爾物體的工作方式是將每個父物體轉(zhuǎn)換為基于 NURBS 的形式,然后進行一系列布爾修飾和組合運算,從而得到結(jié)果物體。
原生布爾物體不會將每個元件物體轉(zhuǎn)換為基于 NURBS 的形式,而是使用父物體的原生幾何形狀。因此,原生布爾物體的光線追跡比原生 CAD 物體更準確,而且通常更快(最高可快 10 倍)。所以,應該將原生布爾物體用于 OpticStudio 中原生物體的布爾運算。
原生布爾物體與布爾物體相比更新,所以可能需要把具有布爾物體的舊文件轉(zhuǎn)換為更高效的原生布爾物體。當物體類型從布爾物體更改為原生布爾物體時,OpticStudio 將保留父物體編號,所以此更新不需要手動重新輸入任何數(shù)據(jù)。
何時使用原生布爾物體和布爾物體?
擁有大量父物體的情況:
不推薦使用原生布爾物體和布爾物體。請考慮使用物體嵌套。
該情況下,原生布爾物體的光線追跡更準確,但光線追跡速度可能不會比布爾物體更快。這是因為光線仍然需要通過所有父物體進行追蹤,并且需要考慮布爾幾何運算。因此,如果需要組合多個物體,使用物體嵌套進行光線追跡的速度將很可能比使用布爾物體更快。
設計具有自由表面的系統(tǒng):
推薦使用原生布爾物體。
當 OpticStudio 原生高精度表面表現(xiàn)形式轉(zhuǎn)換為基于 NURBS 的形式時,布爾物體可能會使精度降低。這不是 OpticStudio 軟件的限制,而是任何表面的 NURBS 表現(xiàn)形式的固有屬性。請參閱“CAD 轉(zhuǎn)換的準確度如何?”了解更多信息。使用 NURBS 的另一個后果是需要更多內(nèi)存來保存物體,因此光線追跡速度比原生布爾物體更慢。
父物體為 CAD 物體:
可使用兩種布爾物體。
如果父物體不是 OpticStudio 中的原生物體,則原生布爾物體的光線追跡速度不會比布爾物體更快。
一般來說,原生物體始終會比布爾物體的表現(xiàn)更好,在可用時應盡量使用。如果需要,用戶還可以自定義物體,編寫所需的參數(shù)物體。然而,原生布爾物體和布爾物體可輕松快速靈活地定義不常見的形狀。
合并物體工具
布爾物體允許同時進行最多 10 個物體的靈活運算,并且保留對生成物體的完全參數(shù)化控制。然而,在某些情況下只需要使用兩個物體,并且不需要物體的參數(shù)化控制。在這些情況下,合并物體工具很有用。
首先,像往常一樣定義兩個父物體。在本例中,我們將使用擠壓物體。提取一個 OpticStudio .UDA 孔徑文件并將其拉伸到 Z 方向。打開用戶數(shù)據(jù)文件夾 {Zemax}\Samples\Non-sequential\Geometry Creation 中的示例文件“Boolean Example 2 - a lens with a hexagonal edge.ZMX”。

六邊形透鏡是這兩個物體的布爾 AND 組合結(jié)果,完全參數(shù)化控制,并且具有父物體的所有膜層/散射函數(shù)。
現(xiàn)在刪除布爾物體,只剩下父物體。在非序列元件編輯器中,點擊“Tools...Combine Objects”:

并按以下方式填寫設置對話框:

如果不再需要父物體,勾選“用新生成物體取替原物體”將簡化編輯器。
您還可以預覽物體,以確認已選擇正確的布爾運算:

點擊“OK”創(chuàng)建新物體。兩個父物體被替換為 CAD 部件:STEP/IGES/SAT 物體,具有以下設置:

組合透鏡物體
布爾物體和合并物體工具實現(xiàn) NSC 體積物體的布爾運算,而組合透鏡物體通過兩個 NSC 表面創(chuàng)建體塊。組合透鏡物體保留對產(chǎn)生物體的完全參數(shù)化控制,是非常通用的透鏡物體。它支持前后面上不同的表面類型和孔徑。圓形和矩形孔徑都可使用。
組合透鏡物體基于兩個父表面物體。假設您有兩個表面:一個非球面物體和一個環(huán)形面物體。


您可以定義基于表面物體 1 和 2 的組合透鏡物體。

然后,您可以通過“Is Rectangular?”參數(shù)定義圓形或矩形孔徑。對于圓形孔徑,還可以定義延伸區(qū)和機械口徑。例如,您可以定義凈半口徑為 4mm、延伸半口徑為 5mm 和邊緣半口徑為 6mm 的圓形孔徑。

與布爾物體相反,組合透鏡物體的“膜層/散射”屬性不從父物體繼承。

總結(jié)
幾乎所有 NSC 元件表面物體都可用作組合透鏡物體的父物體,并且可以根據(jù)要求添加其他表面。
OpticStudio 可通過其他非序列元件 (NSC) 的物體和表面創(chuàng)建復雜物體:
·原生布爾物體可在 OpticStudio 的原生 NSC 體積物體上執(zhí)行布爾運算(加、減、交集)。
·布爾物體也可執(zhí)行布爾運算,但應該用于具有 NURBS 表面表現(xiàn)形式的體積物體,例如 STEP 或 IGES 部件。
·組合透鏡基于兩個表面物體。它支持前后面不同的表面類型以及圓形和矩形孔徑。
·合并物體工具能夠輕松地執(zhí)行 NSC 元件物體的布爾運算,并將創(chuàng)建的物體保存為 CAD 格式。