(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-18
(45)【発行日】2022-10-26
(54)【発明の名称】階層バウンディングボリューム生成方法、コンピュータプログラム及びコンピュータ装置
(51)【国際特許分類】
G06T 17/00 20060101AFI20221019BHJP
【FI】
G06T17/00 500
(21)【出願番号】P 2018240066
(22)【出願日】2018-12-21
【審査請求日】2021-10-26
(73)【特許権者】
【識別番号】506301140
【氏名又は名称】公立大学法人会津大学
(74)【代理人】
【識別番号】100094525
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】西村 憲
【審査官】山口 大志
(56)【参考文献】
【文献】特開2017-188098(JP,A)
【文献】米国特許出願公開第2017/0200303(US,A1)
【文献】米国特許出願公開第2014/0368504(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 17/00
(57)【特許請求の範囲】
【請求項1】
階層バウンディングボリュームを用いた光線追跡法により3次元空間内の物体群を2次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法において、
物体群を構成する複数の物体の存在位置情報に基づいて、3次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、
木構造の階層バウンディングボリュームの一部分であって前記階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、前記階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを備えることを特徴とする階層バウンディングボリューム生成方法。
【請求項2】
前記第一のステップは、フレーム毎に、前記生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、
前記第二のステップは、フレーム毎に、前記更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して前記階層バウンディングボリュームを再構成する処理を含むことを特徴とする請求項1に記載の階層バウンディングボリューム生成方法。
【請求項3】
前記グリッドノードは、更新の有無を識別する識別情報を含み、前記グリッドノードが更新されると、前記識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含む前記グリッドノードに対応する前記断片を再生成することを特徴とする請求項2に記載の階層バウンディングボリューム生成方法。
【請求項4】
前記断片が再生成されると、当該再生成された断片に対応する前記グリッドノードの識別情報を更新無しに設定することを特徴とする請求項3に記載の階層バウンディングボリューム生成方法。
【請求項5】
前記存在位置情報は、物体の中心位置の座標であることを特徴とする請求項1乃至4のいずれかに記載の階層バウンディングボリューム生成方法。
【請求項6】
階層バウンディングボリュームを用いた光線追跡法により3次元空間内の物体群を2次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法をコンピュータ装置に実行させるコンピュータプログラムにおいて、前記コンピュータ装置に、
物体群を構成する複数の物体の存在位置情報に基づいて、3次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、
木構造の階層バウンディングボリュームの一部分であって前記階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、前記階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを実行させることを特徴とするコンピュータプログラム。
【請求項7】
前記第一のステップは、フレーム毎に、前記生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、
前記第二のステップは、フレーム毎に、前記更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して前記階層バウンディングボリュームを再構成する処理を含むことを特徴とする請求項6に記載のコンピュータプログラム。
【請求項8】
前記グリッドノードは、更新の有無を識別する識別情報を含み、前記グリッドノードが更新されると、前記識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含む前記グリッドノードに対応する前記断片を再生成することを特徴とする請求項7に記載のコンピュータプログラム。
【請求項9】
前記断片が再生成されると、当該再生成された断片に対応する前記グリッドノードの識別情報を更新無しに設定することを特徴とする請求項8に記載のコンピュータプログラム。
【請求項10】
前記存在位置情報は、物体の中心位置の座標であることを特徴とする請求項6乃至9のいずれかに記載のコンピュータプログラム。
【請求項11】
請求項6乃至10のいずれか記載のコンピュータプログラムを実行する前記コンピュータ装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、階層バウンディングボリュームを用いた光線追跡法により画像生成するための階層バウンディングボリューム生成方法及び当該階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラムに関する。
【背景技術】
【0002】
光線追跡法(Ray Tracing)は、視点から物体(プリミティブ)の方向に向かって光線を追跡し、光線と物体との交差判定を行い、光線が物体と交差すれば、その交点における物体の光の状態(輝度など)を求め、画像面(スクリーン)に投影させて2次元の画像を生成する手法である。この光線追跡法は、光の物理現象を模倣することによって高品位の画像生成を行うことができ、工業デザインやインテリアシミュレーションなど幅広い分野で活用されている。
【0003】
光線追跡法による演算処理は、特に光線と物体との交差判定に非常に多くの時間を費やし、基本的なアルゴリズムでは計算量が膨大となる。そのため、光線と物体との交差判定にかかる演算量を減らし、この演算処理を高速化する手法として例えば階層バウンディングボリューム(Bounding Volume Hierachy:BVH)を利用した手法が提案されている(特許文献1-8、非特許文献1-4)。
【0004】
BVHを使用した光線追跡法では、形状データに対してBVH木と呼ばれる木構造のデータ構造を生成し、そのBVH木を利用することで画像生成(レンダリング)を高速に行うことができる。
【0005】
図7は、階層バウンディングボリュームを模式的に説明するための図である。バウンディングボリュームは、物体を取り囲む立体を表す。光線追跡法による画像生成は、3次元空間を取り扱うものであるが、図示の都合上、2次元空間として示される。
図7(a)において、それぞれ破線矩形で表される、物体1(丸数字1)及び4(丸数字4)を囲むバウンディングボリュームC、物体3、2及び5(丸数字3、2及び5)を囲むバウンディングボリュームD、物体6、7及び8(丸数字6、7及び8)を囲むバウンディングボリュームB、さらに、バウンディングボリュームC、Dを囲むバウンディングボリュームAが生成され、各バウンディングボリュームと光線(ray)との交差判定を行い、交差しない場合は、その中の物体との交差判定を省略される。各バウンディングボリュームとその中に包含される物体のデータ構造として、
図7(b)に示す階層関係を有する木構造の階層バウンディングボリュームが生成される。
【0006】
図8は、光線追跡法による画像生成の概略手順を示す図である。3次元空間内における物体のリストについて、演算処理を高速化させるデータ構造である階層バウンディングボリューム(BVH)を生成・更新し、その階層バウンディングボリュームを用いてレンダリング処理を実行し、画像を生成する。
【先行技術文献】
【特許文献】
【0007】
【文献】特開平5-028280号公報
【文献】特開2001-067493号公報
【文献】特開2003-271988号公報
【文献】特開2009-157591号公報
【文献】特開2013-037691号公報
【文献】特開2014-026652号公報
【文献】特開2018-073427号公報
【文献】特許第6273380号公報
【非特許文献】
【0008】
【文献】Thomas Larsson and Tomas Akenine-moeller. 2006 A Dynamic Bounding Volume Hierarchy for Generalized Collision Detection. Computer and Graphics 30, 3 (2006), 450-459.
【文献】Ingo Wald. 2007. On Fast Construction of SAH-based Bounding Volume Hierarchies. In Proceedings of the 2007 IEEE Symposium on Interactive Ray tracing 33-40.
【文献】Ingo Wald, Solomon Boulos, and Peter Shirley. 2007. Ray Tracing Deformable Scenes Using Dynamic Bounding Volume Hierarchies. ACM Trans. Graph. 26,1 (2007), 6:1-6:18.
【文献】Sung-Eui Yoon, Sean Curtis, and Dinesh Manocha. 2007. Ray Tracing Dynamics Scenes Using Selective Restructuring. In Proceedings of the 18thEurographics Conference on Rendering Techniques. 73-84.
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかしながら、階層バウンディングボリューム(BVH)を使用する場合、静的シーン(物体が動かないシーン)に対してはBVHは比較的効率的に作用するが、動的シーン(物体が動くシーン)では、フレーム間で物体が動くたびに、BVH木全体を一から作り直す必要があり効率が悪くなる。すなわち、物体の動きに応じてその都度フレーム毎にBVH木全体を更新する処理が必要となりその更新処理に多くの時間を費やすことになり、その結果、BVHを利用する効果が発揮されにくくなり、画像生成時間が長くなるという問題がある。
【0010】
そこで、本発明の目的は、階層バウンディングボリューム(BVH)木を高速に生成することができる手法を提案し、それにより高速に画像を生成するための階層バウンディングボリューム生成方法及びその階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【0011】
上記目的を達成するための本発明は、階層バウンディングボリュームを用いた光線追跡法により3次元空間内の物体群を2次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法であって、物体群を構成する複数の物体の存在位置情報に基づいて、3次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、木構造の階層バウンディングボリュームの一部分であって階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを備えることを特徴とする。
【0012】
好ましくは、第一のステップは、フレーム毎に、生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、第二のステップは、フレーム毎に、更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して階層バウンディングボリュームを再構成する処理を含む。
【0013】
さらに好ましくは、グリッドノードは、更新の有無を識別する識別情報を含み、グリッドノードが更新されると、識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含むグリッドノードに対応する断片を再生成する。また、断片が再生成されると、当該再生成された断片に対応するグリッドノードの識別情報を更新無しに設定する。例えば、存在位置情報は、物体の中心位置の座標である。
【0014】
また、上記階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラム及びそのコンピュータ装置が提供される。コンピュータ装置は、サーバ装置、パーソナルコンピュータや携帯デバイスのような端末装置であり、さらに、サーバ装置及び端末装置を複数台接続した構成であってもよい。
【発明の効果】
【0015】
本発明によれば、階層バウンディングボリュームを高速に生成することができ、動画においても、階層バウンディングボリュームを劣化させずに高速且つ効率的に更新することができ、光線追跡法による画像生成の高速化を図ることができる。
【図面の簡単な説明】
【0016】
【
図1】本発明の実施の形態における階層バウンディングボリューム生成装置(コンピュータ装置)の構成例を示すブロック図である。
【
図2】本発明の実施の形態における階層バウンディングボリューム生成処理を説明するための模式図である。
【
図3】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【
図4】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【
図5】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【
図6】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【
図7】階層バウンディングボリュームを模式的に説明するための図である。
【
図8】光線追跡法による画像生成の概略手順を示す図である。
【発明を実施するための形態】
【0017】
以下、図面を参照して本発明の実施の形態について説明する。しかしながら、かかる実施の形態例が、本発明の技術的範囲を限定するものではない。
【0018】
図1は、本発明の実施の形態における階層バウンディングボリューム生成装置の構成例を示すブロック図である。
図1において、階層バウンディングボリューム生成装置10は、例えば、汎用的なコンピュータ装置で構成することができ、バス11に接続される構成要素として、演算処理を有する演算処理素子であるCPU12、本発明の階層バウンディングボリューム生成処理を実行するためのコンピュータプログラム及び必要なデータを格納する固定記憶素子であるROM13、演算処理中にデータを保存する一時記憶素子であるRAM14、キーボード、マイク、タッチパネルなど外部から情報を入力するための入力部15、ディスプレイなどの表示部16、及び通信ネットワークを含む外部と情報をやりとりするための通信機能を有する通信部17などを有して構成される。また、階層バウンディングボリューム生成装置は、本発明の画像生成機能を含む専用ハードウェア装置であってもよい。
【0019】
階層バウンディングボリューム生成装置10は、画像生成装置の一部機能を実行するものであって、例えば汎用的なコンピュータ装置で実現される画像生成装置は、本発明における階層バウンディングボリューム生成処理により生成された階層バウンディングボリュームを利用した光線追跡法により二次元画像を生成する。すなわち、光線と階層バウンディングボリュームとの交差判定を行い、光線が階層バウンディングボリュームと交差すれば、階層バウンディングボリュームに含まれる一つの物体との交点を算出し、その交点における光の状態(輝度など)を求め、画像面(スクリーン)に投影させて2次元の画像を生成する。
【0020】
図2は、本発明の実施の形態における階層バウンディングボリューム生成処理を説明するための模式図である。
図2(a)は複数の物体(物体群と称する場合がある)が存在する所定の3次元空間(Scene space)を示し、説明のために、2次元領域として示される。3次元空間は、例えば4×4×4(
図2(a)では4×4)のグリッド状に分割され(グリッド状に分割された空間をグリッドと称する)、グリッドにおける分割された一つ一つの空間であるセル(cell)は、さらにグリッド状に分割可能であり、一つのセル内に存在する物体の数が所定の上限数となるまで(
図2(a)の例では、一つのセルに一つの物体)、複数階層にわたってグリッド状に分割される。物体の存在位置は、例えば物体の中心位置の座標であり、物体の重心の座標若しくは物体を囲むバウンディングボリュームの重心の座標を用いることができる。
図2(a)では、左下の2つのセルが、さらに4×4×4(
図2(a)では4×4)のグリッド状に分割されている状態が示され、一つのセルに一つの物体の重心が内包される状態が例示される。
【0021】
図2(b)は、複数階層のグリッドのデータ構造である木構造の階層グリッド(グリッド木:grid tree)を示す。階層グリッドは、少なくとも一層のグリッドノード(grid node)と、グリッドノードと接続する末端の葉ノード(リーフノード:leaf node)とを有し、葉ノードには、上限数(例えば1つ)以下の物体が内包される。
【0022】
図2(c)は、階層グリッドから変換されたデータ構造である木構造の階層バウンディングボリューム(BVH木:BVH tree)を示す。本発明の階層バウンディングボリューム生成処理は、物体群を構成する複数の物体(object)それぞれの存在位置情報(例えば物体の中心位置である重心の座標(centroid))に基づいて、3次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成し、そして、木構造の階層バウンディングボリュームの一部分であって上記階層グリッドを構成する各グリッドノードに対応する部分である断片(fragment)を生成し、上記階層グリッドの構造に基づいて当該断片(fragment)を接続することにより階層バウンディングボリュームを生成する。
【0023】
階層グリッド及び階層バウンディングボリュームはフレーム毎に更新され、フレーム毎に、階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新し、さらに、フレーム毎に、その更新されたグリッドノードに対応する上記断片を再生成し、当該再生成された断片を接続して階層バウンディングボリューム(BVH木)を再構成する。物体が移動することにより、物体を囲むバウンディングボリュームの形状に変化が生じ、そのバウンディングボリュームの形状変化に伴い、グリッドノードが更新される。
【0024】
BVH木において、階層グリッド(グリッド木)のグリッドノードと対応する断片を生成して、BVH木を更新する手法を採用することにより、更新されたグリッドノードのみを断片に変換することで、BVH木を更新することが可能となり、効率よく高速にBVH木を生成・更新することができる。フレーム間における物体の動きは、例えばシーン情報から取得できる。
【0025】
図3乃至
図6は、本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
図2を参照しつつ、
図3乃至
図6のフローチャートについて説明する。
【0026】
図3は、階層グリッドの生成における階層グリッドに物体を挿入する処理のフローチャートである。
図3の処理は、初期フレームにおいて、階層グリッドを新たに生成する処理として全ての物体(プリミティブ)を一つ一つ登録する処理、及び初期フレーム以降において、階層グリッドを更新する処理として、移動した物体のみを再登録する処理である。
【0027】
図3において、「node」は階層グリッドのノード(グリッドノード又は葉ノード)を指すポインタ(pointer)、「level」はノードのレベル、「object」は挿入する物体、「c」はセルへのポインタであることを示す。物体を階層グリッド(グリッド木)に挿入するには、まず最初に、ポインタ(node)をグリッド木の根(root)へのポインタ、levelを0(ゼロ)として、当該
図3の処理を開始する。
【0028】
ポインタ(node)が空ポインタかどうかは判定する(S100)。空ポインタである場合は、階層グリッドが生成されていない初期段階である。S100がYesであれば、登録(挿入)対象となる一つの物体からなる新しい葉ノードを生成し、ポインタ(node)をその生成された葉ノードへのポインタで置き換える(S101)。
【0029】
S100がNoであれば、さらにポインタ(node)がグリッドノードを指しているかどうか判定する(S102)。S102がYesであれば、そのグリッドノードの物体数を1増やす(S103)。さらに、そのグリッドノードのダーティビット(dirty bit)をセットする(S104)。ダーティビットは、ノード(グリッドノード及び葉ノード)に変更が生じたこと(この場合は物体数が1増えたこと)を識別する識別情報(フラグ)であり、後述するように、ダーティビットがセットされたノードに対して、対応する階層バウンディングボリュームの部分を生成・更新する。
【0030】
グリッドノードにおいて、物体の位置を代表する中心位置を含むセルへのポインタ(c)を設定する(S105)。物体の中心位置として、例えば物体の重心の座標(物体が多角形である場合は物体頂点座標の平均値)、若しくは、演算量の削減のため、その物体を囲むバウンディングボリュームの重心の座標(中心点)を用いることができる。
【0031】
そして、そのポインタ(c)について、S100に戻って
図3の処理を再帰的に実行する(S106)。再帰処理を実行することで、木構造のグリッドノードを辿っていき、葉ノードに行き着くまで、処理が繰り返される。
【0032】
S102がNoであれば、ポインタ(node)は葉ノードを指しているので、葉ノードに物体を登録し(S107)、その葉ノードのダーティビットをセットする(S108)。
【0033】
その葉ノードに登録される物体数が所定の上限数を超えているかどうか、かつレベルが制限値以内かどうか判定する(S109)。葉ノードに登録される物体数の上限数はあらかじめ定められる。上限数は1又は複数であってもよい。レベルは、階層グリッドにおける木の高さである。
【0034】
S109がYesであれば、新しい空のグリッドノードを生成し、そのポインタをgridnodeとし(S110)、葉ノードに登録された物体について、グリッドノードでの登録とするために、S100に戻って
図3の処理を再帰的に実行する(S111)。そして、ポインタ(node)をグリッドノードを指すポインタ(gridnode)で置き換え(S112)、処理を終了する。
【0035】
上記処理により、初期フレームにおける全ての物体について、階層グリッドが生成され、また、初期フレーム以降において、3次元空間内の位置が変更された物体(移動した物体)について、その移動した物体の位置(物体の重心の座標)に対応する葉ノード及びグリッドノードに物体を登録することで、階層グリッドが更新される。
【0036】
図4は、階層グリッドの生成における階層グリッドから物体を削除する処理のフローチャートである。
図4の処理は、初期フレーム以降において、直前のフレームまで3次元空間内に存在していた物体が3次元空間に存在しなくなった場合、若しくはその物体の移動により再登録の必要を生じた場合に、階層グリッドからその物体を削除する処理である。
図4において、「node」は階層グリッドのノード(グリッドノード又は葉ノード)を指すポインタ、「object」は挿入する物体を示す。
【0037】
ポインタ(node)がグリッドノードを指すポインタ(gridnode)であるかどうか判定する(S200)。S200がYesであれば、そのグリッドノードの物体数を1減らす(S201)。さらに、そのグリッドノードのダーティビットをセットする(S202)。ダーティビットは、上述したように、ノード(グリッドノード及び葉ノード)に変更が生じたこと(この場合は物体数が1減少したこと)を識別する識別情報(フラグ)であり、ダーティビットがセットされたノードに対して、対応する階層バウンディングボリュームの部分を生成・更新する。
【0038】
グリッドノードにおいて、削除対象の物体の中心位置を含むセルへのポインタ(c)を設定する(S203)。物体の中心位置として、例えば物体の重心の座標(物体が多角形である場合は物体頂点座標の平均値)、若しくは、演算量の削減のため、その物体を囲むバウンディングボリュームの重心の座標(中心点)を用いることができる。
【0039】
そして、そのポインタ(c)について、S200に戻って
図4の処理を再帰的に実行する(S204)。再帰処理を実行することで、木構造のグリッドノードを辿っていき、葉ノードに行き着くまで、処理が繰り返される。
【0040】
グリッドノードの物体数が0(ゼロ)になったかどうか判定する(S205)。S205がYesであれば、ポインタ(node)を空ポインタで置き換え(S213)、処理を終了する。S205がNoであれば、グリッドノードの物体数が葉ノードの上限数以下になったかどうか判定する(S206)。S206がYesであれば、新しい空の葉ノードを生成し、その葉ノードを指すポインタ(leafnode)を設定する(S207)。そして、グリッド以下にあるすべての物体をその生成された葉ノードに登録し(S208)、ポインタ(node)を葉ノードを指すポインタ(leafnode)で置き換える(S209)。
【0041】
S200がNoであれば(ポインタ(node)が葉ノードを指している場合)、葉ノードから削除対象の物体を削除し(S210)、その葉ノードのダーティビットをセットする(S211)。
【0042】
葉ノードの物体数が0(ゼロ)になったかどうか判定し(S212)、0(ゼロ)になった場合は、ポインタ(node)を空ポインタで置き換え(S213)、処理を終了する。
【0043】
上記処理により、初期フレーム以降において、3次元空間内で存在しなくなった物体、若しくは移動によって再登録の必要を生じた物体について、葉ノード及びグリッドノードから削除され、階層グリッドが更新される。
【0044】
図5は、生成・更新された階層グリッドを階層バウンディングボリュームに変換して、階層バウンディングボリュームを生成する処理のフローチャートである。
図5の処理では、
図3及び
図4の処理により生成・更新された階層グリッドにおいて、グリッドノードをBVHノードに変換することにより、木構造の階層バウンディングボリューム(BVH木)を生成・更新する。
【0045】
階層グリッド(グリッド木)のノードを指すポインタ(node)が葉ノードを指しているかどうか判定する(S300)。S300がNoである場合(ポインタ(node)がグリッドノードを指している場合)、そのグリッドノードのダーティビットがセットされているかどうか判定する(S301)。S301がYesであれば(そのグリッドノードにダーティビットがセットされている場合)、BVHノードへのポインタのリストLを空リストに設定し、そのグリッドノード内の全ての非空セルのポインタ(c)(物体が存在するセルを指すポインタ(c))について、S300に戻って
図5の処理を再帰的に実行し、戻り値をリストLに加える(S303)。戻り値は階層バウンディングボリューム(BVH木)の根(root)である。つづいて、グリッドノードのダーティビットをクリアする(S304)。
【0046】
そして、階層バウンディングボリュームの一部分であってグリッドノードに対応する部分のBVHノードを生成する(S305)。階層バウンディングボリュームの一部分であって一つのグリッドノードに対応する部分を「断片」(fragment)と称し、「断片」(fragment)はBVHノードで構成される。このS305の処理は、
図6の処理として詳述する。S305の処理によりBVHノードが生成されると、グリッドノードに、生成されたBVHノードを記録し(S306)、BVHノードを返す(S307)。
【0047】
S301がNoであれば(そのグリッドノードにダーティビットがセットされていない場合)、そのグリッドノードに記録されているBVHノードを返す(S312)。
【0048】
S300がYesであれば(ポインタ(node)が葉ノードを指している場合)、その葉ノードにダーティビットがセットされているかどうか判定する(S308)。S308がYesであれば(葉ノードにダーティビットがセットされている場合)、バウンディングボックスを再計算し(S309)、ダーティビットをクリアし(S310)、葉ノードを返す(S311)。
【0049】
上記処理により、階層グリッドを構成する各グリッドノードに対応するBVHノードが生成・更新され、階層バウンディングボリュームが生成・更新される。初期フレームにおいては、階層グリッド全体において、グリッドノードがBVHノードに変換されて、階層バウンディングボリュームが生成され、初期フレーム以降において、3次元空間内の位置が変更された物体(移動した物体)について、物体の移動に伴って更新されたグリッドノードに対応するBVHノードが更新される。葉ノードは、階層グリッドと階層バウンディングボリュームにおいて共有される。
【0050】
図6は、階層グリッドにおけるグリッドノードを、階層バウンディングボリュームにおけるBVHノードで構成される「断片」(fragment)に変換する処理のフローチャートであって、
図5のS305の処理を示す。
図6において、「grid」はグリッドノード、「range」はグリッド中の有効範囲、「L」は各セルに対応するBVH木のリストを示す。
【0051】
図6の処理において、ポインタ(node)が指すグリッドノードについて、
図5のS303で求められるリストLの要素数が「1」であるかどうか判定する(S400)。要素数はリストLに登録されている戻り値に対応するポインタ数である。なお、S400がYesであれば(リストLの要素数が「1」である場合)、リストLの要素を返し(S410)、処理は終了する。
【0052】
S400がNoであれば(リストLの要素数が「1」より大きい複数である場合)、リストLを走査して、グリッドノードのグリッド中の有効範囲(range)内の各スラブについて、合成バウンディングボックスとコストを求める(S401)。スラブは、グリッド中の2枚の平行する平面に挟まれた区間であり、所定の軸を基準に左右方向に分割された区間となる。
【0053】
S401の処理に基づいて、グリッドの最良の分割面を求める(S402)。求めた分割面によって、リストLを2つのリストL_l、L_Rに分ける(S403)。さらに、分割面によってグリッドの範囲range_lとrange_Rに分ける(S404)。リストL_lとグリッドの範囲range_lは分割面の左側のグリッド部分に対応し、リストL_Rとグリッドの範囲range_Rは分割面の右側のグリッド部分に対応する。
【0054】
分割された一方(左側)のリストL_lとそれに対応するグリッドの範囲range_lについて、S400に戻って
図6の処理を再帰的に実行する(S405)。再帰処理を実行することで、対象のグリッドノードの分割面から左側の部分に対応するBVHノードが生成される(S407)。同様に、分割された他方(右側)のリストL_Rとそれに対応するグリッドの範囲range_Rについて、S400に戻って
図6の処理を再帰的に実行する(S406)。再帰処理を実行することで、対象のグリッドノードの分割面から右側の部分に対応するBVHノードが生成される(S407)。生成されるBVHノードは、グリッドノードに対応する階層バウンディングボリューム(BVH木)の一部分である「断片」を構成する。
【0055】
S407で生成されたBVHノードにバウンディングボックスを設定し(S408)、BVHノードを返す処理を行う(S409)。
【0056】
上記処理により、階層グリッドのグリッドノードを、階層バウンディングボリューム(BVH木)の一部分を構成する「断片」に変換することができ、階層グリッドの構造に基づいて断片を接続することにより階層バウンディングボリュームが生成される。
【0057】
上述した
図3乃至
図6の処理により、階層グリッドが生成され、階層グリッドを構成するグリッドノードを、階層バウンディングボリュームの一部分であってそのグリッドノードに対応する部分である断片に変換することで、階層バウンディングボリュームが生成される。初期フレームにおける階層バウンディングボリュームの生成時間も高速化される。
【0058】
そして、階層グリッドにおいて、フレーム間で移動した物体に対応するグリッドノードが更新されると、その更新されたグリッドノードに対応する階層バウンディングボリュームの断片を更新することで、動画のように物体の移動(物体の位置変化のみならず、物体の追加や削除も含む)が伴う画像であっても、高速に階層バウンディングボリュームを更新することができ、その木構造が劣化しない。これにより、光線追跡における交差判定を高速かつ効率的に実行することができる。
【0059】
本発明は、前記実施の形態に限定されるものではなく、本発明の分野における通常の知識を有する者であれば想到し得る各種変形、修正を含む要旨を逸脱しない範囲の設計変更があっても、本発明に含まれることは勿論である。