PSF技法におけるライティング

頂点単位の陰影処理になるのは前出の静的PRTと同じだ。つまり、実際のレンダリング時は、3Dモデルの各頂点に対してライティングを実行することになる。具体的には、そのライティングを行う頂点における自己遮蔽情報に配慮し、さらにその頂点へ影響を及ぼしてくる他者オブジェクトのShadow Fieldsに配慮する、という流れになる。なお、他者の同心球状に並んだ複数のShadow Fieldsからどれを選ぶかだが、これはそのライティング対象頂点から最も近い8個の候補を選んで重み付きの線形補間を行って、その結果を採択する。

PSF技法におけるライティング

もちろん、自分と他者では基準とする座標系が異なるため、他者のShadow Fields情報をグローバル座標系に揃える処理をしなければ、こちらから他者Shdaow Fieldsを利用できない。

分かりやすく前出の図を引き合いにだして言えば、ティーポットとウサギが回転していて異なる向きになっていた場合、ティーポットから見てウサギは相対的にあらぬ方向を向いているわけで、ウサギの「他者への遮蔽情報=Shadow Fields」をこちらに反映させるにはそのShadow Fieldsの向き(座標系)までを揃えなければ行けないということだ。

このShdow Fieldsの向き揃え処理(座標系変換処理)がSH Rotationという処理だ。SHはSpherical Harmonics(球面調和関数)の頭文字の2文字を取ったもの。簡単に言えば、球面調和関数で近似して作った遮蔽構造データを、そのスケーリング係数のみを用いて座標軸回転をしてしまうのがSH Rotationだ。

球面調和関数のスケーリング係数からなる係数ベクトルだけで座標系の回転を行う処理が「SH Rotation」だ。

そして続いて座標系を揃えた他者のShdow Fieldsをこちらの自己遮蔽に統合(反映)させる処理を行うわけだが、これにはSH Triple Product(高度な複数回にわたる内積演算)という演算を行う。

SH RotationとSH Triple Productの実際の理屈や処理系については、複雑であり、誌面の都合によりここでは省略する。両方とも係数ベクトル次元で行う計算で、なおかつ高速化に配慮した手法であり、球面調和関数などと同様に「ありもの」的なツールとして活用して良いとされている。ただし、計算負荷はそれなりに高い。

なお、SH RotationとSH Triple Productの理論や実装については「Spherical Harmonic Lighting: The Gritty Details」(SH Rotationの実装方法)、「Code Generation and Factoring for Fast Evaluation of Low-order Spherical Harmonic Products and Squares」(SH Triple Productの実装方法)といった論文や、ピラミッド社が提供する資料を参考にして欲しい。

処理している頂点への他者オブジェクトからの影響の有無についての調査は、そのシーンに登場する全ての他社オブシェクトについて行う。影響があるか無いかの判断は、前出のバウンディングスフィアの8.0rの距離を基準にして行えばいい。8.0r以上の距離の離れた他者については影響がないとして無視をし、逆に8.0rの距離以下の他者オブシェクトについては影響があるとするのだ。影響があるならばそのShadow Fieldsを統合していく(計算に含める)。

全ての頂点について遮蔽構造を算出できてしまえば、あとの陰影演算(輝度計算)は静的PRTと同じだ。改めて言うまでもないだろうが、その遮蔽係数ベクトルと光源係数ベクトルの内積を求めるだけだ。(続く)

PSF技法による動的PRTは個々の3Dオブジェクトの変形は許容されないが位置移動や回転が許容される

ピラミッド社によるPSFの実装例。まるでレイトレーシングによるオフライン・レンダリングされたかのような柔らかい陰影のオブジェクト達が動く。ここまで動かせるようになれば、特定のタイプのゲームであれば実用可能かもしれない

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