動的PRT第一段階PSF技法とは?
静的PRTが発表された後、世界のリアルタイム3Dグラフィックスの研究者が積極的に研究開発に乗り出したのが「シーン上のオブジェクトを動かせない」という制約の撤廃だ。
2005年のSIGGRAPH 2005にてKun Zhou氏らが発表した「Precomputed Shadow Fields for Dynamic Scenes」という論文にて提唱された「Precomputed Shadow Fields」(PSF)という概念がこの制約撤廃に向けての大きな足がかりとなる。
これは、個々のオブジェクトは、形状変形こそ許されないものの、それぞれの位置を変えたり、傾きを変えたりすることができる動的PRTになる。石像や銅像、鉛筆やペン、瓶や食器などの、それ自身が変形しない剛体モデルであれば、シーンに動きを加えても活用できるPRTであり、3Dゲームへの応用の可能性がグッと引き寄せられた技術だといえる。
さて、静的PRTで、シーンの動きに対応できなかったのには根本的な理由があった。それは「シーン全体を"1つ"のオブジェクトとして取り扱う」という大前提があったからだ。そこで、シーンを「複数のモノからなる」として分解して考えていってはどうか、という発想が生まれることとなった。つまり、静的PRTでの遮蔽構造についての考え方を、「自分自身の部位が自身を遮蔽する"自己遮蔽"」と、「他者が及ぼしてくる遮蔽」とに分けて考えるようにするのだ。
自身が変形しない剛体の場合は、当然ながら自己遮蔽構造は変化しない。つまり、これは事前計算できるということだ。
静的PRTにはなかった動的PRTならではの要素となるのが「他者への遮蔽」だ。
他者への遮蔽は、自身を中心として、ある一定距離離れたところにある同心球(中心を同一にして半径を変えた球)上の点に対する遮蔽構造で考える。
つまり、下の図で解説すると、図中のウサギの回りに、目には見えない仮想的な球を考え、その球の内面に無数のカメラを設置して、各点からウサギのシルエットがどう見えるかを全て記録しておくというようなイメージだ。
オブジェクト自身が変形しなければ、その球内の各点に設置されたカメラでの見え方は変わらない。つまり、それぞれの方向への他者への遮蔽構造は不変として考えることが出来る。この他者への遮蔽構造のことを「Shadow Fields」と呼び、これを事前計算して求めるから"Precomputed" "Shadow Fields"であり、PSFとなるわけだ。
Shadow Fieldsの事前計算
このPSF技法の仕組みをどのようなものなのか。少し、かみ砕いて見ていくことにしよう。
自己遮蔽の遮蔽構造の事前計算は、静的PRTの時とほとんど同じだ。各3Dモデル上の全頂点から自己遮蔽構造を調査/抽出して、これを最終的には球面調和関数で近似してそのスケーリング係数を取得し、これを遮蔽係数ベクトルとして保存することになる。
やや概念の転換が必要なのは、他者への投射を求めるShadow Fieldsの算出だ。自己遮蔽の算出では、その3Dオブジェクトを構成する頂点から見た遮蔽構造を求めていたが、これに対し、Shadow Fieldsの算出は、その同心球上の各点から見た遮蔽構造を求めることになる。
つまり、遮蔽構造を求める位置が3Dオブジェクトの外郭側から行われるということ以外、やることは自己遮蔽の計算と同じなのだ。各同心球上の点の全てから遮蔽構造を取得し、これをやはり球面調和関数で近似してそのスケーリング係数を求めて、保存することになる。
この時の半径rは、物体の境界球(バウンディングスフィア : Bounding Sphere。その物体の全体をすっぽり括ることのできる球)を基本として0.2r~8.0rまで、適当なステップで決定しているという。ピラミッド社の実装では0.2r~8.0rまでのそれぞれを32等分して実装したとのことだ。
「他者への遮蔽構造」の事前計算は、同心球上の各点から3Dモデル方向へ向かっての遮蔽構造を求める。求めた遮蔽構造情報は球面調和関数で近似してそのスケーリング係数を求めて保存する。この流れは静的PRTと同じ |
この自己遮蔽やShadow Fieldsの算出は、そのシーンに登場する3Dオブジェクトの数だけ行うことになる。例えば4種類の3Dオブジェクトが登場するならばその4種類についてそれぞれ自己遮蔽とShdaow Fieldsを算出する必要がある。
着目されるのは形状なので、色違いの同一形状オブジェクトを登場させるような3Dゲームでの活用の場合では、一度算出した自己遮蔽やShdaow Fieldsは流用が出来ることになる。また、同一形状で大きさが違うもの(拡大縮小したもの)も、同一として扱える。(続く)
(トライゼット西川善司)