椿の日記

たぶんプログラムの話をします

Frequency Domain Normal Map Filtering続き^4

※式が違ったので修正(12/24)

セクション4.3の次の式

\displaystyle \rho(\omega;\gamma) = \int_{S^2} f(\omega \cdot n) \gamma(n) dn

について、次のようにそれぞれ球面調和関数展開できるとき、

\displaystyle \gamma(n) = \sum_{l=0}^{\inf} \sum_{m=-l}^l \gamma_{lm} Y_{lm}(n)
\displaystyle f(\omega \cdot n) = \sum_{l=0}^{\inf} f_l Y_{l0}(\omega \cdot n)
\displaystyle \rho(\omega) = \sum_{l=0}^{\inf} \sum_{m=-l}^l \rho_{lm} Y_{lm}(\omega)

その係数が次のようになる、

\displaystyle \rho_{lm} = \sqrt{\frac{4\pi}{2l+1}} f_l \gamma_{lm}

というこの部分について流し読みしていたのですが、よくよく考えてみると、よくある球面調和関数の内積と違って\omega \cdot nを含んでいるため、全然分からないことに気づいてしまいました。

というわけで何故これが成り立つのか調べていたのですが、これはLambertian Reflectance and Linear Subspaces (Basri and Jacob, IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 25, NO. 2, FEBRUARY 2003)に背景が説明されていました。この論文によれば、kが放射的に対称でzonal harmonicsで展開できるとき、次が成り立つそうです(Funk-Hecke Theorem)。

\displaystyle \int_{S^2} k(v \cdot u) Y_{lm}(u) du = \sqrt{\frac{4\pi}{2l+1}} k_l  Y_{lm}(v)

つまり、言い換えると「何も解決してねえ!」という感じなのですが、法線分布関数\gammaだけ先に展開してFunk-Hecke Theoremを適用すれば上記式が求まることは分かります。なので次はこの定理を掘り下げれば良さそうなのですが、どうもこの定理を深追いするのはかなり大変であるようです。しがないプログラマとしてはツールとして使うのが良さそうですね…。