(57)【要約】【課題】階層バウンディングボリュームを用いた光線追跡法により高速に画像を生成するための階層バウンディングボリューム生成方法を提供する。【解決手段】階層バウンディングボリュームを用いた光線追跡法により３次元空間内の物体群を２次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法は、物体群を構成する複数の物体の存在位置情報に基づいて、３次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、木構造の階層バウンディングボリュームの一部分であって階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを備える。【選択図】図２
2020102022.tif 000002
【特許請求の範囲】
【請求項１】
階層バウンディングボリュームを用いた光線追跡法により３次元空間内の物体群を２次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法において、
物体群を構成する複数の物体の存在位置情報に基づいて、３次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、
木構造の階層バウンディングボリュームの一部分であって前記階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、前記階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを備えることを特徴とする階層バウンディングボリューム生成方法。
【請求項２】
前記第一のステップは、フレーム毎に、前記生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、
前記第二のステップは、フレーム毎に、前記更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して前記階層バウンディングボリュームを再構成する処理を含むことを特徴とする請求項１に記載の階層バウンディングボリューム生成方法。
【請求項３】
前記グリッドノードは、更新の有無を識別する識別情報を含み、前記グリッドノードが更新されると、前記識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含む前記グリッドノードに対応する前記断片を再生成することを特徴とする請求項２に記載の階層バウンディングボリューム生成方法。
【請求項４】
前記断片が再生成されると、当該再生成された断片に対応する前記グリッドノードの識別情報を更新無しに設定することを特徴とする請求項３に記載の階層バウンディングボリューム生成方法。
【請求項５】
前記存在位置情報は、物体の中心位置の座標であることを特徴とする請求項１乃至４のいずれかに記載の階層バウンディングボリューム生成方法。
【請求項６】
階層バウンディングボリュームを用いた光線追跡法により３次元空間内の物体群を２次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法をコンピュータ装置に実行させるコンピュータプログラムにおいて、前記コンピュータ装置に、
物体群を構成する複数の物体の存在位置情報に基づいて、３次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、
木構造の階層バウンディングボリュームの一部分であって前記階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、前記階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを実行させることを特徴とするコンピュータプログラム。
【請求項７】
前記第一のステップは、フレーム毎に、前記生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、
前記第二のステップは、フレーム毎に、前記更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して前記階層バウンディングボリュームを再構成する処理を含むことを特徴とする請求項６に記載のコンピュータプログラム。
【請求項８】
前記グリッドノードは、更新の有無を識別する識別情報を含み、前記グリッドノードが更新されると、前記識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含む前記グリッドノードに対応する前記断片を再生成することを特徴とする請求項７に記載のコンピュータプログラム。
【請求項９】
前記断片が再生成されると、当該再生成された断片に対応する前記グリッドノードの識別情報を更新無しに設定することを特徴とする請求項８に記載のコンピュータプログラム。
【請求項１０】
前記存在位置情報は、物体の中心位置の座標であることを特徴とする請求項６乃至９のいずれかに記載のコンピュータプログラム。
【請求項１１】
請求項６乃至１０のいずれか記載のコンピュータプログラムを実行する前記コンピュータ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、階層バウンディングボリュームを用いた光線追跡法により画像生成するための階層バウンディングボリューム生成方法及び当該階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラムに関する。
【背景技術】
【０００２】
光線追跡法（Ray Tracing)は、視点から物体（プリミティブ）の方向に向かって光線を追跡し、光線と物体との交差判定を行い、光線が物体と交差すれば、その交点における物体の光の状態（輝度など）を求め、画像面（スクリーン）に投影させて２次元の画像を生成する手法である。この光線追跡法は、光の物理現象を模倣することによって高品位の画像生成を行うことができ、工業デザインやインテリアシミュレーションなど幅広い分野で活用されている。
【０００３】
光線追跡法による演算処理は、特に光線と物体との交差判定に非常に多くの時間を費やし、基本的なアルゴリズムでは計算量が膨大となる。そのため、光線と物体との交差判定にかかる演算量を減らし、この演算処理を高速化する手法として例えば階層バウンディングボリューム（Bounding Volume Hierachy:BVH)を利用した手法が提案されている（特許文献１−８、非特許文献１−４）。
【０００４】
BVHを使用した光線追跡法では、形状データに対してBVH木と呼ばれる木構造のデータ構造を生成し、そのBVH木を利用することで画像生成（レンダリング）を高速に行うことができる。
【０００５】
図７は、階層バウンディングボリュームを模式的に説明するための図である。バウンディングボリュームは、物体を取り囲む立体を表す。光線追跡法による画像生成は、３次元空間を取り扱うものであるが、図示の都合上、２次元空間として示される。図７（ａ）において、それぞれ破線矩形で表される、物体１（丸数字１）及び４（丸数字４）を囲むバウンディングボリュームC、物体３、２及び５（丸数字３、２及び５）を囲むバウンディングボリュームD、物体６、７及び８（丸数字６、７及び８）を囲むバウンディングボリュームB、さらに、バウンディングボリュームC、Dを囲むバウンディングボリュームAが生成され、各バウンディングボリュームと光線(ray）との交差判定を行い、交差しない場合は、その中の物体との交差判定を省略される。各バウンディングボリュームとその中に包含される物体のデータ構造として、図７（ｂ）に示す階層関係を有する木構造の階層バウンディングボリュームが生成される。
【０００６】
図８は、光線追跡法による画像生成の概略手順を示す図である。３次元空間内における物体のリストについて、演算処理を高速化させるデータ構造である階層バウンディングボリューム（BVH)を生成・更新し、その階層バウンディングボリュームを用いてレンダリング処理を実行し、画像を生成する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−０２８２８０号公報
【特許文献２】特開２００１−０６７４９３号公報
【特許文献３】特開２００３−２７１９８８号公報
【特許文献４】特開２００９−１５７５９１号公報
【特許文献５】特開２０１３−０３７６９１号公報
【特許文献６】特開２０１４−０２６６５２号公報
【特許文献７】特開２０１８−０７３４２７号公報
【特許文献８】特許第６２７３３８０号公報
【非特許文献】
【０００８】
【非特許文献１】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.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、階層バウンディングボリューム（BVH）を使用する場合、静的シーン（物体が動かないシーン）に対してはBVHは比較的効率的に作用するが、動的シーン（物体が動くシーン）では、フレーム間で物体が動くたびに、BVH木全体を一から作り直す必要があり効率が悪くなる。すなわち、物体の動きに応じてその都度フレーム毎にBVH木全体を更新する処理が必要となりその更新処理に多くの時間を費やすことになり、その結果、BVHを利用する効果が発揮されにくくなり、画像生成時間が長くなるという問題がある。
【００１０】
そこで、本発明の目的は、階層バウンディングボリューム（BVH)木を高速に生成することができる手法を提案し、それにより高速に画像を生成するための階層バウンディングボリューム生成方法及びその階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するための本発明は、階層バウンディングボリュームを用いた光線追跡法により３次元空間内の物体群を２次元スクリーンに投影させた画像生成を行うための階層バウンディングボリューム生成方法であって、物体群を構成する複数の物体の存在位置情報に基づいて、３次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成する第一のステップと、木構造の階層バウンディングボリュームの一部分であって階層グリッドを構成する各グリッドノードに対応する部分である断片を生成し、階層グリッドの構造に基づいて当該断片を接続することにより階層バウンディングボリュームを生成する第二のステップとを備えることを特徴とする。
【００１２】
好ましくは、第一のステップは、フレーム毎に、生成された階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新する処理を含み、第二のステップは、フレーム毎に、更新されたグリッドノードに対応する前記断片を再生成し、当該再生成された断片を接続して階層バウンディングボリュームを再構成する処理を含む。
【００１３】
さらに好ましくは、グリッドノードは、更新の有無を識別する識別情報を含み、グリッドノードが更新されると、識別情報は更新有りに設定され、当該更新有りに設定されている識別情報を含むグリッドノードに対応する断片を再生成する。また、断片が再生成されると、当該再生成された断片に対応するグリッドノードの識別情報を更新無しに設定する。例えば、存在位置情報は、物体の中心位置の座標である。
【００１４】
また、上記階層バウンディングボリューム生成方法をコンピュータ装置に実行させるためのコンピュータプログラム及びそのコンピュータ装置が提供される。コンピュータ装置は、サーバ装置、パーソナルコンピュータや携帯デバイスのような端末装置であり、さらに、サーバ装置及び端末装置を複数台接続した構成であってもよい。
【発明の効果】
【００１５】
本発明によれば、階層バウンディングボリュームを高速に生成することができ、動画においても、階層バウンディングボリュームを劣化させずに高速且つ効率的に更新することができ、光線追跡法による画像生成の高速化を図ることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態における階層バウンディングボリューム生成装置（コンピュータ装置）の構成例を示すブロック図である。
【図２】本発明の実施の形態における階層バウンディングボリューム生成処理を説明するための模式図である。
【図３】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【図４】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【図５】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【図６】本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。
【図７】階層バウンディングボリュームを模式的に説明するための図である。
【図８】光線追跡法による画像生成の概略手順を示す図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施の形態について説明する。しかしながら、かかる実施の形態例が、本発明の技術的範囲を限定するものではない。
【００１８】
図１は、本発明の実施の形態における階層バウンディングボリューム生成装置の構成例を示すブロック図である。図１において、階層バウンディングボリューム生成装置１０は、例えば、汎用的なコンピュータ装置で構成することができ、バス１１に接続される構成要素として、演算処理を有する演算処理素子であるＣＰＵ１２、本発明の階層バウンディングボリューム生成処理を実行するためのコンピュータプログラム及び必要なデータを格納する固定記憶素子であるＲＯＭ１３、演算処理中にデータを保存する一時記憶素子であるＲＡＭ１４、キーボード、マイク、タッチパネルなど外部から情報を入力するための入力部１５、ディスプレイなどの表示部１６、及び通信ネットワークを含む外部と情報をやりとりするための通信機能を有する通信部１７などを有して構成される。また、階層バウンディングボリューム生成装置は、本発明の画像生成機能を含む専用ハードウェア装置であってもよい。
【００１９】
階層バウンディングボリューム生成装置１０は、画像生成装置の一部機能を実行するものであって、例えば汎用的なコンピュータ装置で実現される画像生成装置は、本発明における階層バウンディングボリューム生成処理により生成された階層バウンディングボリュームを利用した光線追跡法により二次元画像を生成する。すなわち、光線と階層バウンディングボリュームとの交差判定を行い、光線が階層バウンディングボリュームと交差すれば、階層バウンディングボリュームに含まれる一つの物体との交点を算出し、その交点における光の状態（輝度など）を求め、画像面（スクリーン）に投影させて２次元の画像を生成する。
【００２０】
図２は、本発明の実施の形態における階層バウンディングボリューム生成処理を説明するための模式図である。図２（ａ）は複数の物体（物体群と称する場合がある）が存在する所定の３次元空間（Scene space)を示し、説明のために、２次元領域として示される。３次元空間は、例えば４×４×４（図２（ａ）では４×４）のグリッド状に分割され（グリッド状に分割された空間をグリッドと称する）、グリッドにおける分割された一つ一つの空間であるセル(cell）は、さらにグリッド状に分割可能であり、一つのセル内に存在する物体の数が所定の上限数となるまで（図２（ａ）の例では、一つのセルに一つの物体）、複数階層にわたってグリッド状に分割される。物体の存在位置は、例えば物体の中心位置の座標であり、物体の重心の座標若しくは物体を囲むバウンディングボリュームの重心の座標を用いることができる。図２（ａ）では、左下の２つのセルが、さらに４×４×４（図２（ａ）では４×４）のグリッド状に分割されている状態が示され、一つのセルに一つの物体の重心が内包される状態が例示される。
【００２１】
図２（ｂ）は、複数階層のグリッドのデータ構造である木構造の階層グリッド（グリッド木：grid tree）を示す。階層グリッドは、少なくとも一層のグリッドノード(grid node)と、グリッドノードと接続する末端の葉ノード（リーフノード:leaf node）とを有し、葉ノードには、上限数（例えば１つ）以下の物体が内包される。
【００２２】
図２（ｃ）は、階層グリッドから変換されたデータ構造である木構造の階層バウンディングボリューム（BVH木:BVH tree）を示す。本発明の階層バウンディングボリューム生成処理は、物体群を構成する複数の物体(object)それぞれの存在位置情報（例えば物体の中心位置である重心の座標(centroid)）に基づいて、３次元空間をグリッド状に分割して形成される木構造の階層グリッドを生成し、そして、木構造の階層バウンディングボリュームの一部分であって上記階層グリッドを構成する各グリッドノードに対応する部分である断片(fragment)を生成し、上記階層グリッドの構造に基づいて当該断片(fragment)を接続することにより階層バウンディングボリュームを生成する。
【００２３】
階層グリッド及び階層バウンディングボリュームはフレーム毎に更新され、フレーム毎に、階層グリッドに対して、フレーム間で移動した物体に対応するグリッドノードを更新し、さらに、フレーム毎に、その更新されたグリッドノードに対応する上記断片を再生成し、当該再生成された断片を接続して階層バウンディングボリューム（BVH木）を再構成する。物体が移動することにより、物体を囲むバウンディングボリュームの形状に変化が生じ、そのバウンディングボリュームの形状変化に伴い、グリッドノードが更新される。
【００２４】
BVH木において、階層グリッド（グリッド木）のグリッドノードと対応する断片を生成して、BVH木を更新する手法を採用することにより、更新されたグリッドノードのみを断片に変換することで、BVH木を更新することが可能となり、効率よく高速にBVH木を生成・更新することができる。フレーム間における物体の動きは、例えばシーン情報から取得できる。
【００２５】
図３乃至図６は、本発明の実施の形態における階層バウンディングボリューム生成処理のフローチャートである。図２を参照しつつ、図３乃至図６のフローチャートについて説明する。
【００２６】
図３は、階層グリッドの生成における階層グリッドに物体を挿入する処理のフローチャートである。図３の処理は、初期フレームにおいて、階層グリッドを新たに生成する処理として全ての物体（プリミティブ）を一つ一つ登録する処理、及び初期フレーム以降において、階層グリッドを更新する処理として、移動した物体のみを再登録する処理である。
【００２７】
図３において、「node」は階層グリッドのノード（グリッドノード又は葉ノード）を指すポインタ（pointer）、「level」はノードのレベル、「object」は挿入する物体、「ｃ」はセルへのポインタであることを示す。物体を階層グリッド（グリッド木）に挿入するには、まず最初に、ポインタ(node）をグリッド木の根(root）へのポインタ、levelを０（ゼロ）として、当該図３の処理を開始する。
【００２８】
ポインタ(node）が空ポインタかどうかは判定する（S100)。空ポインタである場合は、階層グリッドが生成されていない初期段階である。S100がYesであれば、登録（挿入）対象となる一つの物体からなる新しい葉ノードを生成し、ポインタ(node）をその生成された葉ノードへのポインタで置き換える（S101)。
【００２９】
S100がNoであれば、さらにポインタ(node）がグリッドノードを指しているかどうか判定する（S102)。S102がYesであれば、そのグリッドノードの物体数を１増やす（S103)。さらに、そのグリッドノードのダーティビット（dirty bit）をセットする（S104)。ダーティビットは、ノード（グリッドノード及び葉ノード）に変更が生じたこと（この場合は物体数が１増えたこと）を識別する識別情報（フラグ）であり、後述するように、ダーティビットがセットされたノードに対して、対応する階層バウンディングボリュームの部分を生成・更新する。
【００３０】
グリッドノードにおいて、物体の位置を代表する中心位置を含むセルへのポインタ（c）を設定する（S105)。物体の中心位置として、例えば物体の重心の座標（物体が多角形である場合は物体頂点座標の平均値）、若しくは、演算量の削減のため、その物体を囲むバウンディングボリュームの重心の座標（中心点）を用いることができる。
【００３１】
そして、そのポインタ（c）について、S100に戻って図３の処理を再帰的に実行する（S106)。再帰処理を実行することで、木構造のグリッドノードを辿っていき、葉ノードに行き着くまで、処理が繰り返される。
【００３２】
S102がNoであれば、ポインタ（node）は葉ノードを指しているので、葉ノードに物体を登録し（S107)、その葉ノードのダーティビットをセットする（S108)。
【００３３】
その葉ノードに登録される物体数が所定の上限数を超えているかどうか、かつレベルが制限値以内かどうか判定する（S109)。葉ノードに登録される物体数の上限数はあらかじめ定められる。上限数は１又は複数であってもよい。レベルは、階層グリッドにおける木の高さである。
【００３４】
S109がYesであれば、新しい空のグリッドノードを生成し、そのポインタをgridnodeとし（S110)、葉ノードに登録された物体について、グリッドノードでの登録とするために、S100に戻って図３の処理を再帰的に実行する（S111）。そして、ポインタ（node）をグリッドノードを指すポインタ（gridnode）で置き換え（S112)、処理を終了する。
【００３５】
上記処理により、初期フレームにおける全ての物体について、階層グリッドが生成され、また、初期フレーム以降において、３次元空間内の位置が変更された物体（移動した物体）について、その移動した物体の位置（物体の重心の座標）に対応する葉ノード及びグリッドノードに物体を登録することで、階層グリッドが更新される。
【００３６】
図４は、階層グリッドの生成における階層グリッドから物体を削除する処理のフローチャートである。図４の処理は、初期フレーム以降において、直前のフレームまで３次元空間内に存在していた物体が３次元空間に存在しなくなった場合、若しくはその物体の移動により再登録の必要を生じた場合に、階層グリッドからその物体を削除する処理である。図４において、「node」は階層グリッドのノード（グリッドノード又は葉ノード）を指すポインタ、「object」は挿入する物体を示す。
【００３７】
ポインタ（node）がグリッドノードを指すポインタ（gridnode）であるかどうか判定する（S200)。S200がYesであれば、そのグリッドノードの物体数を１減らす（S201)。さらに、そのグリッドノードのダーティビットをセットする（S202)。ダーティビットは、上述したように、ノード（グリッドノード及び葉ノード）に変更が生じたこと（この場合は物体数が１減少したこと）を識別する識別情報（フラグ）であり、ダーティビットがセットされたノードに対して、対応する階層バウンディングボリュームの部分を生成・更新する。
【００３８】
グリッドノードにおいて、削除対象の物体の中心位置を含むセルへのポインタ（c）を設定する（S203)。物体の中心位置として、例えば物体の重心の座標（物体が多角形である場合は物体頂点座標の平均値）、若しくは、演算量の削減のため、その物体を囲むバウンディングボリュームの重心の座標（中心点）を用いることができる。
【００３９】
そして、そのポインタ（c）について、S200に戻って図４の処理を再帰的に実行する（S204)。再帰処理を実行することで、木構造のグリッドノードを辿っていき、葉ノードに行き着くまで、処理が繰り返される。
【００４０】
グリッドノードの物体数が０（ゼロ）になったかどうか判定する（S205）。S205がYesであれば、ポインタ（node）を空ポインタで置き換え（S213）、処理を終了する。S205がNoであれば、グリッドノードの物体数が葉ノードの上限数以下になったかどうか判定する（S206)。S206がYesであれば、新しい空の葉ノードを生成し、その葉ノードを指すポインタ（leafnode）を設定する（S207）。そして、グリッド以下にあるすべての物体をその生成された葉ノードに登録し（S208）、ポインタ(node)を葉ノードを指すポインタ（leafnode）で置き換える（S209）。
【００４１】
S200がNoであれば（ポインタ(node）が葉ノードを指している場合）、葉ノードから削除対象の物体を削除し（S210)、その葉ノードのダーティビットをセットする（S211)。
【００４２】
葉ノードの物体数が０（ゼロ）になったかどうか判定し（S212）、０（ゼロ）になった場合は、ポインタ(node）を空ポインタで置き換え（S213）、処理を終了する。
【００４３】
上記処理により、初期フレーム以降において、３次元空間内で存在しなくなった物体、若しくは移動によって再登録の必要を生じた物体について、葉ノード及びグリッドノードから削除され、階層グリッドが更新される。
【００４４】
図５は、生成・更新された階層グリッドを階層バウンディングボリュームに変換して、階層バウンディングボリュームを生成する処理のフローチャートである。図５の処理では、図３及び図４の処理により生成・更新された階層グリッドにおいて、グリッドノードをBVHノードに変換することにより、木構造の階層バウンディングボリューム（BVH木）を生成・更新する。
【００４５】
階層グリッド（グリッド木）のノードを指すポインタ（node）が葉ノードを指しているかどうか判定する（S300）。S300がNoである場合（ポインタ(node）がグリッドノードを指している場合）、そのグリッドノードのダーティビットがセットされているかどうか判定する（S301）。S301がYesであれば（そのグリッドノードにダーティビットがセットされている場合）、BVHノードへのポインタのリストLを空リストに設定し、そのグリッドノード内の全ての非空セルのポインタ（ｃ）（物体が存在するセルを指すポインタ（ｃ））について、S300に戻って図５の処理を再帰的に実行し、戻り値をリストLに加える（S303）。戻り値は階層バウンディングボリューム（BVH木）の根(root）である。つづいて、グリッドノードのダーティビットをクリアする（S304）。
【００４６】
そして、階層バウンディングボリュームの一部分であってグリッドノードに対応する部分のBVHノードを生成する（S305）。階層バウンディングボリュームの一部分であって一つのグリッドノードに対応する部分を「断片」（fragment)と称し、「断片」（fragment)はBVHノードで構成される。このS305の処理は、図６の処理として詳述する。S305の処理によりBVHノードが生成されると、グリッドノードに、生成されたBVHノードを記録し（S306)、BVHノードを返す（S307)。
【００４７】
S301がNoであれば（そのグリッドノードにダーティビットがセットされていない場合）、そのグリッドノードに記録されているBVHノードを返す（S312）。
【００４８】
S300がYesであれば（ポインタ(node）が葉ノードを指している場合）、その葉ノードにダーティビットがセットされているかどうか判定する（S308）。S308がYesであれば（葉ノードにダーティビットがセットされている場合）、バウンディングボックスを再計算し(S309）、ダーティビットをクリアし（S310)、葉ノードを返す（S311）。
【００４９】
上記処理により、階層グリッドを構成する各グリッドノードに対応するBVHノードが生成・更新され、階層バウンディングボリュームが生成・更新される。初期フレームにおいては、階層グリッド全体において、グリッドノードがBVHノードに変換されて、階層バウンディングボリュームが生成され、初期フレーム以降において、３次元空間内の位置が変更された物体（移動した物体）について、物体の移動に伴って更新されたグリッドノードに対応するBVHノードが更新される。葉ノードは、階層グリッドと階層バウンディングボリュームにおいて共有される。
【００５０】
図６は、階層グリッドにおけるグリッドノードを、階層バウンディングボリュームにおけるBVHノードで構成される「断片」(fragment）に変換する処理のフローチャートであって、図５のS305の処理を示す。図６において、「grid」はグリッドノード、「range」はグリッド中の有効範囲、「L」は各セルに対応するBVH木のリストを示す。
【００５１】
図６の処理において、ポインタ（node）が指すグリッドノードについて、図５のS303で求められるリストLの要素数が「１」であるかどうか判定する（S400)。要素数はリストLに登録されている戻り値に対応するポインタ数である。なお、S400がYesであれば（リストLの要素数が「１」である場合）、リストLの要素を返し（S410）、処理は終了する。
【００５２】
S400がNoであれば（リストLの要素数が「１」より大きい複数である場合）、リストLを走査して、グリッドノードのグリッド中の有効範囲(range）内の各スラブについて、合成バウンディングボックスとコストを求める（S401)。スラブは、グリッド中の２枚の平行する平面に挟まれた区間であり、所定の軸を基準に左右方向に分割された区間となる。
【００５３】
S401の処理に基づいて、グリッドの最良の分割面を求める（S402）。求めた分割面によって、リストLを２つのリストL_l、L_Rに分ける（S403)。さらに、分割面によってグリッドの範囲range_lとrange_Rに分ける（S404）。リストL_lとグリッドの範囲range_lは分割面の左側のグリッド部分に対応し、リストL_Rとグリッドの範囲range_Rは分割面の右側のグリッド部分に対応する。
【００５４】
分割された一方（左側）のリストL_lとそれに対応するグリッドの範囲range_lについて、S400に戻って図６の処理を再帰的に実行する（S405)。再帰処理を実行することで、対象のグリッドノードの分割面から左側の部分に対応するBVHノードが生成される（S407）。同様に、分割された他方（右側）のリストL_Rとそれに対応するグリッドの範囲range_Rについて、S400に戻って図６の処理を再帰的に実行する（S406)。再帰処理を実行することで、対象のグリッドノードの分割面から右側の部分に対応するBVHノードが生成される（S407）。生成されるBVHノードは、グリッドノードに対応する階層バウンディングボリューム（BVH木）の一部分である「断片」を構成する。
【００５５】
S407で生成されたBVHノードにバウンディングボックスを設定し（S408）、BVHノードを返す処理を行う（S409）。
【００５６】
上記処理により、階層グリッドのグリッドノードを、階層バウンディングボリューム（BVH木）の一部分を構成する「断片」に変換することができ、階層グリッドの構造に基づいて断片を接続することにより階層バウンディングボリュームが生成される。
【００５７】
上述した図３乃至図６の処理により、階層グリッドが生成され、階層グリッドを構成するグリッドノードを、階層バウンディングボリュームの一部分であってそのグリッドノードに対応する部分である断片に変換することで、階層バウンディングボリュームが生成される。初期フレームにおける階層バウンディングボリュームの生成時間も高速化される。
【００５８】
そして、階層グリッドにおいて、フレーム間で移動した物体に対応するグリッドノードが更新されると、その更新されたグリッドノードに対応する階層バウンディングボリュームの断片を更新することで、動画のように物体の移動（物体の位置変化のみならず、物体の追加や削除も含む）が伴う画像であっても、高速に階層バウンディングボリュームを更新することができ、その木構造が劣化しない。これにより、光線追跡における交差判定を高速かつ効率的に実行することができる。
【００５９】
本発明は、前記実施の形態に限定されるものではなく、本発明の分野における通常の知識を有する者であれば想到し得る各種変形、修正を含む要旨を逸脱しない範囲の設計変更があっても、本発明に含まれることは勿論である。
【図１】
2020102022.tif 000003
【図２】
2020102022.tif 000004
【図３】
2020102022.tif 000005
【図４】
2020102022.tif 000006
【図５】
2020102022.tif 000007
【図６】
2020102022.tif 000008
【図７】
2020102022.tif 000009
【図８】
2020102022.tif 000010