超雑訳 Moving Frostbite to Physically Based Rendering 2.0 (4)

Share

さて,前回からLightingの章の和訳に入りました。
今回から,実装周りに関係がありそうな所を訳していきます。
毎度のことながら,誤訳等がありますので予めご了承ください。
また,誤訳を指摘して頂ける際は,正しい翻訳例と共にご指摘頂けると幸いです。


4.4 Punctual lights

Frostbiteは2つのタイプのパンクチュアルライトのみサポートします:ポイントとスポットです。パンクチュアルライトに対して物理的に正しくするために,いわゆる”逆平方則”[Wikf]に従う必要があります。図22を参照してください。一定光度の光源から観測されたライト強度はオブジェクトからの距離の2乗に比例して減少します。逆平方則はポイントライトに対してのみ有効であり,以下には適用できません:
 1. ライトビームは高く視準が合わされているために狭い分布を持つ投光照明とサーチライト
 2. エリアライトあるいはフレネルレンズのような特定ライト

Frostbite_Fig_22

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.28 より引用

Luminous power: 次の光度\(I\)と照度\(E\)を持つ式へと逆平方則を変換します:
\[
E = \frac{I}{distance^2} \tag{13}
\]
ライティングの計算の至る所で同次形(m, cm, mm, …)である距離単位を必要とする式です。距離が0に向かうとき値は無限になる可能性がありますが,これは実世界では起こりません。なぜかというとライトは常にサイズを持つからです。しかしながら,リアルタイムグラフィックスでは数値的な問題を避けるために小さなバイアスを追加するのが一般的です。パンクチュアルライトを最小サイズを持ちライト内へオブジェクトが決して侵入することができないとして考慮することはよくあることです。Frostbiteでは1単位=1メートルで,1cmのサイズを持つパンクチュアルライトと定義しました(表記を簡略化するため,このドキュメントの再認識部分での”max”操作を省略しました。):
\[
E = \frac{I}{{\rm max}(distance^2, 0.01^2)} \tag{14}
\]
Frostbiteでは,アーティスト発光強度単位かフォトメトリックプロファイルに対する光度のどちらかを持つパンクチュアルライトの強度を制御することができます。セクション4.5を参照してください。発光強度は常にライティングの計算について光度へと変換されます。発光強度はライトの立体角について光度を積分することによって光度から計算することが可能です。

Point light:
\[
\phi = \int_S I\, {\rm d}{\bf l} = \int^{2\pi}_0 \int^{\pi}_0 I \,{\rm d}\theta {\rm \phi} = 4\pi I \tag{15}
\]
Spot light(開放角\(0 \leq \theta_{\rm outer} \leq \pi\)を持つ):
\[
\phi = \int_{\Omega} I {\rm d}{\bf l} = \int^{2\pi}_0 \int^{\theta_{\rm outer}}_0 I\, {\rm d}\theta {\rm d}\phi = 2\pi \left( 1 – \cos\frac{\theta_{\rm outer}}{2} \right) I \tag{16}
\]
式16は円錐の正確な立体角です。\(\theta_{\rm outer}\)が半角であれば,積分は \(I \, 2\pi (1 – \cos\theta_{\rm halfouter})\) になります。この式の結果は等しい値に関してであり,照明レベルはライティングがよりフォーカスされるのでより小さな円錐角でより明るく見えます。図23を参照。そのような結合はアーティストに対してスポットライトの操作をより困難にし,最適化の際に問題を引き起こします。我々はフォーカスされたライトの結合を断念する選択をし,スポットライトリフレクターがライトを緩和する場合に,単純なマスキングのように行うことを振る舞うように選択しました。これらの結果と,ディスクエリアライトへのスムーズな移行に伴い,Frostbiteではスポットライトの発光強度を次のように定義しました:
\[
\phi = \pi I \tag{17}
\]
パンクチュアルライトに対する発光強度から光度へと変換は表9にまとめられています。完全性のため,錘台ライト(言い換えると,長方形のピラミッド)についての変換も追加しました[Wiki]。錘台ライトと線分ライトはFrostbiteではエリアライトとして考えられており,そのためこれらの定式を使えません。それらのライトは時々だけ使われ,ポイントとスポットライトのライティングパスを効率的に共有することができません。

Light calculation:これらの光源に対するライティングの計算は次にしたがって与えられます:
Point light: ライト評価は次のように表現することが可能です
\[
L_{out} = f({\bf v}, {\bf l})E = f({\bf v}, {\bf l})L_{in} \langle {\bf n} \cdot {\bf l} \rangle = f({\bf v}, {\bf l}) \frac{I}{distance^2} \langle {\bf n} \cdot {\bf l} \rangle = f({\bf v}, {\bf l}) \frac{\phi}{4\pi \, distance^2} \langle {\bf n} \cdot {\bf l} \rangle \tag{18}
\]
ライトを直接的に指すサーフェイス法線を考慮して,照度の結果は逆平方則に従います:
\[
E_{\perp} = \frac{\phi}{4\pi \, distance^2} \tag{19}
\]
Spot light: ライト評価は次のように表現することができます
\[
L_{out} = f({\bf v}, {\bf l}) \frac{I}{distance^2} \langle {\bf n} \cdot {\bf l} \rangle = f({\bf v}, {\bf l}) \frac{\phi}{\pi\,distance^2} \langle {\bf n} \cdot {\bf l} \rangle \,\,\, {\rm getAngleAttenuation()} \tag{20}
\]
照度の結果は逆平方則に従い,ライトを直接的に示すサーフェイス法線を考慮することで,ゆえに(Frostbiteの変換で)次のようになります:
\[
E_{\perp} = \frac{\phi}{\pi \, distance^2} \tag{21}
\]
Frostbite_Fig_23

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.30 より引用

Frostbite_Table_9

※表は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.30 より引用

Measurement: 双方の相互関係を有効にするために入射ライトメータで1セットの測定を行いました。セットアップは図24で説明されます。結果は表10で示され,発光強度単位の取り扱いを有効にし,点光源について電球を表すのが可能である前提です。ルーメンの2倍の量をライトが持つことは照度が2倍になるということに注意してください。出来るだけ近くでの測定は電球のハイライトに逆らって最も高い値を得ることが可能な測定で,従って電球のサイズに依存します。セットアップが複雑であり,スポットライトの我々の定義に手起業できないのでスポットライトに対する任意の測定は行いませんでした。Fostbiteでのポイントライトはすべての強度キャリブレーションに対するリファレンスライトとなります。それは実世界の測定の合致し,したがって信頼性があります。
Frostbite_Fig_24

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.31 より引用

Frostbite_Table_10

※表は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.31 より引用

Attenuation: 逆平方則での1つの問題はゼロに決して到達しないということです。パフォーマンスによる理由のため,レンダラーはライトカリングアルゴリズムをサポートするために限りあるライト範囲で実装しなければなりません。これを解決する1つのアプローチはほとんどの機能が影響を与えないような方法で[Kar13]窓に減衰することです。このため,我々は距離の基準に基づいてゼロへと基本線形補間を使用します:
\[
E = {\rm lerp} \left( \frac{I}{distance^2}, \, 0, \, \frac{distance}{lightRadius} \right) = \left( \frac{I}{distance^2} \right) \left( 1 \, – \frac{distance}{lightRadius} \right) \tag{22}
\]
そして,関数を変化させずに保つため,距離を基準を以下に従って微調整します:
\[
E_{windows2} = \left( \frac{I}{distance^2} \right) \left( 1 – \frac{distance^{20}}{lightRadius^{20}} \right) \tag{23}
\]
この単純なアプローチは動作しますが,不自然な見た目のハードカットオフを引き起こします。第2のアプローチは閾値によって関数にバイアスをかけ,初期範囲へと再マップすることです(0-1)[Mad11]。
\[
threshold = \frac{1}{lightRadius^2} \tag{24}
\]
\[
E_{scaleBias} = \left( \frac{1}{1 – threshold} \right) \left( \frac{I}{distnace^2} -threshold \right) \tag{25}
\]
結果はより良くなりますが,このアプローチは0において非連続の見た目を起こす非ゼロの勾配を持つことからの影響を受けます。より良いアプローチは窓関数であり,\(lightRadius\) においてゼロ勾配を保証することです。これは窓関数の指数を上げることによって達成可能です。図25を参照してください。
\[
E_{windows1} = \left( \frac{I}{distance^2} \right) {\rm saturate} \left( 1 – \frac{x^n}{lightRadius^n} \right)^2 \tag{26}
\]
\(n\) はスムーズな移行を微調整するのを可能とします。Frostbiteでは,Karis[Kar13]によって示されているように値\(n = 4\) を持つWindow1 に適用しました。このスムージング関数はすべてのパンクチュアルライトについて適用され同様にすべてのエリアライトにも適用されます。しかしながら,線形補間の基準は半径 \(\left( \frac{x^2}{d^2} \right)\) なので,チューブや矩形ライトのような非球面形状でうまく動作しません。我々はパフォーマンスによる理由のためこのトレードオフを容認しました。アーティストは正確さが必要とされた場合にライトの半径を増加させる可能性をまだ持っています。

Frostbite_Fig_25

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.32 より引用

リスト4はこのセクションで異なるテーマを説明したコードの結果を示しています。
Frostbite_List_4

※リストは,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, pp.32-33 より引用

 

4.5 Photometric lights

フォトメトリックライトは強度の分布を記述するためにフォトメトリックプロファイルを使用します。これらの分布はフォトメトリックファイルに保存されます。2つの一般的なフォーマットが存在します:IES(.ies)とEULUMDAT(.ldt)で,シンプルなASCIIファイルです。

IES: 北米照明学会の標準で,ウェブ上でのフォトメトリックデータの電子移動のために作られました。IESは北米で最も一般的にフォトメトリックデータファイルフォーマットであり,ヨーロッパでも広く使われています。
EULUMDAT: は欧州規格で,ヨーロッパにおけるデファクトインダストリースタンダードのフォトメトリックデータですが,定義と維持をするために関連して認識されている標準化団体はありません。

多くの照明メーカーはウェブ上で自由に利用可能なフォトメトリックファイルを提供しています。例えば,Lithonia Lighting(www.lithonia.com)マニュファクチャーは豊富なIESのライブラリとEULUMDATファイルを持っています。

Frostbite_Fig_26

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.33 より引用

双方のフォーマットは様々な角度に対する光度を保存しています。それらはライトセンサーを用いて研究所で計測されており,光源周りの球状の拡散と球の中に向かって指し示しています。このキャプチャ方法のため,すべてのランプは点光源として考えられます。図26を参照。物理的に正しい結果を得るために,IES/EULUMDATファイルは小さな球状でのみ適用されるべきです。小さな球以外のその他のジオメトリにへとIES/EULUMDATファイルを適用することは固有の方法やフォーマット定義の間違いを引き起こす可能があります。“フォトメトリックウェブ”として言及されている光の分布を説明するために球面座標系が使われます。これらの3つの異なるフォトメトリックウェブは,タイプA, B, そしてCと呼びます。

Type A: 自動車のヘッドランプと信号灯向け
Type B: 調節可能な屋外エリアとスポーツ照明器具向け
Type C: 建築や道路照明向け

実際には,タイプAとBはまれに使用され,タイプCがコンピューターグラフィックスに使われる最も一般的なタイプです。

IESフォーマットは理解するのが非常に難しい構造のフォーマット内にカンデラで発光強度を保存します。このフォーマットによってサポートされる絶対強度と相対強度の両方に適用します。絶対強度はLED器具に対して必要であり,相対強度は最も一般的なケースはコンピュータグラフィックスと昔ながらのライト(蛍光灯,白熱灯,ハロゲンランプ,など)についてです。このフォーマットにはIES LM-63-86からIES-LM-63-2002まで5つの異なる仕様があります。各フォーマットをサポートするIESパーサーを書くことは容易なタスクではなく,コンピュータグラフィックスの世界で使用されるいくつかのファイルは不完全であるかあるいは悪いフォーマットであるように見えます。仕様書は自由にアクセス可能でなく,いくつか不明瞭な部分があります。実際に,IESNA文献ではフォトメトリックタイプAとBで水平回転の方向に関して混乱する所があります。今日の最も良いIESに関するリソースはHelios32のウェブサイト[CL99]と彼に関連したドキュメントであるように思われます。IESパーサーのコードに関する良いリソースはIan Ashdown[Ash98]によって書かれており,彼はHelios32のウェブサイトをメンテナンスしています。IESファイルを可視化するために,最も一般的なビューアーはIESviewer[Leg]です。対照的に,EULUMDATフォーマットはうまくかっちりとしたフォーマットで,ライトによって放射されたトータルキロルーメンあたりのカンデラで発光強度値を保存しています。
\[
{\rm candela \ per\ total\ kilolumens} \left( \frac{cd}{klm} \right) = \frac{1000 \ {\rm luminous\ intensity}(cd)}{{\rm total \ luminous\ flux}(lm)}
\]
この区別は重要であり,いくつか明文化が必要となります。IESファイルは相対強度と絶対
強度の両方をカンデラ値で保存します。絶対強度と相対強度の両方に対してEULUMDATファイルから相対カンデラ値を取り出すために,以下の変換を行うことが必要となります:
\[
{\rm luminous \ intensity}(cd) = \frac{{\rm candela \ per \ total \ kiloluments} \left( \frac{cd}{klm} \right) {\rm total \ luminous \ flux} (lm)}{1000}
\]
EULUMDATフォーマットはより複雑な器具を保存したり,色温度のような付加情報を保存するのが可能です。EULUMDATフォーマットをメンテナンスするための団体なしで,仕様は1990年から大きく変化せずに保たれています。公式なファイルフォーマットの発行がなく,唯一の仕様書の1つはHelios32のウェブサイト[CL99]を通じて利用可能です。ビジュアライザーとドキュメントを含むツールセットが良く,Eulumdatツールウェブサイト[Sys]上で利用可能です。

Frostbiteでは,開発時間の欠如のため難点であるにも関わらず我々はIESフォーマットをのみをサポートすることを選択しました。またコンピュータグラフィックスで受け入れられるようにも見えます。IESファイルから生成されたフォトメトリックプロファイルは直接的にポイントライトやスポットライトに適用するのが可能です。これは光度でライトを制御する唯一の方法です。2つめのオプションはプロファイルの最大強度によって正規化済みのマスクとしてIESプロファイルを使用することです。発光強度のポイントライト方程式で両方のケースを処理するために,最大強度によってプロファイルを正規化し,以下のようなポイントライト評価を行います:
\[
L = f({\bf v}, {\bf l}) \ \frac{I}{d^2} \ \langle {\bf n} \cdot {\bf l} \rangle \ {\rm getIESProfileAttenuation()} \tag{27}
\]
プロファイルの最大強度あるいはマスクのケースについてのユーザーが定義したライト強度のどちらか一方を表現します。getIESProfileAttenuation関数は正規化されたプロフィル値を返却します。スポットライトについて,角度減衰はこの方程式のトップで適用されます。タイト形状のより最適化を可能とし,シンプルなプロファイルのため使いやすいです。図27を参照してください。

Frostbite_Fig_27

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.35 より引用

新しいライトプロファイルを作成するとき,球面フォトメトリック関数は再構築され,球面パラメータライゼーション(\(\theta, \cos(\phi)\))で2次元テクスチャをフィルするためにサンプルされます。マスクと非マスク利用の両方を処理するために,最大強度の逆数によってスケールされた正規化済みの値を保存します。シェーダ内で,2次元テクスチャが評価され,リスト5の減衰として適用されます。

Frostbite_List_5

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.35 より引用

Why use an IES profile? IESプロファイルはゲームにおいてよりも建築設計に対してより有益です。しかしながら,興味深いユースケースをもたらすマスクとしてライトプロファイルを使用すること可能にします。例えば,IESプロファイルはあるツール[Gen]でアーティストによって生成することができ,図28の複雑なシャドウをシミュレートするのに使用することができます。これはクッキーテクスチャと似ていますが,異なるパラメータライゼーションを持ちます。

Frostbite_Fig_28

※図は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.36 より引用

 

4.6 Sun

太陽は特に屋外環境において重要な光源です。非常に高い値を持ち,表11を参照,一方で非常に小さな立体角をカバーします。この設定は法線方向と変換に非常に敏感であること生み出します。マテリアルのディフューズの部分についてのパンクチュアルライトとして光源を考慮することは近似として許容できますが,スペキュラー部分についてそのように行うことは鏡のようなサーフェイスに対して問題を招きます。Frostbiteでは,これらの問題を部分的に和らげるために,太陽は周辺の半球に対して常に垂直なディスクエリアライトとして処理します。

アーティストは太陽方向に垂直なサーフェイスに対する太陽の照度(ルクス単位)を指定します。これは(表11のように)ライトメータで実世界と対照して直接的に値をチェックすることが可能となるので便利です。また計算も単純化されます:
\[
L_{out} = f({\bf v}, {\bf l})\ E = f({\bf v}, {\bf l}) \ E_{\perp} \langle {\bf n} \cdot {\bf l} \rangle \tag{28}
\]
ここで,\(E_{\perp}\) はアーティストによって提供される照度値です。リスト6は太陽を評価するための関数を示しています。太陽がパンクチュアルの場合としてディフューズ部分はライティングし,一方スペキュラー部分は太陽の形状を考慮して行われます。

Frostbite_Table_11

※表は,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.36 より引用

Frostbite_List_6

※リストは,Sebastien Lagarde and Charles de Rousiers, “Moving Frostbite to Physically Based Rendering 2.0”,
SIGGRAPH 2014 Course: Physically Based Shading in Theory and Practice, p.36 より引用

Remark: 現在,正しいものが見つかっていないのでディスクとエリアライトに対してエネルギー保存要素を持ちません。空からのライティングはディスタントライトプローブで処理します。セクション4.9を参照してください。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)