物体衝突処理方法および物体衝突処理プログラム、物体衝突処理装置
【課題】仮想物体の衝突処理の複数のプロセッサによる並列処理を効率化する。
【解決手段】並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、部分空間の組合せごとに並列化の許否を管理する。具体的には、いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止する。
【解決手段】並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、部分空間の組合せごとに並列化の許否を管理する。具体的には、いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想物体間の衝突を処理する技術に関する。
【背景技術】
【0002】
例えばゲーム装置において、3D仮想物体の運動や挙動は、物理エンジンによって管理される。物理エンジンにおいては、仮想物体の衝突が起こったときに反発力を与える処理が欠かせない。反発力を与える処理は、仮想物体の速度の更新を伴う。一方、物理エンジンにおける処理は、高速化のため、複数のプロセッサによって並列化されることがある。いま、仮想物体Aと仮想物体Bが衝突していて、かつ、仮想物体Bと仮想物体Cが衝突している場面を考える。この場面において、あるプロセッサが仮想物体Aと仮想物体Bの衝突処理に伴って仮想物体Bの速度を更新し、これと同時に、他のプロセッサが仮想物体Bと仮想物体Cの衝突処理の伴って仮想物体Bの速度を更新したとする。そうすると、あるプロセッサによる仮想物体Bの速度の更新と、他のプロセッサによる仮想物体Bの速度の更新とが競合し、仮想物体Bの速度に不整合なデータが書き込まれる可能性がある。通常このような競合を回避するために、例えばセマフォ等を利用した排他制御が行われる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
競合回避の観点において排他制御は一定の成果を上げているといえる。しかし、物理エンジンの管理する仮想物体の数が多いとき、個々の仮想物体について排他制御のための処理を実行するには相当な計算量が必要となり、並列処理による高速化の効果が十分に発揮されない事態も起こりうる。このような事態は、特に物理エンジンによる衝突処理のようなリアルタイム処理において大きな問題となる。
【0004】
本発明はこうした状況を認識してなされたものであり、その目的は、仮想物体の衝突処理の複数のプロセッサによる並列処理を効率化することにある。
【課題を解決するための手段】
【0005】
本発明のある態様の物体衝突処理方法は、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割するステップと、いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行するステップとを備える。
【0006】
この態様によると、部分空間を単位として並列化の禁止が定められるため、個々の仮想物体については排他制御のための処理をする必要がない。このため、排他制御のための処理の計算量が減じられる。
【0007】
本発明の別の態様の物体衝突処理方法は、複数の仮想物体を所定の規則で複数のグループへ分割するステップと、衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行するステップとを備える。
【0008】
この態様によると、衝突している仮想物体ペアの一方もしくは他方の所属グループによって並列化の禁止が定められるため、個々の仮想物体については排他制御のための処理をする必要がない。このため、排他制御のための処理の計算量が減じられる。
【0009】
なお、本発明の表現を、装置あるいはシステム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、仮想物体の衝突処理の複数のプロセッサによる並列処理を効率化することができる。
【発明を実施するための最良の形態】
【0011】
以下、図面を参照しながら本発明の好適な実施の形態を詳述する。なお、各図面に示される同一または同等の構成要素、部材、処理には、同一の符号を付し、適宜重複した説明は省略する。また、実施の形態は発明を限定するものではなく例示であり、実施の形態に記述されるすべての特徴やその組み合わせは必ずしも発明の本質的なものであるとは限らない。
【0012】
(第1の実施の形態)
本実施の形態は、複数のプロセッサにより仮想物体の衝突処理を並列化して実行するものであり、その特徴の1つは、個々の仮想物体についての排他制御のための処理を不要とする工夫にある。
【0013】
図1は、第1の実施の形態に係る物体衝突処理装置100の例示的なハードウェア構成図である。ここに示される構成は、例えば、ゲーム装置などのコンピュータの物理エンジンとしての役割を担う。
物体衝突処理装置100は、第1プロセッサ111と、第2プロセッサ122と、第3プロセッサ133と、メインメモリ150と、それらを接続するバス180とを備える。メインメモリ150は、本発明の「メモリ領域」の例示であり、第1プロセッサ111ないし第3プロセッサ133に共有とされる。第1プロセッサ111ないし第3プロセッサ133は、本発明における「複数のプロセッサ」の例示であり、命令をフェッチ、デコード、実行するなど、通常のプロセッサとしての機能を有する。
【0014】
図2は、図1に示されるメインメモリ150の記憶領域のブロック図である。メインメモリ150は、空間情報バッファ152と、共有テーブル154とを有する。共有テーブル154は、並列化許否管理テーブル156と、動的管理テーブル158とを含む。
空間情報バッファ152は、ある時点における仮想空間の情報を記憶する。この情報には仮想物体の位置や速度なども含まれる。共有テーブル154は、本発明の「テーブル」の例示であり、衝突処理の並列化を管理するために設けられる。並列化許否管理テーブル156は、部分空間の組合せごとに並列化の許否を記憶するために設けられ、動的管理テーブル158は、現在なされている衝突処理と並列化が許可されている衝突処理を特定するために設けられる。これらテーブルの具体的な記憶内容については後述する。
【0015】
図3は、図1に示される第1プロセッサ111の機能ブロック図である。この図に示される各ブロックは、第1プロセッサ111が物体衝突処理プログラムをメインメモリ150にロードして実行することにより実現される。あるいは、第1プロセッサ111がローカルメモリを内部に有する場合、図3に示される各ブロックは、第1プロセッサ111が物体衝突処理プログラムを当該ローカルメモリにロードして実行することにより実現されてもよい。なお、第2プロセッサ122および第3プロセッサ133(以下「他のプロセッサ」とも表記)も第1プロセッサ111と同様の機能を実現する。
【0016】
第1プロセッサ111は、空間情報更新部202と、空間分割部206と、並列化許否管理部210と、衝突判定部214と、担当空間決定部218と、衝突処理部226とを備える。
空間情報更新部202は、他のプロセッサの空間情報更新部(図示せず)と協働して、空間情報バッファ152の記憶内容を更新する。すなわち、仮想空間における仮想物体の位置および速度を時間ステップで進める。この処理は、例えば外部のPIT(Programmable Interrupt Timer)からの信号を契機として行われる。時間ステップの幅は、特に限定されないが、想定される仮想物体の速度の最大値に応じて決められてもよい。なお、PITは第1プロセッサ111に内蔵されてもよい。
【0017】
空間分割部206は、他のプロセッサの空間分割部(図示せず)と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する。
図4は、第1の実施の形態における空間分割を例示する。この例では、8つの仮想物体が存在する仮想空間が6つの部分空間に分割される。以下、必要に応じて部分空間を「セル」と表記するとともに、6つの部分空間のそれぞれを、「セル0」ないし「セル5」と表記して区別する。なお、部分空間の数や形状、大きさは図4に限定されず、種々の変更が可能である。図3に戻り、並列化許否管理部210は、他のプロセッサの並列化許否管理部(図示せず)と協働して、部分空間の組合せごとに並列化の許否を管理する。これは、図2に示される並列化許否管理テーブル156を更新することによって行われる。以下、具体例を示す。
【0018】
図5は、図2に示される並列化許否管理テーブル156の記憶内容を例示する。この例は、複数の部分空間と複数の仮想物体との位置関係が図4に示される状態にある場合に基づく。この場合、1つの仮想物体がセル0およびセル1の境界をまたいで存在するので、セル0とセル1の組合せに対応するアドレスには「1」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「1」を書き込むことは禁止フラグを立てることに相当し、これにより、セル0における仮想物体の衝突処理の任意のプロセッサによる実行と、セル1における仮想物体の衝突処理の他のプロセッサによる実行との並列化が禁止される。上記と同様に、セル1とセル4、セル3とセル4、セル4とセル5の組合せに対応するアドレスにも「1」が書き込まれ、並列化が禁止される。このように禁止することにより、境界をまたぐ仮想物体の速度を複数のプロセッサが同時に更新することによるデータの不整合が防止される。
【0019】
一方、図4に示される状態ではいずれの仮想物体もセル0とセル3の境界をまたいで存在しないので、セル0とセル3の組合せに対応するアドレスには「0」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「0」を書き込むことは許可フラグを立てることに相当し、これにより、セル0における仮想物体の衝突処理の任意のプロセッサによる実行と、セル3における仮想物体の衝突処理の他のプロセッサによる実行との並列化が許可される。上記と同様に、境界をまたぐ仮想物体のないセルの組合せに対応するアドレスには「0」が書き込まれ、並列化が許可される。このように許可することにより、並列処理の効率化に資する。
【0020】
仮想物体の数が多いとき、個々の仮想物体について排他制御のための処理を実行すると、その計算量は相当なものとなり、並列処理の非効率化およびコスト高を招く傾向にある。一方、部分空間を単位として並列化の許否を判定できれば、このような問題は軽減される。本発明者のこうした知見が本実施の形態の基礎となっている。
【0021】
図3に戻り、衝突判定部214は、いずれかのセルにおける仮想物体の衝突の有無を判定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突判定部(図示せず)も同様にいずれかのセルにおける仮想物体の衝突の有無を判定する。こうして仮想物体の衝突の有無が部分空間を単位として並列化して判定される。全てのセルについて衝突判定が終了し、いずれかのセルにおいて衝突ありと判定されると、次に衝突処理がなされる。なお、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含む。属性とは速度や形状、色、音、重さ、粘性などの物理的な状態や性質をいうが、必ずしも物理法則に従う必要はない。衝突している仮想物体に衝突による例えば反発力を与える処理は、衝突処理に含まれる。その他、衝突による合体や消滅、形状の変化などを実現することもまた衝突処理に含まれる。なお、衝突処理は、物理法則に従うものであってもよいし、ゲームのルールのようなあらかじめ定められた定義に従うものであってもよい。
【0022】
担当空間決定部218は、衝突処理部226が複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを、図2に示される動的管理テーブル158を参照して決定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される担当空間決定部(図示せず)も同様に、自己のプロセッサの衝突処理部が複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを決定する。動的管理テーブル158は、並列化許否管理部210の情報すなわち並列化許否管理テーブル156の記憶内容と、現在の衝突処理の状況とに基づいて記憶内容が定められる。以下、具体例を示す。
【0023】
図6は、図2に示される動的管理テーブル158のある時点における記憶内容を例示する。図5と同様にこの例も、複数の部分空間と複数の仮想物体との位置関係が図4に示される状態にある場合に基づく。動的管理テーブル158は、大きく分けて以下の情報を記憶し、それらの情報は、現在の衝突処理の状況を反映するよう各プロセッサの担当空間決定部によって更新される。
・第1プロセッサ111ないし第3プロセッサ133のそれぞれによって現在衝突処理がなされているセルと、他のセルのそれぞれとの並列化の許否(「0」:許可、「1」:禁止)
・現在衝突処理がなされているセルおよび既に処理が完了したセルと、まだ処理が開始されていないセルとの区別(「0」:処理未開始、「1」:処理中もしくは処理済)
・上記データをセルごとに論理和演算した結果(「0」:処理可能、「1」:処理不可能)
【0024】
論理和演算結果が「0」となるセルは、現在衝突処理がなされているセルとの並列化が禁止されてなく、かつ、まだ処理が開始されていないセルである。一方、論理和演算結果が「1」となるセルは、現在衝突処理がなされているセルとの並列化が禁止されている、あるいは、現在処理中もしくは既に処理済のセルである。
【0025】
図6に示される記憶内容は下記の状況を反映している。
・第1プロセッサ111は仮想物体の衝突処理を実行していない。
・第2プロセッサ122はセル2における仮想物体の衝突処理を実行している。
・第3プロセッサ133はセル1における仮想物体の衝突処理を実行している。
・セル0ないしセル5における仮想物体の衝突処理はいずれも完了していない。
【0026】
図6の4行目のデータを見ると、第3プロセッサ133が現在セル1における仮想物体の衝突処理を実行中で、この衝突処理と並列化が可能なのは、セル1ないしセル3、セル5である。このデータは、図5の3行目のものをコピーすればよい。なお、現在セル1における仮想物体の衝突処理がなされているのもかかわらず図6の4行目を見る限りはセル1の並列化は禁止されていないが、5行目のデータによってセル1の並列化は禁止される。図6の5行目を見ると、セル1およびセル2が衝突処理が現在実行中あるいは既に完了している。同6行目を見ると、上記の状況で衝突処理を実行可能なセルはセル3あるいはセル5である。したがって、衝突処理を現在実行していない第1プロセッサ111にはセル3あるいはセル5における仮想物体の衝突処理を割り当てることが可能である。
【0027】
図3に戻り、担当空間決定部218は、動的管理テーブル158の例えば図6に示される記憶内容に基づいて、衝突処理部226にセル3あるいはセル5における仮想物体の衝突処理を割り当てる。例えばセル3における仮想物体の衝突処理を割り当てた場合、担当空間決定部218は、図6の2行目に図5の5行目のデータをコピーするとともに、図6の5行目のセル3のところに処理中フラグの意味で「1」を書き込む。
【0028】
衝突処理部226は、担当空間決定部218から割り当てられたセルにおける衝突処理を実行する。本実施の形態では分散メモリ型、すなわち、各プロセッサが内部にローカルメモリ(図示せず)を有している場合を想定する。このため、衝突処理部226は、割り当てられたセルに存在する仮想物体の例えば速度データを空間情報バッファ152から第1プロセッサ111内のメモリに読み出し、衝突による反発力を与える計算をし、結果を空間情報バッファ152に書き戻す。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突処理部(図示せず)も同様に、自己の担当空間決定部から割り当てられたセルにおける仮想物体の衝突処理を実行する。こうして仮想物体の衝突処理が部分空間を単位として並列化して実行される。なお、衝突処理部226は、割り当てられたセルにおける仮想物体の衝突処理が完了した際には、図6の2行目のデータをクリアして「0」にし、次の割当てを待つ。
【0029】
図7は、図3に示される第1プロセッサ111の動作のフローチャートである。以下、図3も参照しながら説明する。
まず、時間を示すパラメータtが0に初期化される(S502)。空間分割部206は、他のプロセッサの空間分割部と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する(S504)。並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、図2に示される並列化許否管理テーブル156を更新する(S506)。衝突判定部214は、いずれかの部分空間における仮想物体の衝突の有無を判定する(S508)。衝突がなければ(S512のNo)、終了判定(S514のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S518)。その後、空間分割(S504)から衝突判定(S508)までが再度実行される。なお、例えばユーザにより中断が指示された場合などは、終了判定の後、衝突処理が終了される(S514のYes)。
【0030】
衝突があった場合(S512のYes)、担当空間決定部218は、図2に示される動的管理テーブル158を参照することにより衝突処理部226がいずれの部分空間における衝突処理を担当すべきかを決定するとともに、決定に基づいて動的管理テーブル158を更新する(S522)。衝突処理部226は、担当空間決定部218により担当すべきと決定された部分空間における衝突処理を実行し、処理が終了すると、動的管理テーブル158を更新する(S526)。その後、まだ衝突処理が開始されていない部分空間(以下、「未処理空間」)があれば(S532のYes)、担当空間の決定(S522)と衝突処理(S526)が再度実行される。未処理空間がなくなると(S532のNo)、終了判定(S514のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S518)。その後、空間分割(S504)から衝突処理(S526)までの一連の処理が再度実行される。
【0031】
本実施の形態によれば、並列化許否管理部210は部分空間を単位として並列化の許否を並列化許否管理テーブル156に記憶し、担当空間決定部218はこれに従って衝突処理部226が担当すべき部分空間を決定する。これにより、衝突処理部226は個々の仮想物体について排他制御のための処理を行うことから解放され、結果として並列処理の効率化およびコスト安に資する。
【0032】
また、動的管理テーブル158は各プロセッサの担当空間決定部および衝突処理部によって更新され、各プロセッサの担当空間決定部は動的管理テーブル158を参照することによって自己のプロセッサの衝突処理部に現在衝突処理が可能な部分空間を担当させる。したがって、並列処理の集中管理のために別途プロセッサを設ける必要がない。これは物体衝突処理装置100のハードウェア構成の単純化に有利である。
【0033】
また、各プロセッサの担当空間決定部および衝突処理部は現在の衝突処理の状況を反映するよう動的管理テーブル158を更新し、各プロセッサの担当空間決定部は最新の状態に基づいて自己のプロセッサの衝突処理部にいずれかの部分空間における衝突処理を割り当てる。このような動的管理により並列化の斑を最小限に抑えられるため、並列処理の効率がよい。
【0034】
さらに、空間分割部206による空間分割によって得られた複数の部分空間を衝突判定に利用するとともに衝突処理並列化の単位としても利用するため、並列化許否のために格別計算量が増えることもない。
【0035】
(第2の実施の形態)
本実施の形態では、第1の実施の形態とは異なる工夫によって個々の仮想物体についての排他制御のための処理を不要とする。第2の実施の形態にかかる物体衝突処理装置のハードウェア構成は、図1に示されるものと同様である。
【0036】
以下、第1の実施の形態と異なる部分を中心に本実施の形態を説明する。
図8は、第2の実施の形態におけるメインメモリ150の記憶領域のブロック図である。この図において図2と異なるところは、共有テーブル154にペア振分けテーブル155が設けられた点である。ペア振分けテーブル155の記憶内容については後述する。
【0037】
図9は、第2の実施の形態における第1プロセッサ111の機能ブロック図である。この図において図3と異なるところは、グループ分割部306が設けられた点および担当空間決定部218が担当ペア決定部318に変わった点である。なお、第2プロセッサ122および第3プロセッサ133も第1プロセッサ111と同様の機能を実現する。
【0038】
本実施の形態では、複数の仮想物体のそれぞれはあらかじめ番号が付される。グループ分割部306は、その番号に基づいて複数の仮想物体を複数のグループに分割する。グループ分割部306は一例として、0〜99の番号が付された仮想物体をグループG0、100〜199の番号が付された仮想物体をグループG1、・・・、500〜599の番号が付された仮想物体をグループG5に所属させる。なお、仮想物体に付された番号は本発明の「識別情報」の例示である。識別情報は、複数の仮想物体のそれぞれを特定しうるものであればよい。
【0039】
衝突判定部214は、第1の実施の形態と同様に衝突判定をするとともに、本実施の形態では、衝突している仮想物体ペアが見つかるつど仮想物体ペアの所属グループに基づいて仮想物体ペアを振り分ける。これは、図8に示されるペア振分けテーブル155を更新することによってなされる。以下、具体例を示す。
【0040】
図10は、ある時点における仮想物体の衝突状態を例示する。以下、nの番号が付された仮想物体を「仮想物体n」と表記する。図11は、図10の状態においてペア振分けテーブル155に記憶される内容を例示する。この記憶内容は、図9の衝突判定部214が図10の状態において衝突判定し、衝突している仮想物体ペアを振り分けたものである。
【0041】
以下、仮想物体mと仮想物体nが衝突しているとき、この仮想物体ペアを「仮想物体ペアm−n」と表記する。仮想物体ペア1−46は、一方および他方がグループG0に属するので、グループG0とグループG0の組合せに分類される。仮想物体ペア46−58も同様にグループG0とグループG0の組合せに分類される。仮想物体ペア58−258は、一方がグループG0に属し他方がグループG2に属するので、グループG0とグループG2の組合せに分類される。他の仮想物体ペアも同様にいずれかのグループの組合せに分類される。以下、仮想物体ペアが分類されているグループの組合せを必要に応じて「セル」と表記し、仮想物体ペアが分類されている図11中の6つのグループの組合せのそれぞれを「セル0」ないし「セル5」と表記して区別する。図9に戻り、並列化許否管理部210は、他のプロセッサの並列化許否管理部(図示せず)と協働して、セルの組合せごとに並列化の許否を管理する。これは、図8に示される並列化許否管理テーブル156を更新することによって行われる。以下、具体例を示す。
【0042】
図12は、図8に示される並列化許否管理テーブル156の記憶内容を例示する。この例は、衝突している仮想物体ペアが図11に示されるように各セルに分類された場合に基づく。この場合、セル0とセル1は共にグループG0を含む、すなわちセル0とセル1は共通のグループを含むので、セル0とセル1の組合せに対応するアドレスには「1」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「1」を書き込むことは禁止フラグを立てることに相当し、これにより、セル0に分類された仮想物体ペアの衝突処理の任意のプロセッサによる実行と、セル1に分類された仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化が禁止される。上記と同様に、セル1とセル2、セル1とセル3、セル2とセル3、セル2とセル4、セル3とセル5、セル4とセル5の組合せに対応するアドレスにも「1」が書き込まれ、並列化が禁止される。このように禁止することにより、2つのセルに共通のグループに所属する1つの仮想物体の速度を複数のプロセッサが同時に更新することによるデータの不整合が防止される。
【0043】
一方、セル0とセル2は共通のグループを含まないので、セル0とセル2の組合せに対応するアドレスには「0」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「0」を書き込むことは許可フラグを立てることに相当し、これにより、セル0に分類された仮想物体ペアの衝突処理の任意のプロセッサによる実行と、セル2に分類された仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化が許可される。上記と同様に、共通のグループを含まないセルの組合せに対応するアドレスには「0」が書き込まれ、並列化が許可される。このように許可することにより、並列処理の効率化に資する。
【0044】
前述の第1の実施の形態では部分空間を単位として並列化の許否を判定したが、本実施の形態ではこのように仮想物体ペアの所属グループの組合せを単位として並列化の許否を判定する。この場合も、並列処理の非効率化およびコスト高の問題が軽減される。なお、仮想物体ペアの分類されていないグループの組合せも「セル」として並列化許否管理の対象としてもよい。
【0045】
図9に戻り、担当ペア決定部318は、衝突処理部226がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを、図8に示される動的管理テーブル158を参照して決定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される担当ペア決定部(図示せず)も同様に、自己のプロセッサの衝突処理部がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを決定する。動的管理テーブル158は、第1の実施の形態と同様、並列化許否管理部210の情報すなわち並列化許否管理テーブル156の記憶内容と、現在の衝突処理の状況とに基づいて記憶内容が定められる。
【0046】
衝突処理部226は、担当ペア決定部318から割り当てられたセルに分類されている仮想物体ペアの衝突処理を実行する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突処理部(図示せず)も同様に、自己の担当ペア決定部から割り当てられたセルに分類されている仮想物体の衝突処理を実行する。こうして仮想物体の衝突処理が並列化して実行される。
【0047】
図13は、図9に示される第1プロセッサ111の動作のフローチャートである。以下、図9も参照しながら説明する。
まず、時間を示すパラメータtが0に初期化される(S602)。グループ分割部306は、各仮想物体に付された番号に基づいて複数の仮想物体を複数のグループに分割する(S603)。空間分割部206は、他のプロセッサの空間分割部と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する(S604)。衝突判定部214は、いずれかの部分空間における仮想物体の衝突の有無を判定し、衝突している仮想物体ペアが見つかるつど仮想物体ペアの所属グループに基づいて仮想物体ペアを振り分ける(S608)。衝突がなければ(S612のNo)、終了判定(S614のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S618)。その後、グループ分け(S603)から衝突判定(S608)までが再度実行される。なお、例えばユーザにより中断が指示された場合などは、終了判定の後、衝突処理が終了される(S614のYes)。
【0048】
衝突があった場合(S612のYes)、並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、図8に示される並列化許否管理テーブル156を更新する(S621)。担当ペア決定部318は、図8に示される動的管理テーブル158を参照することにより衝突処理部226がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを決定するとともに、決定に基づいて動的管理テーブル158を更新する(S622)。衝突処理部226は、担当ペア決定部318により担当すべきと決定された仮想物体ペアの衝突処理を実行し、処理が終了すると、動的管理テーブル158を更新する(S626)。その後、まだ衝突処理が開始されていないセル(以下、「未処理セル」)があれば(S632のYes)、担当ペアの決定(S622)と衝突処理(S626)が再度実行される。未処理セルがなくなると(S632のNo)、終了判定(S614のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S618)。その後、グループ分け(S603)から衝突処理(S626)までの一連の処理が再度実行される。
【0049】
本実施の形態によれば、並列化許否管理部210は仮想物体ペアの所属グループの組合せを単位として並列化の許否を並列化許否管理テーブル156に記憶し、担当ペア決定部318はこれに従って衝突処理部226が担当すべき仮想物体ペアを決定する。これにより、第1の実施の形態と同様に、衝突処理部226は個々の仮想物体について排他制御のための処理を行うことから解放され、結果として並列処理の効率化およびコスト安に資する。その他、物体衝突処理装置100のハードウェア構成の単純化に有利であることおよび並列化の斑を最小限に抑えられるため並列処理の効率が良いこと等、第1の実施の形態と同様の効果を奏する。
【0050】
上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、変形例を列挙する。
【0051】
実施の形態においては第1プロセッサ111ないし第3プロセッサ133は同様の機能を実現するとしたが、これには限定されず、衝突処理部以外の機能は第1プロセッサ111だけが有していても良い。この場合、第1プロセッサ111が他のプロセッサへの衝突処理の割当てを担当する。本変形例も、個々の仮想物体について排他制御のための処理を行う必要がないという点で実施の形態と同様に並列処理の効率化およびコスト安に資する。
【0052】
また、第1プロセッサ111ないし第3プロセッサ133とは別に、これらプロセッサを制御する制御プロセッサを別に設けてもよく、並列化許否管理テーブル156や動的管理テーブル158の更新、あるいは各プロセッサへの衝突処理の割当てを制御プロセッサにより行ってもよい。本変形例も、個々の仮想物体について排他制御のための処理を行う必要がないという点で実施の形態と同様に並列処理の効率化およびコスト安に資する。
【0053】
実施の形態では各プロセッサが内部にローカルメモリを有する分散メモリ型を説明したが、これには限定されず、共有メモリ型であってもよい。
【0054】
第2の実施の形態においては仮想物体ペアの所属グループの組合せを単位として並列化の許否を決めるので、空間分割をしないことも考えられる。
【図面の簡単な説明】
【0055】
【図1】第1の実施の形態に係る物体衝突処理装置の例示的なハードウェア構成図である。
【図2】図1に示されるメインメモリの記憶領域のブロック図である。
【図3】図1に示される第1プロセッサの機能ブロック図である。
【図4】第1の実施の形態における空間分割を例示する図である。
【図5】図2に示される並列化許否管理テーブルの記憶内容を例示する図である。
【図6】図2に示される動的管理テーブルのある時点における記憶内容を例示する図である。
【図7】図3に示される第1プロセッサの動作のフローチャートである。
【図8】第2の実施の形態におけるメインメモリの記憶領域のブロック図である。
【図9】第2の実施の形態における第1プロセッサの機能ブロック図である。
【図10】ある時点における仮想物体の衝突状態を例示する図である。
【図11】図10の状態においてペア振分けテーブルに記憶される内容を例示する図である。
【図12】図8に示される並列化許否管理テーブルの記憶内容を例示する図である。
【図13】図9に示される第1プロセッサの動作のフローチャートである。
【符号の説明】
【0056】
100・・・物体衝突処理装置、111・・・第1プロセッサ、122・・・第2プロセッサ、133・・・第3プロセッサ、150・・・メインメモリ、152・・・空間情報バッファ、154・・・共有テーブル、155・・・ペア振分けテーブル、156・・・並列化許否管理テーブル、158・・・動的管理テーブル、180・・・バス、202・・・空間情報更新部、206・・・空間分割部、210・・・並列化許否管理部、214・・・衝突判定部、218・・・担当空間決定部、226・・・衝突処理部、306・・・グループ分割部、318・・・担当ペア決定部。
【技術分野】
【0001】
本発明は、仮想物体間の衝突を処理する技術に関する。
【背景技術】
【0002】
例えばゲーム装置において、3D仮想物体の運動や挙動は、物理エンジンによって管理される。物理エンジンにおいては、仮想物体の衝突が起こったときに反発力を与える処理が欠かせない。反発力を与える処理は、仮想物体の速度の更新を伴う。一方、物理エンジンにおける処理は、高速化のため、複数のプロセッサによって並列化されることがある。いま、仮想物体Aと仮想物体Bが衝突していて、かつ、仮想物体Bと仮想物体Cが衝突している場面を考える。この場面において、あるプロセッサが仮想物体Aと仮想物体Bの衝突処理に伴って仮想物体Bの速度を更新し、これと同時に、他のプロセッサが仮想物体Bと仮想物体Cの衝突処理の伴って仮想物体Bの速度を更新したとする。そうすると、あるプロセッサによる仮想物体Bの速度の更新と、他のプロセッサによる仮想物体Bの速度の更新とが競合し、仮想物体Bの速度に不整合なデータが書き込まれる可能性がある。通常このような競合を回避するために、例えばセマフォ等を利用した排他制御が行われる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
競合回避の観点において排他制御は一定の成果を上げているといえる。しかし、物理エンジンの管理する仮想物体の数が多いとき、個々の仮想物体について排他制御のための処理を実行するには相当な計算量が必要となり、並列処理による高速化の効果が十分に発揮されない事態も起こりうる。このような事態は、特に物理エンジンによる衝突処理のようなリアルタイム処理において大きな問題となる。
【0004】
本発明はこうした状況を認識してなされたものであり、その目的は、仮想物体の衝突処理の複数のプロセッサによる並列処理を効率化することにある。
【課題を解決するための手段】
【0005】
本発明のある態様の物体衝突処理方法は、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割するステップと、いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行するステップとを備える。
【0006】
この態様によると、部分空間を単位として並列化の禁止が定められるため、個々の仮想物体については排他制御のための処理をする必要がない。このため、排他制御のための処理の計算量が減じられる。
【0007】
本発明の別の態様の物体衝突処理方法は、複数の仮想物体を所定の規則で複数のグループへ分割するステップと、衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行するステップとを備える。
【0008】
この態様によると、衝突している仮想物体ペアの一方もしくは他方の所属グループによって並列化の禁止が定められるため、個々の仮想物体については排他制御のための処理をする必要がない。このため、排他制御のための処理の計算量が減じられる。
【0009】
なお、本発明の表現を、装置あるいはシステム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、仮想物体の衝突処理の複数のプロセッサによる並列処理を効率化することができる。
【発明を実施するための最良の形態】
【0011】
以下、図面を参照しながら本発明の好適な実施の形態を詳述する。なお、各図面に示される同一または同等の構成要素、部材、処理には、同一の符号を付し、適宜重複した説明は省略する。また、実施の形態は発明を限定するものではなく例示であり、実施の形態に記述されるすべての特徴やその組み合わせは必ずしも発明の本質的なものであるとは限らない。
【0012】
(第1の実施の形態)
本実施の形態は、複数のプロセッサにより仮想物体の衝突処理を並列化して実行するものであり、その特徴の1つは、個々の仮想物体についての排他制御のための処理を不要とする工夫にある。
【0013】
図1は、第1の実施の形態に係る物体衝突処理装置100の例示的なハードウェア構成図である。ここに示される構成は、例えば、ゲーム装置などのコンピュータの物理エンジンとしての役割を担う。
物体衝突処理装置100は、第1プロセッサ111と、第2プロセッサ122と、第3プロセッサ133と、メインメモリ150と、それらを接続するバス180とを備える。メインメモリ150は、本発明の「メモリ領域」の例示であり、第1プロセッサ111ないし第3プロセッサ133に共有とされる。第1プロセッサ111ないし第3プロセッサ133は、本発明における「複数のプロセッサ」の例示であり、命令をフェッチ、デコード、実行するなど、通常のプロセッサとしての機能を有する。
【0014】
図2は、図1に示されるメインメモリ150の記憶領域のブロック図である。メインメモリ150は、空間情報バッファ152と、共有テーブル154とを有する。共有テーブル154は、並列化許否管理テーブル156と、動的管理テーブル158とを含む。
空間情報バッファ152は、ある時点における仮想空間の情報を記憶する。この情報には仮想物体の位置や速度なども含まれる。共有テーブル154は、本発明の「テーブル」の例示であり、衝突処理の並列化を管理するために設けられる。並列化許否管理テーブル156は、部分空間の組合せごとに並列化の許否を記憶するために設けられ、動的管理テーブル158は、現在なされている衝突処理と並列化が許可されている衝突処理を特定するために設けられる。これらテーブルの具体的な記憶内容については後述する。
【0015】
図3は、図1に示される第1プロセッサ111の機能ブロック図である。この図に示される各ブロックは、第1プロセッサ111が物体衝突処理プログラムをメインメモリ150にロードして実行することにより実現される。あるいは、第1プロセッサ111がローカルメモリを内部に有する場合、図3に示される各ブロックは、第1プロセッサ111が物体衝突処理プログラムを当該ローカルメモリにロードして実行することにより実現されてもよい。なお、第2プロセッサ122および第3プロセッサ133(以下「他のプロセッサ」とも表記)も第1プロセッサ111と同様の機能を実現する。
【0016】
第1プロセッサ111は、空間情報更新部202と、空間分割部206と、並列化許否管理部210と、衝突判定部214と、担当空間決定部218と、衝突処理部226とを備える。
空間情報更新部202は、他のプロセッサの空間情報更新部(図示せず)と協働して、空間情報バッファ152の記憶内容を更新する。すなわち、仮想空間における仮想物体の位置および速度を時間ステップで進める。この処理は、例えば外部のPIT(Programmable Interrupt Timer)からの信号を契機として行われる。時間ステップの幅は、特に限定されないが、想定される仮想物体の速度の最大値に応じて決められてもよい。なお、PITは第1プロセッサ111に内蔵されてもよい。
【0017】
空間分割部206は、他のプロセッサの空間分割部(図示せず)と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する。
図4は、第1の実施の形態における空間分割を例示する。この例では、8つの仮想物体が存在する仮想空間が6つの部分空間に分割される。以下、必要に応じて部分空間を「セル」と表記するとともに、6つの部分空間のそれぞれを、「セル0」ないし「セル5」と表記して区別する。なお、部分空間の数や形状、大きさは図4に限定されず、種々の変更が可能である。図3に戻り、並列化許否管理部210は、他のプロセッサの並列化許否管理部(図示せず)と協働して、部分空間の組合せごとに並列化の許否を管理する。これは、図2に示される並列化許否管理テーブル156を更新することによって行われる。以下、具体例を示す。
【0018】
図5は、図2に示される並列化許否管理テーブル156の記憶内容を例示する。この例は、複数の部分空間と複数の仮想物体との位置関係が図4に示される状態にある場合に基づく。この場合、1つの仮想物体がセル0およびセル1の境界をまたいで存在するので、セル0とセル1の組合せに対応するアドレスには「1」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「1」を書き込むことは禁止フラグを立てることに相当し、これにより、セル0における仮想物体の衝突処理の任意のプロセッサによる実行と、セル1における仮想物体の衝突処理の他のプロセッサによる実行との並列化が禁止される。上記と同様に、セル1とセル4、セル3とセル4、セル4とセル5の組合せに対応するアドレスにも「1」が書き込まれ、並列化が禁止される。このように禁止することにより、境界をまたぐ仮想物体の速度を複数のプロセッサが同時に更新することによるデータの不整合が防止される。
【0019】
一方、図4に示される状態ではいずれの仮想物体もセル0とセル3の境界をまたいで存在しないので、セル0とセル3の組合せに対応するアドレスには「0」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「0」を書き込むことは許可フラグを立てることに相当し、これにより、セル0における仮想物体の衝突処理の任意のプロセッサによる実行と、セル3における仮想物体の衝突処理の他のプロセッサによる実行との並列化が許可される。上記と同様に、境界をまたぐ仮想物体のないセルの組合せに対応するアドレスには「0」が書き込まれ、並列化が許可される。このように許可することにより、並列処理の効率化に資する。
【0020】
仮想物体の数が多いとき、個々の仮想物体について排他制御のための処理を実行すると、その計算量は相当なものとなり、並列処理の非効率化およびコスト高を招く傾向にある。一方、部分空間を単位として並列化の許否を判定できれば、このような問題は軽減される。本発明者のこうした知見が本実施の形態の基礎となっている。
【0021】
図3に戻り、衝突判定部214は、いずれかのセルにおける仮想物体の衝突の有無を判定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突判定部(図示せず)も同様にいずれかのセルにおける仮想物体の衝突の有無を判定する。こうして仮想物体の衝突の有無が部分空間を単位として並列化して判定される。全てのセルについて衝突判定が終了し、いずれかのセルにおいて衝突ありと判定されると、次に衝突処理がなされる。なお、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含む。属性とは速度や形状、色、音、重さ、粘性などの物理的な状態や性質をいうが、必ずしも物理法則に従う必要はない。衝突している仮想物体に衝突による例えば反発力を与える処理は、衝突処理に含まれる。その他、衝突による合体や消滅、形状の変化などを実現することもまた衝突処理に含まれる。なお、衝突処理は、物理法則に従うものであってもよいし、ゲームのルールのようなあらかじめ定められた定義に従うものであってもよい。
【0022】
担当空間決定部218は、衝突処理部226が複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを、図2に示される動的管理テーブル158を参照して決定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される担当空間決定部(図示せず)も同様に、自己のプロセッサの衝突処理部が複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを決定する。動的管理テーブル158は、並列化許否管理部210の情報すなわち並列化許否管理テーブル156の記憶内容と、現在の衝突処理の状況とに基づいて記憶内容が定められる。以下、具体例を示す。
【0023】
図6は、図2に示される動的管理テーブル158のある時点における記憶内容を例示する。図5と同様にこの例も、複数の部分空間と複数の仮想物体との位置関係が図4に示される状態にある場合に基づく。動的管理テーブル158は、大きく分けて以下の情報を記憶し、それらの情報は、現在の衝突処理の状況を反映するよう各プロセッサの担当空間決定部によって更新される。
・第1プロセッサ111ないし第3プロセッサ133のそれぞれによって現在衝突処理がなされているセルと、他のセルのそれぞれとの並列化の許否(「0」:許可、「1」:禁止)
・現在衝突処理がなされているセルおよび既に処理が完了したセルと、まだ処理が開始されていないセルとの区別(「0」:処理未開始、「1」:処理中もしくは処理済)
・上記データをセルごとに論理和演算した結果(「0」:処理可能、「1」:処理不可能)
【0024】
論理和演算結果が「0」となるセルは、現在衝突処理がなされているセルとの並列化が禁止されてなく、かつ、まだ処理が開始されていないセルである。一方、論理和演算結果が「1」となるセルは、現在衝突処理がなされているセルとの並列化が禁止されている、あるいは、現在処理中もしくは既に処理済のセルである。
【0025】
図6に示される記憶内容は下記の状況を反映している。
・第1プロセッサ111は仮想物体の衝突処理を実行していない。
・第2プロセッサ122はセル2における仮想物体の衝突処理を実行している。
・第3プロセッサ133はセル1における仮想物体の衝突処理を実行している。
・セル0ないしセル5における仮想物体の衝突処理はいずれも完了していない。
【0026】
図6の4行目のデータを見ると、第3プロセッサ133が現在セル1における仮想物体の衝突処理を実行中で、この衝突処理と並列化が可能なのは、セル1ないしセル3、セル5である。このデータは、図5の3行目のものをコピーすればよい。なお、現在セル1における仮想物体の衝突処理がなされているのもかかわらず図6の4行目を見る限りはセル1の並列化は禁止されていないが、5行目のデータによってセル1の並列化は禁止される。図6の5行目を見ると、セル1およびセル2が衝突処理が現在実行中あるいは既に完了している。同6行目を見ると、上記の状況で衝突処理を実行可能なセルはセル3あるいはセル5である。したがって、衝突処理を現在実行していない第1プロセッサ111にはセル3あるいはセル5における仮想物体の衝突処理を割り当てることが可能である。
【0027】
図3に戻り、担当空間決定部218は、動的管理テーブル158の例えば図6に示される記憶内容に基づいて、衝突処理部226にセル3あるいはセル5における仮想物体の衝突処理を割り当てる。例えばセル3における仮想物体の衝突処理を割り当てた場合、担当空間決定部218は、図6の2行目に図5の5行目のデータをコピーするとともに、図6の5行目のセル3のところに処理中フラグの意味で「1」を書き込む。
【0028】
衝突処理部226は、担当空間決定部218から割り当てられたセルにおける衝突処理を実行する。本実施の形態では分散メモリ型、すなわち、各プロセッサが内部にローカルメモリ(図示せず)を有している場合を想定する。このため、衝突処理部226は、割り当てられたセルに存在する仮想物体の例えば速度データを空間情報バッファ152から第1プロセッサ111内のメモリに読み出し、衝突による反発力を与える計算をし、結果を空間情報バッファ152に書き戻す。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突処理部(図示せず)も同様に、自己の担当空間決定部から割り当てられたセルにおける仮想物体の衝突処理を実行する。こうして仮想物体の衝突処理が部分空間を単位として並列化して実行される。なお、衝突処理部226は、割り当てられたセルにおける仮想物体の衝突処理が完了した際には、図6の2行目のデータをクリアして「0」にし、次の割当てを待つ。
【0029】
図7は、図3に示される第1プロセッサ111の動作のフローチャートである。以下、図3も参照しながら説明する。
まず、時間を示すパラメータtが0に初期化される(S502)。空間分割部206は、他のプロセッサの空間分割部と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する(S504)。並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、図2に示される並列化許否管理テーブル156を更新する(S506)。衝突判定部214は、いずれかの部分空間における仮想物体の衝突の有無を判定する(S508)。衝突がなければ(S512のNo)、終了判定(S514のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S518)。その後、空間分割(S504)から衝突判定(S508)までが再度実行される。なお、例えばユーザにより中断が指示された場合などは、終了判定の後、衝突処理が終了される(S514のYes)。
【0030】
衝突があった場合(S512のYes)、担当空間決定部218は、図2に示される動的管理テーブル158を参照することにより衝突処理部226がいずれの部分空間における衝突処理を担当すべきかを決定するとともに、決定に基づいて動的管理テーブル158を更新する(S522)。衝突処理部226は、担当空間決定部218により担当すべきと決定された部分空間における衝突処理を実行し、処理が終了すると、動的管理テーブル158を更新する(S526)。その後、まだ衝突処理が開始されていない部分空間(以下、「未処理空間」)があれば(S532のYes)、担当空間の決定(S522)と衝突処理(S526)が再度実行される。未処理空間がなくなると(S532のNo)、終了判定(S514のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S518)。その後、空間分割(S504)から衝突処理(S526)までの一連の処理が再度実行される。
【0031】
本実施の形態によれば、並列化許否管理部210は部分空間を単位として並列化の許否を並列化許否管理テーブル156に記憶し、担当空間決定部218はこれに従って衝突処理部226が担当すべき部分空間を決定する。これにより、衝突処理部226は個々の仮想物体について排他制御のための処理を行うことから解放され、結果として並列処理の効率化およびコスト安に資する。
【0032】
また、動的管理テーブル158は各プロセッサの担当空間決定部および衝突処理部によって更新され、各プロセッサの担当空間決定部は動的管理テーブル158を参照することによって自己のプロセッサの衝突処理部に現在衝突処理が可能な部分空間を担当させる。したがって、並列処理の集中管理のために別途プロセッサを設ける必要がない。これは物体衝突処理装置100のハードウェア構成の単純化に有利である。
【0033】
また、各プロセッサの担当空間決定部および衝突処理部は現在の衝突処理の状況を反映するよう動的管理テーブル158を更新し、各プロセッサの担当空間決定部は最新の状態に基づいて自己のプロセッサの衝突処理部にいずれかの部分空間における衝突処理を割り当てる。このような動的管理により並列化の斑を最小限に抑えられるため、並列処理の効率がよい。
【0034】
さらに、空間分割部206による空間分割によって得られた複数の部分空間を衝突判定に利用するとともに衝突処理並列化の単位としても利用するため、並列化許否のために格別計算量が増えることもない。
【0035】
(第2の実施の形態)
本実施の形態では、第1の実施の形態とは異なる工夫によって個々の仮想物体についての排他制御のための処理を不要とする。第2の実施の形態にかかる物体衝突処理装置のハードウェア構成は、図1に示されるものと同様である。
【0036】
以下、第1の実施の形態と異なる部分を中心に本実施の形態を説明する。
図8は、第2の実施の形態におけるメインメモリ150の記憶領域のブロック図である。この図において図2と異なるところは、共有テーブル154にペア振分けテーブル155が設けられた点である。ペア振分けテーブル155の記憶内容については後述する。
【0037】
図9は、第2の実施の形態における第1プロセッサ111の機能ブロック図である。この図において図3と異なるところは、グループ分割部306が設けられた点および担当空間決定部218が担当ペア決定部318に変わった点である。なお、第2プロセッサ122および第3プロセッサ133も第1プロセッサ111と同様の機能を実現する。
【0038】
本実施の形態では、複数の仮想物体のそれぞれはあらかじめ番号が付される。グループ分割部306は、その番号に基づいて複数の仮想物体を複数のグループに分割する。グループ分割部306は一例として、0〜99の番号が付された仮想物体をグループG0、100〜199の番号が付された仮想物体をグループG1、・・・、500〜599の番号が付された仮想物体をグループG5に所属させる。なお、仮想物体に付された番号は本発明の「識別情報」の例示である。識別情報は、複数の仮想物体のそれぞれを特定しうるものであればよい。
【0039】
衝突判定部214は、第1の実施の形態と同様に衝突判定をするとともに、本実施の形態では、衝突している仮想物体ペアが見つかるつど仮想物体ペアの所属グループに基づいて仮想物体ペアを振り分ける。これは、図8に示されるペア振分けテーブル155を更新することによってなされる。以下、具体例を示す。
【0040】
図10は、ある時点における仮想物体の衝突状態を例示する。以下、nの番号が付された仮想物体を「仮想物体n」と表記する。図11は、図10の状態においてペア振分けテーブル155に記憶される内容を例示する。この記憶内容は、図9の衝突判定部214が図10の状態において衝突判定し、衝突している仮想物体ペアを振り分けたものである。
【0041】
以下、仮想物体mと仮想物体nが衝突しているとき、この仮想物体ペアを「仮想物体ペアm−n」と表記する。仮想物体ペア1−46は、一方および他方がグループG0に属するので、グループG0とグループG0の組合せに分類される。仮想物体ペア46−58も同様にグループG0とグループG0の組合せに分類される。仮想物体ペア58−258は、一方がグループG0に属し他方がグループG2に属するので、グループG0とグループG2の組合せに分類される。他の仮想物体ペアも同様にいずれかのグループの組合せに分類される。以下、仮想物体ペアが分類されているグループの組合せを必要に応じて「セル」と表記し、仮想物体ペアが分類されている図11中の6つのグループの組合せのそれぞれを「セル0」ないし「セル5」と表記して区別する。図9に戻り、並列化許否管理部210は、他のプロセッサの並列化許否管理部(図示せず)と協働して、セルの組合せごとに並列化の許否を管理する。これは、図8に示される並列化許否管理テーブル156を更新することによって行われる。以下、具体例を示す。
【0042】
図12は、図8に示される並列化許否管理テーブル156の記憶内容を例示する。この例は、衝突している仮想物体ペアが図11に示されるように各セルに分類された場合に基づく。この場合、セル0とセル1は共にグループG0を含む、すなわちセル0とセル1は共通のグループを含むので、セル0とセル1の組合せに対応するアドレスには「1」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「1」を書き込むことは禁止フラグを立てることに相当し、これにより、セル0に分類された仮想物体ペアの衝突処理の任意のプロセッサによる実行と、セル1に分類された仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化が禁止される。上記と同様に、セル1とセル2、セル1とセル3、セル2とセル3、セル2とセル4、セル3とセル5、セル4とセル5の組合せに対応するアドレスにも「1」が書き込まれ、並列化が禁止される。このように禁止することにより、2つのセルに共通のグループに所属する1つの仮想物体の速度を複数のプロセッサが同時に更新することによるデータの不整合が防止される。
【0043】
一方、セル0とセル2は共通のグループを含まないので、セル0とセル2の組合せに対応するアドレスには「0」が書き込まれる。いずれかのプロセッサの並列化許否管理部が書込みを実行する。「0」を書き込むことは許可フラグを立てることに相当し、これにより、セル0に分類された仮想物体ペアの衝突処理の任意のプロセッサによる実行と、セル2に分類された仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化が許可される。上記と同様に、共通のグループを含まないセルの組合せに対応するアドレスには「0」が書き込まれ、並列化が許可される。このように許可することにより、並列処理の効率化に資する。
【0044】
前述の第1の実施の形態では部分空間を単位として並列化の許否を判定したが、本実施の形態ではこのように仮想物体ペアの所属グループの組合せを単位として並列化の許否を判定する。この場合も、並列処理の非効率化およびコスト高の問題が軽減される。なお、仮想物体ペアの分類されていないグループの組合せも「セル」として並列化許否管理の対象としてもよい。
【0045】
図9に戻り、担当ペア決定部318は、衝突処理部226がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを、図8に示される動的管理テーブル158を参照して決定する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される担当ペア決定部(図示せず)も同様に、自己のプロセッサの衝突処理部がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを決定する。動的管理テーブル158は、第1の実施の形態と同様、並列化許否管理部210の情報すなわち並列化許否管理テーブル156の記憶内容と、現在の衝突処理の状況とに基づいて記憶内容が定められる。
【0046】
衝突処理部226は、担当ペア決定部318から割り当てられたセルに分類されている仮想物体ペアの衝突処理を実行する。第2プロセッサ122および第3プロセッサ133のそれぞれによって実現される衝突処理部(図示せず)も同様に、自己の担当ペア決定部から割り当てられたセルに分類されている仮想物体の衝突処理を実行する。こうして仮想物体の衝突処理が並列化して実行される。
【0047】
図13は、図9に示される第1プロセッサ111の動作のフローチャートである。以下、図9も参照しながら説明する。
まず、時間を示すパラメータtが0に初期化される(S602)。グループ分割部306は、各仮想物体に付された番号に基づいて複数の仮想物体を複数のグループに分割する(S603)。空間分割部206は、他のプロセッサの空間分割部と協働して、複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する(S604)。衝突判定部214は、いずれかの部分空間における仮想物体の衝突の有無を判定し、衝突している仮想物体ペアが見つかるつど仮想物体ペアの所属グループに基づいて仮想物体ペアを振り分ける(S608)。衝突がなければ(S612のNo)、終了判定(S614のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S618)。その後、グループ分け(S603)から衝突判定(S608)までが再度実行される。なお、例えばユーザにより中断が指示された場合などは、終了判定の後、衝突処理が終了される(S614のYes)。
【0048】
衝突があった場合(S612のYes)、並列化許否管理部210は、他のプロセッサの並列化許否管理部と協働して、図8に示される並列化許否管理テーブル156を更新する(S621)。担当ペア決定部318は、図8に示される動的管理テーブル158を参照することにより衝突処理部226がいずれのセルに分類された仮想物体ペアの衝突処理を担当すべきかを決定するとともに、決定に基づいて動的管理テーブル158を更新する(S622)。衝突処理部226は、担当ペア決定部318により担当すべきと決定された仮想物体ペアの衝突処理を実行し、処理が終了すると、動的管理テーブル158を更新する(S626)。その後、まだ衝突処理が開始されていないセル(以下、「未処理セル」)があれば(S632のYes)、担当ペアの決定(S622)と衝突処理(S626)が再度実行される。未処理セルがなくなると(S632のNo)、終了判定(S614のNo)の後、空間情報更新部202は仮想物体の位置、速度をΔtだけ進める(S618)。その後、グループ分け(S603)から衝突処理(S626)までの一連の処理が再度実行される。
【0049】
本実施の形態によれば、並列化許否管理部210は仮想物体ペアの所属グループの組合せを単位として並列化の許否を並列化許否管理テーブル156に記憶し、担当ペア決定部318はこれに従って衝突処理部226が担当すべき仮想物体ペアを決定する。これにより、第1の実施の形態と同様に、衝突処理部226は個々の仮想物体について排他制御のための処理を行うことから解放され、結果として並列処理の効率化およびコスト安に資する。その他、物体衝突処理装置100のハードウェア構成の単純化に有利であることおよび並列化の斑を最小限に抑えられるため並列処理の効率が良いこと等、第1の実施の形態と同様の効果を奏する。
【0050】
上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、変形例を列挙する。
【0051】
実施の形態においては第1プロセッサ111ないし第3プロセッサ133は同様の機能を実現するとしたが、これには限定されず、衝突処理部以外の機能は第1プロセッサ111だけが有していても良い。この場合、第1プロセッサ111が他のプロセッサへの衝突処理の割当てを担当する。本変形例も、個々の仮想物体について排他制御のための処理を行う必要がないという点で実施の形態と同様に並列処理の効率化およびコスト安に資する。
【0052】
また、第1プロセッサ111ないし第3プロセッサ133とは別に、これらプロセッサを制御する制御プロセッサを別に設けてもよく、並列化許否管理テーブル156や動的管理テーブル158の更新、あるいは各プロセッサへの衝突処理の割当てを制御プロセッサにより行ってもよい。本変形例も、個々の仮想物体について排他制御のための処理を行う必要がないという点で実施の形態と同様に並列処理の効率化およびコスト安に資する。
【0053】
実施の形態では各プロセッサが内部にローカルメモリを有する分散メモリ型を説明したが、これには限定されず、共有メモリ型であってもよい。
【0054】
第2の実施の形態においては仮想物体ペアの所属グループの組合せを単位として並列化の許否を決めるので、空間分割をしないことも考えられる。
【図面の簡単な説明】
【0055】
【図1】第1の実施の形態に係る物体衝突処理装置の例示的なハードウェア構成図である。
【図2】図1に示されるメインメモリの記憶領域のブロック図である。
【図3】図1に示される第1プロセッサの機能ブロック図である。
【図4】第1の実施の形態における空間分割を例示する図である。
【図5】図2に示される並列化許否管理テーブルの記憶内容を例示する図である。
【図6】図2に示される動的管理テーブルのある時点における記憶内容を例示する図である。
【図7】図3に示される第1プロセッサの動作のフローチャートである。
【図8】第2の実施の形態におけるメインメモリの記憶領域のブロック図である。
【図9】第2の実施の形態における第1プロセッサの機能ブロック図である。
【図10】ある時点における仮想物体の衝突状態を例示する図である。
【図11】図10の状態においてペア振分けテーブルに記憶される内容を例示する図である。
【図12】図8に示される並列化許否管理テーブルの記憶内容を例示する図である。
【図13】図9に示される第1プロセッサの動作のフローチャートである。
【符号の説明】
【0056】
100・・・物体衝突処理装置、111・・・第1プロセッサ、122・・・第2プロセッサ、133・・・第3プロセッサ、150・・・メインメモリ、152・・・空間情報バッファ、154・・・共有テーブル、155・・・ペア振分けテーブル、156・・・並列化許否管理テーブル、158・・・動的管理テーブル、180・・・バス、202・・・空間情報更新部、206・・・空間分割部、210・・・並列化許否管理部、214・・・衝突判定部、218・・・担当空間決定部、226・・・衝突処理部、306・・・グループ分割部、318・・・担当ペア決定部。
【特許請求の範囲】
【請求項1】
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割するステップと、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、
複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行するステップと、
を備えることを特徴とする物体衝突処理方法。
【請求項2】
請求項1に記載の方法において、禁止するステップは、並列化が禁止された第1および第2の部分空間の組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶するステップを含み、
実行するステップは、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てるステップを含むことを特徴とする物体衝突処理方法。
【請求項3】
請求項1または2に記載の方法において、当該方法はさらに、実行するステップに先立ち、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定することにより、仮想物体の衝突の有無を、部分空間を単位として並列化して判定するステップを備えることを特徴とする物体衝突処理方法。
【請求項4】
複数の仮想物体を所定の規則で複数のグループへ分割するステップと、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、
複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行するステップと、
を備えることを特徴とする物体衝突処理方法。
【請求項5】
請求項4に記載の方法において、複数の仮想物体のそれぞれには識別情報が割り当てられていて、その識別情報に応じて前記の分割が実行されることを特徴とする物体衝突処理方法。
【請求項6】
請求項4または5に記載の方法において、禁止するステップは、並列化が禁止された仮想物体ペアの組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶するステップを含み、
実行するステップは、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てるステップを含むことを特徴とする物体衝突処理方法。
【請求項7】
請求項1から6のいずれかに記載の方法において、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理方法。
【請求項8】
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する手順と、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止する手順と、
複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行する手順と、
をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項9】
請求項8に記載のプログラムにおいて、禁止する手順は、並列化が禁止された第1および第2の部分空間の組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶する手順を含み、
実行する手順は、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てる手順を含むことを特徴とする物体衝突処理プログラム。
【請求項10】
請求項8または9に記載のプログラムにおいて、当該プログラムはさらに、実行する手順に先立ち、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定することにより、仮想物体の衝突の有無を、部分空間を単位として並列化して判定する手順をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項11】
複数の仮想物体を所定の規則で複数のグループへ分割する手順と、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止する手順と、
複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行する手順と、
をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項12】
請求項11に記載のプログラムにおいて、禁止する手順は、並列化が禁止された仮想物体ペアの組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶する手順を含み、
実行する手順は、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てる手順を含むことを特徴とする物体衝突処理プログラム。
【請求項13】
請求項8から12のいずれかに記載のプログラムにおいて、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理プログラム。
【請求項14】
複数のプロセッサと、
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する、複数のプロセッサのいずれかによって実現される分割部と、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理のいずれかのプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するための情報を管理する、複数のプロセッサのいずれかによって実現される並列化許否管理部と、
複数のプロセッサのいずれかが複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを、並列化許否管理部の情報を利用して決定する、複数のプロセッサのいずれかによって実現される担当空間決定部と、
を備え、複数のプロセッサは、仮想物体の衝突処理を、担当空間決定部によって担当すべきと決定された部分空間を単位として実行することを特徴とする物体衝突処理装置。
【請求項15】
請求項14に記載の装置において、当該装置はさらに、複数のプロセッサに共有とされるメモリ領域に設けられ、並列化が禁止された第1および第2の部分空間の組合せを記憶する、並列化許否管理部によって管理されるテーブルを含み、
担当空間決定部は、複数のプロセッサのそれぞれに設けられ、
各プロセッサの担当空間決定部は、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己のプロセッサの担当すべき衝突処理と決定することを特徴とする物体衝突処理装置。
【請求項16】
請求項14または15に記載の装置において、当該装置はさらに、衝突処理の実行に先立ち、複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定する、複数のプロセッサのいずれかによって実現される衝突判定部を含むことを特徴とする物体衝突処理装置。
【請求項17】
複数のプロセッサと、
複数の仮想物体を所定の規則で複数のグループへ分割する、複数のプロセッサのいずれかによって実現される分割部と、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するための情報を管理する、複数のプロセッサのいずれかによって実現される並列化許否管理部と、
複数のプロセッサのいずれかがいずれの仮想物体ペアの衝突処理を担当すべきかを、並列化許否管理部の情報を利用して決定する、複数のプロセッサのいずれかによって実現される担当ペア決定部と、
を備え、複数のプロセッサは、担当ペア決定部によって担当すべきと決定された仮想物体ペアの衝突処理を実行することを特徴とする物体衝突処理装置。
【請求項18】
請求項17に記載の装置において、当該装置はさらに、複数のプロセッサに共有とされるメモリ領域に設けられ、並列化が禁止された仮想物体ペアの組合せを記憶する、並列化許否管理部によって管理されるテーブルを含み、
担当ペア決定部は、複数のプロセッサのそれぞれに設けられ、
各プロセッサの担当ペア決定部は、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己のプロセッサの担当すべき衝突処理と決定することを特徴とする物体衝突処理装置。
【請求項19】
請求項14から18のいずれかに記載の装置において、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理装置。
【請求項1】
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割するステップと、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、
複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行するステップと、
を備えることを特徴とする物体衝突処理方法。
【請求項2】
請求項1に記載の方法において、禁止するステップは、並列化が禁止された第1および第2の部分空間の組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶するステップを含み、
実行するステップは、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てるステップを含むことを特徴とする物体衝突処理方法。
【請求項3】
請求項1または2に記載の方法において、当該方法はさらに、実行するステップに先立ち、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定することにより、仮想物体の衝突の有無を、部分空間を単位として並列化して判定するステップを備えることを特徴とする物体衝突処理方法。
【請求項4】
複数の仮想物体を所定の規則で複数のグループへ分割するステップと、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するステップと、
複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行するステップと、
を備えることを特徴とする物体衝突処理方法。
【請求項5】
請求項4に記載の方法において、複数の仮想物体のそれぞれには識別情報が割り当てられていて、その識別情報に応じて前記の分割が実行されることを特徴とする物体衝突処理方法。
【請求項6】
請求項4または5に記載の方法において、禁止するステップは、並列化が禁止された仮想物体ペアの組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶するステップを含み、
実行するステップは、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てるステップを含むことを特徴とする物体衝突処理方法。
【請求項7】
請求項1から6のいずれかに記載の方法において、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理方法。
【請求項8】
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する手順と、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理の任意のプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止する手順と、
複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突処理を担当することにより、仮想物体の衝突処理を、部分空間を単位として並列化して実行する手順と、
をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項9】
請求項8に記載のプログラムにおいて、禁止する手順は、並列化が禁止された第1および第2の部分空間の組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶する手順を含み、
実行する手順は、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てる手順を含むことを特徴とする物体衝突処理プログラム。
【請求項10】
請求項8または9に記載のプログラムにおいて、当該プログラムはさらに、実行する手順に先立ち、複数のプロセッサのそれぞれが複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定することにより、仮想物体の衝突の有無を、部分空間を単位として並列化して判定する手順をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項11】
複数の仮想物体を所定の規則で複数のグループへ分割する手順と、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止する手順と、
複数のプロセッサのそれぞれがいずれかの仮想物体ペアの衝突処理を担当することにより、仮想物体の衝突処理を並列化して実行する手順と、
をコンピュータに実行させることを特徴とする物体衝突処理プログラム。
【請求項12】
請求項11に記載のプログラムにおいて、禁止する手順は、並列化が禁止された仮想物体ペアの組合せを、複数のプロセッサに共有とされるメモリ領域に設けられたテーブルに記憶する手順を含み、
実行する手順は、複数のプロセッサのいずれかが、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己に割り当てる手順を含むことを特徴とする物体衝突処理プログラム。
【請求項13】
請求項8から12のいずれかに記載のプログラムにおいて、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理プログラム。
【請求項14】
複数のプロセッサと、
複数の仮想物体が存在する仮想空間を複数の部分空間へ分割する、複数のプロセッサのいずれかによって実現される分割部と、
いずれかの仮想物体が第1および第2の部分空間の境界をまたいで存在するとき、第1の部分空間における仮想物体の衝突処理のいずれかのプロセッサによる実行と、第2の部分空間における仮想物体の衝突処理の他のプロセッサによる実行との並列化を禁止するための情報を管理する、複数のプロセッサのいずれかによって実現される並列化許否管理部と、
複数のプロセッサのいずれかが複数の部分空間のいずれにおける仮想物体の衝突処理を担当すべきかを、並列化許否管理部の情報を利用して決定する、複数のプロセッサのいずれかによって実現される担当空間決定部と、
を備え、複数のプロセッサは、仮想物体の衝突処理を、担当空間決定部によって担当すべきと決定された部分空間を単位として実行することを特徴とする物体衝突処理装置。
【請求項15】
請求項14に記載の装置において、当該装置はさらに、複数のプロセッサに共有とされるメモリ領域に設けられ、並列化が禁止された第1および第2の部分空間の組合せを記憶する、並列化許否管理部によって管理されるテーブルを含み、
担当空間決定部は、複数のプロセッサのそれぞれに設けられ、
各プロセッサの担当空間決定部は、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己のプロセッサの担当すべき衝突処理と決定することを特徴とする物体衝突処理装置。
【請求項16】
請求項14または15に記載の装置において、当該装置はさらに、衝突処理の実行に先立ち、複数の部分空間のいずれかにおける仮想物体の衝突の有無を判定する、複数のプロセッサのいずれかによって実現される衝突判定部を含むことを特徴とする物体衝突処理装置。
【請求項17】
複数のプロセッサと、
複数の仮想物体を所定の規則で複数のグループへ分割する、複数のプロセッサのいずれかによって実現される分割部と、
衝突している仮想物体ペアの一方が第1のグループに属し、他方が第2のグループに属するとき、この仮想物体ペアの衝突処理の任意のプロセッサによる実行と、第1もしくは第2のグループに属する仮想物体が関係する他の仮想物体ペアの衝突処理の他のプロセッサによる実行との並列化を禁止するための情報を管理する、複数のプロセッサのいずれかによって実現される並列化許否管理部と、
複数のプロセッサのいずれかがいずれの仮想物体ペアの衝突処理を担当すべきかを、並列化許否管理部の情報を利用して決定する、複数のプロセッサのいずれかによって実現される担当ペア決定部と、
を備え、複数のプロセッサは、担当ペア決定部によって担当すべきと決定された仮想物体ペアの衝突処理を実行することを特徴とする物体衝突処理装置。
【請求項18】
請求項17に記載の装置において、当該装置はさらに、複数のプロセッサに共有とされるメモリ領域に設けられ、並列化が禁止された仮想物体ペアの組合せを記憶する、並列化許否管理部によって管理されるテーブルを含み、
担当ペア決定部は、複数のプロセッサのそれぞれに設けられ、
各プロセッサの担当ペア決定部は、前記テーブルを参照することにより、他のプロセッサによって現在なされている衝突処理と並列化が禁止されていない衝突処理を自己のプロセッサの担当すべき衝突処理と決定することを特徴とする物体衝突処理装置。
【請求項19】
請求項14から18のいずれかに記載の装置において、衝突処理は、仮想物体の衝突の前後で仮想物体の属性を示すパラメータを更新する処理を含むことを特徴とする物体衝突処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2008−171176(P2008−171176A)
【公開日】平成20年7月24日(2008.7.24)
【国際特許分類】
【出願番号】特願2007−3359(P2007−3359)
【出願日】平成19年1月11日(2007.1.11)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
【公開日】平成20年7月24日(2008.7.24)
【国際特許分類】
【出願日】平成19年1月11日(2007.1.11)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
[ Back to top ]