レンダリング時の陰影処理は?

ここまでを踏まえて静的PRTの流れと概念をまとめたものが下図だ。

静的PRT(Static PRT)の概念図。「球面調和関数」はデータ圧縮メソッドとして活用する

なお、遮蔽構造の球面調和関数は白黒なので1チャネル分を取り扱えばいいが、全周情景のキューブ環境マップの圧縮はRGB(赤緑青)の3チャネル分を同様の球面調和関数にて圧縮しなければならない。

ところで、この静的PRTでは各頂点単位で陰影演算(輝度計算、照明演算)を行うと前述した。

しかし、各頂点における遮蔽構造キューブマップも、光源として扱う全天周の情景を描いたキューブ環境マップも、共に球面調和関数の係数となってしまっているため、その陰影計算のやり方がピンとこない。実は、この計算は、この球面調和関数のスケーリング係数列をベクトルとして捉え、そのベクトルの内積を計算することで求まってしまう。

数学的な証明はここでは省略するが、今回の例で行けば、遮蔽構造圧縮で求まった球面調和関数のスケーリング係数列からなる「遮蔽係数ベクトル」と、光源用キューブ環境マップ圧縮で求まった球面調和関数のスケーリング係数からなる「光源係数ベクトル」の内積を求めれば陰影計算を行ったことに相当してしまうのである。

球面調和関数を用いたことで情報を圧縮できただけでなく、副次的に陰影計算の簡略化も同時に実現できるのだ。(続く)

遮蔽構造圧縮で求まった球面調和関数のスケーリング係数列からなる「遮蔽係数ベクトル」と、光源用キューブ環境マップ圧縮で求まった球面調和関数のスケーリング係数からなる「光源係数ベクトル」の内積を求めれば陰影演算(輝度計算)を行ったことになる

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