(57)【特許請求の範囲】
【請求項１】
時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置であって、
前記複数の計算時点のそれぞれにおいて、当該計算時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成部と、
前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替え部と、を含み、
前記ノード入れ替え部により入れ替えが行われた完全二分木を用いてオブジェクト同士の衝突判定が行われる
ことを特徴とするシミュレーション装置。
【請求項２】
前記オブジェクトの位置を示す位置情報は対応する前記オブジェクトを内接する領域であり、
前記ノード入れ替え部は、前記２ｎ個のノードに属する２・２ｎ個の子ノードを、親ノードの前記領域が小さくなる組み合わせに入れ替える、
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記ノード入れ替え部は、前記２・２ｎ個の子ノードを入れ替えて得られる複数の組み合わせ候補のそれぞれについて、当該組み合わせ候補における親ノードの前記領域の大きさをランダムに変化させ、当該大きさを変化させた領域が小さな組み合わせ候補になるように、前記２ｎ個のノードに属する２・２ｎ個の子ノードを入れ替える
ことを特徴とする請求項２に記載のシミュレーション装置。
【請求項４】
前記ノード入れ替え部により入れ替えが行われた前記完全二分木において、
最上層から順に各層において、２個のノード毎に各ノードの前記領域に重なりが有るか否かを判断する判断部、をさらに含む、
ことを特徴とする請求項２または３に記載のシミュレーション装置。
【請求項５】
前記判断部は、
前の層において前記判断部により重なりが有ると判断された２個のノードに属する４個の子ノードすべての組み合わせにおいて、各ノードの前記領域に重なりが有るか否かをさらに判断する、
ことを特徴とする請求項４に記載のシミュレーション装置。
【請求項６】
前記完全二分木作成部は、二回目以降の計算時点における衝突判定に用いる完全二分木を作成する場合に、前回の計算時点における衝突判定に用いた完全二分木におけるリーフとオブジェクトとの対応関係を用いて完全二分木を作成する、
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項７】
時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の判定時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置を制御する制御方法であって、
ある判定時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成ステップと、
前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替えステップと、
を含むことを特徴とする制御方法。
【請求項８】
時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の判定時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置を、
ある判定時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成手段、及び、
前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替え手段、
として機能させるためのプログラム。
【請求項９】
請求項８に記載されたプログラムを格納したコンピュータ読み取り可能な情報記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時間とともに仮想空間内を運動する複数のオブジェクトに関するシミュレーションを実行するシミュレーション装置、その制御方法、プログラム、情報記憶媒体に関する。
【背景技術】
【０００２】
仮想空間内に配置されている複数のオブジェクトの衝突判定を行うシミュレーションにおいて、２つのオブジェクトの仮想空間上の位置に基づいて衝突判定を行う。ここで、複数のオブジェクトを総当たりで衝突判定を行うことは、オブジェクト数が増加するほど計算量が膨大になり非効率である。そこで従来は、衝突判定の回数を減らすための手法の１つとして、仮想空間内の複数のオブジェクトの位置関係を反映する二分木を用いた衝突判定が行われている。オブジェクトの位置関係を反映した二分木を用いることで、仮想空間内の位置が離れているオブジェクト同士の衝突判定をスキップすることができる。【０００３】
この二分木の構築方法としては、例えば、全てのオブジェクトを含む領域をルートとし、当該領域を２分割した分割領域それぞれを子ノードとし、さらに分割領域それぞれを２分割した分割領域を孫ノードとする処理を、オブジェクトを１つだけ含む分割領域がリーフとなるまで再帰的に繰り返す方法がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、二分木の構築においてオブジェクト数の増加に伴う処理負荷を低減するため、二分木の構築を並列処理により実行することが望ましい。しかし、従来の二分木の構築方法では、各層の分割領域に含まれるオブジェクト数が異なるので並列処理を効率的に行えない場合がある。【０００５】
本発明の目的の一つは、並列処理に適した、オブジェクトの衝突判定を行うための仮想空間内のオブジェクトの位置を反映した二分木の構築方法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明に係るシミュレーション装置は、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置であって、前記複数の計算時点のそれぞれにおいて、当該計算時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成部と、前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替え部と、を含み、前記ノード入れ替え部により入れ替えが行われた完全二分木を用いてオブジェクト同士の衝突判定が行われることを特徴とする。【０００７】
また、上述のシミュレーション装置において、前記オブジェクトの位置を示す位置情報は対応する前記オブジェクトを内接する領域であり、前記ノード入れ替え部は、前記２ｎ個のノードに属する２・２ｎ個の子ノードを、親ノードの前記領域が小さくなる組み合わせに入れ替える、こととしてもよい。【０００８】
また、上述のシミュレーション装置において、前記ノード入れ替え部は、前記２・２ｎ個の子ノードを入れ替えて得られる複数の組み合わせ候補のそれぞれについて、当該組み合わせ候補における親ノードの前記領域の大きさをランダムに変化させ、当該大きさを変化させた領域が小さな組み合わせ候補になるように、前記２ｎ個のノードに属する２・２ｎ個の子ノードを入れ替えることとしてもよい。【０００９】
また、上述のシミュレーション装置は、前記ノード入れ替え部により入れ替えが行われた前記完全二分木において、最上層から順に各層において、２個のノード毎に各ノードの前記領域に重なりが有るか否かを判断する判断部、をさらに含む、こととしてもよい。【００１０】
また、上述のシミュレーション装置において、前記判断部は、前の層において前記判断部により重なりが有ると判断された２個のノードに属する４個の子ノードすべての組み合わせにおいて、各ノードの前記領域に重なりが有るか否かをさらに判断する、こととしてもよい。【００１１】
また、上述のシミュレーション装置において、前記完全二分木作成部は、二回目以降の計算時点における衝突判定に用いる完全二分木を作成する場合に、前回の計算時点における衝突判定に用いた完全二分木におけるリーフとオブジェクトとの対応関係を用いて完全二分木を作成する、こととしてもよい。【００１２】
また、本発明に係るプログラムは、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の判定時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置に、ある判定時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成手段、及び、前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替え手段、として機能させるためのプログラムである。このプログラムは、コンピュータ読み取り可能な情報記憶媒体に格納されてよい。【００１３】
また、本発明に係るシミュレーション装置の制御方法は、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の判定時点のそれぞれにおけるオブジェクト同士の衝突を判定するシミュレーション装置を制御する制御方法であって、ある判定時点における前記仮想空間内のオブジェクトの位置を示す位置情報をリーフに関連づけ、子ノードの前記位置情報を反映した位置情報を内部ノードに関連づけた完全二分木を作成する完全二分木作成ステップと、前記完全二分木における最下層より１つ上層から順に各層において、２ｎ（ｎ≧１）個のノード毎に、当該２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた前記位置情報に基づいて、当該２・２ｎ個の子ノードを入れ替えるノード入れ替えステップと、を含むことを特徴とする。
【図面の簡単な説明】
【００１４】
【図１】本実施形態に係るシミュレーション装置１の構成の一例を示す図である。
【図２】本実施形態における、シミュレーション装置１が実行するシミュレーション処理の流れの一例を示す図である。
【図３】本実施形態に係るシミュレーション装置１により実行される主な機能の一例を示す機能ブロック図である。
【図４】完全二分木の一例を示す図である。
【図５】仮想空間内に配置される複数のオブジェクトの簡易モデルを示す図である。
【図６Ａ】完全二分木作成部２１が作成した完全二分木の一例を示す図である。
【図６Ｂ】第２層についてのノード入れ替え処理が完了した後の完全二分木の一例を示す図である。
【図６Ｃ】第３層についてのノード入れ替え処理が完了した後の完全二分木の一例を示す図である。
【図７】取得オブジェクトペアと、取得オブジェクトペアの割り当てを管理するオブジェクトチェックテーブルとの一例を示す図である。
【図８】判定対象ペアと比較対象ペアの一例を示す。
【図９】本実施形態に係る共通オブジェクトペアを用いたオブジェクトの物理量算出処理の流れの一例を示すフロー図である。
【図１０】オブジェクトの連結手順の一例を示す図である。
【図１１Ａ】オブジェクト連結部４４により連結された連結オブジェクトの一例を模式的に示す図である。
【図１１Ｂ】図１１Ａに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した後の連結オブジェクトの一例を模式的に示す図である。
【図１１Ｃ】図１１Ｂに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した後の連結オブジェクトの一例を模式的に示す図である。
【図１２】図１１Ａに示す各オブジェクトのポインタ値の推移を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００１６】
図１は、本実施形態に係るシミュレーション装置１の構成の一例を示す図である。本実施形態に係るシミュレーション装置１は、例えば、家庭用ゲーム機やパーソナルコンピュータ等であって、図１に示すように、制御部１１、記憶部１２、通信部１３、操作部１４、及び表示部１５を含んで構成されている。
【００１７】
制御部１１は、ＣＰＵ５及びＧＰＵ６等を含んで構成され、記憶部１２に格納されているプログラムに従って各種の情報処理を実行する。本実施形態において、制御部１１が実行する処理の具体例については、後述する。
【００１８】
記憶部１２は、ＲＡＭやＲＯＭ等のメモリ素子、ハードディスクドライブなどを含んで構成されており、制御部１１が実行するプログラムや、各種のデータを記憶する。また、記憶部１２は、制御部１１のワークメモリとしても動作する。
【００１９】
通信部１３は、通信インタフェースであって、通信ネットワークを介して外部から到来するデータを受信し、制御部１１に対して出力する。また、制御部１１からの指示に従って、通信ネットワークを介して接続された他の情報処理装置に対して各種のデータを送信する。
【００２０】
操作部１４は、キーボードやマウス、家庭用ゲーム機のコントローラ等であって、ユーザの操作入力を受け付けて、その内容を示す信号を制御部１１に出力する。
【００２１】
表示部１５は、液晶ディスプレイ等の表示デバイスであって、制御部１１の指示に従って、各種の画像を表示する。
【００２２】
なお、シミュレーション装置１は、ＤＶＤ−ＲＯＭやＢｌｕ−ｒａｙ（登録商標）ディスクなどの光ディスクを読み取り光ディスクドライブ、ＵＳＢ（Universal Serial Bus）ポートなどを含んでいてもよい。
【００２３】
以下、本実施形態に係るシミュレーション装置１によって実現される機能の具体例について、説明する。本実施形態では、仮想空間内を運動する複数のオブジェクトについて、時間とともに変化するオブジェクトの位置を、物理シミュレーション等のシミュレーション処理によって計算する。本実施形態では、特に、オブジェクト同士の衝突による各オブジェクトの位置への影響を考慮したシミュレーション処理を実行する。このシミュレーション処理は、主に制御部１１のＧＰＵ６が実行することとするが、ＣＰＵ５、その他の装置が実行することとしてもよい。
【００２４】
ＧＰＵ６は、ＣＰＵ５よりコア数が多く、同時に実行可能な処理単位（スレッド）の数も多いため、並列処理に適している。一方で、同時に実行されるスレッドは、互いに同じ内容の処理であることが要請される。そこで、ＧＰＵ６を用いてシミュレーション処理を効率的に実行するためには、従来と異なるアルゴリズムで処理を行う必要がある。
【００２５】
なお、仮想空間内における時間の進行はタイムカウンタｔの値によって表されるものとし、所定の単位時間ｄごとにタイムカウンタｔの値を１だけ加算するとともにシミュレーション処理を実行する。すなわち、オブジェクトの位置を計算する対象となる各計算時点は、タイムカウンタｔ＝０、１、２、３、・・・で表される。また、各オブジェクトにはオブジェクトを識別するためにオブジェクトに固有に設定されるＩＤ情報（識別子）が関連付けられる。さらに各オブジェクトには、属性情報が関連付けられてもよい。属性情報としては、例えば、オブジェクトの種類を表す情報や、外形を規定する情報、その他、オブジェクトの種類に応じた種々の属性情報であってよい。
【００２６】
ここで、本実施形態における、シミュレーション装置１が実行するシミュレーション処理の流れの一例を図２のフロー図を参照しながら説明する。この図２に示す処理は、タイムカウンタｔの値が加算されるごとに実行される。
【００２７】
まず、仮想空間内に配置される複数のオブジェクトの少なくとも一部に物理量（速度、加速度など）が与えられる（Ｓ１）。これにより、仮想空間内に配置される複数のオブジェクトの位置が時間とともに変化する。
【００２８】
次に、オブジェクトの位置を計算する計算時点において、オブジェクト同士の衝突が判定される（Ｓ２）。処理Ｓ２については、後に詳述する。
【００２９】
そして、処理Ｓ１により互いに衝突していると判定された２つのオブジェクトの拘束条件が作成される（Ｓ３）。ここでは、例えば、互いに衝突していると判定された２つのオブジェクトは衝突点から進行方向にそれ以上位置が変化することのないよう、オブジェクトの動きを拘束する必要がある。そうしないと、衝突したオブジェクト同士がめりこむ、通過するなどの不具合が生じる。処理Ｓ３では、このようなオブジェクトの動きを拘束するための拘束条件が作成される。そして、拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与える物理量が算出される（Ｓ４）。処理Ｓ４については、後に詳述する。
【００３０】
このとき、仮想空間内を運動する複数のオブジェクトのなかには、その速度がほぼ０であるオブジェクトが存在する。このようなほぼ停止の状態にあるオブジェクトに対して、速度を０にしてスリープさせる（停止状態にする）というスリープ管理が行われる（Ｓ５）。スリープ管理により停止状態にあるオブジェクトが計算対象から除外されることで、計算の処理量が低減する。なお、スリープ管理により停止状態にあるオブジェクトに外力が与えられると、スリープ管理による停止状態が解除され計算対象に加えられる。処理Ｓ５については、後に詳述する。
【００３１】
そして、各オブジェクトに与える物理量が仮想空間内の位置に反映される（Ｓ６）。つまり、各オブジェクトに与える物理量から、仮想空間の状態を描画するタイミングにおける各オブジェクトの位置が算出される。そしてシミュレーション装置１は、算出した位置にオブジェクトを配置した状態の仮想空間の様子を示す画像を描画して、表示部１５に対して出力する。これにより、単位時間ｄが経過するごとに、シミュレーション装置１が算出したその時点での位置に各オブジェクトが配置された仮想空間の画像が、表示部１５の画面に表示される。
【００３２】
ここで、処理Ｓ２によるオブジェクトの衝突判定処理、処理Ｓ４によるオブジェクトの物理量算出処理、及び処理Ｓ５によるオブジェクトのスリープ管理処理について、以下に詳細に説明する。
【００３３】
図３は、本実施形態に係るシミュレーション装置１により実行される主な機能の一例を示す機能ブロック図である。図３に示すように、本実施形態おいてシミュレーション装置１の制御部１１は、機能的には、例えば、完全二分木作成部２１、ノード入れ替え部２２、衝突判定部２３、オブジェクトペア情報取得部３１、並び替え部３２、特定部３３、割り当て部３４、計算部３５、値付与部４１、ポインタ値上書き部４３、ルート値上書き部４３、及びポインタ値更新部４５を含んで構成されている。これらの機能は、記憶部１２に記憶されたプログラムを制御部１１が実行することにより実現されている。このプログラムは、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ可読な情報記憶媒体を介して、あるいは、インターネットなどの通信手段を介してシミュレーション装置１に供給される。
【００３４】
まず、処理Ｓ２によるオブジェクトの衝突判定処理について説明する。オブジェクトの衝突判定処理は、図３に示す、完全二分木作成部２１、ノード入れ替え部２２、及び衝突判定部２３、によって実現される。
【００３５】
完全二分木作成部２１は、仮想空間内に配置されている複数のオブジェクトそれぞれの仮想空間内の位置を示す位置情報をリーフに関連付け、子ノードの位置情報を反映した位置情報を内部ノードに関連付けた完全二分木を作成する。
【００３６】
オブジェクトの仮想空間内の位置を示す位置情報は、オブジェクトに関連付けられている属性情報（例えば、外形を規定する情報）と、仮想空間の座標情報と、に基づいて仮想空間内の各オブジェクトの位置関係を示せるものであってよい。例えば、位置情報として、オブジェクトを内包する、いわゆる境界ボリューム（Boundary Volume）を用いる。この境界ボリュームは、仮想空間内においてオブジェクトを内接する領域の位置と大きさを単純化して示したものである。境界ボリュームはオブジェクトの形状を単純化したものであるため、オブジェクトの詳細モデルに対して衝突判定を行うより、境界ボリュームに対して衝突判定を行う方が高速に処理することができる。境界ボリュームには、例えば、球体（SPHERE）、各軸（ｘ、ｙ、ｚ軸）に並行な辺を有する直方体である軸平行境界ボックス（Axis-Aligned Bounding Box;AABB）等が用いられる。境界ボリュームが球体の場合は、球体の中心座標と半径とを位置情報とする。境界ボリュームが軸並行境界ボックスの場合は、軸並行境界ボックスの頂点のうち、各軸の座標値が最小となる最小点と、各軸の座標値が最大となる最大点と、の座標値を位置情報とする。また、境界ボリュームが軸並行境界ボックスの場合に、軸並行境界ボックスの中心座標と、中心から互いに直交する３面それぞれまでの距離と、を位置情報としてもよい。つまり、位置情報により、オブジェクトの境界ボリュームの形状と仮想空間内の位置とが示せればよい。
【００３７】
ここでは、位置情報として軸並行境界ボックスを用いた例を示す。完全二分木作成部２１は、仮想空間内に配置されている複数のオブジェクトそれぞれの軸並行境界ボックスの情報（最小点の座標値、及び最大点の座標値等）を位置情報としてリーフに関連付ける。このとき、完全二分木作成部２１は、各オブジェクトの位置情報を、各オブジェクトに関連付けられている識別子順にリーフに関連づけてもよいし、各オブジェクトの位置情報をランダムにリーフに関連づけてもよい。
【００３８】
そして、完全二分木作成部２１は、２個のリーフを子ノードとする親ノードに、その２個の子ノードに関連付けられている２個の位置情報のそれぞれが示す境界ボリュームを内接する新たな境界ボリュームの情報を、位置情報として関連付ける。具体的には、親ノードの子ノードである２個のリーフに関連付けられている２個の位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの情報を、当該親ノードの位置情報として関連付ける。完全二分木作成部２１は、この処理を２個のリーフ毎に行い、それぞれの親ノードに位置情報を関連付ける。そして、完全二分木作成部２１は、位置情報を関連付けたノード２個を子ノードとする親ノードに、その２個のノードに関連付けられている２個の位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの情報を位置情報として関連付ける。完全二分木作成部２１は、この処理を２個のノード毎に行い、それぞれの親ノードに位置情報を関連付ける。このように、完全二分木作成部２１は、２個のノード毎に親ノードに位置情報を関連付けていく処理をルートまで実行することで、すべてのノードに位置情報を関連付けた完全二分木を作成する。
【００３９】
図４に例示する完全二分木を用いて、完全二分木作成部２１が実行する処理を具体的に説明する。図４に示すように、完全二分木は、リーフを第１層として順に第２層、第３層、第４層を構成し、第４層をルートとする。そして、便宜上、第１層の各リーフは左からリーフ１１〜リーフ１８、第２層の各ノードは左からノード２１〜ノード２４、第３層の各ノードは左からノード３１、ノード３２、として各リーフ及び各ノードの階層と位置を識別することとする。ここで、例えば、仮想空間内にオブジェクトＡ〜オブジェクトＨ（Ａ〜Ｈを識別子とする）の８個のオブジェクトが配置されているとする。このとき、各オブジェクトの位置情報となる軸並行境界ボックスはＰＡ〜ＰＨと記されることとする。この場合、完全二分木作成部２１は、各オブジェクトの位置情報ＰＡ〜ＰＨを識別子順にそれぞれ、第１層のリーフ１１〜リーフ１８に関連付ける。そして、完全二分木作成部２１は、リーフ１１に関連付けられている位置情報ＰＡの示す軸並行境界ボリュームと、リーフ１２に関連付けられている位置情報ＰＢが示す軸並行境界ボリュームと、を内包する新たな軸並行境界ボリュームをＰＡＢとして、ノード２１に関連付ける。同様にして、完全二分木作成部２１は、リーフ１３に関連付けられている位置情報ＰＣの示す軸並行境界ボリュームと、リーフ１４に関連付けられている位置情報が示す軸並行境界ボリュームＰＤと、を内包する新たな軸並行境界ボリュームをＰＣＤとして、ノード２２に関連付ける。そして、完全二分木作成部２１は、ノード２１に関連付けられている位置情報ＰＡＢの示す軸並行境界ボリュームと、ノード２２に関連付けられている位置情報ＰＣＤが示す軸並行境界ボリュームと、を内包する新たな軸並行境界ボリュームをＰＡＢＣＤとして、ノード３１に関連付ける。このように、完全二分木作成部２１が、２つの子ノードに関連付けられている位置情報が示す軸並行境界ボリュームを内包する新たな軸並行境界ボリュームを親ノードに関連付けていくと、ノード２３にＰＥＦ、ノード２４にＰＧＨ、ノード３２にＰＥＦＧＨが関連付けられることとなる。なお、ルートに関連付けられる位置情報は、仮想空間内に配置されるオブジェクトＡ〜オブジェクトＨをすべて内包する軸並行境界ボリュームとなる。
【００４０】
ノード入れ替え部２２は、完全二分木作成部２１が作成した完全二分木の最下層（リーフ層）より１つ上層から、２ｎ（ｎ≧１）個のノード毎に、２ｎ個のノードに属する２・２ｎ個の子ノードそれぞれに関連付けられた位置情報に基づいて、２・２ｎ個の子ノードを入れ替える。ここでは、ノード入れ替え部２２は、完全二分木作成部２１が作成した完全二分木のリーフに関連付けられている各オブジェクトの位置情報を、仮想空間内の位置関係を反映した形に入れ替える。
【００４１】
図４に例示する完全二分木を用いて、ノード入れ替え部２２が実行する処理を具体的に説明する。例えば、ｎ＝１とすると、ノード入れ替え部２２は、完全二分木作成部２１が作成した完全二分木の第２層において、２個のノード毎（ノード２１及びノード２２、ノード２３及びノード２４）に、その子ノード（リーフ１１〜リーフ１４、リーフ１５〜リーフ１８）に関連付けられている４個の位置情報（ＰＡ〜ＰＤ、ＰＥ〜ＰＨ）に基づいて子ノードを入れ替える。ここで、ノード２１及びノード２２についての処理を説明するが、ノード２３及びノード２４についての処理も同時に実行されることとする。まず、ノード入れ替え部２２は、位置情報ＰＢ、ＰＣ、及びＰＤがそれぞれ示す軸並行境界ボックスのうち、位置情報ＰＡが示す軸並行境界ボックスとの位置関係が比較的近いものを選択する。例えば、ノード入れ替え部２２は、位置情報ＰＡ及び位置情報ＰＢ、位置情報ＰＡ及び位置情報ＰＣ、位置情報ＰＡ及び位置情報ＰＤ、それぞれについて２つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの体積（それぞれ、ＶＡＢ、ＶＡＣ、ＶＡＤとする）を求める。そして、この体積が小さいほど２つの位置情報が示す軸並行境界ボックスの位置が近いと判断される。ノード入れ替え部２２は、体積が最も小さくなる組み合わせがノード２１に属するよう位置情報ＰＡ〜ＰＤを入れ替える。例えば、体積ＶＡＣが最も小さいと判断された場合は、ノード入れ替え部２２は、位置情報ＰＡ及び位置情報ＰＣがノード２１に属し、位置情報ＰＢと位置情報ＰＤがノード２２に属するよう、位置情報ＰＢと位置情報ＰＣとを入れ替える。そして、位置情報ＰＡ及び位置情報ＰＣがそれぞれ示す軸並行境界ボックスを内包する新たな軸並行境界ボックスが位置情報ＰＡＣとしてノード２１に関連づけられ、位置情報ＰＢ及び位置情報ＰＤがそれぞれ示す軸並行境界ボックスを内包する新たな軸並行境界ボックスが位置情報ＰＢＤとしてノード２２に関連づけられる。
【００４２】
そして、第２層についてノードの入れ替えが完了すると、ノード入れ替え部２２は、第２層についてノードを入れ替えた完全二分木の第３層において、２個のノード（ノード３１及びノード３２）それぞれの子ノードについて上述した第２層における処理と同様の処理を実行する。図４に例示する完全二分木は第４層までであるが、さらに深い階層を有する完全二分木においては、このような処理が最上層（ルート）になるまで各層で実行される。なお、ノード入れ替え部２２による処理について、最下層より１つ上層から、最上層になるまで順に実行してもよいし、各層を任意の順に実行してもよい。
【００４３】
図４に例示する完全二分木を用いて、ノード入れ替え部２２が実行する別の処理方法について説明する。例えば、ｎ＝１とすると、完全二分木作成部２１が作成した完全二分木の第２層において、ノード２１及びノード２２の子ノード（リーフ１１〜リーフ１４）に関連付けられている４個の位置情報（ＰＡ〜ＰＤ、ＰＥ〜ＰＨ）に基づいて子ノードを入れ替える処理について説明する。まず、ノード２１及びノード２２に関連付けられる位置情報の組み合わせ候補としては、ＰＡＢ及びＰＣＤ、ＰＡＣ及びＰＢＤ、ＰＡＤ及びＰＢＣ、の３通りが考えられる。これら３通りの組み合わせ候補から仮想空間内の位置関係を反映した最適な組み合わせを選択することとする。そこで、ノード入れ替え部２２は、各組み合わせ候補において、ノード２１及びノード２２それぞれに関連付けられる位置情報が示す軸並行境界ボックスの体積の和を求める（それぞれ、ＶＡＢ＋ＶＣＤ、ＶＡＣ＋ＶＢＤ、ＶＡＤ＋ＶＢＣ、となる）。そして、ＶＡＢ＋ＶＣＤ、ＶＡＣ＋ＶＢＤ、ＶＡＤ＋ＶＢＣ、のうち最も値が小さくなる組み合わせが最適な組み合わせとして選択される。そして、ノード入れ替え部２２は、選択された最適な組み合わせとなるよう各ノードを入れ替える。例えば、ＶＡＣ＋ＶＢＤが最も小さい場合は、ノード入れ替え部２２は、位置情報ＰＡ及び位置情報ＰＣがノード２１に属し、位置情報ＰＢと位置情報ＰＤがノード２２に属するよう、位置情報ＰＢと位置情報ＰＣとを入れ替える。
【００４４】
以上の説明では、ノード入れ替え部２２は、入れ替え対象となる複数の子ノードのそれぞれに関連付けられた軸並行境界ボックスの中から、位置関係が相対的に近い２つの軸並行境界ボックスの組み合わせを決定するために、組み合わせ候補となる２つの軸並行境界ボックスを内包する軸並行境界ボックスの体積を実際に算出し、体積が小さい軸並行境界ボックスに内包される２つの軸並行境界ボックスに関連付けられた２つの子ノードが同じ親ノードに属するように子ノードの入れ替えを行うこととした。しかしながらノード入れ替え部２２は、このような方法に限られず、各種の方法で位置関係が相対的に近い２つの軸並行境界ボックスの組み合わせを決定してもよい。例えばノード入れ替え部２２は、組み合わせ候補となる２つの軸並行境界ボックスを内包する軸並行境界ボックスの３辺の長さの総和や、対角線の長さ等の数値を判断基準として用いて、位置関係が相対的に近い２つの軸並行境界ボックスの組み合わせを決定してもよい。その場合も、判断基準として用いる数値が小さいほど、２つの軸並行境界ボックスを内包する軸並行境界ボックス自体の大きさが小さいと判断でき、２つの軸並行境界ボックスの位置が相対的に近いと判断できる。
【００４５】
上述した、完全二分木作成部２１、ノード入れ替え部２２による処理を、簡易モデルを用いて実施した例を示す。図５に仮想空間内に配置される複数のオブジェクトの簡易モデルを示す。図５に示す簡易モデルは、格子状の二次元空間（ｘ−ｙ座標）に大きさの等しいオブジェクト（格子１つがオブジェクトを示すこととする）が配置されるものである。ここでは、二次元空間内にオブジェクトＡ〜オブジェクトＨ（Ａ〜Ｈを識別子とする）の８個のオブジェクトが配置されている。そして、位置情報となる軸並行境界ボックスも格子で表されることなり、例えばオブジェクトＡの位置情報ＰＡは、各軸の座標値が最小となる最小点の座標値（０、２）、及び各軸の座標値が最大となる最大点の座標値（１、３）で表される軸並行境界ボックスとする。この二次元空間内におけるオブジェクトＡ〜オブジェクトＨの位置関係を反映した完全二分木を作成することを目的とする。
【００４６】
まず、完全二分木作成部２１は、オブジェクトＡ〜オブジェクトＨそれぞれの位置情報ＰＡ〜ＰＨを識別子順にリーフ１１〜リーフ１８に関連付け、図６Ａに示す完全二分木を作成する。次に、ノード入れ替え部２２は、第２層のノード２１及びノード２２について、位置情報ＰＡ及び位置情報ＰＢ、位置情報ＰＡ及び位置情報ＰＣ、位置情報ＰＡ及び位置情報ＰＤ、それぞれについて２つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの体積（簡易モデルにおいては面積に相当する）を求める。ここで、最小点座標（ｘｓ、ｙｓ）、最大点座標（ｘｌ、ｙｌ）とすると、面積ＶはＶ＝（ｘｌ−ｘｓ）（ｙｌ−ｙｓ）となる。まず、位置情報ＰＡ（最小点（０、２）、最大点（１、３））及び位置情報ＰＢ（最小点（５、４）、最大点（６、５））が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスＰＡＢは、最小点（０、２）、最大点（６、５）で表される。そして、軸並行境界ボックスＰＡＢの面積はＶＡＢ＝１８となる。同様にして、位置情報ＰＡ（最小点（０、２）、最大点（０、３））及び位置情報ＰＣ（最小点（２、２）、最大点（３、３））が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスＰＡＣは、最小点（０、２）、最大点（３、３）で表され、面積ＶＡＣ＝３となる。位置情報ＰＡ（最小点（０、２）、最大点（０、３））及び位置情報ＰＤ（最小点（２、４）、最大点（３、５））が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスＰＡＤは、最小点（０、２）、最大点（３、５）で表され、面積ＶＡＤ＝９となる。以上より、新たな軸並行境界ボックスの面積はそれぞれ、ＶＡＢ＝１８、ＶＡＣ＝３、ＶＡＤ＝９となり、ＶＡＣが最も小さくなるので、位置情報ＰＡ及び位置情報ＰＣがノード２１に属するよう位置情報ＰＢと位置情報ＰＣとを入れ替える。そして、第２層のノード２３及びノード２４についても、位置情報ＰＥ及び位置情報ＰＦ、位置情報ＰＥ及び位置情報ＰＧ、位置情報ＰＥ及び位置情報ＰＨ、それぞれについて２つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの面積ＶＥＦ、ＶＥＧ、ＶＥＨを求めると、ＶＥＦ＝１５、ＶＥＧ＝４２、ＶＥＨ＝５となる。したがって、ＶＥＨが最も小さくなるので、ノード入れ替え部２２は、位置情報ＰＥ及び位置情報ＰＨがノード２３に属するよう位置情報ＰＦと位置情報ＰＨとを入れ替える。以上より、第２層についてのノード入れ替え処理が完了した後の完全二分木は図６Ｂとなる。
【００４７】
次に、ノード入れ替え部２２は、図６Ｂの完全二分木を用いて第３層についてのノード入れ替え処理を実行する。第３層におけるノード３１及びノード３２について、位置情報ＰＡＣ及び位置情報ＰＢＤ、位置情報ＰＡＣ及び位置情報ＰＥＨ、位置情報ＰＡＣ及び位置情報ＰＧＦ、それぞれについて２つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの面積を求めると、ＶＡＣＢＤ＝１８、ＶＡＣＥＨ＝１５、ＶＡＣＧＦ＝３０となる。したがって、ＶＡＣＥＨが最も小さくなるので、ノード入れ替え部２２が、位置情報ＰＡＣ及び位置情報ＰＥＨがノード３１に属するよう位置情報ＰＢＤと位置情報ＰＥＨとを入れ替え、ノード入れ替え部２２による処理を終了する。以上より、第３層についてのノード入れ替え処理が完了した後の完全二分木は図６Ｃとなる。これにより、図６Ｃに示す仮想空間内のオブジェクトの位置関係が反映された完全二分木となる。
【００４８】
さらに、タイムカウンタｔ＝ｎにおいて、完全二分木作成部２１、ノード入れ替え部２２により作成された完全二分木を用いて、タイムカウンタｔ＝ｎ＋１におけるノード入れ替え部２２による処理を実行することとしてもよい。具体的には、例えば、タイムカウンタｔ＝ｎにおいて図６Ｃに示す完全二分木が作成されたとする。そして、タイムカウンタｔ＝ｎ＋１において完全二分木作成部２１が完全二分木を作成する際に、タイムカウンタｔ＝ｎ＋１において仮想空間に配置されているオブジェクトの位置情報を、図６Ｃに示す完全二分木のリーフと同じ順に関連付ける。つまり、完全二分木作成部２１は、リーフの左から、位置情報ＰＡ、ＰＣ、ＰＥ、ＰＨ、ＰＢ、ＰＤ、ＰＧ、ＰＦをそれぞれ関連付ける。なお、タイムカウンタｔ＝ｎ＋１における完全二分木は、図６Ｃのｔ＝ｎにおける完全二分木とは位置情報の順が同じであり、位置情報の内容についてはタイムカウンタｔ＝ｎ＋１における仮想空間内の位置情報が反映されている。これは、タイムカウンタｔ＝ｎとタイムカウンタｔ＝ｎ＋１とにおいて各オブジェクトの位置が劇的に変化することが少ないことから、タイムカウンタｔ＝ｎ＋１においてタイムカウンタｔ＝ｎにおける各オブジェクトとリーフとの対応関係を引き継ぐことで、タイムカウンタを加算するにつれ徐々に完全二分木を最適な形にするものである。
【００４９】
なお、完全二分木において、すべてのノードは必ず２つの子ノードを有するので、いずれの２ｎ個のノードを選択してもその子ノードの数は等しくなる。よって、ノード入れ替え部２２が行う、２ｎ個のノードの子ノードに関連付けられている位置情報に基づくノード入れ替え処理は、いずれの２ｎ個のノードを選択しても同様のアルゴリズムで実行できることとなる。したがって、ノード入れ替え部２２は、各層における２ｎ個のノードそれぞれについての、ノードの入れ替え処理を並列に実行することができる。
【００５０】
また、上述したノード入れ替え部２２によるノードの入れ替え処理により完成した完全二分木が、仮想空間内のオブジェクトの位置関係を反映した最適な完全二分木にならない場合がある。これは、ノード入れ替え部２２が、仮想空間内のオブジェクトを２つのオブジェクト毎の組み合わせに分ける場合に、２つのオブジェクトの位置関係が最小となる組み合わせを求める、という最適化処理を行う際に局所解に陥ることに起因する。そこで、ノード入れ替え部２２が実行する、局所解に陥る可能性を低減するための処理について説明する。上述した通り、ノード入れ替え部２２は、入れ替え対象となる複数の子ノードのそれぞれに関連付けられた位置情報の中から、位置関係が相対的に近い２つの位置情報の組み合わせを決定している。ここで、ノード入れ替え部２２は、組み合わせ候補のそれぞれについて、当該組み合わせ候補における２つの子ノードの位置関係を定量的に示す数値を求め、その数値を増加する方向、又は減少する方向のいずれかにランダムに変化させる（すなわち、数値に対してノイズを加える）。そして、変化させた後の数値が小さくなる組み合わせ候補を採用し、その組み合わせ候補になるようにノードの入れ替え処理を実行する。具体例として、ノード入れ替え部２２は、２つの子ノードの位置関係を定量的に示す数値として、２つの子ノードに関連づけられた２つの位置情報のそれぞれが示す領域を内包する領域の大きさ（例えば、軸並行境界ボックスの体積等）を用いる。このように各組み合わせ候補について２つの子ノードの位置関係を定量的に示す値にランダムなノイズを加えて評価することで、大域的な最適解を求めることが可能となる。以下に、ノード入れ替え部２２による局所解に陥る可能性を低減する具体的な処理について、図４を用いて説明する。
【００５１】
まず、図４に示す完全二分木の第２層において、ノード２１及びノード２２の子ノード（リーフ１１〜リーフ１４）に関連付けられている４個の位置情報（ＰＡ〜ＰＤ、ＰＥ〜ＰＨ）に基づいて子ノードを入れ替える処理について説明する。まず、ノード２１及びノード２２に関連付けられる位置情報の組み合わせの候補としては、ＰＡＢ及びＰＣＤ、ＰＡＣ及びＰＢＤ、ＰＡＤ及びＰＢＣ、の３通りがある。これら３通りの組み合わせから仮想空間内の位置関係を反映した最適な組み合わせを選択することとする。そして、ノード入れ替え部２２は、各組み合わせの候補から、ノード２１及びノード２２それぞれに関連付けられる位置情報が示す軸並行境界ボックスの体積の和が最小になる組み合わせを選択する。ここで、ノード入れ替え部２２は、ノード２１及びノード２２それぞれに関連付けられる位置情報が示す軸並行境界ボックスの体積の和を求める際に、各ノードに関連付けられる位置情報が示す軸並行境界ボックスの体積（ＶＡＢ、ＶＣＤ、ＶＡＣ、ＶＢＤ、ＶＡＤ、ＶＢＣ）にノイズを加える。つまり、各組み合わせの候補において、ノード２１及びノード２２それぞれに関連付けられる位置情報が示す軸並行境界ボックスの体積の和は、（１＋α１）ＶＡＢ＋（１＋α２）ＶＣＤ、（１＋α３）ＶＡＣ＋（１＋α４）ＶＢＤ、（１＋α５）ＶＡＤ＋（１＋α６）ＶＢＣ、と求められる。ここで、αｍ（ｍ＝１〜６）は０＜αｍ＜１の範囲でランダムに与えられることとする。また、αｍは、予め３種類の値が定められており、各組み合わせの候補にランダムに割り当てられることとしてもよい。そして、ノード入れ替え部２２は、各組み合わせの候補から、これらのノイズを加えた２つの位置情報が示す軸並行境界ボックスの体積の和が最小となる組み合わせを選択し、ノードを入れ替える。ノード入れ替え部２２が、２ノード毎にその子ノードを入れ替える際にこのような処理を実行することで、局所解に陥る可能性を低減し、最終的に仮想空間内のオブジェクトの位置関係を反映した最適な完全二分木が完成される。
【００５２】
なお、上述の説明では、ノード入れ替え部２２は、各組み合わせ候補における２つの子ノードの位置関係を定量的に示す値として、２つの位置情報が示す２つの領域を内接する領域の大きさ、より具体的には２つの位置情報が示す軸並行境界ボックスを内包する軸並行境界ボックスの体積を用いているが、この例に限定されない。例えばノード入れ替え部２２は、組み合わせ候補となる２つの位置情報が示す軸並行境界ボックスの３辺の長さの総和や、対角線の長さ等の数値を２つの位置情報の位置関係を定量的に示す値として用いてもよい。その場合も、ノード入れ替え部２２は、２つの子ノードの位置関係を定量的に示す値として用いる数値をランダムに変化させ、当該変化させた数値に基づいてノードの入れ替え処理を実行する。
【００５３】
衝突判定部２３は、ノード入れ替え部２２により入れ替えが完了した完全二分木を用いてオブジェクト同士の衝突判定を行うシミュレーション処理を実行する。衝突判定は、完全二分木の各ノードの子ノード同士について、それぞれ関連付けられている位置情報に基づいて行われる。衝突判定方法として、例えば、球体の境界ボリュームを用いた位置情報に基づく場合は、中心座標の距離が２つの半径の和より小さくなる場合に、球体の境界ボリューム同士が衝突していると判定する方法がある。また、軸並行境界ボックスを用いた位置情報に基づく場合は、最小点の座標値と、最大点の座標値とに基づいて各軸上で重なりがあるかを判定し、３つの軸上すべてで重なりが有ると判定された場合に、軸並行ボックス同士が衝突していると判定される。また、軸並行境界ボックスにおいて中心座標と、中心から互いに直交する３面それぞれまでの距離と、を位置情報としている場合は、各軸において中心座標の距離が２つの半径（中心から面までの距離）の和より小さくなるかが判定され、３つの軸すべてで小さいと判定された場合に、軸並行境界ボックス同士が衝突していると判定されてもよい。
【００５４】
本実施形態における衝突判定部２３による衝突判定は、ノード入れ替え部２２によりノードが入れ替えられた完全二分木を用いて実行される。衝突判定部２３は、完全二分木のルートからリーフまで順に各層において２つのノード同士について、それぞれに関連付けられている位置情報に基づいて衝突判定を行う。そして、２つのノード同士について、それぞれに関連付けられている位置情報が示す軸並行境界ボックス同士が衝突していると判定された場合は、衝突判定部２３は、２つのノードの４つの子ノードについて全ての組み合わせにおける衝突判定を行う。そして、２つのノード同士について衝突していないと判定された場合は、衝突判定部２３は、２つのノードそれぞれの子ノード同士について衝突判定を行う。これは、２つのノード同士について衝突していると判定された場合は、その子ノード同士についても衝突していると判定される可能性があり、２つのノード同士について衝突していないと判定された場合は、その子ノード同士は衝突していないと判断できるという考えのもとに実行する処理である。ノードに関連付けられる位置情報は、そのノードに属するすべての下位ノードの位置情報を含むものなので、上位ノードに関連付けられる位置情報において衝突していないと判定されれば、下位ノードに関連づけられる位置情報においても衝突していないといえる。これによって、衝突判定部２３は、衝突しないオブジェクト同士の衝突判定をスキップすることが可能となる。
【００５５】
ここで、衝突判定部２３により実行される具体的な処理について図５に示す簡易モデルを用いて説明する。衝突判定部２３は、ノード入れ替え部２２により入れ替えが完了した、図６Ｃに示す完全二分木の第３層から第１層まで順に各層において衝突判定を行う。まず、衝突判定部２３は、第３層のノード同士（ノード３１及びノード３２）について、ノード３１に関連付けられている位置情報ＰＡＣＥＨと、ノード３２に関連付けられている位置情報ＰＢＤＧＦと、に基づいて上述した衝突判定方法を用いてオブジェクト同士の衝突判定を行う。ここでは、位置情報ＰＡＣＥＨが示す軸並行境界ボックス（最小点（０、０）、最大点（３、５））と位置情報ＰＢＤＧＦＨが示す軸並行境界ボックス（最小点（２、２）、最大点（６、７））とで各軸において重なりが生じるかを判定すると、最小点（２、２）、最大点（３、５）の範囲で重なりが生じており、位置情報ＰＡＣＥＨが示す軸並行境界ボックスと位置情報ＰＢＤＧＦＨが示す軸並行境界ボックスとは衝突していると判定される。そして、ノード３１及びノード３２について衝突していると判定されたので、衝突判定部２３は、第２層における衝突判定の際に、その子ノードの全ての組み合わせについても衝突判定を行う。つまり、衝突判定部２３は、ノード２１及びノード２２、ノード２１及びノード２３、ノード２１及びノード２４、ノード２２及びノード２３、ノード２２及びノード２４、ノード２３及びノード２４についてそれぞれ衝突判定を行う。上述した衝突判定方法を用いて判定すると、ノード２１及びノード２２、ノード２３及びノード２４について衝突していると判定される。そして、衝突判定部２３は、第１層における衝突判定の際に、その子ノードの全ての組み合わせについても衝突判定を行い、第１層における衝突判定の結果、互いに衝突する２つのオブジェクトが特定される。
【００５６】
以上のように、衝突判定部２３による各層における衝突判定処理は、２つのノードにそれぞれ関連づけられた位置情報に基づいて衝突の判定を行っているので、いずれのノードを選択してもノードに関連付けられた位置情報に基づいて衝突の判定を行うという、同じアルゴリズムの処理となる。よって、各層において衝突の判定を行う２つのノードの組み合わせそれぞれを並列に処理することができる。
【００５７】
次に、処理Ｓ４によるオブジェクトの物理量算出処理について説明する。オブジェクトの物理量算出処理は、図３に示す、オブジェクトペア情報取得部３１、並び替え部３２、特定部３３、割り当て部３４、計算部３５、によって実現される。
【００５８】
ここでは、互いに接触している２つのオブジェクトの拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与えるべき物理量を算出する。しかし、互いに接触しているオブジェクトペアとして、例えば、オブジェクトペア１（オブジェクトＡ、オブジェクトＢ）と、オブジェクトペア２（オブジェクトＡ、オブジェクトＣ）とが、同時に存在する場合がある。この場合、両オブジェクトペアは共通してオブジェクトＡを含んでいるため、それぞれのオブジェクトペアについての計算は相互に依存するものとなり並列に処理することが難しい。そこで、互いに接触している複数のオブジェクトペアを、異なるタイミングで処理が実行される複数のステージにグループ分けする。なお、各ステージは並列処理可能な複数のスレッドを有し、オブジェクトペアが各スレッドに割り当てられることでオブジェクトペアそれぞれを並列に処理することが可能とする。そして、それぞれのステージが処理されるタイミングにおいて、そのステージに割り当てられたオブジェクトペアについての計算を並列に実行する。以下に、詳細を説明する。
【００５９】
オブジェクトペア情報取得部３１は、互いに接触している２つのオブジェクトを構成要素とするオブジェクトペアの情報を順に取得する。オブジェクトペア情報取得部３１は、衝突判定部２３が衝突すると判定した２つのオブジェクトを互いに接触している２つのオブジェクトとして取得する。また、以下では、オブジェクトペア情報取得部３１が情報を取得する互いに接触している２つのオブジェクトからなるオブジェクトペアを取得オブジェクトペアと表記する。また、オブジェクトペアの情報は各オブジェクトの識別子、属性情報であってよい。
【００６０】
割り当て部３４は、オブジェクトペア情報取得部３１が取得した複数個の取得オブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ２以上の取得オブジェクトペアが同じステージに属さないように、複数のステージのいずれかに割り当てる。
【００６１】
割り当て部３４が実行する処理を、図７を用いて具体的に説明する。図７は、取得オブジェクトペアと、取得オブジェクトペアの割り当てを管理するオブジェクトチェックテーブルとの一例を示す図である。オブジェクトチェックテーブルは、記憶部１２に保持されることとする。図１０に例示するオブジェクトチェックテーブルは、ステージごとに、各オブジェクトを識別する識別子と、その識別子によって識別されるオブジェクトが計算処理を実行されることを示すフラグと、を対応づけてなるものである。すなわち、ステージｓ（ｓ≧０）においてフラグが１の場合には、その識別子によって識別されるオブジェクトはステージｓで計算処理を実行されることを示しており、フラグが０の場合には、ステージｓで計算処理は実行されないことを示している。このオブジェクトチェックテーブルでは初期状態においてすべてのフラグが０となっている。
【００６２】
まず、図７に例示するような複数の取得オブジェクトペアが存在するとする。割り当て部３４は、これらの取得オブジェクトペアを、オブジェクトチェックテーブルのステージ０から順に割り当てる。割り当て部３４は、最初の取得オブジェクトペア（オブジェクトＡ、オブジェクトＢ）を取得すると、ステージ０に対応する識別子Ａ、識別子Ｂのフラグを１に設定する。次に、取得オブジェクトペア（オブジェクトＡ、オブジェクトＣ）を取得すると、ステージ０に対応する識別子Ｃのフラグは０であるが、識別子Ａのフラグは１となっているため、取得オブジェクトペア（オブジェクトＡ、オブジェクトＣ）はスレッド０で計算することができない。そこで、次のステージ（ステージ１）に対応する識別子Ａ、識別子Ｃのフラグは０となっているため、割り当て部３４は、オブジェクトペア（オブジェクトＡ、オブジェクトＣ）をステージ１に割り当てることとする。つまり、ステージ１に対応する識別子Ａ、識別子Ｃのフラグが１に設定される。そして、割り当て部３４は、次の取得オブジェクトペア（オブジェクトＤ、オブジェクトＥ）を、ステージ０に割り当てることができるので、ステージ０に対応する識別子Ｄ、識別子Ｅのフラグが１に設定される。このようにして、取得オブジェクトペアについてフラグが設定される。このオブジェクトチェックテーブルにより、取得オブジェクトペアそれぞれの処理を実行するタイミングがわかる。
【００６３】
計算部３５は、互いに接触している２つのオブジェクトの接触による各オブジェクトの位置への影響を計算する。計算部３５は、互いに接触している２つのオブジェクトの拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与える物理量を算出する。本実施形態では、計算部３５は、取得オブジェクトペアについて、割り当て部３４が作成したオブジェクトチェックテーブルに割り当てられたステージ番号順に、取得オブジェクトペアの拘束条件を解くことで各オブジェクトに与える物理量を算出する。ここで、計算部３５は、ステージ０から順に計算処理を実行するものとするが、各ステージが並列に計算されなければ順序は問わない。
【００６４】
ここで、仮想空間内を運動する複数のオブジェクトについて、時間とともに変化するオブジェクトの位置を計算する物理シミュレーション等において、例えば、タイムカウンタｔ＝０において互いに接触しているオブジェクトペアは、タイムカウンタｔ＝１においても互いに接触している場合が多い。そこで、タイムカウンタｔ＝ｎにおける複数個の取得オブジェクトペアのうち、タイムカウンタｔ＝ｎ−１におけるいずれかの取得オブジェクトペアと２つの構成要素が共通するオブジェクトペア（以下、共通オブジェクトペアとする）を特定する。そして、計算部３５がタイムカウンタｔ＝ｎにおける計算を実行する際に、共通オブジェクトペアの情報を用いることで計算の処理量が低減される。以下に共通オブジェクトペアを特定する処理について具体的に説明する。共通オブジェクトを特定する処理は、並び替え部３２、特定部３３により実現される。
【００６５】
まず、特定部３３は、所定の基準により、取得オブジェクトペアに含まれる２つのオブジェクトのうちの一方を基準オブジェクトとして、他方を付随オブジェクトとして特定することとする。例えば、取得オブジェクトペアに含まれる２つのオブジェクトの識別子の大小に基づいて、識別子の小さいオブジェクトを基準オブジェクトとする。具体的に、オブジェクトペア（オブジェクトＡ、オブジェクトＢ）については識別子の大小はＡ＜Ｂとなるため、オブジェクトＡは基準オブジェクト、オブジェクトＢは付随オブジェクトとして特定される。また、識別子の大きいオブジェクトを基準オブジェクトとしてもよい。
【００６６】
そして、特定部３３は、ｔ＝ｎにおける複数個の取得オブジェクトペアそれぞれを判定対象ペアとして、ｔ＝ｎ−１における複数個の取得オブジェクトペアのうち、基準オブジェクトが判定対象ペアと共通するオブジェクトペアを比較対象ペアとして抽出する。そして、特定部３３は、判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定し、付随オブジェクトが共通する場合に当該判定対象ペアを共通オブジェクトペアとして特定する。なお、特定部３３は、付随オブジェクトが共通しない場合は当該判定対象ペアを、ｔ＝ｎ−１においては存在せず、ｔ＝ｎにおいて出現した新規のオブジェクトペア（以下、新規オブジェクトペアとする）として特定する。図８に判定対象ペアと比較対象ペアの一例を示す。図８における、ｔ＝ｎにおける取得オブジェクトペアのうち（Ａ、Ｂ）を判定対象ペアとすると、ｔ＝ｎ−１における取得オブジェクトペアのうち、その基準オブジェクトがＡであるオブジェクトペアが比較対象ペアとなる。つまり、（Ａ、Ｂ）及び（Ａ、Ｄ）が比較対象ペアとなる。図８に示すように、判定対象ペア（Ａ、Ｂ）と、その比較対象ペアとなる（Ａ、Ｂ）及び（Ａ、Ｄ）を線で結ぶことで、判定対象ペア、比較対象ペアとして対応することを示す。その他のオブジェクトペアについても、判定対象ペアに対して比較対象ペアとなるものを対応づけている。そして、特定部３３は、判定対象ペア（Ａ、Ｂ）と、比較対象ペア（Ａ、Ｂ）及び（Ａ、Ｄ）とでそれぞれ付随オブジェクトが共通するか否かを判定する。ここでは、判定対象ペア（Ａ、Ｂ）及び比較対象ペア（Ａ、Ｂ）の両者とも付随オブジェクトがＢであるため、判定対象ペア（Ａ、Ｂ）は共通オブジェクトペアとして特定される。また、特定部３３が、判定対象ペア（Ａ、Ｃ）と、比較対象ペア（Ａ、Ｂ）及び（Ａ、Ｄ）とでそれぞれ付随オブジェクトが共通するか否かを判定すると、いずれも判定対象ペアと比較対象ペアとで付随オブジェクトが異なるため、判定対象ペア（Ａ、Ｃ）は新規オブジェクトペアとして特定される。
【００６７】
このように、特定部３３が、取得オブジェクトペアのうち、基準オブジェクトと付随オブジェクトを特定し、基準オブジェクトが共通する判定対象ペアと比較対象ペアとの付随オブジェクトを比較することで、判定対象ペアそれぞれについて比較すべき比較対象ペアの数を絞り込める。また、特定部３３が行う判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定する処理は、いずれの判定対象ペアを選んでも基準オブジェクトが共通する比較対象ペアを抽出して付随オブジェクトを比較するという同様のアルゴリズムで実行することができることになる。よって、特定部３３は、判定対象ペアそれぞれの、比較対象ペアとで付随オブジェクトが共通するか否かを判定する処理を並列に実行することができる。
【００６８】
ここで、並び替え部３２が、ｔ＝ｎ−１における複数個の取得オブジェクトペアを、公知のバケットソート処理を用いて、基準オブジェクトの識別子順に並び替えることとしてもよい。例えば、並び替え部３２が、図８に示すｔ＝ｎ−１における取得オブジェクトペアを並び替えると、基準オブジェクトは、Ａ、Ａ、Ｂ、Ｄ、Ｆの順となる。ここで、識別子毎にその出現個数を算出すると、Ａ：２個、Ｂ：１個、Ｃ：０個、Ｄ：１個、Ｅ：０個、Ｆ：１個となる。これにより、並び替えられた取得オブジェクトペアのうち、基準オブジェクトの識別子がＡのオブジェクトペアは１番目から２番目（Ａの個数から）、基準オブジェクトの識別子がＢのオブジェクトペアは３番目（ＡとＢの個数の和及びＢの個数から）、基準オブジェクトの識別子がＦのオブジェクトペアは５番目（Ａ〜Ｆの個数の和及びＦの個数から）、と特定することが可能となる。このようにして、特定の識別子を有するオブジェクトペアは、その識別子までの各識別子の個数の和と、その識別子の個数と、によって特定される。よって、ｔ＝ｎ−１における取得オブジェクトペアを基準オブジェクトの識別子順に並び替えることによって、特定部３３は、判定対象ペアに対する比較対象ペアを容易に抽出することができる。なお、並び替え部３２は、ｔ＝ｎにおける複数個の取得オブジェクトペアを、公知のバケットソート処理を用いて、基準オブジェクトの識別子順に並び替えてもよい。
【００６９】
また、特定部３３は、ｔ＝ｎ−１における複数個の取得オブジェクトペアそれぞれを判定対象ペアとして、ｔ＝ｎにおける複数個の取得オブジェクトペアのうち、基準オブジェクトが判定対象ペアと共通するオブジェクトペアを比較対象ペアとして抽出してもよい。そして、特定部３３は、判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定し、付随オブジェクトが共通する場合に、共通オブジェクトペアとして特定する。なお、特定部３３は、付随オブジェクトが共通しない場合は、ｔ＝ｎ−１においては存在しており、ｔ＝ｎにおいては存在しない、削除オブジェクトペアとして特定する。具体的には、特定部３３は、図８における、ｔ＝ｎ−１における判定対象ペア（Ａ、Ｂ）と、ｔ＝ｎにおける比較対象ペア（Ａ、Ｂ）及び（Ａ、Ｃ）とでそれぞれ付随オブジェクトが共通するか否かを判定する。ここでは、判定対象ペア（Ａ、Ｂ）及び比較対象ペア（Ａ、Ｂ）の両者とも付随オブジェクトがＢであるため、判定対象ペア（Ａ、Ｂ）は共通オブジェクトペアとして特定される。また、特定部３３が、判定対象ペア（Ａ、Ｄ）と、比較対象ペア（Ａ、Ｂ）及び（Ａ、Ｃ）とでそれぞれ付随オブジェクトが共通するか否かを判定すると、いずれも判定対象ペアと比較対象ペアとで付随オブジェクトが異なるため、判定対象ペア（Ａ、Ｄ）は削除オブジェクトとして特定される。
【００７０】
このように、並び替え部３２が、判定対象ペア及び比較対象ペアを識別子順に並び替えることで、判定対象ペアと基準オブジェクトが共通する比較対象ペアの抽出処理を容易にすることができ、特定部３３が共通オブジェクトペアを特定する処理を高速化できる。
【００７１】
ここで、共通オブジェクトペア特定処理により特定された共通オブジェクトペアを用いた、オブジェクトの物理量算出処理について、図９のフロー図を参照しながら説明する。
【００７２】
オブジェクトペア情報取得部３１がタイムカウンタｔ＝ｎにおいて互いに接触しているオブジェクトペアの情報を取得する（Ｓ１０１）。
【００７３】
特定部３３が、処理Ｓ１０１にてオブジェクトペア情報取得部３１が取得したｔ＝ｎにおける取得オブジェクトペアと、タイムカウンタｔ＝ｎ−１においてオブジェクトペア情報取得部３１が取得したオブジェクトペアとを比較することにより、共通オブジェクトペアと、新規オブジェクトペアと、を特定する（Ｓ１０２）。
【００７４】
割り当て部３４は、記憶部１２に記憶されているタイムカウンタｔ＝ｎ−１におけるオブジェクトチェックテーブルを参照し、処理Ｓ１０２にて特定部３３が特定した共通オブジェクトペアが割り当てられているステージ番号を取得する（Ｓ１０３）。
【００７５】
割り当て部３４は、タイムカウンタｔ＝ｎにおけるオブジェクトチェックテーブルに、共通オブジェクトペアを割り当てる（Ｓ１０４）。このとき、割り当て部３４は、処理Ｓ１０３にて取得した、タイムカウンタｔ＝ｎ−１におけるステージ番号に割り当てる。つまり、共通オブジェクトペアについては、タイムカウンタｔ＝ｎ−１におけるオブジェクトチェックテーブルと同じフラグ設定を行う。
【００７６】
割り当て部３４は、処理Ｓ１０４にて共通オブジェクトペアを割り当てたオブジェクトチェックテーブルに新規オブジェクトペアを割り当てる（Ｓ１０５）。そして、作成されたオブジェクトチェックテーブルはタイムカウンタｔ＝ｎと関連付けて記憶部１２に保持される。
【００７７】
計算部３５は、処理Ｓ１０２にて特定した共通オブジェクトペアと、新規オブジェクトペアと、を合成して処理オブジェクトペアとする。そして、計算部３５は、処理オブジェクトペアについて、処理Ｓ１０５にて作成されたオブジェクトチェックテーブルで割り当てられたステージ番号順に、オブジェクトペアの拘束条件を解くことで各オブジェクトに与えるべき物理量を算出する（Ｓ１０６）。
【００７８】
物理シミュレーション等において、所定の時間間隔ｄの間でオブジェクトの位置が大きく変化することは少ないので、ｔ＝ｎ−１における取得オブジェクトペアとｔ＝ｎにおける取得オブジェクトペアとを比較すると、新規オブジェクトペアの数より共通オブジェクトペアの数の方が多くなる。このような処理量の多くなる共通オブジェクトペアの割り当てを簡易化することで、割り当て部３４の割り当て処理を高速化できる。
【００７９】
次に、処理Ｓ５によるオブジェクトのスリープ管理処理について説明する。オブジェクトのスリープ管理処理は、図３に示す、オブジェクトペア情報取得部３１、値付与部４１、ポインタ上書き部４２、ルート値上書き部４３、オブジェクト連結部４４、及びポインタ値更新部４５によって実現される。
【００８０】
スリープ管理を行う場合には、互いに接触している複数のオブジェクトを１つのグループとして管理し、同じグループに属する複数のオブジェクトを同時にスリープさせたり、同時にスリープから解除させたりする必要がある。そうでないと、例えば一部のオブジェクトのスリープが解除されたが接触する他のオブジェクトはスリープしたままだった場合などにおいて、オブジェクトがポッピングやジッタリングなどの不自然な挙動を示し、挙動の連続性を維持できなくなることがあるからである。具体的に、シミュレーション装置１は、互いに接触している複数のオブジェクトが連結して構成される連結オブジェクトに含まれるすべてのオブジェクトに等しい管理ＩＤを付与することで、互いに接触している複数のオブジェクトを１つのグループとして管理することとする。
【００８１】
まず、オブジェクト連結部４４が、連結オブジェクトを作成する処理について説明する。連結オブジェクトを作成する処理は、主に、オブジェクトペア情報取得部３１、値付与部４１、ルート値上書き部４２、ポインタ値上書き部４３によって実現される。
【００８２】
オブジェクト連結部４４は、前述したオブジェクトペア情報取得部３１が取得する取得オブジェクトペアを連結することとする。オブジェクト連結部４４は、互いに接触している３個以上のオブジェクトの何れかを終端オブジェクトとして、各オブジェクトに接触先オブジェクトを示すポインタ値を付与して各オブジェクトを連結する。そして、オブジェクト連結部４４が連結した３個以上のオブジェクトが連結オブジェクトとなる。また、ポインタ値は接触先オブジェクトの識別子とし、終端オブジェクトのポインタ値は必ず自身の識別子となる。つまり、終端オブジェクトのポインタ値が他のオブジェクトを示すことはなく、これにより連結オブジェクトは、各オブジェクトが終端オブジェクトに向かうよう一方向に連結されるものとなる。
【００８３】
ここで、連結オブジェクトを作成する処理について、オブジェクトの連結手順の一例を示した図１０を用いて説明する。例えば、仮想空間内にオブジェクトＡ、オブジェクトＢ、及びオブジェクトＣの３個のオブジェクトが存在するとする。これらのオブジェクトは、タイムカウンタｔ＝ｎにおいて取得オブジェクトペア（Ａ、Ｃ）及び（Ｂ、Ｃ）としてオブジェクトペア情報取得部３４によって取得される。このような、タイムカウンタｔ＝ｎにおいて互いに接触している３個のオブジェクトを連結することとする。
【００８４】
連結オブジェクトを作成するための前提として、ここでは、識別子の小さいオブジェクトを終端オブジェクトとするよう各オブジェクトを連結することとする。そのために、まず、値付与部４１が各オブジェクトにルート値とポインタ値とを付与する。ルート値は、識別子の小さいオブジェクトを終端オブジェクトとするようポインタ値の示す方向を決定するための値である。そして、ポインタ値は、基本的にはルート値の大きいオブジェクトからルート値の小さいオブジェクトを示すよう設定されることとする。なお、識別子の大きいオブジェクトを終端オブジェクトとしてもよい。その場合は、ポインタ値は基本的にはルート値の小さいオブジェクトからルート値の大きいオブジェクトを示すよう設定される。
【００８５】
図１０に示すように、初期状態（ステップ０）は、いずれのオブジェクトも連結していない状態とし、ここで、値付与部４１が各オブジェクトにルート値及びポインタ値の初期値を付与することとする。各オブジェクトに付与するルート値及びポインタ値の初期値は各オブジェクトの識別子とする。
【００８６】
ステップ１にて、取得オブジェクトペア（Ｂ、Ｃ）が取得されると、ルート値上書き部４３が、取得オブジェクトペアに含まれるオブジェクトのうちそのルート値が大きいオブジェクト（以下、ルート大オブジェクトとする）に付与されているルート値を、ルート値が小さいオブジェクト（以下、ルート小オブジェクト）に付与されているルート値に更新する。そして、ポインタ値上書き部４２が、ルート大オブジェクトに付与されているポインタ値を、ルート小オブジェクトの識別子に更新する。つまり、オブジェクトＣに付与されるルート値及びポインタ値がＢとなり、オブジェクトＣからオブジェクトＢへのポインタが示される。
【００８７】
ステップ２にて、取得オブジェクトペア（Ａ、Ｃ）が取得されると、ルート値上書き部４３が、ルート大オブジェクト（オブジェクトＣ）に付与されているルート値をルート小オブジェクト（オブジェクトＡ）に付与されているルート値に更新する。そして、ポインタ値上書き部４２が、ステップ１と同様に、ルート大オブジェクトに付与されているポインタ値をルート小オブジェクトの識別子に更新する。つまり、オブジェクトＣに付与されるルート値及びポインタ値はＡとなる。
【００８８】
ステップ３にて、タイムカウンタｔ＝ｎ＋１となると、各オブジェクトに付与されているポインタ値が初期化される。タイムカウンタｔ＝ｎ＋１となると、オブジェクトペア情報取得部３１がタイムカウンタｔ＝ｎ＋１における取得オブジェクトペアを取得するため、タイムカウンタｔ＝ｎにおける各オブジェクトのポインタ値は初期化されることになる。しかし、各オブジェクトに付与されているルート値はタイムカウンタｔ＝ｎの処理が終了した時点の値とする。
【００８９】
ステップ４にて、取得オブジェクトペア（Ｂ、Ｃ）が取得されると、ルート値上書き部４３が、ルート大オブジェクト（オブジェクトＢ）に付与されるルート値を、ルート小オブジェクト（オブジェクトＣ）に付与されているルート値に更新する。そして、ポインタ値上書き部４２は、ルート大オブジェクトに付与されているポインタ値を、ルート小オブジェクトの識別子に更新する。つまり、オブジェクトＢのルート値がＡ、ポインタ値がＣとなり、オブジェクトＢからオブジェクトＣへのポインタが示される。
【００９０】
ステップ５にて、取得オブジェクトペア（Ａ、Ｃ）が取得されると、オブジェクトＡ及びオブジェクトＣのルート値が比較される。ここで、オブジェクトＡに付与されるルート値とオブジェクトＣに付与されるルート値とは等しくなる。このような場合は、オブジェクトの識別子の比較により、ポインタ値上書き部４２が、識別子の大きいオブジェクト（オブジェクトＣ）に付与されているポインタ値を、識別子の小さいオブジェクト（オブジェクトＡ）の識別子に更新する。つまり、オブジェクトＣに付与されるポインタ値がＡとなり、オブジェクトＣからオブジェクトＡへのポインタが示される。そして、ステップ５が終了した時点で、オブジェクトＡを終端としてオブジェクトＣ、オブジェクトＢが連結されたこととなる。
【００９１】
このように、オブジェクト連結部４４によるタイムカウンタｔ＝ｎにおける処理を終了した時点でのルート値を、タイムカウンタｔ＝ｎ＋１における処理の開始時のルート値に設定することで、一度の処理で連結オブジェクトを作成できない場合でも、タイムカウンタを加算するにつれ識別子の小さいオブジェクトを終端オブジェクトとして各オブジェクトを連結していくことができる。
【００９２】
なお、上述の例では、タイムカウンタｔ＝ｎにおいて、取得オブジェクトペア（Ｂ、Ｃ）及び（Ａ、Ｃ）を１回ずつ処理することとした。この各ステップの処理は、並列に実行されてよい。さらにオブジェクト連結部４４は、以上説明した取得オブジェクトペア（Ｂ、Ｃ）及び（Ａ、Ｃ）についての処理を、タイムカウンタｔ＝ｎにおいて繰り返し実行することとしてもよい。その場合は、ステップ２の後、取得オブジェクトペア（Ｂ、Ｃ）が取得されると、オブジェクトＢのルート値がＡ、ポインタ値がＣとなり、ステップ５が終了した時点と同じ状態となる。いずれの場合でも、ルート値上書き部４３がルート値を更新する毎に更新されたルート値を保持することで最終的には、識別子の最も小さいオブジェクトを終端とする連結オブジェクトを作成することができる。
【００９３】
図１１Ａは、オブジェクト連結部４４により連結された連結オブジェクトの一例を模式的に示す図である。図１１Ａに示すように、連結オブジェクトは、オブジェクトＡ〜オブジェクトＥにより構成され、オブジェクトＡが終端オブジェクトとなる。そして、矢印は各オブジェクトに付与されるポインタ値の示す接触先オブジェクトを指している。つまり、図１１ＡのオブジェクトＡのポインタ値はＡ、オブジェクトＢのポインタ値はＡ、オブジェクトＣのポインタ値はＢ、オブジェクトＤのポインタ値はＣ、オブジェクトＥのポインタ値はＤ、である。
【００９４】
ここで、図１１Ａに示すような連結オブジェクトを構成するすべてのオブジェクトに同じ管理ＩＤが付与されることで、これらのオブジェクトがグループ管理される。そこで、すべてのオブジェクトに同じ管理ＩＤが付与されるために、終端オブジェクトを連結オブジェクトの代表として、各オブジェクトがすべて終端オブジェクトを指すようにする。つまり、連結オブジェクトを構成する各オブジェクトのポインタ値がすべて終端オブジェクトの識別子となるようにする。そうすることで、すべてのオブジェクトに終端オブジェクトの識別子が付与され、当該終端オブジェクトの識別子を管理ＩＤとしてグループ管理を行うことができる。
【００９５】
そこで、ポインタ値更新部４５が、各オブジェクトに付与されたポインタ値を、各オブジェクトのポインタ値が示す接触先オブジェクトのポインタ値に更新する。具体的に、図１１Ａに示す連結オブジェクトについて、ポインタ値更新部４５が各オブジェクトのポインタ値を１回更新すると、オブジェクトＣのポインタ値は、オブジェクトＢのポインタ値に更新されるので、Ａとなる。また、オブジェクトＤのポインタ値は、オブジェクトＣのポインタ値であるＢとなり、オブジェクトＥのポインタ値は、オブジェクトＤのポインタ値であるＣとなる。図１１Ｂに、図１１Ａに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した図を示す。図１１Ｂに示すように、１回の更新ではすべてのオブジェクトのポインタ値が終端オブジェクトを示すようにはならない。そこで、図１１Ｂに示す連結オブジェクトについて、ポインタ値更新部４５が各オブジェクトのポインタ値を再度更新する。図１１Ｃに、図１１Ｂに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した図を示す。図１１Ｃに示すように、オブジェクトＤのポインタ値は、オブジェクトＢのポインタ値であるＡとなり、オブジェクトＥのポインタ値はオブジェクトＣのポインタ値であるＡとなる。図１２は、図１１Ａに示す連結オブジェクトについて、ポインタ値更新部４５が各オブジェクトのポインタ値の更新を行った場合の各オブジェクトのポインタ値の推移を示す図である。図１２にも示されるように、２回目の更新で、すべてのオブジェクトのポインタ値が終端オブジェクト（オブジェクトＡ）を示すものとなる。
【００９６】
ここでは、オブジェクトが５個の場合を例示しているが、オブジェクトの数が増加しても同様の処理によりすべてのオブジェクトのポインタ値が終端オブジェクトを示すようにすることができる。そして、ポインタ値更新部４５による更新処理は、オブジェクトの数がＲであればlog2Ｒ回の処理ですべてのオブジェクトのポインタ値を更新することが可能となり、各オブジェクトから１つずつ終端オブジェクトまで辿るより処理が高速になる。
【００９７】
また、ポインタ値更新部４５による更新処理では、いずれのオブジェクトも、ポインタ値をポインタ値が示すオブジェクトのポインタ値に更新するという同様のアルゴリズムにより処理される。よって、ポインタ値更新部４５は、連結オブジェクトを構成するオブジェクトそれぞれについて、ポインタ値を更新する処理を並列に実行できる。
【図１】
0005967786.tif 000002
【図２】
0005967786.tif 000003
【図３】
0005967786.tif 000004
【図４】
0005967786.tif 000005
【図５】
0005967786.tif 000006
【図６Ａ】
0005967786.tif 000007
【図６Ｂ】
0005967786.tif 000008
【図６Ｃ】
0005967786.tif 000009
【図７】
0005967786.tif 000010
【図８】
0005967786.tif 000011
【図９】
0005967786.tif 000012
【図１０】
0005967786.tif 000013
【図１１Ａ】
0005967786.tif 000014
【図１１Ｂ】
0005967786.tif 000015
【図１１Ｃ】
0005967786.tif 000016
【図１２】
0005967786.tif 000017