SH Log演算とSH Log次元における遮蔽の統合
SHEXP技法の根幹となるテクニックであるSH Log演算とSH Exp演算について、今一度着目してみることにする。
数学的な導出は省略するが、イメージ的にはSH LogとSH Expは球面調和関数空間における対数、指数の計算ということになる。
行列の対数や指数の計算は、まず、その行列を、ペアとなる直交行列、対角行列に分解し、その対角行列の各成分に対数や指数の計算を行った値になるという性質がある。球面調和関数空間における対数や指数の計算もこの性質を応用して行う。
ところで、繰り返しになるが、欲しいのは任意の方向のLog空間における遮蔽係数ベクトルだ。
実際の実装では、前段でも少し振れた、事前計算を行ったZH係数テーブルに対してLog(対数)を取っておく(Log ZH係数テーブル)。こうすることで、任意の方向のLog空間の遮蔽係数ベクトルは、その方向の球面調和関数の値に、Log ZH係数テーブルを掛け合わせるだけで求まってしまう。
SH Log空間での遮蔽係数ベクトルが求まったら、今度はその遮蔽の統合を行うステップへと移る。
頂点単位の処理となるのはこれまでのPRTと同じ。ある頂点におけるSH Log空間における遮蔽係数ベクトルは、以下のような流れになる。
まず、その頂点から対象とする球の中心へと伸びる線分と、その頂点から対象とする球への接線とが織りなす角度をキーにして、Log ZH係数テーブルを参照する(図)。前述した「一定距離ではなく角度をキーにしたテーブル作成」はここで便利に利いてくるのだ。このLog ZH係数にその角度の球面調和関数を掛けてやれば、その頂点におけるSH Log空間の遮蔽係数ベクトルが求まる。
そして、このSH Log空間の遮蔽係数ベクトルの統合は、前述したようにLog空間でのメリットを活かして和算だけで計算できる。
最終的な総和が求まったら、通常空間に戻すために、対数(Log)の逆関数である指数(Exp)を行ってやる必要がある。そう、SH Exp演算だ。(続く)
(トライゼット西川善司)