Real Spherical Harmonic Functionってやつです。
球面調和関数
★ 1.はじめに…
★ 2.球面調和関数とは?
球面調和関数の深い意味などはよく理解していなので,テキト〜な説明していきます。鵜呑みにされないようにお願いします。
「そもそも,なんで球面調和関数がでてくるのさ?」ってことなんですが,遮蔽情報を圧縮するための技術として,球面調和関数が使われるためだそうです。圧縮せずにまともにキューブマップに格納してしまうと,結構な量のビデオメモリを食ってしまうようです。そんなわけで球面調和関数を使って圧縮しようっていうことらしいです。
球面調和関数は一般的には,複素数上で定義されるのですが,実数にしか興味がないので実部だけ取り扱っていきます。球面調和関数は元々量子力学で使われるものらしいです。道理で式とかがムズカシイはずだ…。
さて,球面調和関数の定義ですが…
以下のような3次元極座標系で考えます。
球面調和関数は慣例的にシンボルyで表され,次のように定義されます。
ただし,lは正の整数で,mは-lから+lまでの整数とします。
上記の式で最初の方に出てくるKは関数を正規化するための係数で,次のような式になります。
式の後ろに出てくるPはルジャンドル陪多項式(associated Legendre polynomials)で,次のような漸化式によって表されます。
上記の球面調和関数なんですが,わかりづらいので図で表現してみました。下のようになります。
緑色の部分が正の値になる部分,赤色の部分が負の値になる部分を表わしています。
球面調和関数の特徴として,図を見るとわかるのですがピラミッド状に関数が増えていきます。無限に増えていくので,上の図ではl=5で止めています。
「そもそも,なんで球面調和関数がでてくるのさ?」ってことなんですが,遮蔽情報を圧縮するための技術として,球面調和関数が使われるためだそうです。圧縮せずにまともにキューブマップに格納してしまうと,結構な量のビデオメモリを食ってしまうようです。そんなわけで球面調和関数を使って圧縮しようっていうことらしいです。
球面調和関数は一般的には,複素数上で定義されるのですが,実数にしか興味がないので実部だけ取り扱っていきます。球面調和関数は元々量子力学で使われるものらしいです。道理で式とかがムズカシイはずだ…。
さて,球面調和関数の定義ですが…
以下のような3次元極座標系で考えます。
球面調和関数は慣例的にシンボルyで表され,次のように定義されます。
ただし,lは正の整数で,mは-lから+lまでの整数とします。
上記の式で最初の方に出てくるKは関数を正規化するための係数で,次のような式になります。
式の後ろに出てくるPはルジャンドル陪多項式(associated Legendre polynomials)で,次のような漸化式によって表されます。
上記の球面調和関数なんですが,わかりづらいので図で表現してみました。下のようになります。
緑色の部分が正の値になる部分,赤色の部分が負の値になる部分を表わしています。
球面調和関数の特徴として,図を見るとわかるのですがピラミッド状に関数が増えていきます。無限に増えていくので,上の図ではl=5で止めています。
★ 3.最後に…。
さて,こんな意味のわからない球面調和関数ですが,どうやって使うのよ?というところですが,球面調和関数の使い方等の説明は,田村さんのCEDEC2006のスライド(http://www.pyramid-inc.net/technical/index.php)に載っているのでそちらを一読するのが良いと思います。大変わかりやすく書かれているので本当にためになります。
解説が欲しいときは,スライドと合わせて西川さんが書かれている3Dグラフィックス・マニアックス(68)事前計算放射輝度伝搬(PRT)〜PRTの基本。静的PRT(3)を見るとばっちりだと思います。
あと英語がスラスラ読めるのであれば,Spherical Harmonic Lighting:The Gritty Detailsも読んだ方がいいと思います。
解説が欲しいときは,スライドと合わせて西川さんが書かれている3Dグラフィックス・マニアックス(68)事前計算放射輝度伝搬(PRT)〜PRTの基本。静的PRT(3)を見るとばっちりだと思います。
あと英語がスラスラ読めるのであれば,Spherical Harmonic Lighting:The Gritty Detailsも読んだ方がいいと思います。
★ Download
本ソースコードおよびプログラムを使用したことによる如何なる損害も製作者は責任を負いません。
本ソースコードおよびプログラムは自己責任でご使用ください。
プログラムの作成にはMicrosoft Visual Studio 2008 SP1 Professional,およびXNA Game Studio 3.1を用いています。
本ソースコードおよびプログラムは自己責任でご使用ください。
プログラムの作成にはMicrosoft Visual Studio 2008 SP1 Professional,およびXNA Game Studio 3.1を用いています。