(58)【調査した分野】(Int.Cl.,DB名)
所定の光線方向について光輸送計算用の複数の光線束を定義して行う3Dシーンの照明計算において、予め定められたメモリ領域内に格納可能な前記光輸送計算用の光線束の光路数を予測する予測方法であって、
第1の生成手段が、各画素が、該画素位置に対応する前記光線方向の直線上における前記3Dシーン内のフラグメント数を画素値とする、予め定められた画素数を有するフラグメント数マップ、及び該フラグメント数マップのミップマップを生成する第1の生成工程と、
導出手段が、前記第1の生成工程において生成された前記フラグメント数マップのミップマップにおける1つの階層の画素について、該画素に対応する前記3Dシーン内の対応領域に前記光輸送計算用の光線束を定義した場合に1つの光路上に平均的に含まれる推定フラグメント数を導出する導出工程と、
予測手段が、前記予め定められたメモリ領域のサイズを前記導出工程において導出された前記推定フラグメント数で除した値を、前記1つの階層の画素について前記予め定められたメモリ領域内に格納可能な前記光輸送計算用の光線束の予測光路数として出力する予測工程と、を有し、
前記導出手段は前記導出工程において、前記1つの画素の画素値であるフラグメント数に該画素の階層に応じた補償値を加算することで前記推定フラグメント数を導出する
ことを特徴とする予測方法。
所定の光線方向について光輸送計算用の複数の光線束を定義して行う3Dシーンの照明計算において、予め定められたメモリ領域内に格納可能な前記光輸送計算用の光線束の光路数を予測する予測方法であって、
第1の生成手段が、各画素が、該画素位置に対応する前記光線方向の直線上における前記3Dシーン内のフラグメント数を画素値とする、予め定められた画素数を有するフラグメント数マップ、及び該フラグメント数マップのミップマップを生成する第1の生成工程と、
第2の生成手段が、前記フラグメント数マップと同数の画素数を有し、各画素が、前記フラグメント数マップの対応する画素と同一の直線上に存在するフラグメントに適用される照明テクスチャのテクセル密度を画素値とするインポータンスマップ、及び該インポータンスマップのミップマップを生成する第2の生成工程と、
導出手段が、前記第1の生成工程において生成された前記フラグメント数マップのミップマップにおける1つの階層の画素について、
該画素に対応する前記インポータンスマップのミップマップの画素の生成に参照された前記インポータンスマップの領域におけるテクセル密度の分布に応じて、定義する前記光輸送計算用の光線束の分布を変更するパラメータを決定し、
前記決定されたパラメータを参照し、前記1つの階層の画素に対応する前記3Dシーンの対応領域に変更後の前記光輸送計算用の光線束の分布を定義した場合に1つの光路上に平均的に含まれる推定フラグメント数を導出する導出工程と、
予測手段が、前記予め定められたメモリ領域のサイズを前記導出工程において導出された前記推定フラグメント数で除した値を、前記1つの階層の画素について前記予め定められたメモリ領域内に格納可能な前記光輸送計算用の光線束の予測光路数として出力する予測工程と、を有し、
前記導出手段は前記導出工程において、前記対応領域についての前記フラグメント数マップの画素値であるフラグメント数に、対応する前記インポータンスマップの画素値であるテクセル密度で加重平均して得られた加重平均フラグメント数に該画素の階層に応じた補償値を加算することで前記推定フラグメント数を導出する
ことを特徴とする予測方法。
前記補償値は、前記フラグメント数マップのミップマップに含まれる最上層の画素の画素値、及び前記1つの階層の画素に対応する、前記フラグメント数マップ上の画素の数に基づいて決定されることを特徴とする請求項1または2に記載の予測方法。
前記補償値は、前記1つの階層の画素が属する前記フラグメント数マップのミップマップの階層が下層であるほど大きくなる値に設定されることを特徴とする請求項1乃至3のいずれか1項に記載の予測方法。
【発明を実施するための形態】
【0015】
[実施形態1]
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、予測方法を実行する装置の一例としての、3Dシーンに適用するライトマップを生成可能なPCに、本発明を適用した例を説明する。しかし、本発明は、3Dシーンの照明計算を実行することが可能な任意の機器に適用可能である。
【0016】
また、本明細書において、「光線束(Ray-bundle)」とは、対象の3Dシーンに配置された描画オブジェクト間に生じる相互反射の影響を計算(光輸送計算)するための光路(光線経路)の集合体であるものとして説明する。ライトマップの生成処理においては、上述したように様々な光線方向の相互反射を考慮する必要があるため、設定された光線方向の各々について対象の3Dシーン全体について光線方向に平行な光線束を定義し、各光路について光輸送計算を行う。なお、設定される光線方向によっては、1つの光路上には例えば
図3に示されるように複数の相互反射が生じることがある。このような場合、光輸送計算はそれぞれの区間の相互反射について行われるため、1つの光路についての光輸送計算はライトマップの異なるテクセルに反映される。
【0017】
《PC100の構成》
図1は、本発明の実施形態に係るPC100の機能構成を示すブロック図である。
【0018】
CPU101は、PC100が有する各ブロックの動作を制御する。具体的にはCPU101は、ROM102あるいは記録媒体106に格納された各ブロックの動作プログラムを読み出し、RAM103に展開して実行することにより各ブロックの動作を制御する。
【0019】
ROM102は、例えば書き換え可能な不揮発性メモリである。ROM102は、PC100が有する各ブロックの動作プログラムに加え、各ブロックの動作において必要となるパラメータを記憶する。RAM103は、揮発性メモリである。RAM103は、各ブロックの動作プログラムの展開領域としてだけでなく、各ブロックの動作において出力された中間データ等を記憶する格納領域としても用いられる。
【0020】
GPU104は、後述のライトマップ生成処理に係る3Dシーンの描画処理を行う。具体的にはGPU104は、例えば後述の記録媒体106に記録された描画オブジェクトに係るモデルデータを読み出し、不図示のGPUメモリに展開する。そしてGPU104は、CPU101から提供される配置情報に応じてそれらのモデルデータを処理し、ライトマップ生成対象である3Dシーンを例えばVRAM105に構成する。なお、本実施形態ではライトマップ生成処理におけるライトマップの生成領域として用いられるものとする。またVRAM105は、1つの光線方向のライトマップ生成に係るシーン解析において生成されるインポータンスマップ及びフラグメント数マップの格納領域としても用いられる。
【0021】
記録媒体106は、例えばHDD等のPC100に着脱可能に接続された記録媒体である。本実施形態では記録媒体106は、ライトマップ生成処理に係る3Dシーンを構成する描画オブジェクトや配置情報等のデータ、及び該処理の動作を規定したプログラム等が記録される。また記録媒体106には、ライトマップ生成処理により生成されたライトマップが記録される。
【0022】
《ライトマップ生成処理》
このような構成をもつ本実施形態のPC100のライトマップ生成処理について、
図2のフローチャートを用いて具体的な処理を説明する。なお、本ライトマップ生成処理は、例えば配置情報等が決定した3Dシーンについてのライトマップの生成要求がなされた際に開始されるものとして説明する。
【0023】
S201で、CPU101は、生成する光線束の方向(光線方向)を選択する。1つの3Dシーンに対して様々な方向の入射光により生じる間接照明を再現するために、一般にライトマップは複数の光線方向それぞれの入射放射輝度の値を積分することにより生成される。本ステップでは、ライトマップの生成処理においてサンプリングする光線方向の選択を行うが、その選択方法については特に限定しない。
【0024】
S202で、GPU104は、選択された光線方向について、シーン全体のインポータンス解析を行い、インポータンスマップを生成する。本実施形態ではインポータンスマップは、該光線方向の投影についてレンダリングされる2次元データであり、選択された光線方向においてシーン全体を含むように定義されるものとする。
【0025】
インポータンスとは、ライトマップへの寄与度であり、フラグメントにおけるテクセル密度(フラグメントを有する描画オブジェクトの面に適用されるライトマップの、3Dシーン内に定義された系における単位面積当たりの画素数)が相当する。ここで言うフラグメントは、
図3に示すように、インポータンスマップの各画素に対応する1つの直線(代表光路)上に存在する描画オブジェクトの面との交点を指す。
【0026】
本ステップで生成するインポータンスマップは、2次元データの各画素について、対応する代表光路上に存在するフラグメントのインポータンスの値を格納する。なお、代表光路は3Dシーンの全体を通過するように規定されるため、1つの代表光路上には複数のフラグメントが存在することがある。即ち、1つの代表光路上に描画オブジェクトとの交点が複数存在することがある。このような場合は、該代表光路に対応する画素に格納されるインポータンスの値は、複数のフラグメントのインポータンスのうちの最大値とする。
【0027】
S203で、GPU104は、VRAM105に生成したインポータンスマップのミップマップを生成し、VRAM105に格納する。ミップマップの生成を簡単にするために、インポータンスマップの画素数は、1辺の画素数が2の累乗であってよい。ミップマップの生成では、例えば1つの層の単位画素の画素値はその1つ下の層の対応する4画素の平均値で生成されればよく、結果、最上層の1画素にはインポータンスマップの全画素の画素値の平均値が格納される。
【0028】
S204で、GPU104は、選択された光線方向について、シーン全体のフラグメント数解析を行い、フラグメント数マップを生成する。本実施形態ではフラグメント数マップは、インポータンスマップと同様に、該光線方向の投影についてレンダリングされる2次元データであり、インポータンスマップと同数の画素数を有するものとする。また、フラグメント数は、フラグメント数マップの各画素に対応する代表光路上に存在するフラグメントの数を示している。
【0029】
フラグメント数は、各画素に対応する代表光路上に存在するフラグメントの数、即ち代表光路上に存在する描画オブジェクトの面の数を示している。本ステップで生成するフラグメント数マップは、2次元データの各画素について、対応する代表光路上のフラグメント数を格納する。なお、本実施形態ではインポータンスマップの生成を行った後にフラグメント数マップの生成を行うものとして説明するが、本発明の実施はこれに限られるものではない。即ち、2つのマップの生成は順不同であり、また2つのマップは同時並行して生成されてもよいことは容易に理解されよう。
【0030】
S205で、GPU104は、VRAM105に生成したフラグメント数マップのミップマップを生成し、VRAM105に格納する。なお、ミップマップの生成ルールは、S203のインポータンスマップのミップマップ生成について述べた方法と同一である。
【0031】
S206で、GPU104は、光線方向の投影における3Dシーンの2次元範囲を、光線束を生成して光輸送計算を行う単位である、好適なサイズのタイルに適応的に分割するタイリング処理を実行する。
【0032】
上述したように、ライトマップの生成処理では、複数の光線方向のそれぞれについて該方向の光線束を定義して光輸送計算を行う。しかしながら、メモリ容量や計算量等における制約により、生成する光線束の光路数には所定の限界が存在する。つまり、例えば広大な3Dシーンについて光線束を定義する場合、特定の描画オブジェクトの面に適用されるライトマップの画素数(テクセル)よりも、該面を通過する光線束の数が少なくなってしまう可能性がある。このような場合、即ち、光線束の解像度が生成するライトマップのテクセル密度よりも低い場合、光線束間に生じた反射は考慮されず、生成するライトマップにおいて反映すべき光が漏れてしまい、好適な間接照明が表現されない。
【0033】
このため、本実施形態のPC100では、本ステップのタイリング処理を実行することで、選択された光線方向の投影における3Dシーンの2次元範囲に対して、それぞれ反映すべき光の漏れがないようなタイルを定義する。なお、本実施形態のタイリング処理では、非特許文献2のように2次元範囲に対して単に予め定められた画素数のタイルを定義するのではなく、タイル内の描画オブジェクトに適用されるライトマップのテクセル密度に応じて適応的にタイルの画素数を異ならせながら定義を行う。具体的には後述のように、ハードウェアの制限内で生成できる光線束の数がタイル内の描画オブジェクトに適用されるライトマップの画素数より多くなるように、各タイルを定義する。
【0034】
〈タイリング処理〉
ここで、本実施形態のGPU104で実行されるタイリング処理について、
図4のフローチャートを参照して詳細を説明する。
【0035】
S401で、GPU104は、インポータンスマップ及びフラグメント数マップそれぞれのミップマップの最上層を処理対象層に選択する。
【0036】
S402で、GPU104は、処理対象層のミップマップの画素のうち、タイル生成が未判定の画素(対象画素)を選択する(各ミップマップで同一位置に存在する画素)。またGPU104は、インポータンスマップ及びフラグメント数マップにおいて、該対象画素に対応する領域を「タイル候補」として設定する。対象画素に対応する領域とは、ミップマップ上の対象画素を生成するために参照された、インポータンスマップあるいはフラグメント数マップの領域である。そしてGPU104は、それぞれのミップマップの対象画素の画素値を参照し、タイル候補について生成されるライトマップの画素数、及びタイル候補について定義する、VRAM105上の予め定められた格納領域(ノードバッファ)に格納可能な光路数(光線束に含まれる光線数)を算出する。
【0037】
具体的にはGPU104は、インポータンスマップのミップマップから得られた対象画素の画素値(インポータンス)にタイル候補の面積を乗じることで、該タイル候補について生成されるライトマップの画素数(インポータンスマップ上での画素数)を算出する。即ち、以下の式
により、タイル候補について生成されるライトマップの画素数を算出する。
【0038】
また予め定められたノードバッファに格納可能な光路数は、以下の式
により導く。ここで、min()は、列挙される値の最小値を出力する関数である。また最大光路数は、1つのタイルについて生成する光線束に含まれる光路数の最大値として予め定められた値(例えば4096の累乗)である。
【0039】
光線束を生成した際、予め定められたノードバッファの1つのノードには光路上の1つのフラグメントが格納される。しかしながら、上述したように生成する光線束の各光路上には、複数のフラグメントが存在する可能性がある。つまり、1つの光路上に存在する複数のフラグメントに対し、それらのフラグメントを個別に格納するためのノードが必要となる。換言すれば、光線束を生成した場合に全光路上のフラグメント総数がノード数を超えた場合は光線束はノードバッファに格納することができない。このため、本実施形態のタイリング処理では、フラグメント数を考慮して予測される格納可能な光路数を以下の式
により算出した上で決定する。ここで、予測フラグメント数は、フラグメント数マップのミップマップの対象画素の画素値であり、フラグメント数マップのタイル候補内に含まれる画素の平均画素値となっている。つまり、タイル候補について定義する光路が、平均的に画素値の数だけフラグメントを有していることを示している。即ち、該平均フラグメント数でノードバッファサイズを除することで、平均フラグメント数を有する光路がノードバッファにいくつ格納可能であるかを算出することができる。
【0040】
一方、上述したようにタイル候補について定義すべき光路数は、タイル候補の範囲に含まれる描画オブジェクト上のテクセル密度によってのみ定まる。即ち、フラグメント数マップの画素数と、タイル候補について定義すべき光路数とは必ずしも同一とはならない。
【0041】
例えばフラグメント数マップのミップマップの最上層の1画素から得られた平均フラグメント数は、フラグメント数マップの画素数だけ定義された代表光路の各々についてサンプリングされたフラグメント数の平均値である。このとき最上層の1画素に対応する領域、即ち選択された光線方向の投影における3Dシーンの全領域に対してフラグメント数マップの画素数以上の光路数を定義した場合を考えると、一部の光路はフラグメント数マップの生成に考慮されなかった光路を含んでいる。つまり、該一部の光路上のフラグメント数は不明であり、平均フラグメント数からは予測することができない。
【0042】
なお、このようなフラグメント数が不明である光路の数は、ミップマップの処理対象層が下になるほど、タイル候補についてサンプリングされた代表光路が少なくなるため、増加することになる。
【0043】
このため式1では、ミップマップから得られる予測フラグメント数に対して推定予測エラーを加算することで、フラグメント数が不明である光路を考慮した上でフラグメント数の誤差を補償し、予測される格納可能な光路数を算出している。ここで、本実施形態では階層が下のミップマップの画素ほど大きい値となるように、推定予測エラーを以下のように定める。
【0044】
ここで、Sは最上層のミップマップの1画素から得られる予測フラグメント数、Njはj番目の階層における1画素の生成に参照された画素数(タイル候補内の画素数)である。また、定数a及びbは、実験により設定されるパラメータであり、例えば2048[px]×2048[px]でフラグメント数マップが規定される場合、a=0.05、b=64等に設定されてよい。なお、本実施形態ではa及びbの値は実験により設定されるものとして説明するが、本発明の実施はこれに限られるものではなく、例えば対象の3Dシーン内に配置される描画オブジェクト数や面数、あるいはフラグメント数マップの画素数等に応じて決定される値であってもよい。
【0045】
S403で、GPU104は、対象画素がタイルの生成条件を満たすか否かを判定する。具体的にはPC100は、タイルの生成条件として、S402で対象画素について算出した2つの値に
の関係が成り立つか否かを判断する。この生成条件は、光の漏れのないライトマップが生成可能である条件として、上述した通りである。
【0046】
ところで、タイル生成の判定は、光線方向及びフラグメントを有する描画オブジェクトの面法線によらず、常に同一の条件で行う。
【0047】
例えば、
図5(a)に示されるように描画オブジェクトの面が選択された光線方向について正対、即ち光線方向と面法線とが平行である場合を考える。このとき、タイル候補について生成されるライトマップの画素数は、上述したように対象画素のインポータンスにタイル候補の面積を乗じることで得られる。これは、描画オブジェクトの面が光線方向について正対しているため、タイル候補に対応する該面上の領域が、タイル候補と同一の面積を有しているからである。
【0048】
一方、
図5(b)に示されるように描画オブジェクトの面が選択された光線方向について正対しない、即ち光線方向と面法線とが角度θをなす場合を考える。このとき、タイル候補に対応する該面上の領域は、タイル候補の面積よりも大きい面積となる。具体的には、タイル候補の面積を光線方向ω’と面法線nとの内積(ω’・n)で除した値(cosθに反比例)となる。つまり、タイル候補に対応する描画オブジェクトの面上の領域に適用されるライトマップの画素数は正対時よりも増えるため、選択された光線方向に見た場合、テクセル密度が増加することになる。即ち、タイル候補について生成されるライトマップの画素数は本来、正対時に比べて1/(ω’・n)倍となるはずである。
【0049】
しかしながら、描画オブジェクトの面上の点xにおける特定方向ωにおける間接照明の放射輝度に対して、光線方向ω’から入射した光についての入射放射輝度が光線方向ω’と面法線nとの内積に比例して影響を与えることが、レンダリング方程式により知られている。換言すれば、入射角が浅い(θが大きい)方向の光ほど、間接照明の放射輝度への寄与が小さい、即ちインポータンスが低いことになる。
【0050】
これらを総合的に考えると、光線方向ω’と面法線nとが角度をなす場合、タイル候補について生成されるライトマップの画素数は1/(ω’・n)倍に増加するが、該方向の入射光の寄与度は(ω’・n)倍に減少するため、これらの効果は相殺する。つまり、インポータンスマップの各画素値(テクセル密度)は光線方向に依らず一定として考えることができるため、単に対象画素のインポータンスにタイル候補の面積を乗じることで得られる、タイル候補について生成されるライトマップの画素数についてタイル生成の判定を行えばよい。また、上述したインポータンスマップの生成においても、光線方向に応じて描画オブジェクトの面法線との関係を加味する必要はなく、単にフラグメントに適用されるライトマップのテクセル密度とすることができる。
【0051】
GPU104は、対象画素がタイルの生成条件を満たすと判断した場合は処理をS404に移し、満たさないと判断した場合は処理をS405に移す。
【0052】
S404で、GPU104は、タイル候補に対してタイルを定義する。即ち、GPU104は、選択された光線方向の投影における3Dシーンの2次元範囲のうち、タイル候補として設定された領域について、該領域を1つのタイルに含めるようにタイル設定を行う。
【0053】
S405で、GPU104は、処理対象層のミップマップの画素のうち、タイル生成が未判定の画素(タイルが定義されておらず、かつ対象画素として選択されていない画素)が存在するか否かを判断する。GPU104は、タイル生成が未判定の画素が存在すると判断した場合は処理をS402に移し、存在しないと判断した場合は処理をS406に移す。
【0054】
S406で、GPU104は、処理対象層のミップマップの全ての画素について、タイルを定義したか否かを判断する。GPU104は、処理対象層のミップマップの全ての画素についてタイルを定義したと判断した場合は本タイリング処理を終了する。またGPU104は、全ての画素についてタイルを定義していないと判断した場合は、S407で処理対象層の1つ下の階層を処理対象層に選択し、処理をS402に戻す。
【0055】
このように、ミップマップの画素を順に選択しながらタイルの生成条件を満たすか否かを判定することで、本実施形態のPC100では、予め定められたノードバッファに格納可能な光路数を適切に予測しつつ、好適な条件でライトマップが生成されるよう、適応的にタイルを定義することができる。
【0056】
なお、本実施形態ではタイリング処理を、ミップマップの階層及び階層内の画素を順に選択し、タイル生成の判定を行いながらループ処理することでタイリングを行うものとして説明したが、タイリング処理の実施はこれに限られるものではない。該タイリング処理は、例えば
図6に示すように、最下層のミップマップの画素の数だけ並行処理するスレッドを生成し、最上層から順に階層を下りながら判定処理を実行していくことによっても実現可能である。この場合、最下層のミップマップの画素の数だけスレッドが生成されるため、階層内の画素を順番に選択しながらタイル生成の判定をする必要はなく、より高速にタイリングを完了することができる。なお、最下層以外の任意の層のミップマップについては、同一の画素についてタイル生成条件の判定を行ういずれか1つのスレッドのみが定義処理を行うように制御すればよい。
【0057】
タイリング処理が完了すると、CPU101は処理をS207に移す。S207で、CPU101は、定義されたタイルのうち、光輸送計算が行われていないタイルを選択する。
【0058】
S208で、GPU104はCPU101の制御の下、選択されたタイルについて光線束を生成し、各光線束についてVRAM105を用いて光輸送計算を行いながら生成するライトマップの値を更新する。本実施形態ではCPU101は、記録媒体106に生成するライトマップの各画素を格納する領域を確保するものとする。ライトマップの各画素は適用される描画オブジェクトの各面に割り当てられる画素が定められており、光輸送計算の計算結果を用いて、光線束に対応する画素の格納領域に格納されている値を更新する。
【0059】
S209で、CPU101は、定義された全てのタイルについて光輸送計算が行われたか否かを判断する。CPU101は、全てのタイルについて光輸送計算を行われたと判断した場合は処理をS210に移し、行われていないと判断した場合は処理をS207に戻す。
【0060】
S210で、CPU101は、別の光線方向について光線束を定義してライトマップを更新するか否かを判断する。CPU101は、別の光線方向について光線束を定義してライトマップを更新すると判断した場合は処理をS201に戻し、更新しないと判断した場合は本ライトマップ生成処理を完了する。
【0061】
以上説明したように、本実施形態の予測方法は、照明計算におけるメモリ使用量を好適に予測することができる。具体的には予測方法は、所定の光線方向について光輸送計算用の複数の光線束を定義して行う3Dシーンの照明計算において、予め定められたメモリ領域内に格納可能な光輸送計算用の光線束の光路数を予測する。予測方法は、各画素が、該画素位置に対応する光線方向の直線上における3Dシーン内のフラグメント数を画素値とする、予め定められた画素数を有するフラグメント数マップ、及び該フラグメント数マップのミップマップを生成する。そしてフラグメント数マップのミップマップにおける1つの階層の画素について、該画素に対応する3Dシーン内の対応領域に光輸送計算用の光線束を定義した場合に1つの光路上に平均的に含まれる推定フラグメント数を導出し、予め定められたメモリ領域のサイズを該値で除した値を、1つの階層の画素について予め定められたメモリ領域内に格納可能な光輸送計算用の光線束の予測光路数として出力する。このとき、予測方法は、1つの画素の画素値であるフラグメント数に該画素の階層に応じた補償値を加算することで推定フラグメント数を導出する。
【0062】
また、さらにメモリ使用量を予測した上で適応的にタイル分割することができるため、不要にタイル数を増加させることがない、あるいは検討する光線束の解像度を低減させる必要がないため、ライトマップ生成に係る処理を全体的に高速化、あるいはライトマップを高画質化することができる。
【0063】
[実施形態2]
上述した実施形態1では、インポータンスマップ及びフラグメント数マップのミップマップの解析により、対象画素がタイルの生成条件を満たすと判断した場合にタイルを生成するものとして説明した。
【0064】
しかしながら上述の生成条件は対象画素に対応する領域のインポータンスの平均値のみを使用しているため、領域内のインポータンスの密度分布を考慮するものではなかった。つまり、定義されたタイル内に局所的にインポータンスの高い領域が存在する場合、該領域において上述したような反映すべき光の漏れが生じる可能性がある。このような局所的にインポータンスの高い領域において光の漏れが生じることを防ぐ方法として、過剰にタイル分割を行うことが考えられる。しかしながら、タイル数の増加は計算時間の増加につながるため、ライトマップの生成を高速化するという観点では好ましいものではない。
【0065】
本実施形態では、各タイルについてワーピング(Warping)処理を適用することでタイルにおける光路の密度を適応的に変更し、適応的に光線束を生成してライトマップを生成する方法について説明する。
【0066】
《ワーピング処理について》
まず、本実施形態のライトマップ生成処理において使用するワーピング処理について説明する。
【0067】
ワーピング処理は、ポール・ローゼンの「Rectilinear Texture Warping for Fast Adaptive Shadow Mapping」に開示されている。該文献では、描画オブジェクト面に適用されるシャドウの品質を向上させるために、インポータンス解析を行い、インポータンスが高い、即ちシャドウマッピングにおいて解像度の高いシャドウ生成が要求される領域についてより多くの画素が割り当てられるようにしている。このとき、インポータンスが高い領域のシャドウが描画される、シャドウマップ上の領域を適応的に広げるためにワーピング処理が用いられている。
【0068】
即ち、本実施形態ではインポータンスの解析結果に応じて、選択された光線方向の投影における3Dシーンの2次元範囲におけるインポータンスの高い領域の範囲をワーピング処理によって拡大することで、過剰なタイル分割を行うことなく、光の漏れを防ぐ適応的な光線束を生成する。換言すれば、ワーピング処理によって、インポータンスの高い領域に対して、より多くの光線束を生成するように光線束の分布変更が行われる。
【0069】
《ライトマップ生成処理》
以下、本実施形態のPC100のライトマップ生成処理について、
図7のフローチャートを用いて具体的な処理を説明する。なお、本実施形態のPC100の機能構成は上述の実施形態1と同様であるものとして説明を省略する。また、本実施形態のライトマップ生成処理において、実施形態1のライトマップ生成処理と同様の処理を行うステップについては同一の参照番号を付すことにより説明を省略し、以下は本実施形態に特徴的な処理の説明に留めるものとする。
【0070】
S205においてGPU104によるフラグメント数マップのミップマップの生成が完了した後、GPU104はS701で本実施形態のタイリング処理を実行する。
【0071】
〈タイリング処理〉
さらに、本実施形態のPC100で実行されるタイリング処理について、
図8のフローチャートを参照して詳細を説明する。本タイリング処理も同様に、実施形態1のタイリング処理と同様の処理を行うステップについては同一の参照番号を付して説明を省略するものとする。
【0072】
S801で、GPU104は、処理対象層のミップマップ画素のうち、タイル生成が未判定の対象画素を選択する。またGPU104は、インポータンスマップ及びフラグメント数マップにおいて、該対象画素に対応する領域をタイル候補として設定する。そしてGPU104は、対象画素を参照し、タイル候補について生成されるライトマップの画素数、及びワーピング後にタイル候補について定義する、予め定められたノードバッファに格納可能な光路数を算出する。
【0073】
なお、本実施形態のライトマップ生成処理では、ポール・ローゼンの文献のようにシーン全体についてワーピング処理を適用するのではなく、後述するように本タイリング処理で規定されたタイルごとにワーピング処理を適用する。このため、本ステップで算出するタイル候補について生成されるライトマップの画素数は、ワーピング処理の実行により変化するものではないため、実施形態1と同様の方法で算出されてよい。
【0074】
一方、予め定められたノードバッファに格納可能な光路数は、ワーピング処理によって分布の変更が生じるため、フラグメント数が不明である光路の数が増加することが考えられる。ワーピングではインポータンスの密度分布に応じて分布の変更が行われるため、本実施形態では数式1に含まれる予測フラグメント数を、インポータンスを用いた加重平均値として
で算出する。ここで、Nはタイル候補の画素数である。またn
iはフラグメント数マップのタイル候補内におけるi番目の画素の画素値、w
iはインポータンスマップのタイル候補内におけるi番目の画素の画素値である。なお、数式3の分母は、インポータンスマップのタイル候補内の画素の画素値の総和であるため、インポータンスマップのミップマップにおける対象画素のインポータンスに、最下層であるタイル候補に含まれる画素数を乗じることで算出できる。
【0075】
なお、本実施形態における予測フラグメント数の算出方法は、理想的なワーピング処理が行われるとの前提に基づく。理想的なワーピング処理とは、タイルについて処理が実行された場合に、マップの各画素に対応する2次元範囲のワーピング処理後の大きさが、該画素のインポータンス値に比例しているものとする。例えば、処理対象層のミップマップの1画素についてタイルが規定された場合を考える。このとき、該画素の生成に参照されたインポータンスマップの画素が、それぞれ画素値1、2、3、及び4の4画素であるとすると、ワーピング後のタイルでは各画素に対応する領域の面積比は1:2:3:4となる。即ち、タイルについて256の光線束を定義する場合、各画素に対応する領域にはそれぞれ26、51、77、102の光線束が割り当てられることになる。つまり、インポータンスの高い画素に対応する領域に対してより多くの光線束が割り当てられるようにすることができる。
【0076】
また、本実施形態では理想的なワーピング処理が行われるものとして説明するが、上述したポール・ローゼン著の文献に開示されるような理想的なワーピング処理の近似手法を用いるものであってよい。即ち、本実施形態のタイリング処理における後述の予測方法は、近似解を得る任意のワーピング手法についても適用可能であることは容易に理解されよう。
【0077】
このようにして得られた予測フラグメント数を用いることで、ワーピング処理の実行を考慮してタイル生成の判定に必要なパラメータを算出することができる。なお、本ステップ以降の処理を実行してタイリング処理が完了すると、CPU101はライトマップ生成処理のS207の処理を実行後、処理をS702に移す。
【0078】
S702で、GPU104はCPU101の制御の下、選択されたタイルについてインポータンス分布に応じたワーピング処理を実行した上で光線束を生成し、各光線束についてVRAM105を用いて光輸送計算を行いながら生成するライトマップの値を更新する。
【0079】
以上説明したように、本実施形態の予測方法を用いることで、ワーピング処理を用いて適応的に光線束を生成することによって、メモリ使用をより効率化してライトマップの生成を行うことができる。
【0080】
[その他の実施形態]
また、本発明に係る予測方法は、コンピュータに該予測方法を実行させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供/配布することができる。