球面ガウス関数 について(About Spherical Gaussian: In Japanese)
- たまに上記にリストアップしているようなシェーディング関係の資料で「球面ガウス関数(Spherical Gaussian)」という言葉が出てきて気になったので,Computer Graphics Gems JP 2012の岩崎慶さんの「球面ガウス関数を用いたリアルタイムレンダリング」の記事を読みました.
- この記事はとてもわかりやすくおすすめですので, 気になった方は読んでみるといいかもしれないです.
- 以下, 自分用のメモです.
- ものすごくシンプルに球面上の値を持つ場合, 各方位ごとに値を持つことになります. 典型的なテクスチャで表現するとしたら, キューブマップのテクスチャです. ただ解像度に応じてデータサイズが大きくなりがちです.
- 球面調和関数(Spherical Harmonics)は球面上の値を, 正規直交基底(互いの基底同士が直交する. しかも, 基底が正規化済)によって近似するものです. データとしては, 正規直交基底の係数があれば OK なのでデータサイズを減らすことができます. ただし, ゲーム向けだとこの係数の数が少なめにすることが多く, また SH の基底の特性上から低周波なぼんやりとしたものを近似することに使われます. つまり, ラフネスが変化した際の正規化 Blinn-Phong のシェーディングモデルの変化のようにローブの鋭さが変化するタイプのものを近似することは苦手です.
- 球面ガウス関数(Spherical Gaussian)は球面上の値を, 球面上の方向ベクトル・ローブのベクトル・ローブの鋭さ・ローブの振幅で表現します.
- ローブの鋭さを表すパラメータがあり, また関数を用意に回転させることができるので 正規化 Blinn-Phong モデルなどのシェーディングモデルを近似することもできます.
- Diffuse 用の BRDF : 完全ランバート反射をガウス関数で近似
- Specular 用の BRDF : Phong BRDF をガウス関数で近似
- Diffuse 用の無限遠方の全方位の光源 : 少数の球面ガウス関数の線形和で近似
- Specular 用の無限遠方の全方位の光源 : 事前にフィルタリングした環境キューブマップ
- 可視性に利用する符号付き球面距離関数(Spherical Signed Distance Function:SSDF)
- 「符号付き距離関数(Signed Distance Field:SDF)」ある点 x から, 最近傍の物体境界までの距離を符号付きで表現します.
- 「符号付き球面距離関数(Spherical Signed Distance Function:SSDF) 」符号付き距離関数の球面版です. ある点 x において, 方向 w_i から最近傍の物体境界までの角度を符号付きで表現します. 用途は可視性(Visibility)の表現などです.
- 以上の BRDF, 光源, 可視性を利用してシェーダでリアルタイムレンダリングします.