この記事では、「全ての光線経路を追跡するには割り当てられているセグメント数が不十分です。」または「光線追跡を完了するには割り当てられている交差数が不十分です。」というエラー メッセージの原因について説明します。この記事では、これらのエラーを無視すべきではない理由、これらのエラーを修正する方法、セグメントと交差の相違点の概要を取り上げます。
著者 Dan Hill
Introduction
多数のオブジェクトで構成する複雑な光学系や、単一のオブジェクトに光線が複数回到達する設計では、交差数とセグメント数の最大値がそのデフォルト値では不十分なことがあります。その結果、以下のエラー メッセージが表示されます。
- 全ての光線経路を追跡するには割り当てられているセグメント数が不十分です。
- 光線追跡を完了するには割り当てられている交差数が不十分です。
これらのエラー メッセージは、いずれも ""深刻な"" エラーと捉える必要があります。言い換えると、これらのエラーを無視すべきではく、これらの最大値を大きくしないと、光線追跡で誤った結果が得られる可能性があります。
この記事では、これらのエラーを無視すべきではない理由だけではなく、これらのエラーを解決する方法、およびセグメントと交差の相違点の概要も説明することを目的としています。
交差とセグメントについて
まず、これらの用語の意味を確認します。交差とは、光線がオブジェクトのフェイスに到達した位置 (点) です。1 本の光線が同じオブジェクトに複数回到達することもありますが、光線がオブジェクトのフェイスに到達するたびに合計交差数が増加します。
セグメントとは、ある交差から次の交差まで光線がたどる光路部分です。光源から送出された光線は最初のオブジェクトまで進みます。この光路は最初のセグメントであり、セグメント番号 1 となります。オブジェクトのフェイス上の交差点で光線が 2 本以上の光線に分割されることもあり (透過光線と反射光線など)、その場合は分割された光線がそれぞれ別のセグメントになります (2 本の光線に分割された場合、セグメントの合計数は 3 となります)。
この区別を明確にするために、以下の図で考えます。1 本の光線が、平坦な平行面を持つプレートに入射しています。このシナリオでは、(光線の分割は無視するとして) 合計で 3 本の光線セグメントと 2 点の交差 (前のフェイスと後のフェイスにそれぞれ 1 点) があります。
以下のプロットでは、各セグメントをそれぞれ異なる色で表示しています。
光線をセグメント別に色分け表示する方法を説明します。[NSC シェーデッド モデル] (NSC Shaded Mode) または [NSC 3D レイアウト] (NSC 3D Layout) の設定にある [光線の色分け] (Color Rays By) で、[光源 #] (Source #)、[波長番号] (Wave #)、[コンフィグレーション #] (Configuration #)、[波長] (Wavelength)、または [セグメント #] (Segment #) を選択できます。
光線セグメントと交差を光線の "家系" と捉えるとわかりやすいことがあります。どの交差点でも、"親" 光線が複数の "子" 光線に分割されることがあります。これらの子光線がそれぞれ、別の子光線群の親になることもあり、まさに家系図のような様相になります。交差数とセグメント数の最大値は、送出される光線ごとに適用されるので、光源を出発する各光線がそれぞれの家系を持つと考えることができます。OpticStudio では、生成されたセグメントまたは交差のいずれかがその最大値に達すると、十分な数のセグメントまたは交差を割り当てられなくなったことを示すエラーが出されます。
OpticStudio で追跡する必要があるセグメントの数が、光線分割によって急速に増加することは想像がつきます。上記の例に立ち返ると、セグメントの合計数が急速に増加します。たとえば、このプレートの前面と後面の両方でフレネル反射した光線を考えると、セグメントの合計数は 5 になります。各子光線が別の界面に到達し、それぞれが 2 本の子光線に分割されるとセグメントの合計数は 9 となり、このように光線が次々に増加していきます。また、所定の界面で光線が複数の光線に散乱することも考えられます。散乱したこれらの子光線がそれぞれ別の散乱面に到達して、さらに子光線が生成されます。
各光線の最大交差数と最大セグメント数
光線追跡で使用できる交差数とセグメント数を制御するパラメータの変更方法について説明します。他の多くのパラメータ同様に、ユーザが定義できるこれら 2 種類の値は下図のようにシステム エクスプローラのノンシーケンシャル タブで変更できます。
このダイアログにあるどのコントロールも、OpticStudio で NSC グループの中をどのように光線追跡するかを定義しています。具体的な各コントロールの詳細については、OpticStudio のヘルプ ファイルで、[設定] (Setup) タブ」→「[システム] (System) グループ」→「[システム エクスプローラ] (System Explorer)」→「[ノンシーケンシャル] (Non-Sequential) を参照してください。
最大セグメント数または最大交差数を使用して、送出される光線当たりで割り当てられるセグメントまたは交差の最大数を設定します。つまり、光源を出発する光線のそれぞれが、ここで定義された数を上限としてセグメントと交差を発生することができます。最大セグメント数が 1,000 で、5,000 本の光線が送出されるとすれば、OpticStudio では最大で 500 万本までの光線セグメントを保存できます。
OpticStudio で、これらのパラメータをユーザ定義可能にしていること、および光線追跡を完了するうえで必要な数のセグメントを単純に追跡するようにしていないことには理由があります。それは、膨大な本数のセグメントに対応できる大量のメモリを確保しておく必要があるからです。ほとんどの場合、このような大量のメモリは不要であり、光線追跡の速度を低下させます。
RAM には、約 140 バイトに最大セグメント数を乗算した合計メモリ量が必要です。セグメントの上限を 100,000 本に設定すると、光線ごとに 14 MB の RAM が必要になります。このことから、この最大値をむやみに大きい値に設定しないことをお勧めします。OpticStudio で扱うことができる光線セグメント本数の上限は 200 万本です。同様に交差数の上限は4000回です。
セグメント数をそれほど多くしなくても、OpticStudio では数百万本の光線追跡になる可能性があります。セグメント数の最大値は、1 本の光線に対して許容できるセグメントの数に過ぎません。ほとんどの OpticStudio の機能で一度に使用する光線は 1 本のみなので、RAM の合計必要量は追跡する光線数ではなく、セグメントの最大数で決まります。
セグメントと交差のエラーを無視すべきではない理由
セグメントと交差が何であるかがわかったところで、これらに関するエラー メッセージを無視すべきではない理由を十分に理解するうえで重要な別の情報があります。この情報は、OpticStudio でノンシーケンシャル光線を追跡する順序に関するものです。
光線は、システム エクスプローラの [ノンシーケンシャル] (Non-Sequential) タブにあるコントロールで指定した限度値または最大値のいずれに達するまで追跡されます。しかし、割り当てられているセグメント数または交差数が不足していて、光線に発生することが考えられる光路のすべてを追跡できない場合はエラーが発行され、光線追跡は中止されます ([エラーを無視] (Ignore Errors) のチェックをはずしている場合)。繰り返しますが、これらのエラー メッセージを無視すべきではありません。
具体的に説明します。この記事で既に取り上げた比喩のように、光線追跡を家系図に落とし込んで考えます。各交差の後、等分に分割されたエネルギーが反射光線と透過光線の 2 本の光線に配分されるとします。この階層をわかりやすくするために、ここでは各交差で発生した反射光線を赤、透過光線を黒で表現しています。
また、各交差を青いバーで表現します (注 :このモデルでは、それぞれのバーで 1 回の交差を表しています。この青いバーは、前面と後面の両方を備えた体積のあるプレートを表現しているわけではありません)。各交差で発生するこの光線追跡の流れから、セグメントの合計数は 2^(n+1) – 1 になります。したがって、3 番目の交差を経た後のセグメントの合計数は 15 (2^4 – 1 = 15) です。
この図で、セグメントに対する番号付けの方法に注目してみます。光線セグメント 1 は最初の界面への入射光線であり、そこで透過光線と反射光線の 2 本に分割されます。以降は、たとえば、透過光線の強度が最小相対光線強度に達するまで、透過エネルギーの追跡が継続します。したがって OpticStudio では、エネルギーの透過相当部分 (セグメント 2、3、および 4) を継続的に追跡したうえで、光線分割が最後に発生した位置に戻ります。最後に発生した分割されて追跡されなかった方の光線が今度は、エネルギーがその最小値に達するまで追跡され、以下下の図の例の様に追跡されます。
この番号付け方法からもわかるように、最初に定義したセグメントが不足していると、当初のエネルギーの重要な部分が配分された光線の挙動を把握できなくなります。この例でいうと、セグメントの最大数として 8 を定義した場合、OpticStudio は当初のエネルギーの半分が配分されたセグメント 9 以降の光線を追跡できません。このような状況では、ディテクタで収集した合計エネルギーの計算値が信頼できないものになります。
最初にどの光線を追跡するかを、光線の強度に基づいて決定すれば良いという考えもあるかもしれません。しかし、その方法をとるには、膨大なデータのリストをメモリに保存する必要があり、光線追跡の速度が大幅に低下します。したがって、OpticStudio では、光線追跡が大幅に高速になることがわかっている再帰的ループで光線を追跡しています。
ここで重要なのは、OpticStudio からセグメントまたは交差に関して発行されるエラーを無視してはならないという点です。光線に発生することが考えられる光路をすべて追跡するうえで十分な数のセグメントと交差を必ず割り当てるようにします。ただし、むやみに大きい値を設定しないことも必要です。必要最低限の値にとどめるようにします。
KA-01562
コメント
記事コメントは受け付けていません。