OpticStudio でブール ネイティブ オブジェクトとブール CAD オブジェクトを使用すると、幅広い範囲のパラメトリック オブジェクト形状をノンシーケンシャル モードでモデル化できるようになります。この記事では、ノンシーケンシャル モードでネスティング ルールを使用してブール オブジェクトを置き換え、光線追跡の効率向上を図る方法について説明します。
ここでは、読者がブール ネイティブ オブジェクトとブール CAD オブジェクトに精通していることを前提としています。
著者 : Akash Arora、更新 : Sandrine Auriol
ダウンロード
はじめに
OpticStudio に用意されているパラメトリック オブジェクトの形状では、目的の光学系を十分にモデル化できないことも考えられます。そのような状況の対応策として、ブール CAD オブジェクトの使用、ブール ネイティブ オブジェクトの使用、OpticStudio のネスティング ルールの利用の 3 種類があります。
ブール CAD オブジェクトは柔軟性の面できわめて優れていますが、計算時間が長くなるほか、高次非球面では精度で劣ります。ブール ネイティブ オブジェクトでは、短い計算時間で高い精度が得られますが、オブジェクトが多くなると効率面で不利になります。最後のネスティング ルールは、光線追跡がきわめて高速ですが、機械的な精度で劣ります。
この記事では、3 種類の例を使用して、複雑なオブジェクトで光線追跡を実行する際に、上記のそれぞれの方法に見られる利点と弱点について詳しく説明します。
ブール CAD オブジェクト、ブール ネイティブ オブジェクト、ネスト化オブジェクト
複数の親オブジェクトを NURBS ベースの面表現に変換し、適切なブール演算を実行して、変換後のオブジェクトから目的の形状のオブジェクトを切り出すことにより、適切に機能するブール CAD オブジェクトが得られます。その機能は優れた柔軟性を発揮しますが、NURBS 表現は大量のメモリと長時間の光線追跡を必要とするほか、高次非球面では、同等のネイティブ オブジェクト (パラメトリック オブジェクト) よりも精度が低くなることもあります。
ブール ネイティブ オブジェクトは、ブール CAD オブジェクトに似ていますが、親オブジェクトがネイティブの OpticStudio オブジェクトであることから、ブール CAD オブジェクトよりも効率的な光線追跡アルゴリズムを使用できます。各コンポーネント オブジェクトを NURBS 表現には変換せず、親オブジェクトのネイティブ形状を使用します (なお、システム ビューアでの表示では、どちらのブール オブジェクトでも NURBS 表現が使用されます)。ブール ネイティブ オブジェクトは、ブール CAD オブジェクトよりも高速であるほか、親オブジェクトの高精度な面定義を使用することから、ブール CAD オブジェクトよりも形状が正確です。一方で、親オブジェクトごとにそのオブジェクトを通過する光線の追跡が引き続き必要で、定義されているブール形状演算も考慮する必要があります。したがって、結合すべきオブジェクトが多数ある場合、ブール ネイティブ オブジェクトの光線追跡は、オブジェクトをネスティングした場合よりも低速になることがあります。もっとも、一定の組み合わせによる親オブジェクトのシミュレーションが、ブール オブジェクトにいつでも求められるわけではありません。
ノンシーケンシャル モードの OpticStudio では、ネスティング ルールを使用して、互いに重なり合ったオブジェクトと面をどのように扱うかが判断されています。このルールでは、2 つのオブジェクトが重なり合っている場合、ノンシーケンシャル コンポーネント エディタ (NSCE) で後のほうに記述されているオブジェクトによって、その重なり合った領域での特性が決まります。この動作は、体積オブジェクト相互の加算や減算に相当します。重なり合ったオブジェクトから正確な光線追跡結果が得られますが、単一のオブジェクト表現がないことから視覚化と機械的エクスポートができません。
ブール オブジェクトの詳細については、記事「How to use the Boolean CAD, Boolean Native, and Compound Lens objects, and the Combine Objects tool」を参照してください。 .
非パラメトリック オブジェクトを使用した光線追跡
特定形状のオブジェクトが必要な場合は、それが OpticStudio で既にサポートされているオブジェクトではないか必ず確認することをお勧めします。用意されているオブジェクトの一覧を参照するには、OpticStudio のヘルプ ファイルで「[設定] (Setup) タブ」→「[エディタ] (Editor) グループ ([設定] (Setup) タブ)」→「[ノンシーケンシャル コンポーネント エディタ] (Non-Sequential Component Editor)」→「[ノンシーケンシャル形状オブジェクト] (Non-sequential Geometry Objects)」に移動します。
組み込みオブジェクトに該当のオブジェクトがない場合は、次の手段として、複数のオブジェクトをネスティングして目的の形状を実現することを検討します。ネスティング ルールによって、複数のオブジェクトの加算結果 (A+B) と減算結果 (A-B) に相当するオブジェクトが得られます。ネスティングによって複数のオブジェクトを加算するには、それらすべてのオブジェクトの材料が同じであることが必要です。減算を実行するには、減算するオブジェクト (上記の B) を NSC エディタの最後に定義し、その材料を空気とします (材料がないオブジェクト)。
例 1 : ブール ネイティブ オブジェクトまたはネスティング オブジェクト
オブジェクトのネスティングまたはブール オブジェクトの形成によってモデル化できる例として、穴があいたレンズを取り上げます。
添付ファイル Boolean vs Nesting Example.ZAR を開きます。このファイルでは、シリンダ状の傾斜した穴を設けた標準レンズに到達する光線をモデル化しています。
このような光学系をモデル化する方法を示すコンフィグレーションとして、次の 4 種類があります。
- コンフィグレーション 1 : 親オブジェクトを描画し、光線追跡します。
- コンフィグレーション 2 : ブール CAD オブジェクトを描画し、光線追跡します。
- コンフィグレーション 3 : ブール ネイティブ オブジェクトを描画し、光線追跡します。
- コンフィグレーション 4 : ブール オブジェクトを描画し、その親オブジェクトを光線追跡します。
これらのコンフィグレーションごとに、ディテクタ ビューワ上の結果、光線追跡の所要時間、ビューワ上での光学系の外観を比較します。CPU を 8 基搭載したコンピュータで、これらの性能を比較します。コンフィグレーションごとに、[NSC 光線の分割] (Split NSC Rays) をオンにして OpticStudio で 2e6 本の光線を追跡します。
この結果を次の表に示します。
コンフィグレーション 1 | コンフィグレーション 2 | コンフィグレーション 3 | コンフィグレーション 4 | |
光線追跡の対象 | ネスティング ルールによる | ブールCAD | ブールネイティブ | ネスティングルールによる。 |
描画の対象 | ネイティブ | ブール | ブール | ブール |
実行時間 | 8.5秒 | 1.6分 (96秒) | 11.6秒 | 8.1秒 |
光線追跡の精度 | 正確 | 正確 | 正確 | 正確 |
ビューア | OpticStudio では、重なり合ったオブジェクトが描画されるだけで、穴を設けたレンズのようには描画されない | 穴を設けたレンズ | 穴を設けたレンズ | 穴を設けたレンズ |
結果の検討
- コンフィグレーション 1 では、親オブジェクトが描画されて光線追跡されますが、ブール オブジェクトはすべて無視されます。シェーディング モデルでは、レンズとシリンダの重なりが明確に表現されます。ネスティング ルールによって、重なり合った領域では、NSC エディタで 2 番目に記述したオブジェクトが優先されます。したがって、光線に対する振る舞いは、中央にシリンダ状の空気があるガラス レンズになります。この設定で唯一の問題は、重なり合ったオブジェクトが、穴を設けたレンズのようには描画されないことです。
- コンフィグレーション 2 に切り替えると、ブール CAD オブジェクトが描画されて光線追跡され、その親オブジェクトはすべて無視されます。このコンフィグレーションでは、オブジェクトの描画は正確ですが、光線追跡がきわめて低速です。ブール CAD オブジェクトを使用した場合、同じ光学系で光線追跡には 1.6 分を要し、ネスト化した親オブジェクトに比べ、速度は 1/11 になります。また、システム チェック レポートには ([設定] (Setup) → [システム診断] (Diagnostics) → [システム チェック] (System Check))、「軽微な警告」として「軽微 : ブール CAD オブジェクト 4 はネイティブ親オブジェクトのみで構成されています。ブール ネイティブ オブジェクトの使用を検討してください (Trivial: Boolean CAD object 4 only has native parent objects; consider using Boolean Native instead)」が表示されます。このフィグレーションでディテクタ ビューアに表示される結果は、ネスティング オブジェクトを使用しているコンフィグレーション 1 の場合と同じです。
重要 : ここでわかることは、ネイティブ オブジェクトで形成した体積では、ブール CAD オブジェクトではなく、ネスティング オブジェクトまたはブール ネイティブ オブジェクトを使用するほうが有利であるということです。
- コンフィグレーション 3 では、ブール ネイティブ オブジェクトを使用しています。光線追跡時間は 11.6 秒で、ネスティング オブジェクトの光線追跡と同程度に高速です。その理由は、ブール ネイティブ オブジェクトでは各コンポーネント オブジェクトを NURBS ベースの面表現に変換せず、親オブジェクトのネイティブ形状を使用することにあります。オブジェクトは正確に描画されます。
- コンフィグレーション 4 : コンフィグレーション 1 で見たように、表示の観点からすると、ネスト化オブジェクトはブール オブジェクトほどわかりやすくありません。コンフィグレーション 4 は、それぞれのモデルの利点である高速な光線追跡と良好な視覚化の両方を実現できる設定をシミュレートします。光線追跡では親オブジェクトが考慮され、ブール オブジェクトは無視されます。視覚化では、親オブジェクトは描画されず、ブール オブジェクトが描画されます。オブジェクトが想定どおりに表示されると同時に、光線追跡では、パラメトリックな親オブジェクトのみで光線が追跡されるので、高速な光線追跡になります。
例 1 の結論 :
- 親オブジェクトがネイティブ オブジェクトであれば、ブール CAD オブジェクトを使用せず、ネスティング ルールまたはブール ネイティブ オブジェクトの使用を検討します。
- 結合するオブジェクトが少ない場合は、ブール ネイティブ オブジェクトがお勧めの方法です。一方、多数のオブジェクトを結合する場合は、ブール ネイティブ オブジェクトを使用するよりも、オブジェクトをネスティングしたほうが高速な光線追跡になる可能性が高くなります 。
- ネスティング ルールには、目的のオブジェクト形状を必ずシミュレートできるわけではないという制限があります。ネスティング ルールでは、2 つのオブジェクトの加算 (A+B) および減算 (A-B) と同等の結果が得られますが、A&B、A^B、A$B のような複雑な演算には力不足です。そのような状況では、ブール ネイティブ オブジェクトがお勧めです。
- また、ネスト化オブジェクトを使用できる場合でも、機械的仕様を検討するために CAD にエクスポートするには単一のオブジェクト表現 (ブール オブジェクト) が必要です。その場合は、ブール オブジェクトが必要になることが普通です。
例 2 : ブール ネイティブ オブジェクト
例 2 は、親オブジェクトのネストでは直接複製できないブール演算の例です。ファイル {Zemax}\Samples\Non-sequential\Geometry Creation\Boolean Example 2- a lens with a hexagonal edge を開きます。
この六角形レンズは、六角形の押し出しと標準レンズとの交差 (&) を取得することによって作成します。NSC のネスティング ルールでは、このような親オブジェクトからこれと同じ六角形レンズを作成できません。
ここでは、押し出しオブジェクトを修正することで、ネスト化オブジェクトを使用してこのようなレンズを作成します。押し出しオブジェクトのプロパティ ダイアログを開き、[アパチャー ファイルの編集] (Edit Aperture File) をクリックします。
UDA ファイルの内容の末尾に行「REC 0 0 200 200 0 1 1.」を追加します。この指定によって、次の図のように、中央に六角形の穴があいた矩形体積が作成されます。
これで、標準レンズからこの体積を減算することで、六角形レンズを切り出して作成できます。適切なネスティングとするには、NSC エディタでレンズよりも後に押し出しオブジェクトを記述する必要があります。このような修正が、この記事の添付ファイル Nested Hexagonal Lens.ZAR に収められています。
ネスティング オブジェクトを使用すると、ブール CAD オブジェクトに対してこの方法でレンズをモデル化することにより、計算で前の例同様の利点が得られます。この方法の弱点は、前の例と同様に、レイアウトでの部品の視覚化と CAD へのエクスポートで不利なことです。
この例でお勧めできる手法は、ブール ネイティブ オブジェクトを使用することです。このオブジェクトは、わずか 2 つのオブジェクトの結合です。光線追跡は正確で高速であり、オブジェクトは正しく描画されます。
例 3 : ネスティング オブジェクト
例 3 は、親オブジェクトをネストすることによって直接複製できるブール演算の例です。添付ファイル Boolean vs Nested Example 5- a complex light pipe を開きます。これは、サンプル ファイル {Zemax}\Samples\Non-sequential\Geometry Creation をわずかに修正したファイルです。このファイルでは、複雑なライトパイプをモデル化しています。
このような光学系をモデル化する方法を示すコンフィグレーションとして、次の 2 種類があります。
- コンフィグレーション 1 : 親オブジェクトを描画し、光線追跡します。
- コンフィグレーション 2 : ブール ネイティブ オブジェクトを描画し、光線追跡します。
光線追跡の所要時間とビューワ上での光学系の外観を両方のコンフィグレーションで比較します。CPU を 8 基搭載したコンピュータで、これらの性能を比較します。コンフィグレーションごとに、[NSC 光線の分割] (Split NSC Rays) をオンにして OpticStudio で 1e6 本の光線を追跡します。
この結果を次の表に示します。
コンフィグレーション 1 | コンフィグレーション 2 | |
光線追跡の対象 | ネスティング ルールによる | ブール ネイティブ |
描画の対象 | ネイティブ | ブール |
実行時間 | 0.4秒 | 3.7分 (222秒) |
結果の検討
- コンフィグレーション 1 では、親オブジェクトが描画されて光線追跡されますが、ブール オブジェクトは無視されます。シェーデッド モデルにはライトパイプが明確に表示されます。この場合は、ネスティング ルールがきわめて良好に機能しています。光線追跡は高速で、視覚化も適切です。
- コンフィグレーション 2 では、ブール ネイティブ オブジェクトが光線追跡されて描画され、その親オブジェクトはすべて無視されます。このコンフィグレーションでは、オブジェクトの描画は正確ですが、光線追跡は低速です。光線追跡の完了には 3.7 分を要し、ネスト化した親オブジェクトの場合に比べ、1/500 にも低下しています。
この原因は、すべての親オブジェクトを通る光線を追跡する必要があること、形状のブール演算を考慮する必要があることにあります。結合するオブジェクトが多数あることから、ネスティング オブジェクトの光線追跡は、ブール ネイティブ オブジェクトの場合よりもはるかに速くなります。
重要 : ここでわかることは、多数のネイティブ オブジェクトで形成した体積では、ブール ネイティブ オブジェクトではなく、オブジェクトをネスティングする方法が有利であるということです。
ここまでの例を踏まえると、以下の質問に対して、どのオブジェクト結合方法を推奨できるかを判断できます。
オブジェクトを加算または減算するか。
(1)No であれば、いずれかのブール オブジェクトを使用します。
オブジェクトはネイティブ オブジェクトのみか?
1.Yes であれば、ブール ネイティブ オブジェクトを使用します。
2.No であれば、ブール CAD オブジェクトを使用します。
(2)Yesであれば、ネスティングルールまたはいずれのブールオブジェクトを使用します。
結合するオブジェクトの数はどのくらいか。
1.その数がわずかであれば、ブール オブジェクトを使用します。
2.多数であれば、オブジェクトをネスティングします。
KA-01439
コメント
サインインしてコメントを残してください。