光学的システムにおけるレイトレーシングの仕組み
1. はじめに
光学系におけるレイトレーシングとは、要するに三次元空間において幾何光学の法則を繰り返し適用することである。光線は位置 \(\mathbf{x}\)、方向 \(\mathbf{k}\)、波長 \(\lambda\)、および光強度 \(P\) によって定義される。この光線がシーン内を伝播する際、屈折・反射・吸収・クリッピングといった作用を通じて各表面と相互作用する。
各界面において、光線の進行方向はスネルの法則によって決定される。そのスカラー形式は次の通りである:
\[ n_1 \sin(\theta_1) = n_2 \sin(\theta_2) \]
実際のシミュレーションにおいては、レイトレーシングは完全な三次元空間で実施される。この際にはベクトル形式が用いられ、入射方向 \(\mathbf{k}_i\)、表面法線 \(\mathbf{n}\)、透過方向 \(\mathbf{k}_t\) が明示的に計算される。一般的な表現形式は次の通りである:
\[ \mathbf{k}_t = \frac{n_1}{n_2}\mathbf{k}_i + \left(\frac{n_1}{n_2}\cos\theta_i - \cos\theta_t\right)\mathbf{n} \]
ここで\(\cos\theta_i = -\mathbf{k}_i \cdot \mathbf{n}\)および\(\cos\theta_t\)はスネルの法則から導かれる値である。この処理は系内の各界面において実行され、それによって光線は任意に複雑なレンズや薄膜、構造化表面の集合体を通って追跡されることになる(??および??を参照)。
方向の変化に加え、各相互作用において光強度が反射光と透過光の間で再分配される。この再分配はフレネル方程式によって決定される。非偏光の場合、その簡略化された式は次の通りである:
\[ R = \left|\frac{n_1 \cos\theta_i - n_2 \cos\theta_t}{n_1 \cos\theta_i + n_2 \cos\theta_t}\right|^2, \quad T = 1 - R \]
より一般的には、偏光に依存する係数\(R_s, R_p\)および\(T_s, T_p\)を利用することも可能である。これらの係数は各界面における光強度の配分を決定し、損失、透過率、および効率の予測に不可欠な要素となる。
2. 単純なブルートフォース法によるレイトレーシング
原則として、レイトレーシングの処理手順は極めて単純である。すなわち、光線を伝播させ、次に交差する物体を特定し、スネルの法則およびフレネル方程式を適用した上で処理を続行するだけである。しかしながら、OLEDやレンズ、あるいは各種デバイスからの光取り出しといった現実的な光学系のシミュレーションを行う際には、数十万から数百万もの光線を追跡する必要が生じる。この場合、計算コストの大部分を占めるのは物理現象そのものではなく、光線が最初に交差する物体を特定するための検索処理である。
離散化されたシーンにおいては、表面は通常三角形メッシュとして表現される。単純な実装では、シーン内のすべての三角形に対して光線の交差判定を行うことになる。光線 \(\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}\) と頂点群 \(\mathbf{v}_0, \mathbf{v}_1, \mathbf{v}_2\) で定義される三角形との交差状態は、バリセントリック座標系を用いて表現できる。
\[ \mathbf{o} + t\mathbf{d} = \mathbf{v}_0 + u(\mathbf{v}_1 - \mathbf{v}_0) + v(\mathbf{v}_2 - \mathbf{v}_0), \quad u,v \ge 0,\; u+v \le 1 \]
\(t,u,v\)を求めること(例えばメラー・トランボア法を用いて)により、光線が三角形と交差するかどうかが判明する。全ての三角形に対して無作為に探索を行う場合、\(N\)個の三角形に対して各光線につき計算量が\(\mathcal{O}(N)\)に比例することになり、これは瞬く間に計算負荷が耐え難いレベルに達してしまう。
3. 高速なレイトレーシング
この課題に対処するため、空間加速構造体であるバウンディングボリュームヒエラルキー(BVH)を用いてシーンを分割する。幾何体は再帰的に軸平行バウンディングボックス(AABB)へと分割され、ツリー構造が形成される。各ノードには三角形群を包含するバウンディングボリュームが含まれる。レイトレーシング処理ではまずバウンディングボックスとの交差判定が行われ、交差が確認された場合にのみ子ノードへと移行する。
これにより、光線・幾何体交差判定の計算複雑度が実際には\(\mathcal{O}(N)\)から\(\mathcal{O}(\log N)\)へと低減され、シミュレーションの高速化が実現される。BVH構造の概念図は??に示されている。
その他の最適化手法としては、CPUコア間でのマルチスレッディング、光線の裏側にある三角形の事前除外処理、波長ごとのバッチ処理などが挙げられる。しかしながら根本的な課題は依然として探索問題であり、光線が最初に衝突する表面を効率的に特定することが求められる。
4. ユーザーである皆様にとってこれはどういう意味でしょうか?(つまり、どうすればシミュレーションの実行速度を向上させられるか)
光学シミュレーションのシーンを定義する際、その処理性能は使用される幾何学的プリミティブの数に大きく左右されます。物理的精度を維持しつつ、三角形数を可能な限り減らすことが望ましいのです。例えばCADモデルをインポートする際には、ボルトやねじ、微細な機械的構造といった不要な詳細部分は削除すべきです。
三角形メッシュの数が増えるごとに、光線・幾何体交差判定に要する計算コストも増大する。複数の波長や多数の光線をシミュレーションする場合、このコストはさらに倍増する。したがって、従来のCADワークフローとは異なり、効率的な光学モデリングには光学的に重要な特徴のみを保持した、慎重に単純化された幾何形状が求められる。
要するに、光学系におけるレイトレーシングとは、3次元空間内でのスネルの法則の繰り返し適用、フレネル反射・透過の計算、そしてシーン内の幾何体に対する効率的な検索処理から成る。これらが一体となって、OghmaNanoにおける物理ベースの光学シミュレーションの基盤を形成しているのである。