物理ベースレンダリングーーHaarウェーブレット基底に基づくグローバルイルミネーション

前回は、球面調和関数（Spherical Hamonies、略してSH）に基づく動的グローバルイルミネーションアルゴリズムを紹介しました。そのアイデアは、オブジェクト間の光の複雑な伝達プロセスを伝達関数と見なすことです。伝達関数は、事前にシミュレートおよび計算され、SH基底関数によって近似されます。同時に、リアルタイム照明計算では、入射環境光はSH基底関数で近似されるため、照明レンダリング結果は、2つのSH基底関数の内積で計算できます。このアルゴリズムは、事前計算シミュレーションによるリアルタイム計算の複雑さを大幅に軽減するため、リアルタイム動的光源のグローバルイルミネーションレンダリングをサポートできます。ただし、このアルゴリズムには欠点があります。つまり、低周波数のレンダリングしか取得できません。したがって、SHベースのPRTは、AO（Ambient Occlusion）と同様のソフトシャドウのみをレンダリングでき、明確な輪郭や境界を持つ実際のシャドウをレンダリングすることはできません。

本日紹介したい記事は、2003年のSiggraphカンファレンスでRen Ng他によって発表され、現在400回以上引用されていた『All-Frequency Shadows Using Non-linear Wavelet LightingApproximation』です。この論文では、著者は線形SH変換の代わりに非線形ウェーブレット変換を使用するPRTアルゴリズムを提案します。実験結果により、以前のSH関数と比べ、同じ数のウェーブレット関数を使用した場合は、グローバルイルミネーションの高周波情報をより適切にキャプチャできます。従って、アルゴリズムは、鋭いエッジを持つリアルタイムの影など、よりリアルなGI効果をレンダリングできます。

![Blog-Study_Haar-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/4daea34b-eccf-517a-dc45-6edfb3a4b31e.png)

まず、上記のように、この論文の効果図を見てみましょう。その中で、左図はSHベースのPRTのレンダリング結果で、右図はウェーブレットに基づくPRTのレンダリング結果です。両方の図は同じ数の基底関数項を使用しています。左図では100個のSH基底関数が使用され、右の画像では100個のウェーブレット基底関数が使用されています。中央の6つの正方形のテクスチャは、環境光のスタンプです。左右図のシャドウレンダリング効果を比較すると、右図のシャドウエッジがより鮮明になり、左図がぼやけていることがわかります。したがって、同じ数の基底関数を使用する場合、ウェーブレット変換はSH変換よりも高い周波数の照明情報をキャプチャでき、レンダリング結果は実際の状況に近くなります。次に、本論文のアルゴリズムの主な内容を詳細に紹介します。

---

## 一、アルゴリズムと実装

すべてのレンダリングの問題は、実際にはレンダリング方程式の計算の問題を解決しています。この論文も例外ではないので、レンダリング方程式から始めましょう。オブジェクトの表面上の点xを考え、その法線方向がnである場合、その点からωoの方向に反射された光P（x、ωo）は次のように表すことができます。

![Blog-Study_Haar-GS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/1c195058-86c1-f759-b628-090b18abef30.png)


このうち、Lは入射光強度、Vは可視性関数、frはBRDF関数、nは法線方向、ωは入射光方向です。

論文のアルゴリズムは2つの状況に適用できます：1）視点が変化し、材質がDiffuseに制限されます。2）視点は変更されず、材質は任意です。次に、これら2つのケースのそれぞれのソリューションを紹介します。

### 1.1視点は可変で、材質はDiffuse拡散に制限されている
材質がDiffuseに制限されている場合、伝達関数は次のように表すことができます。
![Blog-Study_Haar-GS2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/19dd4514-a726-d155-3f5a-b3a2405a4dbf.png)



### 1.2視点は変わらず、材質は任意
材質が任意の場合、伝達関数は次のように表すことができます。
![Blog-Study_Haar-GS3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/a0bebdaf-4e98-dcc5-c3e8-ebd5a7a605c7.png)



その中で、視点が固定されているため、ωoはxにのみ関係します。

レンダリング方程式の積分は、入射光の強度Lと、入射光の方向ωに関する他の項の畳み込みとして見ることができます。離散化後、対応する項が乗算されてから合計されます。したがって、各点xiについて、その照明計算は次のように表すことができます。

![Blog-Study_Haar-GS4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/b13b6d12-8f7c-a5e6-5b82-ace7fd92ff35.png)


行列とベクトルの形式で表現すると、次のように簡略化できます。P = T・L。その概略図を次の図に示します。

![Blog-Study_Haar-GS5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/d7f36e2a-cb0c-33b6-11f0-1beba2ec8b53.png)

### 1.3事前計算
事前計算段階では、論文の著者は2つの方法を使用しました。1番目の方法は、伝達行列Tの1列の計算を一度にシミュレートすること、つまり、入射光ベクトルLの各方向ωを計算することです。計算方法はレイトレーシングです。したがって、Tの各列ベクトルは、環境光スタンプの各ピクセルのシーンを照らした結果を表します。この方法は比較的単純で、さまざまなグローバルイルミネーション効果をサポートしますが、固定視点の場合のみをサポートします。

2番目の方法は、伝達行列Tの1行の計算をシミュレートすることです。この方法は、直接照明部分のみを計算します。したがって、伝達行列の各行は、次の図に示すように、オブジェクトの表面上の点xの可視性立方体スタンプに、BRDFおよびCosine項の重みを加えたものを表します。

![Blog-Study_Haar-GS6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/4c58c8eb-ad1d-588f-000f-03b2547549ae.png)
![Blog-Study_Haar-GS7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/8bdcfe18-eb72-ba43-6865-9ac0fba5203d.png)
![Blog-Study_Haar-GS8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/83057460-ab00-cdf3-a15d-d61830b39cb4.png)




上図は、シーン内のいくつかの頂点の事前計算結果です。その中で、1番目の図はシーンの下部パッチ上の特定の点の事前計算結果であり、2番目の図は植物の下の特定の点の事前計算結果であり、3番目の図は植物の葉の上の特定の点の事前計算結果です。このアプローチは、ラスター化されたグラフィックハードウェアで実装できます。論文の著者は、最初に各点xの高解像度半立方体可視性スタンプをレンダリングします。次に、BRDFおよびCosine項の重み値を計算し、環境スタンプと同じ解像度にダウンサンプリングします。

### 1.4リアルタイムレンダリング
リアルタイムレンダリングでは、論文の著者はまず、2Dハールウェーブレット変換を介して環境光スタンプの対応する係数ベクトルLを計算します。次に、入射光の一部を選択して計算します。その主な目的は、エネルギーが低い入射光を削除することにより、計算量を減らすことです。この論文の著者は、3つのフィルタリング方法を使用しました。 1つ目は、Haarウェーブレット係数のサイズで直接フィルタリングすること、2つ目は、伝達行列の対応する列を使用して重みを計算すること、3つ目は、光源の面積でフィルタリングすることです。次に、LとTの積を計算して、最終的なレンダリング結果を取得します。ウェーブレット変換後の係数ベクトルと行列は非常に大きなスパースベクトルと行列であり、当時のGPUは一般的なスパース行列の乗算演算をサポートできなかったため、計算プロセス全体がCPU側で実行されます。

---

## 二、効果の比較

論文の著者は、SH基底関数とウェーブレット基底関数をそれぞれ使用して環境光スタンプをシミュレートし、異なる数の基底関数を使用した場合の結果と元の環境テクスチャの違いを比較します。次の図のように示します。

![Blog-Study_Haar-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/08332465-e9e0-2418-f9b7-144470fd9349.png)

その中で、左と右の図は、2つの異なる環境光スタンプのシミュレーション結果です。左と右の図で、左の列はそれぞれ100、4096、10000のSH基底関数項を持つ環境光スタンプのシミュレーション結果であり、右の列の2つの図は100と4096のウェーブレット基底関数を持つ環境光スタンプのシミュレーション結果です。3番目は元の環境光スタンプを示しています。SHとウェーブレットのシミュレーション結果を比較すると、比較的単純な環境光スタンプの場合、ウェーブレット基底関数は高周波情報をキャプチャするために100項しか必要としないのに対し、SHは同様の結果を達成するために4096項を必要とすることがわかります。複雑な環境光スタンプの場合、ウェーブレット基底関数は元のテクスチャを復元するために4096項しか必要としませんが、SHは10000項を使用しても元のテクスチャをうまく復元できません。

ウェーブレット変換が非常に少ない項で全周波数照明情報をキャプチャできる理由は、次の図に示すように、ウェーブレット変換後、ほとんどの項の係数がゼロまたはゼロに近くなるためです。

![Blog-Study_Haar-GS9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/03bd455f-729a-27e4-a507-a258177f5e73.png)

実験を通じて、ウェーブレット変換後の非ゼロ項の割合はわずか0.1％〜1％であることがわかりました。ウェーブレット変換は、完全な周波数情報を圧縮することと同じです。したがって、ウェーブレット変換は、同じ項数でSHよりも多くの照明情報をキャプチャできます。ただし、ウェーブレット変換にも制限があります。 SHの回転不変性がないため、伝達関数では法線方向nは位置変数xの関数として扱われます。これは、ウェーブレット変換に基づくPRTは、オブジェクトを回転させた結果をリアルタイムでレンダリングできないことを意味します。SHにはこの制限はありません。これは、その後の研究でウェーブレット変換に基づくPRTの開発が限られている主な理由の1つでもあります。

論文の著者は、次の図に示すように、異なる項数のSH基底関数とウェーブレット基底関数の環境光スタンプに対する近似結果と元の図の間のL2誤差を比較します。
![Blog-Study_Haar-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/98e836a1-d13e-62e8-9654-55a5c2c9eea9.png)


項の数が増えると、SHとウェーブレットの両方の近似誤差が減少することがわかります。ただし、ウェーブレットはより速く収束し、1000では10000項でのSHの誤差よりも小さくなります。

---

## 三、より多くのレンダリング結果

論文の著者は、実験用にさらに多くのシーンをレンダリングします。次の表は、さまざまなシーンでの環境光スタンプのサンプリングの解像度、スパース行列内の非ゼロ項の割合、およびメモリ使用量を示しています。

![Blog-Study_Haar-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/15132fba-7d50-f94d-a517-2b7464466341.png)

より多くのレンダリング結果が下の図に示されています。上の行はSHレンダリング結果であり、下の行はHaarウェーブレットレンダリング結果です。左から右にとられる基底関数の項は徐々に増加します。Haarウェーブレットは、同じ数の基底関数項の下でSHによってレンダリングされたシャドウの結果よりも高周波の詳細を持っていることがわかります。
![Blog-Study_Haar-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/0c4a7511-577a-c8f0-039b-8172bc9ee5c9.png)
![Blog-Study_Haar-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/9e1bb58f-d537-da35-37e4-f73339267507.png)

---

## 四、まとめ

論文では、Haarウェーブレット関数をPRTの基底関数として使用し、全周波数情報を保存できるグローバルイルミネーション効果をリアルタイムでレンダリングすることを提案します。球面調和関数の基底関数と比較して、Haarウェーブレットの基底関数も標準的な直交性を持っています。同時に、圧縮率が高いため、非常に少ないパラメーターでレンダリング効果の高周波情報を保持できるため、完全な周波数照明のレンダリング効果を実現できます。Haarウェーブレットは、独自の特性のため、その後のグローバルイルミネーションレンダリングでは広く使用されていませんが、グローバルイルミネーションのリアルタイムレンダリングの研究分野に消えることのない貢献をしています。

---

## 五、論文情報

参考ビデオURL：https://v.qq.com/x/page/n0384trr1va.html

著者について：
レン・ン、現在UC Berkeleyに所属
個人のホームページ：https://www2.eecs.berkeley.edu/Faculty/Homepages/yirenng.html

有名なコンピュータグラフィックス学者であるRaviRamamoorthiは、現在、UCSDの教授です。コンピュータグラフィックスの大物で、数多くの論文を発表しました
個人のホームページ：https://cseweb.ucsd.edu/~ravir/

有名なコンピュータグラフィックス学者であるPat Hanrahanは、現在スタンフォード大学の教授です。コンピューターグラフィックスの大物で、かつてPixarで働いていて、RenderMan Shading Languageの開発者の1人です。
個人のホームページ：https://graphics.stanford.edu/~hanrahan/

ダウンロードリンク：
https://graphics.stanford.edu/papers/allfreq/allfreq.pdf