超雑訳 Supplemental Material – Physically-Based Real-Time Lens Flare Rendering

こんるるー。Pocoldです。
今日は,前回読んだ[Hulin 2011a]のサプリメンタルマテリアルである[Hulin 2011b]を読むことにします。

[Hullin 2011a] Matthias Hullin, Elmar Eisemann, Hans-Peter Seidel, Sungkil Lee, “Physically-Based Real-Time Lens Flare Redering”, SIGGPRAH 2011, No.108, pp.1-10.
[Hullin 2011b] Matthias Hullin, Elmar Eisemann, Hans-Peter Seidel, Sungkil Lee, “Supplemental Material – Physically Based Rea-Time Lens Flare Rendering”, SIGGRAPH 2011.

いつもながら誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘して頂けるとありがたいです。


Ray Tracing Code
このセクションでは、最新のGPUシェーダで実行可能な、基本的なレイトレーシング方式のC言語によるサンプルコードを提供します。

主なデータ構造は、LensInterface、Ray、Intersectionの3つです。LensInterfaceは単一の光学面を記述するもので、以下のように定義されています。

※コードは[Hullin 2011b]より引用

我々の座標系では、センサー面の中心を原点とし、光軸をz軸に沿って配置し、入力光線は入射面からセンサーまで負の\(z\)方向に進みます。nをさまざまな値(波長ごとの値)に設定することで、分光分散が得られる。n0およびn2は第1および第2の媒体の屈折率であり、n1は反射防止膜の屈折率である。添え字0、1、2の表記は、本プログラムで一貫して使用されており、交差前の媒体、反射防止膜、交差後の媒体を示しています。配列INTERFACEは、レンズシステムを一連のインターフェースとして記述している。順番は平面(INTERFACE[0])からセンサー平面(INTERFACE[NUM_INTERFACE-1])まで定義されている。

Rayは、位置と方向に加え、いくつかの付加的な特性を持っています。

※コードは[Hullin 2011b]より引用

tex は次の 3 つの要素をエンコードします:アパーチャ上のテクスチャ座標(tex.xy),トレース中の累積半径\(r_{\rm {rel}}\)(論文,セクション 4.1 参照)(tex.z),およびレイの強度(tex.w:0 は無効なレイ)。レイがサーフェスに当たるたびに、相対的な半径を計算し、相対的な半径の最大値を tex.z に保持します。

構造体であるIntersectionは以下のように定義されています。

※コードは[Hullin 2011b]より引用

invertedは、論文で説明されているように、反転した交差点をマークするために使用されます。

さらに、固定次数交差判定をコントロールするために、さらに2つの変数を定義します。構造体であるBOUNCEとLENGTHは以下のように定義されています。

※コードは[Hullin 2011b]より引用

事前処理段階では、すべてのバウンスを列挙し、光線を反射する2つの面を順番にBOUNDに記録していきます。トレースには3つのフェーズがあります。(1) 入射面から第1反射、(2) 第1反射から第2反射、(3) 第2反射からセンサーへ。LENGTHには、レイがセンサー面まで通過するインターフェースの数が入ります。

メインのレイトレーシングルーチンはこのようになります。

※コードは[Hullin 2011b]より引用

このメインプログラムは、入力グリッド上の各レイを呼び出す。出力された光線の強度は、ラスタライズの前に、まず隣接する光線を使って平滑化されます。次に,センサー面上の3つの出力光線で形成される三角形が,加法混色によってラスタライズされます.入力されたフラグメントの強度(色)は、それ自身の強度(r.tex.a)、波長、およびアパーチャテクスチャ(r.tex.xyから読み取られる)によって決定される。フラグメントのr.tex.zが1より大きければ、そのようなフラグメントは破棄します。

ここでは、平面(入射面、絞り面、センサー面など)と球面との交差テストの関数例を紹介します。ここでは,テストの前に入力光線が正規化されていることを仮定しています。

※コードは[Hullin 2011b]より引用

Anti-Reflective Coating
最後に、単一の誘電体層でコーティングされた表面の反射率Rの計算方法を示します。光学系の全体的なモデルでは偏光していない光を想定していますが,光の波は同じ偏光の波同士でしか干渉しないため,以下の計算ではp偏光とs偏光を区別しています。

通常の入射条件下で波長λ0に最適化された1/4波長コーティングをシミュレーションする場合、屈折率n0(空気など)とn(ガラスなど)が与えられると、d1とn1(コーティングの厚さと屈折率)は次のように選択されます。

※コードは[Hullin 2011b]より引用

※コードは[Hullin 2011b]より引用

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください