こんにちは。光学、光でのお困りごとがありましたか?
光ラーニングは、「光学」をテーマに様々な情報を発信する光源を目指しています。情報源はインターネットの公開情報と、筆者の多少の知識と経験です。このページでは、Zemaxコミュニティのトピックで共有された、ノンシーケンシャルモードの光線追跡で長い時間がかかるときの対処法のうち、光線分割に関する機能を紹介します。
Zemaxコミュニティについては、こちらのページ で概略を説明しています。
結論
- ノンシーケンシャルモードの光線追跡に時間がかかる場合は、光線のセグメント数を削減する機能を使用することで改善する可能性があります。
- 光線の分割がそもそも必要か?結果に影響しない微弱な光線まで追跡していないか?簡易光線分割を使用できないか?の3つを確認して、積極的に活用しましょう。
このページの使い方
このページでは、Zemaxコミュニティに投稿されたトピック中から、よく参照されているもの、コメントが多いもの、筆者が気になったものを取り上げて紹介します。よくある疑問や注目されているトピックについての情報を発信することで、何かしらの気づきとなれば幸いです。
ノンシーケンシャルモードが遅いと感じたときの対応
トピックへのリンク: NSCモードで重い解析や設計を行うときの戦略
ノンシーケンシャルモードは、多量の光線を追跡することで予見が難しい経路を通る光を解析できます。光線の分割、散乱、CADオブジェクトの挿入、複雑なプリズム形状を設定することで、より現実世界で得られる実測結果に近いシミュレーション結果が得られます。
一方で、光学モデルが複雑になるほど、追跡する光線・セグメント数を増やすほど、問題になるのが「ノンシーケンシャル光線追跡にとても時間がかかる」状況です。このトピックでは、そのような状況で光線追跡の時間を短縮するためのテクニックが共有されていました。
光線分割の設定
ノンシーケンシャルモードの光線追跡が遅くなる理由の1位は、「追跡する光線の本数が多すぎる」です。ここでの光線本数とは、光源オブジェクトの解析光線本数というよりは、「光線のセグメント数」を意味します。1つのセグメントとは、光線がまっすぐ進んでいる長さのことです。光線の進行方向が屈折や反射によって変化するとき、セグメント数が増えます。つまり、セグメント数が多い=スネルの法則をつかって、光線の進行方向を計算する回数が多いため計算が大変になります。
光線がオブジェクトに到達したとき、光線を透過成分と反射成分に分割できます。透過/反射の光線に割り当てられるエネルギーは、オブジェクト表面に適用したコーティングに依存します。1本の光線から、2本の光線に増やすことになるので、追跡する光線はこの時点で2倍になります。
それぞれの光線は、次のオブジェクトに到達したときに再び透過/反射に分割されて4本になります。そのため、光線が生き残る限りセグメント数が雪崩式に増加することになります。セグメント数は少ない方が計算は速くなるので、増やさないようにする機能を使用します。
ちなみに、セグメント数の数え方は少し癖があります。まず、透過光線が優先的に数えられます。すべて透過するセグメントのカウントが終わったら、一番最後の分割地点での反射光線のセグメントからカウントが再開されて、その反射光線の透過光線が優先的に数えられます。
セグメント数の数え方については、NSRAオペランドを使用して光線の詳細データを確認するときなどに必要な情報となります。NSRAオペランドについては、光ラーニングでも取り上げたいと思います。
光線追跡コントローラ
まず検討するのが、光ラーニングでも頻出の光線追跡コントローラです。「NSC光線の分割」オプションがあり、読んで字のごとく、「光線がオブジェクトに到達したときに、光線を分割して透過成分と反射成分の2本に分割するか?(散乱光線、回折光線も同じ扱いですが、ここでは割愛)」のスイッチです。まずは「これ必要?」というのを考えます。
例えば、オブジェクトに設定したコーティングによるエネルギーの減衰を考慮したい、という場合は、「偏光の考慮」にだけチェックを入れて、「NSC光線の分割」はオフにしても得られます。
「NSC光線の分割」にチェックを入れると「偏光の考慮」に自動的にチェックが入る仕様になっているため、この2つは常に一緒にチェックを入れると思っていた時期がありました。というか、あまり深く考えずに全部にチェックを入れていたりしました。
「NSC光線の分割」が本当に必要な解析内容なのか、まずは考えてみることをおすすめします。
光線エネルギーに閾値を設定した追跡の終了
1本の光線を透過成分と反射成分に分割するとき、吸収成分と合わせるとエネルギーは保存されます。そのため、分割を繰り返すと光線のエネルギーは低下していきます。解析結果に影響を及ぼさないような微弱な光線を追跡し続けないように、閾値を設置して光線の追跡を終了させることができます。
システムエクスプローラ > ノンシーケンシャル > 最小(相対/絶対)光線強度で、光線追跡が終了される各光線のエネルギーの閾値を設定します。例えば、最小相対光線強度に0.01にすると、光線の強度が最初の光線の1%を下回ったときに、光線の追跡が終了します。これによって、シミュレーション結果に寄与しないであろう光線の追跡にかかる時間を削減します。
もちろん、小さなエネルギーの光線まで追跡しなければならない場合もあります。例えば、迷光解析ではわずかなエネルギーが設計と異なる経路でディテクタ(センサ)に入射する状況を考えます。大切なのは、いたずらに過剰な光線、セグメント数を追跡しないようにすることです。
簡易光線分割 (Simple Ray Splitting)
ビームスプリッタのような、「どうしても光線は分割する必要がある」状況で、セグメント数の増大を防ぐ方法もあります。それが、簡易光線分割です。上の図で、システムエクスプローラ > ノンシーケンシャル に、簡易光線分割(Simple Ray Splitting)のオプションがあります。
このオプションは、分割された透過光線と反射光線のどちらか一方のみを、ランダムに選択して追跡する機能です。どちらの光線が選択されるかは、光線が分割される面のコーティング特性の透過率と反射率によって決まります。
例えば、光線100本で100Wを、反射率60%、透過率30%、吸収率10%のコーティングが設定された面に入射させた場合を考えます。簡易光線分割のON/OFFによる結果の違いは以下の通りです。
- 簡易光線分割 OFF の場合
- 100W / 100本 = 光線1本1W。
- コーティングの特性で、反射成分0.6W、透過成分0.3W、吸収成分0.1Wに振り分けます。
- 1本の入射光線から反射光線と透過光線の2本を生成するので、合計光線数は200本です。
- 反射光線100本、0.6W x 100 = 60W
- 透過光線100本、0.3W x 100 = 30W
- 簡易光線分割 ON の場合
- 100W / 100本 = 光線1本1W。
- コーティングの特性で、反射成分0.6W、透過成分0.3W、吸収成分0.1Wに振り分けます。
- くじ引きをします。反射のくじが0.6/0.9 = 2/3、透過のくじが0.3/0.9 = 1/3入っています。
- 引いたくじに従って光線を1本だけ生成。
- 反射成分と透過成分を合算して、0.6 + 0.3 = 0.9Wを生成した光線に割り当て。
- 確率的に、反射光線は66.666本、透過光線は33.333本が生成され、合計光線数は100本です。
- 反射光線66.666本、0.9W x 66.666 = 60W
- 透過光線33.333本、0.9W x 33.333 = 30W
面に入射した光のエネルギーを、光線のエネルギーとして分割するか、光線の本数として分割するかが異なります。簡易光線分割については、What is Simple Splitting (Zemax技術記事、英語) も参照してください。
この機能は、光線を分割する面に何度も光線が入射する場合などによく使用します。上で紹介した技術記事では、照明解析が利用シーンとして挙げられていました。注意点として、信頼性の意味で劣る面があるので、時間のある時に簡易光線分割オプションをOFFにした解析を推奨しています。
まとめ
このページでは、Zemaxコミュニティに投稿された「NSCモードで重い解析や設計をするときの戦略」から、「光線の分割」によって光線追跡の時間が長くなる状況に役立つ機能をトピックに取り上げました。 光線のセグメント数を減らす方針で、光線の分割オプション、追跡する光線のエネルギーの閾値、簡易光線分割を紹介しました。次回は、光線の散乱に関連する機能を紹介します。
コメント