PRTの基本~静的PRTとは?

PRTは、何を事前計算するかによって複雑度の度合いは変わってくる。

本連載で取り扱うPRTは、2006年に開催されたゲーム開発者会議CEDEC 2006にてピラミッド社が発表した内容に沿ったものを元にしており、「環境マップを丸ごと光源と考えて、複雑な遮蔽に配慮してリアルタイムレンダリングする」というテーマに限定している。

シーン内のモノが動かないという前提でのPRTが「静的PRT」だ。2002年に発表されたPRTの開祖的論文はこの静的PRTだった。原案発表者のSloan氏は元Microsoftで、Direct3D開発に深く携わっていた人物である

そのシーンを取り巻く情景をキューブ環境マップとして、これを光源に見立ててライティングを行うライティングは特に「Image Based Lighting」(IBL)と呼ばれる。本連載で解説するPRTのライティングはこのIBLを前提とする。

IBL : Image Based Lightingの基本概念

ピクセル単位のライティングを行う際に、そのピクセルの向き(法線ベクトル)に基づいてキューブ環境マップを参照し、そのテクセルを光源に見立てて陰影演算を行う簡易技法もIBLと呼ばれるが、ここで言っているIBLは遮蔽やその他の複雑な光の伝搬(陰影だけでなく、場合によっては光の浸透や屈折、反射などなど)に配慮したものを指す。

IBLではこのように6面体構造の全方位環境マップを光源として利用することが多い

そうした高度なIBLをまともに実装するには、まず、そのシーンの各頂点のそれぞれから全方位を見回したときの遮蔽情報と法線ベクトル情報(実際には余弦項。後述)をテクスチャに記録しておく。これが「事前計算」部分だ。

そしてレンダリング時には、各ピクセルないしは各頂点において、事前計算で作成したそのテクスチャから光伝達関数を復元し、その時の視線の向き(視線ベクトル)に配慮して、キューブ環境マップ光源を参照してライティングを行う。これがIBLベースのPRTの基本的な流れだ。

その事前計算部分において、「全方位の遮蔽構造の調査」を行うわけだが、全方位とはいっても、実際にはテクスチャリソースは有限なので8方向、16方向とか適当な数の方向への調査となる。また、その遮蔽構造の調査はレイトレーシング的な手法で行われる(GPUアクセラレーションを使った方法もあり)。

「余弦項」とは、その適当な全方位方向それぞれと法線ベクトルとの内積のこと。例えば32方向について遮蔽構造を調べてそれをキューブマップに記録したら、その32方向についての余弦項も計算してキューブマップに記録する。

この遮蔽と余弦項の2つのキューブマップを掛け合わせたものをIBL積分項と呼び、実際にはこれを事前計算して保持しておくことになる。4万個の頂点のシーンならば、このIBL積分項も4万個作らなければならないわけで、これはリアルタイムに計算するのはまず無理だということが想像できるはずだ。しかも、4万個のキューブマップを管理するというのも、ビデオメモリ容量の観点から見れば非現実的だと言わざるを得ない。(続く)

IBLベースのPRTの概念。シーンを球状の情景が取り巻いているというイメージ。緑の矢印はその頂点の法線、オレンジは全方位を模式的に表したもの

その球状の情景をキューブ環境マップ(6面体の環境マップ)として近似する

そのシーンの全ての頂点についての、全方位の遮蔽構造(左)と法線ベクトル情報(余弦項、右)をテクスチャに記録。これもやはりキューブ環境マップとして記録

実際には遮蔽構造と法線ベクトル情報(余弦項)は1つにまとめIBL積分項として管理。理屈上、例えば4万頂点のシーンではこのIBL積分項のテクスチャが4万個必要になる。これは非現実的

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