Skip to content
Go back

拙訳「Real-Time Line- and Disk-Light Shading with Linearly Transformed Cosines」

· Updated:

[Heitz and Hill 2017Heitz, E. and Hill, S. 2017. Real-Time Line- and Disk-Light Shading with Linearly Transformed Cosines. Physically Based Shading in Theory and Practice course. ACM SIGGRAPH. https://eheitzresearch.wordpress.com/757-2/.]

paper slides web

Real-Time Line- and Disk-Light Shading with Linearly Transformed Cosines#

はじめに#

はじめに#

昨年: LTCを用いたリアルタイム多角形ライトのシェーディング

Real-Time Polygonal-Light Shading with Linearly Transformed Cosines (理論) [Heitz et al. 2016Heitz, E., Dupuy, J., Hill, S. and Neubelt, D. 2016. Real-time polygonal-light shading with linearly transformed cosines. ACM Trans. Graph. 35, 4. 10.1145/2897824.2925895. https://eheitzresearch.wordpress.com/415-2/.]

Real-Time Area Lighting: a Journey from Research to Production (実践) [Hill and Heitz 2016Hill, S. and Heitz, E. 2016. Real-Time Area Lighting: a Journey from Research to Production. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://blog.selfshadow.com/publications/s2016-advances/.]

はじめに#

今年: LTCを用いたリアルタイムエリアライトの新種

はじめに#

昨年: 多角形に対するLTCの積分

球面の多角形
LTCによって近似されるBRDF解析的積分

そのシェーディングはライトによってカバーされる球面領域spherical domain上でのBRDFの積分の計算である。LTCの主な特性は球面の多角形上で解析的に積分できることである。これは、多角形ライトのシェーディングのための有用なツールとなる。

これは直観とLTCの式がどのようにして発明されたかを示す。我々は多角形光源上で積分しやすいであろうことを確実にするためにこの分布を作り上げた。この分布はこの固有のライトタイプに対するものであることを元来は意味していた。

はじめに#

今年: その他のプリミティブに対するLTC積分

球面の線分
LTCによって近似されるBRDF解析的積分

より多くのライトタイプをサポートするため、我々はLTCが他の種類の球面領域上で積分することもできるかどうかを調査しなければならなかった。

このスライドでは、我々は線ライトの場合を確認できる。これは、球面の線分を生成する。線分は概念的に多角形に近く、すなわち、多数ではなく2つの頂点で定義されるが、線上でLTCを積分することは多角形上と同様の方法では行えない。

我々はこのケースのための解析的な積分の式を解くことができた。これは、多角形に対する積分の式のように見えるが、幾分か異なる。

はじめに#

今年: 他のプリミティブに対するLTC積分

球面の楕円
LTCによって近似されるBRDF近似的な解析的積分

球や円盤のライティングの場合、考慮すべき球面鏡域は球面の楕円である。この問題は多角形や線に対するそれと非常に似ているように見えるのだが、球面の楕円はある種の非常に難しい計算を伴う。

この場合では、我々は厳密な解析的な積分の式を見つけることができなかったが、十分に正確なものを解いた。

はじめに#

このトークの構成

  • LTCの復習(さらなる詳細は昨年の資料を参照のこと)
  • 線ライト
  • 球/円盤ライト

LTCの復習#

LTCの復習#

分布DD\LeftrightarrowLL

LTCがどのように定義されるかを理解するために、我々は以下の直観を用いる。球面分布はこの分布から選択できるサンプルの無限集合と等価である。

  • 球面分布を持つならば、この分布における無数のサンプルを生成できる。
  • 無数のサンプルを持つならば、任意の精度にその分布を再構築できる。

分布とサンプルは説明の仕方が異なるだけで同じ数学的対象mathematical objectである。

注意: 図示するために、図には5つのサンプルだけを描いたが、概念的に我々はサンプルの無限集合について話していることを覚えていて欲しい。以下では、5=5=\inftyと単に仮定する。 :-)

LTCの復習#

分布DD\LeftrightarrowLL

これらは同じ対象であるので、片方を変更すればもう一方も変化する。分布のパラメータを変更すれば、サンプルはそれに従う。対称的に、サンプルを動かせば、再構築される分布はそれに従う。

分布とサンプルは同じ数学的対象の二重の説明であるので、分布に関連する特性は通常サンプルに関連する二重の特性を持つことを意味し、逆もまた真である。

LTCのアイデアはサンプルの方向、それ即ち、分布を変更する線形変換(3x3行列)を用いることである。

LTCの復習#

コサイン

まず、我々はこの古典的なコサイン分布から始める。この図では、線形変換の効果を可視化することを用意にするために5つのサンプルを重ね書きした。

LTCの復習#

コサインラフネス
[λ000λ0001]\left[ \begin{array}{ccc} \lambda & 0 & 0 \\ 0 & \lambda & 0 \\ 0 & 0 & 1 \end{array} \right]

xy平面上のみのスケーリング変換を適用する場合、サンプルが分布の平均の方向に向かって集まってゆくことを確認できる。これはコサインから始めてPhong的な分布を作る方法である。

可視化を促すため、同じ線形変換を適用させている単位立方体も示す。

LTCの復習#

コサインラフネス異方性
[λ000λ0001]\left[ \begin{array}{ccc} \lambda & 0 & 0 \\ 0 & \lambda & 0 \\ 0 & 0 & 1 \end{array} \right][λx000λy0001]\left[ \begin{array}{ccc} \lambda_x & 0 & 0 \\ 0 & \lambda_y & 0 \\ 0 & 0 & 1 \end{array} \right]

xとy方向に異なる大きさでスケーリング変換を適用すると、サンプルがひとつの方向にさらに集まってゆくことを確認できる。これは、分布の異方性を引き起こす。

LTCの復習#

コサインラフネス異方性スキュー
[λ000λ0001]\left[ \begin{array}{ccc} \lambda & 0 & 0 \\ 0 & \lambda & 0 \\ 0 & 0 & 1 \end{array} \right][λx000λy0001]\left[ \begin{array}{ccc} \lambda_x & 0 & 0 \\ 0 & \lambda_y & 0 \\ 0 & 0 & 1 \end{array} \right][100010λ01]\left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \lambda & 0 & 1 \end{array} \right]

せん断shear変換を適用すると、分布のある側ではサンプルを広げ、その反対側ではサンプルを集める。これは分布のスキューskewnessを引き起こしている。

LTCの復習#

コサインラフネス異方性スキューランダム
[λ000λ0001]\left[ \begin{array}{ccc} \lambda & 0 & 0 \\ 0 & \lambda & 0 \\ 0 & 0 & 1 \end{array} \right][λx000λy0001]\left[ \begin{array}{ccc} \lambda_x & 0 & 0 \\ 0 & \lambda_y & 0 \\ 0 & 0 & 1 \end{array} \right][100010λ01]\left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \lambda & 0 & 1 \end{array} \right]

最後に、ランダム行列でこれらすべての効果を組み合わせることによって、おかしな形状を持つ洗練された球面分布を作ることができる。

LTCの復習#

BRDF (Smith GGX)Linearly Transformed Cosines (フィッティング済み)

この定義により、Linearly Transformed Cosinesは物理ベースBRDF、特にこんにちの多くのゲームエンジンで使われるGGXのそれを効率的に近似するのに使える広い表現の幅wide appearance spaceを提供する。もちろん、その近似は完璧ではないが、様々なラフネスや入射光の構成に対してBRDFの主な特徴を再現する。

LTCの復習#

コサイン✓M1M^{-1}Linearly Transformed Cosine

この定義から、多角形上でLTCを積分するためのアルゴリズムも得る。MMがコサインからこのLTC分布を得るために用いる線形変換である場合、LTC分布と多角形の両方に逆線形変換M1M^{-1}を適用する。オリジナルのコサインと新しい多角形を得る。

LTCの復習#

M1PM^{-1} PPP
M1\overset{M^{-1}}{\leftarrow}
M1Pcosine(ω)dω\int_{M^{-1} P} \text{cosine}(\omega) d\omega==PLTC(ω)dω\int_{P} \text{LTC}(\omega) d\omega

その重要な特性は多角形上のLTCの積分がちょうどM1M^{-1}で変換された多角形の積分とそのコサインとなることである。これは、解析的に計算できる(これは新しい多角形の放射照度であり、このための閉形式が存在する)。

これが昨年発表した通りのLTCの復習である。

この時点で、未解決の問題は、他のライトタイプに対して似たような事をできるか、であった。

線ライト#

線ライト#

線ライト=線のような形状のライト

[Heitz and Hill 2017Heitz, E. and Hill, S. 2017. Linear-Light Shading with Linearly Transformed Cosines. GPU Zen. https://hal.science/hal-02155101v1/file/LTC_linearlights_GPUZen.pdf.]

線ライト#

“リニアライト”との混同(リニア vs. ガンマライティング)

Jonathan Blow 用語が混乱する

Eric Heitz 分かった、フィードバックありがとう

その本の章では、我々はその項目において既存の文献との一貫性を取るためにこれらを”リニアライト”と呼ぶことに注意する。しかし、我々がそれをリリースしたとき、幾人かが名前が紛らわしいと訴えた(彼らはガンマライティングの反対としてリニアライティングを理解している)。

その本の章ではそれを変更するには遅すぎたが、今からは、この紛らわしさを避けるため、代わりにこれらを”線ライト”と呼ぶことを提案する。

線ライト#

線ライト=無限に薄い円柱cylinderライト

ライン円柱の半径RR
=limR01R= \lim_{R \to 0} \frac{1}{R}

線ライトは無限に薄い円柱ライトとして定義される。正式には、線ライトで得られるシェーディングは円柱で得られるシェーディングと円柱の半径の比の

半径を0に近づけるときの極限である。

線ライト#

線ライトは円柱ライトに対する近似として用いることができる

ライン円柱の半径RR
×R\times R \approx

→ 粗いマテリアルおよび/または薄い/遠い円柱ライトで上手く機能する

これは円柱ライトのシェーディングが線ライトのシェーディングと円柱の半径とのかけ算によって近似できることを意味する。これは球面領域の中心の値に基づく円柱のシェーディングの一次近似first-order approximationである。

故に、この近似は分布の変化が円柱によってカバーされる球面領域内で小さいときに上手く機能するのみである。すなわち、以下のいずれかのときである。

  • 円柱が薄い
  • 円柱がシェーディングポイントから離れている
  • マテリアルが粗い

線ライト#

円柱ライトに対する近似

GGX α=0.10\alpha = 0.10

以下の例では、円柱上のMC積分で得られる参考結果と解析的な線近似を比較する。

マテリアルが粗くなる、円柱が薄くなる、または、シェーディングポイントが遠くなるほど、近似がより良くなることが確認できる。

線ライト#

円柱ライトに対する近似

GGX α=0.20\alpha = 0.20

線ライト#

円柱ライトに対する近似

GGX α=0.50\alpha = 0.50

線ライト#

LTC線ライト積分

LL
==LLTC(ω)dω\int_L \text{LTC}(\omega) d\omega
解析解?

我々のLTCフレームワークで線ライトを用いるため、解決すべき技術的問題は線ライト上でのLTCの積分である。

線ライト#

LTC多角形ライト積分

コサイン✓M1M^{-1}Linearly Transformed Cosine

多角形ライトでは、元のコサイン構成に戻すために逆行列M1M^{-1}で多角形をかけ算することがキモである。

線ライト#

LTC多角形ライト積分

M1PM^{-1} PPP
M1\overset{M^{-1}}{\leftarrow}
M1Pcosine(ω)dω\int_{M^{-1} P} \text{cosine}(\omega) d\omega==PLTC(ω)dω\int_{P} \text{LTC}(\omega) d\omega

元のコサイン構成では、コサイン上で多角形を積分する必要のみがある。これは、コレに対する解析解が存在するので、単純に行うことができる。

線ライト#

LTC線ライト積分

コサイン✓M1M^{-1}Linearly Transformed Cosine

線ライト上の積分は同様の方法で処理される。すなわち、線ライトに逆線形変換を適用し、コサイン構成におけるもうひとつの線ライトを得る。

線ライト#

LTC線ライト積分(上手くいかない!)

M1LM^{-1} LLL
M1\overset{M^{-1}}{\leftarrow}
M1Lcosine(ω)dω\int_{M^{-1} L} \text{cosine}(\omega) d\omega\neLLTC(ω)dω\int_{L} \text{LTC}(\omega) d\omega

しかし、これは上手くいかない。コサイン構成における積分はLTC構成における積分と一致しない。

線ライト#

LTC線ライト積分(無限小の薄さの変化)

M1LM^{-1} L M1\overset{M^{-1}}{\leftarrow} LL

1MTωM1Lcosine(ω)dω=LLTC(ω)dω\frac{1}{M^T \omega_{\perp}} \int_{M^{-1} L} \text{cosine}(\omega) d\omega = \int_{L} \text{LTC}(\omega) d\omega

M1LM^{-1} LLL
M1\overset{M^{-1}}{\leftarrow}
1MTωM1Lcosine(ω)dω\frac{1}{\|M^T \omega_{\perp}\|}\int_{M^{-1} L} \text{cosine}(\omega) d\omega\neLLTC(ω)dω\int_{L} \text{LTC}(\omega) d\omega

微妙な違いsubtletyがひとつある。すなわち、我々が探している結果は単なる変換された線ライト上でのコサインの積分ではない。その問題は線ライトが無限に薄いのに仮想的な無限小の薄さを持つということであり、これは線形変換によって影響を受ける。正しい答えを得るためにこの変化を計算に入れる必要がある。幸いにも、因数1MTω\frac{1}{\|M^{T} \omega_{\perp}\|}を結果にかけることで得られる。ここで、ω\omega_{\perp}はライトとライトに向かう方向の両方に正規直交している方向である。この方向ω\omega_{\perp}が線形変換によって影響を受ける量は無限小の薄さの変化量を生む。

この結果やその証明に関するさらなる詳細は関連する本の章にて提供される。

線ライト#

薄い矩形rectangleライトに対する近似

円柱矩形

追加の内積を伴う円柱近似と同じ等式

円柱に加えて、線ライトは薄い矩形ライトに対する近似として使われることもある。薄い矩形ライトの向きのコサインを用いて円柱ライトのシェーディングを調整modulateすることで得る。

薄い矩形ライトに対する線ライト近似は円柱に対するときと同じ条件下で最も上手く機能する。すなわち、高いラフネス、薄いライト、または、遠いライトである。

線ライト#

薄い矩形ライトに対する近似

GGX α=0.10\alpha = 0.10

以下の例では、矩形ライト上のMC積分で得られる参考結果と解析的な線近似を比較する。

マテリアルが粗くなる、矩形が薄くなる、または、シェーディングポイントが遠くなるほど、近似がより良くなることが確認できる。

線ライト#

薄い矩形ライトに対する近似

GGX α=0.20\alpha = 0.20

線ライト#

薄い矩形ライトに対する近似

GGX α=0.50\alpha = 0.50

球/円盤ライト#

球/円盤ライト#

球、円盤、楕円ellipse、および、楕円体ellipsoid

球/円盤ライト#

球は円盤として扱うことができる

単純な式
球ライト同じ立体角をカバーする円盤ライト

第1の所見として、球ライトを解くことは円盤ライトを解くことの部分集合である。実際にindeed、球は同じ立体角をカバーする円盤で常に置き換えることができる。コレを行う単純な解析的な式が存在する。

球/円盤ライト#

楕円体は楕円として扱うことができる

L1\overset{L^{-1}}{\rightarrow}\rightarrowL\overset{L}{\rightarrow}
楕円体円盤楕円

[Heitz 2017Heitz, E. 2017. Analytical calculation of the solid angle subtended by an arbitrarily positioned ellipsoid to a point source. Nuclear Instruments and Methods in Physics Research Section A: Accelerators, Spectrometers, Detectors and Associated Equipment 852, 10–14. 10.1016/j.nima.2017.02.004. https://hal.science/hal-01402302v3/document.]

第2の所見として、同様に、楕円体ライトを解くことは楕円ライトを解くことの部分集合である。実際にindeed、楕円体は同じ立体角をカバーする楕円で常に置き換えることができる。

我々はNuclear Instruments and Methods in Physics Researchというジャーナルでこの楕円を計算するための手法を最近発表した。この論文の査読前原稿preprintはここ1から入手できる。

その解法はLTCの直観に直接的に触発されていることに注意する。すなわち、解法が既知のより単純な問題へ線形に変換して、後に、変換し直す。

球/円盤ライト#

球、円盤、楕円、および、楕円体

  • 球は円盤として扱うことができる
  • 円盤は楕円の特殊なケースである
  • 楕円体は楕円として扱うことができる

→ すべては詰まるところ楕円となる

球/円盤ライト#

LTC楕円ライト積分

コサインM1M^{-1}Linearly Transformed Cosine

我々は多角形や線に対するものと同じトリックを使う。すなわち、元のコサイン構成に戻すために楕円へ逆線形変換M1M^{-1}を適用する。

線形変換された楕円は楕円のままであることに注意する。

球/円盤ライト#

LTC楕円ライト積分

M1EM^{-1} EEE
M1\overset{M^{-1}}{\leftarrow}
M1Ecosine(ω)dω\int_{M^{-1} E} \text{cosine}(\omega) d\omega==ELTC(ω)dω\int_{E} \text{LTC}(\omega) d\omega

多角形に対するときと同様に、楕円上でのLTCの積分は新しい楕円上でのコサインの積分である。これは、球面の楕円を定義する。

球/円盤ライト#

問題: ディフューズ楕円の積分は閉形式を持たない

EE
==Ecosine(ω)dω\int_E \text{cosine}(\omega)d\omega
解析解なし✗

しかしながら問題がある。すなわち、そのコサイン分布は、球面の多角形に対して持っているような、球面の楕円上での解析的な積分を持たない。

(特殊なケースを除く。詳しくはこの後で)

球/円盤ライト#

トリック: 楕円を球で置き換える

同じ立体角と平均方向を持つ球
\approx
解析解なし✗解析解あり✓

この問題を克服するため、同じ範囲の立体角領域をカバーし、同じ平均方向を持つ球で楕円を近似する。その利点はコサインが球上で解析的に積分できることである。

コサイン楕円積分問題を解く際には、この近似は行列M1M^{-1}による楕円の線形変換の後に発生する必要があることに注意する。

注意: 最適化用途では、厳密な解析的積分を用いるより安価であるので、多角形に対して同じ近似をすでに用いた(これは、一般的なケースで、クリッピングを伴う)。さらなる詳細は我々のプレゼンテーションを参照のこと。

https://blog.selfshadow.com/publications/s2016-advances/

球/円盤ライト#

トリック: 楕円を球で置き換える

近似参考近似参考

実践では、この近似によって引き起こされるバイアスはほぼ無視できる。

これはコサイン分布が非常に低周波であることによる。そのため、その積分領域の精密な形状は、積分領域の位置や範囲が維持されている限り、それほど問題にならない。

球/円盤ライト#

トリック: 楕円を球で置き換える

==\approx
任意の方向を向いた楕円真正面を向いた楕円球の近似

近似的な球を計算するための中間の手順は同じ立体角領域をカバーする正面を向いた楕円を計算することである。

球/円盤ライト: 実践#

球/円盤ライト: 実践#

M1M^{-1}で中心CCとスケールされた軸V1V_1およびV2V_2を変換する

先程述べた通り、処理における第1工程は逆線形変換M1M^{-1}で円盤を変換することである。そうした後、我々はコサイン構成における楕円を得る。

ここで実際に行うことは楕円のスケールされた軸V1V_1およびV2V_2とその中心CCを変換することである。

球/円盤ライト: 実践#

問題: V1V_1V2V_2はもはや直交ではない

球/円盤ライト: 実践#

解法: 2Dの固有系eigensystemを解く → 新しい軸

結果の固有値と固有ベクトルから、新しい楕円の軸を定めることができる

球/円盤ライト: 実践#

正面を向く楕円を計算する

次に、以前の楕円と同様に同じ立体角を持つ正面を向く楕円を求める。

少し前に述べたように、これは中間の工程である。

球/円盤ライト: 実践#

球で近似する → ライティング結果

正面を向いた楕円は同じ平均方向と共に同じ立体角を(再び)持つ球を定めることを可能にする。

これにより、我々はLTC楕円ライト積分を計算することができる。(または、それの近似)

球/円盤ライト: 実践#

手順2: 2Dの固有系を解く

球/円盤ライト: 実践#

手順2: 2Dの固有系を解く

Q=[V1V1V1V2V1V2V2V2]=[q11q12q12q22]Q = \left[ \begin{array}{cc} V_1 \cdot V_1 & V_1 \cdot V_2 \\ V_1 \cdot V_2 & V_2 \cdot V_2 \end{array} \right] = \left[ \begin{array}{cc} q_{11} & q_{12} \\ q_{12} & q_{22} \end{array} \right]

固有値:

e1=12(tr(Q)tr(Q)24det(Q)),e2=12(tr(Q)tr(Q)24det(Q))\begin{align} e_1 &= \frac{1}{2} \left( \text{tr}(Q) - \sqrt{\text{tr}(Q)^2 - 4\text{det(Q)}} \right), \\ e_2 &= \frac{1}{2} \left( \text{tr}(Q) - \sqrt{\text{tr}(Q)^2 - 4\text{det(Q)}} \right) \end{align}

問題: V1V2\|V_1\| \gg \|V_2\|の場合(または、その逆) → 精度の欠落

まず、我々はV1V_1V2V_2による内積の行列を形成する。その後、固有値を計算し、そこから、固有ベクトルを計算する(この後すぐに説明する)。これらによって、新しい軸を定めることができる。

しかし、V1V_1の長さがV2V_2より非常に大きい、または、その逆であるとき、問題が浮かび上がる。これらの長さは二乗されるが、これは行列の主対角要素leading diagonal elements (q11q_{11}q22q_{22})の間の何桁にもなる差を引き起こす。

その大きな値は後続の計算をあふれさせるswampので、混乱が生じるchaos ensues。その巻末として、最終的に小さな固有値が真の値ではなく0になり得る。

球/円盤ライト: 実践#

ここにはこの状況において発生し得るアーティファクトの例がある。

この場合、ライトはビュアーのほぼ垂直にある。

注意: 問題を明らかにするために露出を増幅boostした。

球/円盤ライト: 実践#

解: かわりにQ\sqrt{Q}を用いて機能させることができる

Q=1t[q11+dq12q12q22+d]\sqrt{Q} = \frac{1}{t} \left[ \begin{array}{cc} q_{11} + d & q_{12} \\ q_{12} & q_{22} + d \end{array} \right]

ここで

t=tr(Q)+2d=tr(Q),d=det(Q)=det(Q)\begin{align} t &= \sqrt{\text{tr}(Q)+2d} = \text{tr}(\sqrt{Q}), \\ d &= \sqrt{\text{det}(Q)} = \text{det}(\sqrt{Q}) \end{align}

固有ベクトル:

e1=12(tt24d),e2=12(t+t24d)\begin{align} \sqrt{e_1} &= \frac{1}{2} \left( t - \sqrt{t^2 - 4d} \right), \\ \sqrt{e_2} &= \frac{1}{2} \left( t + \sqrt{t^2 - 4d} \right) \end{align}

幸いにも、ここで使える巧みなトリックが存在する。すなわち、直接的にQQから固有値を抽出するのではなく、代わりにQ\sqrt{Q}を使うことができる。QQ正定値positive definiteであるので、だだ1つの解が存在する。

期待している通り、二乗根の行列でやると、主対角値の両方をより近づけ、結果的にさらに安定的な計算になる。

その後、我々はQQの固有値を得るためにQ\sqrt{Q}の固有値の二乗を単純に必要とする。

豆知識fun fact: ここでの中間の項ttddQ\sqrt{Q}対角和trace行列式determinantである。なので、それ自身の観点でQ\sqrt{Q}を実際に説明できる。

球/円盤ライト: 実践#

より高速でより安定:

e1=(uv)2,e2=(u+v)2\begin{align} \sqrt{e_1} &= (u - v)^2, \\ \sqrt{e_2} &= (u + v)^2 \end{align}

ここで

u=12tr(Q)2det(Q),v=12tr(Q)+2det(Q)\begin{align} u &= \frac{1}{2}\sqrt{\text{tr}(Q) - 2\sqrt{\text{det}(Q)}}, \\ v &= \frac{1}{2}\sqrt{\text{tr}(Q) + 2\sqrt{\text{det}(Q)}} \end{align}

であり

tr(Q)=q11+q22,det(Q)=q11q22q122\begin{align} \text{tr}(Q) &= q_{11} + q_{22}, \\ \text{det}(Q) &= q_{11} q_{22} - q_{12}^2 \end{align}

実践では、e1e_1e2e_2を計算するために、元の行列QQの対角和と行列式の観点で説明される、以下を用いる。これはいくつかの操作を節約し、精度をさらに改善する。

球/円盤ライト: 実践#

固有ベクトル:

E1=q12V1+(e1q11)V2,E2=q12V1+(e2q11)V2\begin{align} E_1 &= q_{12} V_1 + (e_1 - q_{11}) V_2, \\ E_2 &= q_{12} V_1 + (e_2 - q_{11}) V_2 \end{align}

→ 軸

Vx=E1/E1,Vy=E2/E2\begin{align} V_x = E_1 / \| E_1 \|, \\ V_y = E_2 / \| E_2 \| \end{align}

→ 大きさ

lx=1/e1,ly=1/e2\begin{align} l_x = 1 / \sqrt{e_1}, \\ l_y = 1 / \sqrt{e_2} \end{align}

ひとたび固有値を手に入れれば、固有ベクトルを定めることができる。

そこから固有系からの軸と大きさを抽出するのは単純なことである。

球/円盤ライト: 実践#

より安定:

q11>q22q_{11} > q_{22}であれば

E1=q12V1+(e1q11)V2,E2=q12V1+(e2q11)V2\begin{align} E_1 &= q_{12} V_1 + (e_1 - q_{11}) V_2, \\ E_2 &= q_{12} V_1 + (e_2 - q_{11}) V_2 \end{align}

そうでなければ

E1=q12V2+(e1q11)V1,E2=q12V2+(e2q11)V1\begin{align} E_1 &= q_{12} V_2 + (e_1 - q_{11}) V_1, \\ E_2 &= q_{12} V_2 + (e_2 - q_{11}) V_1 \end{align}

実際には、これだけでほとんどの問題は直る!

実践では、固有ベクトルの計算に関しても注意が必要である。q11q_{11}q22q_{22}の相対的な大きさに依存して、一連の等式を使い分ける。

これだけでこの処理ステージで見つけていた多くの安定性の問題を修正できるが、前に示した特定の失敗ケースを修正できない。

球/円盤ライト: 実践#

そういえば、ここに再びアーティファクトがある…

球/円盤ライト: 実践#

…そして、ここにQ\sqrt{Q}を用いた結果がある。失敗ケースはなくなり、期待通りのなめらかな結果を得ることができた。

球/円盤ライト: 実践#

実績が解除されました!

そうして、“実績が解除された”。すなわち、我々には今やコサイン構成における有効な楕円がある。

処理の次の部分は同じ立体角を持つ正面を向く楕円を求めることである。現在の楕円と正面を向く楕円の両方は、ここでは淡い灰色で示される、(シェーディングポイントに頂点apexを持つ)円錐cone円錐断面conic sectionsである。

球/円盤ライト: 実践#

円錐 = spherical quadric

[xyz]Q[xyz]=0\left[ \begin{array}{ccc} x & y & z \end{array} \right] Q \left[ \begin{array}{c} x \\ y \\ z \end{array} \right] = 0

QQ固有分解eigendecompositionを行う

Q=[V1+V2+V][e1+000e2+000e][V1+V2+V]TQ = \left[ \begin{array}{ccc} V_1^+ & V_2^+ & V^- \end{array} \right] \left[ \begin{array}{ccc} e_1^+ & 0 & 0 \\ 0 & e_2^+ & 0 \\ 0 & 0 & e^- \end{array} \right] \left[ \begin{array}{ccc} V_1^+ & V_2^+ & V^- \end{array} \right]^T

VV^- → 新しい楕円の中心への方向 = 平均方向

e1+,e2+,ee_1^+, e_2^+, e^- → 新しい楕円の大きさ → 立体角

この円錐はspherical quadricによって説明される。これを再びQQと呼ぶことにするけど、紛らわしいだけかも。:-) 我々は、このプレゼンテーションでは特に重要ではないので、ここではQQの計算の詳細に入らないだろう。代わりに、前に言及した技術報告書やスライドの最後を参照してほしい。

重要な点は、我々が再び固有分解を行う場合、今回は3x3行列だが、正面を向く楕円の軸と大きさを求めることができる、という所である。しかし、我々が注目しているのは、軸ではなく、正面を向く楕円の中心を通る方向、すなわち、平均方向である。これは第3の固有ベクトルVV^-によって与えられる。

その大きさから、我々は楕円の立体角を計算できる。そして、正面を向く楕円を、ライティングを計算できる、同じ平均方向および立体角を持つ球で置き換える。

球/円盤ライト: 実践#

問題: シェーダにおける固有分解は扱いにくいtricky

インターネットからコードをコピーしないで

残念ながら、3Dの固有分解は前に扱った2Dの場合よりずっと素直でない。

ここに示したスニペットは、Wikipediaから持ってきたものだが、我々が見つけた他のいくつかの実装と比べてかなりコンパクトであるので、好ましいappealingように見えた。悲しいことに、この文脈において堅牢ではなかった。

球/円盤ライト: 実践#

ここにあなたが出くわし得るある種の問題の例がある。

球/円盤ライト: 実践#

解: 堅牢な三次cubicソルバを使う

インターネットからコードをコピーしよう

[Peters 2016Peters, C. 2016. How to solve a cubic equation, revisited. Moments in Graphics. https://momentsingraphics.de/CubicRoots.html.]

我々の解はChristoph Petersによって投稿されたブログに由来する。彼はMoment Shadow Mappingの研究に関連するJim Blinnによる三次多項式ソルバを用いていた。

Blinnのアプローチは、堅牢かつ(比較的)GPUで効率的にトリッキーなケースを扱うように設計された。そこでは、単精度浮動小数点のみが現時点で実現可能である。

球/円盤ライト: 実践#

解: 堅牢な三次式cubicソルバを使う

固有値は以下の根である

det(eIQ)=0\text{det}(eI-Q) = 0

これは三次多項式である

e3tr(Q)e212(tr(Q2)tr2(Q))edet(Q)=0e^3-\text{tr}(Q)e^2-\frac{1}{2}\left(\text{tr}(Q^2)-\text{tr}^2(Q)\right)e-\text{det}(Q)=0

実践では: “完全なBlinn”の解を使う

これが使える理由は固有値がdet(eIQ)\text{det}(eI-Q)の根であるためである。これは三次式に展開される。

Christophは彼のアプリケーションに対していくつかのショートカットを取ることが可能であったが、我々は完璧な堅牢性のために完全なアルゴリズムを用いる必要があることを発見した。

球/円盤ライト: 実践#

ここに再びアーティファクトを示している画像がある。

球/円盤ライト: 実践#

そしてここにBlinnの三次式ソルバを用いる同じ構成がある。前に述べた通り、結果はなめらかになっている。

球/円盤ライト: 実践#

正面を向く楕円 → 球

ゴールは目の前である。我々は正面を向く楕円を球で置き換え、ライティングを計算する必要がある。ここには触れておく価値がある2つの詳細が存在する。

球/円盤ライト: 実践#

実践では: (立体角に対して)投影された立体角を用いる

E=L1L2(1+L12)(1+L22)E = \frac{L_1 L_2}{\sqrt{(1+ L_1^2)(1 + L_2^2)}}

ここで、L1L_1L2L_2は正面を向く楕円の大きさ

厳密かつより単純

[Wong 1977Wong, H.Y. 1977. Handbook of Essential Formulae and Data on Heat Transfer for Engineers.]

実践において、我々は、平均方向と比べて、投影された(コサインで重み付けされた)立体角EEを計算する。これは、ここでの正面を向く楕円と同様に、楕円が微分要素に並行であるときに閉形式を持つためである。

情報源: http://www.thermalradiation.net/sectionb/B-18.html

球/円盤ライト: 実践#

ディフューズ球積分

ひとたび投影された立体角が得られれば、EE、および、平均方向と表面法線の間の角度によってパラメータ化される事前計算済みテーブルをルックアップすることによってシェーディングポイントに対するライティング積分を得ることができる。

その関数は非常になめらかであるので、64x64のテーブルで十分である。これは半精度のfloatの精度で8KBのトータルメモリフットプリントを表現する。

球/円盤ライト: 実践#

以前の研究との比較

Drobot2014Lecocq2017Linearly Transformed Cosines

以前には、[Drobot 2014Drobot, M. 2014. Physically Based Area Lights. GPU Pro 5 34. https://www.taylorfrancis.com/chapters/edit/10.1201/b16721-10/physically-based-area-lights-michal-drobot?context=ubx&refId=7eb353ba-e8dd-4524-9e5c-467c8fcd7230.]は点の近似を用いた。これは、GGXのようなテールの長い分布で(ここに示される)不正確なハイライト形状を生み出す。

Lecocq et al. [2016Lecocq, P., Dufay, A., Sourimant, G. and Marvie, J.-E. 2016. Accurate analytic approximations for real-time specular area lighting. Proceedings of the 20th ACM SIGGRAPH symposium on interactive 3D graphics and games 113–120. 10.1145/2856400.2856403. http://pascal.lecocq.home.free.fr/publications/lecocq_i3D2016_specularAreaLighting.pdf.] のより最近の研究では、その著者らは’回転するspinning’多角形で円盤源を近似した。これは独創的ingeniousなアイデアである一方、ここで示される画像中にあるような、ある構成においていくつかのアーティファクトがある。

球/円盤ライト: 実践#

以前の研究との比較

Textured quad参考

去年の我々の論文では、我々は円盤を近似するためにtextured quadライトを用いるという制限を示した。すなわち、ground-truthバージョンの引き伸ばされたelongatedハイライトを生成するのに失敗し、いくつかのブロックっぽいものも発生する可能性がある。

対して、我々の新しい円盤ライト須臾法は正確なハイライト形状を生成する。

関連する技術論文#

[Dupuy et al. 2017Dupuy, J., Heitz, E. and Belcour, L. 2017. A spherical cap preserving parameterization for spherical distributions. ACM Trans. Graph. 36, 4. 10.1145/3072959.3073694. https://hal.science/hal-01523333/document.]

今年のSIGGRAPH 2017では、我々は球ライトに対する他のアプローチを提案する技術論文も提示する。この論文は球冠spherical capsを維持する、共形幾何conformal geometryに基づいた、新しい変換を導入する。我々は球面分布をパラメータ化するためにこの変換を用いる。これは、球冠上で解析的に積分できる。

この論文は去年のLTCの論文と同じ考えspiritにあるが、多角形ライトではなく球ライトにその重点が置かれている。すなわち、球面分布は特に球ライトに対する固有の特性を示すために作られる。故に、これはこの問題へのもうひとつの補足的なアプローチである。

この論文と関連資料はここ2で見つかる。

パフォーマンス#

多角形 0.44ms線 0.43ms円盤 0.64ms球 0.64ms

ライトあたりのパフォーマンス:

NVIDIA 980 Ti

1080pのフルスクリーンクアッド

MSAAx1

ここに異なるライトタイプごとのいくつかのパフォーマンス図がある。

これらの値はSponzaシーンと単一のライトを伴う我々のBGFXデモの更新バージョンに由来する。シーンは(Zプリパス付き)フォワードシェーディングされ、スペキュラおよびディフューズ要素は別個のパスとしてレンダリングされる。そのため、真のピクセル毎ライティングコストは実践ではより低い可能性が高い。それでも、この値は相対的な比較に有用である。

注意: 多角形の計測時間はクアッドライトに対するものであり、この実装は我々が昨年のSIGGRAPHでのAdvances in Real-Time Renderingコースで提示した最適化を含んでいる(非最適化バージョンは0.58ms)。

今後の研究#

  • 円盤および線ライトのパフォーマンスを改善する
  • 徹底的な誤差解析 → さらなるパフォーマンス?
  • コードの更新: テクスチャリング、ground truth、など

https://github.com/selfshadow/ltc_code

関連資料#

https://labs.unity.com/article/real-time-line-and-disk-light-shading-linearly-transformed-cosines

  • スピーカーノート付きのこれらのスライド
  • すべてのライトタイプに対するWebGLデモ(多角形、線、円盤、球)
  • Linear-Light Shading with Linearly Transformed Cosines [Heitz and Hill 2017Heitz, E. and Hill, S. 2017. Linear-Light Shading with Linearly Transformed Cosines. GPU Zen. https://hal.science/hal-02155101v1/file/LTC_linearlights_GPUZen.pdf.]
    • GPU Zenの章の無料の査読前論文
  • Computing a front-facing ellipse that subtends the same solid angle as an arbitrarily oriented ellipse [Heitz 2017Heitz, E. 2017. Computing a front-facing ellipse that subtends the same solid angle as an arbitrarily oriented ellipse. https://hal.science/hal-01561624.]
    • 記事の無料の査読前論文
  • Analytical calculation of the solid angle subtended by an arbitrarily positioned ellipsoid to a point source [Heitz 2017Heitz, E. 2017. Analytical calculation of the solid angle subtended by an arbitrarily positioned ellipsoid to a point source. Nuclear Instruments and Methods in Physics Research Section A: Accelerators, Spectrometers, Detectors and Associated Equipment 852, 10–14. 10.1016/j.nima.2017.02.004. https://hal.science/hal-01402302v3/document.]
    • 技術報告書

Footnotes#

  1. 訳注:オリジナル(https://labs.unity.com/article/analytical-calculation-solid-angle-subtended-arbitrarily-positioned-ellipsoid-point-source)はリンク切れ。おそらくこれと同じもの。

  2. 訳注:オリジナル(https://labs.unity.com/article/spherical-cap-preserving-parameterization-spherical-distributions)はリンク切れ。