SH Log演算とSH Log次元における遮蔽の統合

SHEXP技法の根幹となるテクニックであるSH Log演算とSH Exp演算について、今一度着目してみることにする。

数学的な導出は省略するが、イメージ的にはSH LogとSH Expは球面調和関数空間における対数、指数の計算ということになる。

行列の対数や指数の計算は、まず、その行列を、ペアとなる直交行列、対角行列に分解し、その対角行列の各成分に対数や指数の計算を行った値になるという性質がある。球面調和関数空間における対数や指数の計算もこの性質を応用して行う。

SH Logの求め方

行列の対数や指数の計算は、まず、その行列を、ペアとなる直交行列、対角行列に分解し、その対角行列の各成分に対数や指数の計算を行った値になるという性質がある

遮蔽係数ベクトルの対数はこのようになる

ところで、繰り返しになるが、欲しいのは任意の方向のLog空間における遮蔽係数ベクトルだ。

実際の実装では、前段でも少し振れた、事前計算を行ったZH係数テーブルに対してLog(対数)を取っておく(Log ZH係数テーブル)。こうすることで、任意の方向のLog空間の遮蔽係数ベクトルは、その方向の球面調和関数の値に、Log ZH係数テーブルを掛け合わせるだけで求まってしまう。

任意の方向のLog空間における遮蔽係数ベクトルの求め方は、理論や導出は何回だが実装はそこまで難しいものではない

SH Log空間での遮蔽係数ベクトルが求まったら、今度はその遮蔽の統合を行うステップへと移る。

頂点単位の処理となるのはこれまでのPRTと同じ。ある頂点におけるSH Log空間における遮蔽係数ベクトルは、以下のような流れになる。

まず、その頂点から対象とする球の中心へと伸びる線分と、その頂点から対象とする球への接線とが織りなす角度をキーにして、Log ZH係数テーブルを参照する(図)。前述した「一定距離ではなく角度をキーにしたテーブル作成」はここで便利に利いてくるのだ。このLog ZH係数にその角度の球面調和関数を掛けてやれば、その頂点におけるSH Log空間の遮蔽係数ベクトルが求まる。

そして、このSH Log空間の遮蔽係数ベクトルの統合は、前述したようにLog空間でのメリットを活かして和算だけで計算できる。

最終的な総和が求まったら、通常空間に戻すために、対数(Log)の逆関数である指数(Exp)を行ってやる必要がある。そう、SH Exp演算だ。(続く)

SH Log空間での遮蔽係数ベクトルの統合処理。この処理を全ての球に対して行う。角度をキーにしたテーブル作成はここで利いてくる

(トライゼット西川善司)