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