如何利用Filter String來篩選特定的光線


如何利用Filter String來篩選特定的光線

Author
Message
Zemax_Taiwan
Zemax_Taiwan
Forum Member
Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)

Group: Administrators / Zemax Staff
Posts: 214, Visits: 2.5K
摘要:這篇文章介紹如何利用Filter String來篩選並獨立出非序列系統中的特定光線,將會介紹幾個基礎的篩選指令以及對應的範例說明,包含:
● 表面散射、體散射
● 繞射
● 螢光
● 指定空間或角度上特定區域
原文連結:How to Identify Specific Rays Using Filter Strings
原文作者:Sanjay Gangadhara
原文發布時間:June 26, 2009
文章附件:檔案下載

簡介
在非序列模式中,光線的路徑可以非常複雜,尤其是開啟光線分裂後更是如此。很多時候,我們會希望可以用光線路徑的一些特徵當作條件來過濾分析結果,讓顯示在Layout以及Detector Viewer中的結果更有意義。
當Zemax OpticStudio追跡時,它會確實的紀錄發生在該光線上的事件。舉例來說,光線可以在物件13上面反射,而在物件46分裂等。使用Filter String可以讓你指定想要看的特徵,並顯示出結果 (在Layout或Detector Viewer)。
Zemax OpticStudio提供了許多光線路徑的篩選條件 – 可以在光線追跡時就指定條件,或是在使用Detector Viewer、Layout查詢結果時使用。並且Zemax OpticStudio也支援用布林運算來組合不同的Filter String條件。
粗略來說,使用Filter String可以判斷光線與物件的交錯順序、次數、是否發生散射、繞射、反射 (分為鏡面以及介面,後者為鬼影)、光的強度、波長,以及角度與空間等等數值。

在這篇文章中,我們提供了一些範例來演示如何使用Filter String搭配布林運算,以找出特定的光線。

基本範例
請開啟在本文章的範例檔中的Simple Example.ZMX。這個檔案示範如何用一個簡單的篩選光線就讓Layout圖表變 “乾淨”。
在這個系統中,有一個Source Ray光源,射向一塊材質為BK7的平板。光源是多波長的,在波長設定框中可以看到定義有三個波長。


BK7玻璃板的背側設定有散射屬性,散射函數為設為Lambertian分佈。


可以看到Scatter Fraction欄位設為0.5,這代表有50%的入射能量會被散射。這個系統同樣有考慮到光線分裂,因此散射會同時在穿透以及反射的部份發生。結果就是如下如,非常混亂。


那如果我們只對那些波長不是0.55 um,且在擊中探測器前僅被散射一次的光線有興趣的話呢?我們可以簡單的透過Filter String來限制要在Layout中顯示的光線。
可以用來管理散射光的Filter String有Sn、Fn以及X_SCATTER(n,b)三個。Sn與Fn都允許使用者指定被特定物件散射的光線,而X_SCATTER(n,b)可以指定散射b次,並有擊中物件n的光線。在我們的範例中,我們預計要分離出那些散射一次,並且最後擊中探測器的光線,因此我們設X_SCATTER(3,1)。

在這個系統中,散射一次的光線可能是反射時散射的,而這些光線可能又會在BK7玻璃板的前側再次反射,然後再穿透玻璃背側並擊中探測器。我們會說這些光線在前側經歷了鬼影反射,因此可以透過Gn這個Filter String抓出。在這個範例中,我們不希望在探測器上看到任何的經歷鬼影反射的光線,因此我們設定G0 (此時不只一階,同時也把高階的鬼影通通篩選出來。高階是指那些在前側與背側表面上反射多次,最後才通過背側並到達探測器上的那些部分) 。
最終,我們還要限制波長不是0.55 um的光線排除。在這個範例中,我們可以用Wn來篩選波長,因為光線波長有明確的定義在Wavelength Data設定框。我們可以使用W2來篩選波長0.55 um,因為在波長設定框中,0.55 um波長的編號是2。

我們可以利用 “&” 以及 “!” 等邏輯操作來組合上述的Filter String,達成我們的篩選目標:


這將會把Layout圖中,我們想要的光線分離出來:


現在反過來說,假設我們只想看那些波長是0.55 um且沒有散射過的光線。此情況下,我們可以先利用同樣的Filter String來分離出波長0.55 um的光線,只要把 “!” 符號去掉即可。而為了把沒散射的光篩選出來,我們將使用Filter String F2,並且在前面加上一個 “!”。把這兩個用 “&”結合後,:


結果與我們預期的相同:


使用Fn的原因是我們有開啟光線分裂 (Ray Splitting)。當光線分裂時,很可能每條光線 (Ray) 的一部分線段 (Segment) 都會經歷散射 (即使該線段是在經歷多次Fresnel反射之後)。因此,我們必須要用Fn來篩選光線中那些被散射的線段 (Sn只能被用來篩選光線本身,而不是所有光線上的線段),在這個例子中,我們是把Fn用來把線段從Layout中去除。

繞射光柵範例
*請注意,由於D65頻譜在OpticStudio之後修改為依據CIE的標準數據,因此此檔案打開時,會顯示警告,請把光源單位 (Source Unit) 改為Watt。
另一個Filter String的範例是Diffraction Grating.ZMX這個檔案,使用者可以在文章開頭的下載連結中找到這個檔案的ZAR壓縮檔。在這個系統中,光源頻譜被定義為從電腦螢幕上所見的白光:


關於光源色彩模型的部分,請參考以下Knowledge Base文章以參考更多細節。
How to Model Colored and Tristimulus Sources

可以看到這個光源的光線經過Diffraction Grating物件後,會被色散,並同時聚焦。


*請注意,由於D65頻譜在OpticStudio之後修改為依據CIE的標準數據,因此Layout與Detector Viewer的結果都會比較平滑,這跟頻譜取樣密度有關。
下面是在Detector Viewer中看到的真實色彩結果。請參考以下Knowledge Base文章中更多的介紹:
How to Measure and Optimize Color Data


不同波長的光線以相似的角度擊中Detector Color物件,因此我們可以看到在角度空間中,會在中間區域混色出白光。


現在我們可以試著透過篩選特定區段波長並查看混色結果。舉例來說,讓我們篩選那些波長是0.49 um或0.565 um的光線。在這個範例中,我們無法使用Wn這個Filter String,因為光線的波長不是在波長資料對話框 (Wavelength Data Dialog) 中定義的。不過我們可以使用X_WAVERANGE(n,a,b)這個Filter String,用來篩選擊中物件n,並且波長 (um) 是介於a與b之間的光線。

對於本範例來說,比較適當的Filter String是 “X_WAVERANGE(3,0.48,0.50) | X_WAVERANGE(3,0.56,0.57)”,請注意我們是用邏輯運算子 “|”。此範例的Filter String中,我們設定的波長邊界只要可以包含到要篩選的波長,並且不會重疊到其他波長就可以了。當我們應用這個Filter String之後,可以看到如下畫面:


在這個範例中,只有兩個顏色的光線貢獻到混光,產生的結果為綠色。

在Detector Viewer中指定Filter String
在之前的範例中,我們用了Filter String來篩選Detector Viewer中的指定波長。但要把Filter String用在Detector Viewer上時,需要事先在追跡時把光線資料儲存為Ray Database (ZRD):
http://forum.zemax.com/Uploads/Images/ffe1dfc9-53e6-4a7f-ab03-030e.png

光線資料可以存為三種不同格式:Uncompressed Full Data、Compressed Full Data以及Compressed Basic Data。關於這三種資料格式的詳細資料,可以在使用者手冊或Help系統中查詢。
資料儲存為ZRD檔之,檔案可以被讀入Detector Viewer,之後就可以套用Filter String了:


注意只有在輸入ZRD檔的情況下,才能使用Filter String來篩選光線資料。然而,Filter String可能也會直接在追跡時應用,如同在Ray Trace控制視窗中所看到的。在追跡時直接使用Filter String篩選光線的好處是可以縮小ZRD檔的容量 (在追跡大量光線時,節省容量的好處更明顯)。然而,使用Filter String追跡後產生的ZRD檔也會永遠失去那些篩選去掉的光線。因此,雖然檔案會很大,但通常我們還是會盡量把所有光線都存為ZRD檔,並改在Detector Viewer讀入時再篩選。

螢光散射範例
在附件的下載檔案中,我們可以找到Bulk Scattering.ZMX這個更為複雜一些的檔案 (同樣以ZAR壓縮檔的形式存在)。在這個系統中,一道準直、0.55 um波長的光線被一個傾斜鏡面散射,然後穿過一個透鏡。然而由於這個透鏡的大小比散射光束還小,因此一部分的散射光並沒有通過透鏡。


穿過透鏡的光將會被體散射,且所有沒散射的光仍然會被轉換為螢光,也就是從波長0.55 um轉換到波長0.65。


*請注意,Zemax也支援更完整的螢光粉模型,可以模擬LED等複雜的頻譜轉換以及米式散射等物理。請參考知識庫文章:綜觀OpticStudio中光激發光 (Photoluminescence) 的模擬。

不論是否穿過透鏡,光線都會被Detector Color紀錄 (更多細節請參考Knowledge Base的文章How to Measure and Optimize Color Data)。光線分佈的真實色彩影像顯示了0.55 u波長的散射光 (綠色) 以及0.65 um的螢光 (紅色)。


系統中有少數比例的光線有通過透鏡,但是沒有被體散射,我們可以利用 “!X_WAVESHIFT(1,2) & H3” 這個Filter String來篩選出來。X_WAVESHIFT(a,b)可以篩選那些從波長從a位移到b的體散射光,a與b代表在波長資料設定框 (Wavelength Data Dialog) 中的波長編號。




當然我們也可以用 “X_WAVERANGE(4,0.54,0.56) & H3” 來篩選出一樣的結果。如果我們想要把這些光線從探測器的顯示結果中移除,我們可以使用以下的Filter String:(X_WAVERANGE(4,0.64,0.66) & H3) | !H3。


Filter String中被括號框起來的第一項會篩選透鏡中被體散射的光線,而第二項 (“!H3) 會篩選那些沒有穿過透鏡的光線。篩選的結果乍看知會會覺得很像我們的第一個結果:


如果仔細看的話,會發現總能量從260 Lumens變為259 Lumen。這1 Lumens的損失是那些通過透鏡但是沒有散射的光線。 (注意由於蒙地卡羅方法的特性,如果你重新追跡光線,可能結果會不太相同,但是應該會很接近。

總結
Filter String是一個非常有利的工具,可以用來分離複雜系統中的特定光線路徑結果。雖然Zemax OpticStudio提供了許多的Filter String,但對於特定應用可能很難剛好有單一Filter String可以處理的。然而,透過布林運算,我們就可以簡單的組合這些Filter String,然後達成所有需要的篩選方式。


GO


Similar Topics


Login
Existing Account
Email Address:


Password:


Select a Forum....



































Zemax Users Forum


Search