JP2015118576A - シミュレーション装置 - Google Patents
シミュレーション装置 Download PDFInfo
- Publication number
- JP2015118576A JP2015118576A JP2013261859A JP2013261859A JP2015118576A JP 2015118576 A JP2015118576 A JP 2015118576A JP 2013261859 A JP2013261859 A JP 2013261859A JP 2013261859 A JP2013261859 A JP 2013261859A JP 2015118576 A JP2015118576 A JP 2015118576A
- Authority
- JP
- Japan
- Prior art keywords
- calculation
- pair
- objects
- pairs
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Processing Or Creating Images (AREA)
Abstract
【課題】本発明の目的の一つは、互いに接触している複数のオブジェクトのペアを、それぞれ並列計算可能な複数のグループへ割り当てる処理を高速化する。【解決手段】複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当て、互いに異なるグループに属するオブジェクトペアについての計算は並列に実行しないように、各オブジェクトペアについての計算を並列に実行するシミュレーション装置であって、前回の計算時点においての割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループに割り当てる。【選択図】図3
Description
本発明は、時間とともに仮想空間内を運動する複数のオブジェクトに関するシミュレーションを実行するシミュレーション装置、その制御方法、プログラム、情報記憶媒体に関する。
時間とともに仮想空間内を運動する複数のオブジェクトをシミュレーションする際に、互いに接触している2つのオブジェクトについて、2つのオブジェクトの接触による各オブジェクトの運動への影響(例えば、速度、加速度、回転量といった物理量)を計算する場合がある。
しかし、3個以上のオブジェクトが連鎖的に接触している場合、例えば、オブジェクトA及びオブジェクトBのペアと、オブジェクトB及びオブジェクトCのペアと、がオブジェクトBを介して連鎖的に接触している場合がある。このような場合は、オブジェクトA及びオブジェクトBのペアに関する計算と、オブジェクトB及びオブジェクトCのペアに関する計算とが互いに影響しあうため、それぞれのオブジェクトペアを同時に並列計算することは難しい。
従来は、それぞれ並列計算が可能な複数のグループに、互いに接触している複数のオブジェクトのペアを割り当てる方法が用いられている。具体的には、まず1つ目のグループにオブジェクトペアを順に割り当て、既に割り当てられているオブジェクトペアに含まれるオブジェクトを含む新たなオブジェクトペアは次のグループに割り当てるというものである。このような処理を計算時点の度に実行すると、互いに接触しているオブジェクトペアの数が増加するほど処理量が増加してしまう。
本発明の目的の一つは、互いに接触している複数のオブジェクトのペアを、それぞれ並列計算可能な複数のグループへ割り当てる処理を高速化することにある。
本発明に係るシミュレーション装置は、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置であって、前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得部と、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当て部と、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算部と、を含み、前記計算部は、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、前記割り当て部は、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、ことを特徴とする。
また、上記シミュレーション装置において、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのうち、前回の計算時点において取得されたいずれかのオブジェクトペアと2つの構成要素が共通するオブジェクトペアを特定する特定部、をさらに含み、前記特定部は、所定の基準により、前記取得した複数個のオブジェクトペアのそれぞれに含まれる2つのオブジェクトのうちの一方を基準オブジェクトとして、他方を付随オブジェクトとして特定し、前記取得した複数個のオブジェクトペアのそれぞれを判定対象ペアとして、前回の計算時点で取得した複数個のオブジェクトペアのうち、基準オブジェクトが当該判定対象ペアと共通するオブジェクトペアを比較相手ペアとして抽出し、前記判定対象ペアと前記比較相手ペアとで付随オブジェクトが共通するか否かを判定することによって、前記2つの構成要素が共通するオブジェクトペアを特定する、こととしてもよい。
また、上記シミュレーション装置において、前記特定部は、前記判定対象ペアのそれぞれについて、前記比較相手ペアと付随オブジェクトが共通するか否か判定する処理を、前記判定対象ペアごとに並列に実行する、こととしてもよい。
また、上記シミュレーション装置において、前記特定部は、前記取得した複数個のオブジェクトペアを、前記基準オブジェクトの識別子の順に並び替えてオブジェクトペア列を生成する並び替え部、をさらに含み前回の計算時点において取得された複数個のオブジェクトペア、及び今回の計算時点において取得された複数個のオブジェクトペアのうちのいずれか一方に含まれる各オブジェクトペアについて、他方の複数個のオブジェクトペアを前記並び替え部が並び替えて得られるオブジェクトペア列に基づいて前記比較相手ペアを抽出する、こととしてもよい。
また、上記シミュレーション装置において、前記特定部は、前記取得した複数個のオブジェクトペアのそれぞれに含まれる2つのオブジェクトの識別子の大小を前記所定の基準として用いて、基準オブジェクト及び付随オブジェクトを特定する、こととしてもよい。
また、本発明に係るプログラムは、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置を、前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得手段、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当て手段、及び、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算手段、として機能させるためのプログラムであって、前記計算手段は、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、前記割り当て手段は、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、ことを特徴とするプログラムである。このプログラムは、コンピュータ読み取り可能な情報記憶媒体に格納されてよい。
本発明に係るシミュレーション装置の制御方法は、時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置の制御方法であって、前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得ステップと、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当てステップと、前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算ステップと、を含み、前記計算ステップでは、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、前記割り当てステップでは、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、ことを特徴とする。
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図1は、本実施形態に係るシミュレーション装置1の構成の一例を示す図である。本実施形態に係るシミュレーション装置1は、例えば、家庭用ゲーム機やパーソナルコンピュータ等であって、図1に示すように、制御部11、記憶部12、通信部13、操作部14、及び表示部15を含んで構成されている。
制御部11は、CPU5及びGPU6等を含んで構成され、記憶部12に格納されているプログラムに従って各種の情報処理を実行する。本実施形態において、制御部11が実行する処理の具体例については、後述する。
記憶部12は、RAMやROM等のメモリ素子、ハードディスクドライブなどを含んで構成されており、制御部11が実行するプログラムや、各種のデータを記憶する。また、記憶部12は、制御部11のワークメモリとしても動作する。
通信部13は、通信インタフェースであって、通信ネットワークを介して外部から到来するデータを受信し、制御部11に対して出力する。また、制御部11からの指示に従って、通信ネットワークを介して接続された他の情報処理装置に対して各種のデータを送信する。
操作部14は、キーボードやマウス、家庭用ゲーム機のコントローラ等であって、ユーザの操作入力を受け付けて、その内容を示す信号を制御部11に出力する。
表示部15は、液晶ディスプレイ等の表示デバイスであって、制御部11の指示に従って、各種の画像を表示する。
なお、シミュレーション装置1は、DVD−ROMやBlu−ray(登録商標)ディスクなどの光ディスクを読み取り光ディスクドライブ、USB(Universal Serial Bus)ポートなどを含んでいてもよい。
以下、本実施形態に係るシミュレーション装置1によって実現される機能の具体例について、説明する。本実施形態では、仮想空間内を運動する複数のオブジェクトについて、時間とともに変化するオブジェクトの位置を、物理シミュレーション等のシミュレーション処理によって計算する。本実施形態では、特に、オブジェクト同士の衝突による各オブジェクトの位置への影響を考慮したシミュレーション処理を実行する。このシミュレーション処理は、主に制御部11のGPU6が実行することとするが、CPU5、その他の装置が実行することとしてもよい。
GPU6は、CPU5よりコア数が多く、同時に実行可能な処理単位(スレッド)の数も多いため、並列処理に適している。一方で、同時に実行されるスレッドは、互いに同じ内容の処理であることが要請される。そこで、GPU6を用いてシミュレーション処理を効率的に実行するためには、従来と異なるアルゴリズムで処理を行う必要がある。
なお、仮想空間内における時間の進行はタイムカウンタtの値によって表されるものとし、所定の単位時間dごとにタイムカウンタtの値を1だけ加算するとともにシミュレーション処理を実行する。すなわち、オブジェクトの位置を計算する対象となる各計算時点は、タイムカウンタt=0、1、2、3、・・・で表される。また、各オブジェクトにはオブジェクトを識別するためにオブジェクトに固有に設定されるID情報(識別子)が関連付けられる。さらに各オブジェクトには、属性情報が関連付けられてもよい。属性情報としては、例えば、オブジェクトの種類を表す情報や、外形を規定する情報、その他、オブジェクトの種類に応じた種々の属性情報であってよい。
ここで、本実施形態における、シミュレーション装置1が実行するシミュレーション処理の流れの一例を図2のフロー図を参照しながら説明する。この図2に示す処理は、タイムカウンタtの値が加算されるごとに実行される。
まず、仮想空間内に配置される複数のオブジェクトの少なくとも一部に物理量(速度、加速度など)を与える(S1)。これにより、仮想空間内に配置される複数のオブジェクトの位置が時間とともに変化する。
次に、オブジェクトの位置を計算する計算時点において、オブジェクト同士の衝突を判定する(S2)。処理S2については、後に詳述する。
そして、処理S1により互いに衝突していると判定された2つのオブジェクトの拘束条件を作成する(S3)。ここでは、例えば、互いに衝突していると判定された2つのオブジェクトは衝突点から進行方向にそれ以上位置が変化することのないよう、オブジェクトの動きを拘束する必要がある。そうしないと、衝突したオブジェクト同士がめりこむ、通過するなどの不具合が生じる。処理S3では、このようなオブジェクトの動きを拘束するための拘束条件を作成する。そして、拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与える物理量を算出する(S4)。処理S4については、後に詳述する。
このとき、仮想空間内を運動する複数のオブジェクトのなかには、その速度がほぼ0であるオブジェクトが存在する。このようなほぼ停止の状態にあるオブジェクトに対して、速度を0にしてスリープさせる(停止状態にする)というスリープ管理を行う(S5)。スリープ管理により停止状態にあるオブジェクトを計算対象から除外することで、計算の処理量を低減する。なお、スリープ管理により停止状態にあるオブジェクトに外力が与えられると、スリープ管理による停止状態を解除し計算対象に加えられる。処理S5については、後に詳述する。
そして、各オブジェクトに与える物理量を仮想空間内の位置に反映する(S6)。つまり、各オブジェクトに与える物理量から、仮想空間の状態を描画するタイミングにおける各オブジェクトの位置を算出する。そしてシミュレーション装置1は、算出した位置にオブジェクトを配置した状態の仮想空間の様子を示す画像を描画して、表示部15に対して出力する。これにより、単位時間dが経過するごとに、シミュレーション装置1が算出したその時点での位置に各オブジェクトが配置された仮想空間の画像が、表示部15の画面に表示される。
ここで、処理S2によるオブジェクトの衝突判定処理、処理S4によるオブジェクトの物理量算出処理、及び処理S5によるオブジェクトのスリープ管理処理について、以下に詳細に説明する。
図3は、本実施形態に係るシミュレーション装置1により実行される主な機能の一例を示す機能ブロック図である。図3に示すように、本実施形態おいてシミュレーション装置1の制御部11は、機能的には、例えば、完全二分木作成部21、ノード入れ替え部22、衝突判定部23、オブジェクトペア情報取得部31、並び替え部32、特定部33、割り当て部34、計算部35、値付与部41、ポインタ値上書き部43、ルート値上書き部43、及びポインタ値更新部45を含んで構成されている。これらの機能は、記憶部12に記憶されたプログラムを制御部11が実行することにより実現されている。このプログラムは、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ可読な情報記憶媒体を介して、あるいは、インターネットなどの通信手段を介してシミュレーション装置1に供給される。
まず、処理S2によるオブジェクトの衝突判定処理について説明する。オブジェクトの衝突判定処理は、図3に示す、完全二分木作成部21、ノード入れ替え部22、及び衝突判定部23、によって実現される。
完全二分木作成部21は、仮想空間内に配置されている複数のオブジェクトそれぞれの仮想空間内の位置を示す位置情報をリーフに関連付け、子ノードの位置情報を反映した位置情報を内部ノードに関連付けた完全二分木を作成する。
オブジェクトの仮想空間内の位置を示す位置情報は、オブジェクトに関連付けられている属性情報(例えば、外形を規定する情報)と、仮想空間の座標情報と、に基づいて仮想空間内の各オブジェクトの位置関係を示せるものであってよい。例えば、位置情報として、オブジェクトを内包する、いわゆる境界ボリューム(Boundary Volume)を用いる。境界ボリュームはオブジェクトの形状を単純化したものであるため、オブジェクトの詳細モデルに対して衝突判定を行うより、境界ボリュームに対して衝突判定を行う方が高速に処理することができる。境界ボリュームには、例えば、球体(SPHERE)、各軸(x、y、z軸)に並行な辺を有する直方体である軸平行境界ボックス(Axis-Aligned Bounding Box;AABB)等が用いられる。境界ボリュームが球体の場合は、球体の中心座標と半径とを位置情報とする。境界ボリュームが軸並行境界ボックスの場合は、軸並行境界ボックスの頂点のうち、各軸の座標値が最小となる最小点と、各軸の座標値が最大となる最大点と、の座標値を位置情報とする。また、境界ボリュームが軸並行境界ボックスの場合に、軸並行境界ボックスの中心座標と、中心から互いに直交する3面それぞれまでの距離と、を位置情報としてもよい。つまり、位置情報により、オブジェクトの境界ボリュームの形状と仮想空間内の位置とが示せればよい。
ここでは、位置情報として軸並行境界ボックスを用いた例を示す。完全二分木作成部21は、仮想空間内に配置されている複数のオブジェクトそれぞれの軸並行境界ボックスの情報(最小点の座標値、及び最大点の座標値等)を位置情報としてリーフに関連付ける。このとき、各オブジェクトの位置情報を、各オブジェクトに関連付けられている識別子順にリーフに関連づけてもよいし、各オブジェクトの位置情報をランダムにリーフに関連づけてもよい。
そして、完全二分木作成部21は、2個のリーフを子ノードとする親ノードに、その2個のリーフに関連付けられている2個の位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの情報を位置情報として関連付ける。この処理を2個のリーフ毎に行い、それぞれの親ノードに位置情報を関連付ける。そして、完全二分木作成部21は、位置情報を関連付けたノード2個を子ノードとする親ノードに、その2個のノードに関連付けられている2個の位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの情報を位置情報として関連付ける。この処理を2個のノード毎に行い、それぞれの親ノードに位置情報を関連付ける。このように、完全二分木作成部21は、2個のノード毎に親ノードに位置情報を関連付けていく処理をルートまで実行することで、すべてのノードに位置情報を関連付けた完全二分木を作成する。
図4に例示する完全二分木を用いて、完全二分木作成部21が実行する処理を具体的に説明する。図4に示すように、完全二分木は、リーフを第1層として順に第2層、第3層、第4層を構成し、第4層をルートとする。そして、便宜上、第1層の各リーフは左からリーフ11〜リーフ18、第2層の各ノードは左からノード21〜ノード24、第3層の各ノードは左からノード31、ノード32、として各リーフ及び各ノードの階層と位置を識別することとする。ここで、例えば、仮想空間内にオブジェクトA〜オブジェクトH(A〜Hを識別子とする)の8個のオブジェクトが配置されているとする。このとき、各オブジェクトの位置情報となる軸並行境界ボックスをPA〜PHと記すこととする。この場合、完全二分木作成部21は、各オブジェクトの位置情報PA〜PHを識別子順にそれぞれ、第1層のリーフ11〜リーフ18に関連付ける。そして、完全二分木作成部21は、リーフ11に関連付けられている位置情報PAの示す軸並行境界ボリュームと、リーフ12に関連付けられている位置情報PBが示す軸並行境界ボリュームと、を内包する新たな軸並行境界ボリュームをPABとして、ノード21に関連付ける。同様にして、リーフ13に関連付けられている位置情報PCの示す軸並行境界ボリュームと、リーフ14に関連付けられている位置情報が示す軸並行境界ボリュームPDと、を内包する新たな軸並行境界ボリュームをPCDとして、ノード22に関連付ける。そして、ノード21に関連付けられている位置情報PABの示す軸並行境界ボリュームと、ノード22に関連付けられている位置情報PCDが示す軸並行境界ボリュームと、を内包する新たな軸並行境界ボリュームをPABCDとして、ノード31に関連付ける。このように、2つの子ノードに関連付けられている位置情報が示す軸並行境界ボリュームを内包する新たな軸並行境界ボリュームを親ノードに関連付けていくと、ノード23にPEF、ノード24にPGH、ノード32にPEFGHが関連付けられることとなる。なお、ルートに関連付けられる位置情報は、仮想空間内に配置されるオブジェクトA〜オブジェクトHをすべて内包する軸並行境界ボリュームとなる。
ノード入れ替え部22は、完全二分木作成部21が作成した完全二分木の最下層(リーフ層)より1つ上層から、2n(n≧1)個のノード毎に、2n個のノードに属する2・2n個の子ノードそれぞれに関連付けられた位置情報に基づいて、2・2n個の子ノードを入れ替える。ここでは、完全二分木作成部21が作成した完全二分木のリーフに関連付けられている各オブジェクトの位置情報を、仮想空間内の位置関係を反映した形に入れ替える。
図4に例示する完全二分木を用いて、ノード入れ替え部22が実行する処理を具体的に説明する。例えば、n=1とすると、完全二分木作成部21が作成した完全二分木の第2層において、2個のノード毎(ノード21及びノード22、ノード23及びノード24)に、その子ノード(リーフ11〜リーフ14、リーフ15〜リーフ18)に関連付けられている4個の位置情報(PA〜PD、PE〜PH)に基づいて子ノードを入れ替える。ここで、ノード21及びノード22についての処理を説明するが、ノード23及びノード24についての処理も同時に実行されることとする。まず、ノード入れ替え部22は、位置情報PB、PC、及びPDがそれぞれ示す軸並行境界ボックスのうち、位置情報PAが示す軸並行境界ボックスとの位置関係が比較的近いものを選択する。例えば、ノード入れ替え部22は、位置情報PA及び位置情報PB、位置情報PA及び位置情報PC、位置情報PA及び位置情報PD、それぞれについて2つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの体積(それぞれ、VAB、VAC、VADとする)を求める。そして、この体積が小さいほど2つの位置情報が示す軸並行境界ボックスの位置が近いと判断する。ノード入れ替え部22は、体積が最も小さくなる組み合わせがノード21に属するよう位置情報PA〜PDを入れ替える。例えば、体積VACが最も小さいと判断された場合は、位置情報PA及び位置情報PCがノード21に属し、位置情報PBと位置情報PDがノード22に属するよう、位置情報PBと位置情報PCとを入れ替える。そして、位置情報PA及び位置情報PCがそれぞれ示す軸並行境界ボックスを内包する新たな軸並行境界ボックスを位置情報PACとしてノード21に関連づけ、位置情報PB及び位置情報PDがそれぞれ示す軸並行境界ボックスを内包する新たな軸並行境界ボックスを位置情報PBDとしてノード22に関連づける。
そして、第2層についてノードの入れ替えが完了すると、ノード入れ替え部22は、第2層についてノードを入れ替えた完全二分木の第3層において、2個のノード(ノード31及びノード32)それぞれの子ノードについて上述した第2層における処理と同様の処理を実行する。図4に例示する完全二分木は第4層までであるが、さらに深い階層を有する完全二分木においては、このような処理を最上層(ルート)になるまで各層で実行する。なお、入れ替え部22による処理について、最下層より1つ上層から、最上層になるまで順に実行してもよいし、各層を任意の順に実行してもよい。
以上の説明では、ノード入れ替え部22は、入れ替え対象となる複数の子ノードのそれぞれに関連付けられた軸並行境界ボックスの中から、位置関係が相対的に近い2つの軸並行境界ボックスの組み合わせを決定するために、組み合わせ候補となる2つの軸並行境界ボックスを内包する軸並行境界ボックスの体積を実際に算出し、体積が小さい軸並行境界ボックスに内包される2つの軸並行境界ボックスに関連付けられた2つの子ノードが同じ親ノードに属するように子ノードの入れ替えを行うこととした。しかしながらノード入れ替え部22は、このような方法に限られず、各種の方法で位置関係が相対的に近い2つの軸並行境界ボックスの組み合わせを決定してもよい。例えばノード入れ替え部22は、組み合わせ候補となる2つの軸並行境界ボックスを内包する軸並行境界ボックスの3辺の長さの総和や、対角線の長さ等の数値を判断基準として用いて、位置関係が相対的に近い2つの軸並行境界ボックスの組み合わせを決定してもよい。その場合も、判断基準として用いる数値が小さいほど、2つの軸並行境界ボックスを内包する軸並行境界ボックス自体の大きさが小さいと判断でき、2つの軸並行境界ボックスの位置が相対的に近いと判断できる。
上述した、完全二分木作成部21、ノード入れ替え部22による処理を、簡易モデルを用いて実施した例を示す。図5に仮想空間内に配置される複数のオブジェクトの簡易モデルを示す。図5に示す簡易モデルは、格子状の二次元空間(x−y座標)に大きさの等しいオブジェクト(格子1つがオブジェクトを示すこととする)が配置されるものである。ここでは、二次元空間内にオブジェクトA〜オブジェクトH(A〜Hを識別子とする)の8個のオブジェクトが配置されている。そして、位置情報となる軸並行境界ボックスも格子で表されることなり、例えばオブジェクトAの位置情報PAは、各軸の座標値が最小となる最小点の座標値(0、2)、及び各軸の座標値が最大となる最大点の座標値(1、3)で表される軸並行境界ボックスとする。この二次元空間内におけるオブジェクトA〜オブジェクトHの位置関係を反映した完全二分木を作成することを目的とする。
まず、完全二分木作成部21は、オブジェクトA〜オブジェクトHそれぞれの位置情報PA〜PHを識別子順にリーフ11〜リーフ18に関連付け、図6Aに示す完全二分木を作成する。次に、ノード入れ替え部22は、第2層のノード21及びノード22について、位置情報PA及び位置情報PB、位置情報PA及び位置情報PC、位置情報PA及び位置情報PD、それぞれについて2つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの体積(簡易モデルにおいては面積に相当する)を求める。ここで、最小点座標(xs、ys)、最大点座標(xl、yl)とすると、面積VはV=(xl−xs)(yl−ys)となる。まず、位置情報PA(最小点(0、2)、最大点(1、3))及び位置情報PB(最小点(5、4)、最大点(6、5))が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスPABは、最小点(0、2)、最大点(6、5)で表される。そして、軸並行境界ボックスPABの面積はVAB=18となる。同様にして、位置情報PA(最小点(0、2)、最大点(0、3))及び位置情報PC(最小点(2、2)、最大点(3、3))が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスPACは、最小点(0、2)、最大点(3、3)で表され、面積VAC=3となる。位置情報PA(最小点(0、2)、最大点(0、3))及び位置情報PD(最小点(2、4)、最大点(3、5))が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスPADは、最小点(0、2)、最大点(3、5)で表され、面積VAD=9となる。以上より、新たな軸並行境界ボックスの面積はそれぞれ、VAB=18、VAC=3、VAD=9となり、VACが最も小さくなるので、位置情報PA及び位置情報PCがノード21に属するよう位置情報PBと位置情報PCとを入れ替える。そして、第2層のノード23及びノード24についても、位置情報PE及び位置情報PF、位置情報PE及び位置情報PG、位置情報PE及び位置情報PH、それぞれについて2つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの面積VEF、VEG、VEHを求めると、VEF=15、VEG=42、VEH=5となる。したがって、VEHが最も小さくなるので、位置情報PE及び位置情報PHがノード23に属するよう位置情報PFと位置情報PHとを入れ替える。以上より、第2層についてのノード入れ替え処理が完了した後の完全二分木は図6Bとなる。
次に、ノード入れ替え部22は、図6Bの完全二分木を用いて第3層についてのノード入れ替え処理を実行する。第3層におけるノード31及びノード32について、位置情報PAC及び位置情報PBD、位置情報PAC及び位置情報PEH、位置情報PAC及び位置情報PGF、それぞれについて2つの位置情報が示す軸並行境界ボックスを内包する新たな軸並行境界ボックスの面積を求めると、VACBD=18、VACEH=15、VACGF=30となる。したがって、VACEHが最も小さくなるので、位置情報PAC及び位置情報PEHがノード31に属するよう位置情報PBDと位置情報PEHとを入れ替え、ノード入れ替え部22による処理を終了する。以上より、第3層についてのノード入れ替え処理が完了した後の完全二分木は図6Cとなる。これにより、図6Cに示す仮想空間内のオブジェクトの位置関係が反映された完全二分木となる。
さらに、タイムカウンタt=nにおいて、完全二分木作成部21、ノード入れ替え部22により作成された完全二分木を用いて、タイムカウンタt=n+1におけるノード入れ替え部22による処理を実行することとしてもよい。具体的には、例えば、タイムカウンタt=nにおいて図6Cに示す完全二分木が作成されたとする。そして、タイムカウンタt=n+1において完全二分木作成部21が完全二分木を作成する際に、タイムカウンタt=n+1において仮想空間に配置されているオブジェクトの位置情報を、図6Cに示す完全二分木のリーフと同じ順に関連付ける。つまり、リーフの左から、位置情報PA、PC、PE、PH、PB、PD、PG、PFをそれぞれ関連付ける。なお、タイムカウンタt=n+1における完全二分木は、図6Cのt=nにおける完全二分木とは位置情報の順が同じであり、位置情報の内容についてはタイムカウンタt=n+1における仮想空間内の位置情報が反映されている。これは、タイムカウンタt=nとタイムカウンタt=n+1とにおいて各オブジェクトの位置が劇的に変化することが少ないことから、タイムカウンタt=n+1においてタイムカウンタt=nにおける各オブジェクトとリーフとの対応関係を引き継ぐことで、タイムカウンタを加算するにつれ徐々に完全二分木を最適な形にするものである。
なお、完全二分木において、すべてのノードは必ず2つの子ノードを有するので、いずれの2n個のノードを選択してもその子ノードの数は等しくなる。よって、ノード入れ替え部22が行う、2n個のノードの子ノードに関連付けられている位置情報に基づくノード入れ替え処理は、いずれの2n個のノードを選択しても同様のアルゴリズムで実行できることとなる。したがって、ノード入れ替え部22は、各層における2n個のノードそれぞれについての、ノードの入れ替え処理を並列に実行することができる。
衝突判定部23は、ノード入れ替え部22により入れ替えが完了した完全二分木を用いてオブジェクト同士の衝突判定を行うシミュレーション処理を実行する。衝突判定は、完全二分木の各ノードの子ノード同士について、それぞれ関連付けられている位置情報に基づいて行われる。衝突判定方法として、例えば、球体の境界ボリュームを用いた位置情報に基づく場合は、中心座標の距離が2つの半径の和より小さくなる場合に、球体の境界ボリューム同士が衝突していると判定する方法がある。また、軸並行境界ボックスを用いた位置情報に基づく場合は、最小点の座標値と、最大点の座標値とに基づいて各軸上で重なりがあるかを判定し、3つの軸上すべてで重なりが有ると判定された場合に、軸並行ボックス同士が衝突していると判定する。また、軸並行境界ボックスにおいて中心座標と、中心から互いに直交する3面それぞれまでの距離と、を位置情報としている場合は、各軸において中心座標の距離が2つの半径(中心から面までの距離)の和より小さくなるかを判定し、3つの軸すべてで小さいと判定された場合に、軸並行境界ボックス同士が衝突していると判定してもよい。
本実施形態における衝突判定部23による衝突判定は、ノード入れ替え部22によりノードが入れ替えられた完全二分木を用いて実行される。衝突判定部23は、完全二分木のルートからリーフまで順に各層において2つのノード同士について、それぞれに関連付けられている位置情報に基づいて衝突判定を行う。そして、2つのノード同士について、それぞれに関連付けられている位置情報が示す軸並行境界ボックス同士が衝突していると判定された場合は、2つのノードの4つの子ノードについて全ての組み合わせにおける衝突判定を行う。そして、2つのノード同士について衝突していないと判定された場合は、2つのノードそれぞれの子ノード同士について衝突判定を行う。これは、2つのノード同士について衝突していると判定された場合は、その子ノード同士についても衝突していると判定される可能性があり、2つのノード同士について衝突していないと判定された場合は、その子ノード同士は衝突していないと判断できるという考えのもとに実行する処理である。ノードに関連付けられる位置情報は、そのノードに属するすべての下位ノードの位置情報を含むものなので、上位ノードに関連付けられる位置情報において衝突していないと判定されれば、下位ノードに関連づけられる位置情報においても衝突していないといえる。これによって、衝突しないオブジェクト同士の衝突判定をスキップすることが可能となる。
ここで、衝突判定部23により実行される具体的な処理について図5に示す簡易モデルを用いて説明する。衝突判定部23は、ノード入れ替え部22により入れ替えが完了した、図6Cに示す完全二分木の第3層から第1層まで順に各層において衝突判定を行う。まず、衝突判定部23は、第3層のノード同士(ノード31及びノード32)について、ノード31に関連付けられている位置情報PACEHと、ノード32に関連付けられている位置情報PBDGFと、に基づいて上述した衝突判定方法を用いてオブジェクト同士の衝突判定を行う。ここでは、位置情報PACEHが示す軸並行境界ボックス(最小点(0、0)、最大点(3、5))と位置情報PBDGFHが示す軸並行境界ボックス(最小点(2、2)、最大点(6、7))とで各軸において重なりが生じるかを判定すると、最小点(2、2)、最大点(3、5)の範囲で重なりが生じており、位置情報PACEHが示す軸並行境界ボックスと位置情報PBDGFHが示す軸並行境界ボックスとは衝突していると判定される。そして、ノード31及びノード32について衝突していると判定されたので、第2層における衝突判定の際に、その子ノードの全ての組み合わせについても衝突判定を行う。つまり、ノード21及びノード22、ノード21及びノード23、ノード21及びノード24、ノード22及びノード23、ノード22及びノード24、ノード23及びノード24についてそれぞれ衝突判定を行う。上述した衝突判定方法を用いて判定すると、ノード21及びノード22、ノード23及びノード24について衝突していると判定される。そして、第1層における衝突判定の際に、その子ノードの全ての組み合わせについても衝突判定を行い、第1層における衝突判定の結果、互いに衝突する2つのオブジェクトが特定される。
以上のように、衝突判定部23による各層における衝突判定処理は、2つのノードにそれぞれ関連づけられた位置情報に基づいて衝突の判定を行っているので、いずれのノードを選択してもノードに関連付けられた位置情報に基づいて衝突の判定を行うという、同じアルゴリズムの処理となる。よって、各層において衝突の判定を行う2つのノードの組み合わせそれぞれを並列に処理することができる。
次に、処理S4によるオブジェクトの物理量算出処理について説明する。オブジェクトの物理量算出処理は、図3に示す、オブジェクトペア情報取得部31、並び替え部32、特定部33、割り当て部34、計算部35、によって実現される。
ここでは、互いに接触している2つのオブジェクトの拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与えるべき物理量を算出する。しかし、互いに接触しているオブジェクトペアとして、例えば、オブジェクトペア1(オブジェクトA、オブジェクトB)と、オブジェクトペア2(オブジェクトA、オブジェクトC)とが、同時に存在する場合がある。この場合、両オブジェクトペアは共通してオブジェクトAを含んでいるため、それぞれのオブジェクトペアについての計算は相互に依存するものとなり並列に処理することが難しい。そこで、互いに接触している複数のオブジェクトペアを、
異なるタイミングで処理が実行される複数のステージにグループ分けする。なお、各ステージは並列処理可能な複数のスレッドを有し、オブジェクトペアを各スレッドに割り当てることでオブジェクトペアそれぞれを並列に処理することが可能とする。そして、それぞれのステージが処理されるタイミングにおいて、そのステージに割り当てられたオブジェクトペアについての計算を並列に実行する。以下に、詳細を説明する。
異なるタイミングで処理が実行される複数のステージにグループ分けする。なお、各ステージは並列処理可能な複数のスレッドを有し、オブジェクトペアを各スレッドに割り当てることでオブジェクトペアそれぞれを並列に処理することが可能とする。そして、それぞれのステージが処理されるタイミングにおいて、そのステージに割り当てられたオブジェクトペアについての計算を並列に実行する。以下に、詳細を説明する。
オブジェクトペア情報取得部31は、互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を順に取得する。オブジェクトペア情報取得部31は、衝突判定部23が衝突すると判定した2つのオブジェクトを互いに接触している2つのオブジェクトとして取得する。また、以下では、オブジェクトペア情報取得部31が情報を取得する互いに接触している2つのオブジェクトからなるオブジェクトペアを取得オブジェクトペアと表記する。また、オブジェクトペアの情報は各オブジェクトの識別子、属性情報であってよい。
割り当て部34は、オブジェクトペア情報取得部31が取得した複数個の取得オブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上の取得オブジェクトペアが同じステージに属さないように、複数のステージのいずれかに割り当てる。
割り当て部34が実行する処理を、図7を用いて具体的に説明する。図7は、取得オブジェクトペアと、取得オブジェクトペアの割り当てを管理するオブジェクトチェックテーブルとの一例を示す図である。オブジェクトチェックテーブルは、記憶部12に保持されることとする。図10に例示するオブジェクトチェックテーブルは、ステージごとに、各オブジェクトを識別する識別子と、その識別子によって識別されるオブジェクトが計算処理を実行されることを示すフラグと、を対応づけてなるものである。すなわち、ステージs(s≧0)においてフラグが1の場合には、その識別子によって識別されるオブジェクトはステージsで計算処理を実行されることを示しており、フラグが0の場合には、ステージsで計算処理は実行されないことを示している。このオブジェクトチェックテーブルでは初期状態においてすべてのフラグが0となっている。
まず、図7に例示するような複数の取得オブジェクトペアが存在するとする。割り当て部34は、これらの取得オブジェクトペアを、オブジェクトチェックテーブルのステージ0から順に割り当てる。割り当て部34は、最初の取得オブジェクトペア(オブジェクトA、オブジェクトB)を取得すると、ステージ0に対応する識別子A、識別子Bのフラグを1に設定する。次に、取得オブジェクトペア(オブジェクトA、オブジェクトC)を取得すると、ステージ0に対応する識別子Cのフラグは0であるが、識別子Aのフラグは1となっているため、取得オブジェクトペア(オブジェクトA、オブジェクトC)はスレッド0で計算することができない。そこで、次のステージ(ステージ1)に対応する識別子A、識別子Cのフラグは0となっているため、オブジェクトペア(オブジェクトA、オブジェクトC)をステージ1に割り当てることとする。つまり、ステージ1に対応する識別子A、識別子Cのフラグを1に設定する。そして、次の取得オブジェクトペア(オブジェクトD、オブジェクトE)は、ステージ0に割り当てることができるので、ステージ0に対応する識別子D、識別子Eのフラグを1と設定する。このようにして、取得オブジェクトペアについてフラグを設定する。このオブジェクトチェックテーブルにより、取得オブジェクトペアそれぞれの処理を実行するタイミングがわかる。
計算部35は、互いに接触している2つのオブジェクトの接触による各オブジェクトの位置への影響を計算する。計算部35は、互いに接触している2つのオブジェクトの拘束条件を解くことで、拘束条件を満たすために各オブジェクトに与える物理量を算出する。本実施形態では、計算部35は、取得オブジェクトペアについて、割り当て部34が作成したオブジェクトチェックテーブルに割り当てられたステージ番号順に、取得オブジェクトペアの拘束条件を解くことで各オブジェクトに与える物理量を算出する。ここで、計算部35は、ステージ0から順に計算処理を実行するものとするが、各ステージが並列に計算されなければ順序は問わない。
ここで、仮想空間内を運動する複数のオブジェクトについて、時間とともに変化するオブジェクトの位置を計算する物理シミュレーション等において、例えば、タイムカウンタt=0において互いに接触しているオブジェクトペアは、タイムカウンタt=1においても互いに接触している場合が多い。そこで、タイムカウンタt=nにおける複数個の取得オブジェクトペアのうち、タイムカウンタt=n−1におけるいずれかの取得オブジェクトペアと2つの構成要素が共通するオブジェクトペア(以下、共通オブジェクトペアとする)を特定する。そして、タイムカウンタt=nにおける計算を実行する際に、共通オブジェクトペアの情報を用いることで計算の処理量を低減する。以下に共通オブジェクトペアを特定する処理について具体的に説明する。共通オブジェクトを特定する処理は、並び替え部32、特定部33により実現される。
まず、特定部33は、所定の基準により、取得オブジェクトペアに含まれる2つのオブジェクトのうちの一方を基準オブジェクトとして、他方を付随オブジェクトとして特定することとする。例えば、取得オブジェクトペアに含まれる2つのオブジェクトの識別子の大小に基づいて、識別子の小さいオブジェクトを基準オブジェクトとする。具体的に、オブジェクトペア(オブジェクトA、オブジェクトB)については識別子の大小はA<Bとなるため、オブジェクトAは基準オブジェクト、オブジェクトBは付随オブジェクトとして特定される。また、識別子の大きいオブジェクトを基準オブジェクトとしてもよい。
そして、特定部33は、t=nにおける複数個の取得オブジェクトペアそれぞれを判定対象ペアとして、t=n−1における複数個の取得オブジェクトペアのうち、基準オブジェクトが判定対象ペアと共通するオブジェクトペアを比較対象ペアとして抽出する。そして、判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定し、付随オブジェクトが共通する場合に当該判定対象ペアを共通オブジェクトペアとして特定する。なお、付随オブジェクトが共通しない場合は当該判定対象ペアを、t=n−1においては存在せず、t=nにおいて出現した新規のオブジェクトペア(以下、新規オブジェクトペアとする)として特定する。図8に判定対象ペアと比較対象ペアの一例を示す。図8における、t=nにおける取得オブジェクトペアのうち(A、B)を判定対象ペアとすると、t=n−1における取得オブジェクトペアのうち、その基準オブジェクトがAであるオブジェクトペアが比較対象ペアとなる。つまり、(A、B)及び(A、D)が比較対象ペアとなる。図8に示すように、判定対象ペア(A、B)と、その比較対象ペアとなる(A、B)及び(A、D)を線で結ぶことで、判定対象ペア、比較対象ペアとして対応することを示す。その他のオブジェクトペアについても、判定対象ペアに対して比較対象ペアとなるものを対応づけている。そして、判定対象ペア(A、B)と、比較対象ペア(A、B)及び(A、D)とでそれぞれ付随オブジェクトが共通するか否かを判定する。ここでは、判定対象ペア(A、B)及び比較対象ペア(A、B)の両者とも付随オブジェクトがBであるため、判定対象ペア(A、B)は共通オブジェクトペアとして特定される。また、判定対象ペア(A、C)と、比較対象ペア(A、B)及び(A、D)とでそれぞれ付随オブジェクトが共通するか否かを判定すると、いずれも判定対象ペアと比較対象ペアとで付随オブジェクトが異なるため、判定対象ペア(A、C)は新規オブジェクトペアとして特定される。
このように、取得オブジェクトペアのうち、基準オブジェクトと付随オブジェクトを特定し、基準オブジェクトが共通する判定対象ペアと比較対象ペアとの付随オブジェクトを比較することで、判定対象ペアそれぞれについて比較すべき比較対象ペアの数を絞り込める。また、特定部33が行う判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定する処理は、いずれの判定対象ペアを選んでも基準オブジェクトが共通する比較対象ペアを抽出して付随オブジェクトを比較するという同様のアルゴリズムで実行することができることになる。よって、特定部33は、判定対象ペアそれぞれの、比較対象ペアとで付随オブジェクトが共通するか否かを判定する処理を並列に実行することができる。
ここで、並び替え部32が、t=n−1における複数個の取得オブジェクトペアを、公知のバケットソート処理を用いて、基準オブジェクトの識別子順に並び替えることとしてもよい。例えば、図8に示すt=n−1における取得オブジェクトペアを並び替えると、基準オブジェクトは、A、A、B、D、Fの順となる。ここで、識別子毎にその出現個数を算出すると、A:2個、B:1個、C:0個、D:1個、E:0個、F:1個となる。これにより、並び替えられた取得オブジェクトペアのうち、基準オブジェクトの識別子がAのオブジェクトペアは1番目から2番目(Aの個数から)、基準オブジェクトの識別子がBのオブジェクトペアは3番目(AとBの個数の和及びBの個数から)、基準オブジェクトの識別子がFのオブジェクトペアは5番目(A〜Fの個数の和及びFの個数から)、と特定することが可能となる。このようにして、特定の識別子を有するオブジェクトペアを、その識別子までの各識別子の個数の和と、その識別子の個数と、によって特定することができる。よって、t=n−1における取得オブジェクトペアを基準オブジェクトの識別子順に並び替えることによって、特定部33は、判定対象ペアに対する比較対象ペアを容易に抽出することができる。なお、t=nにおける複数個の取得オブジェクトペアを、公知のバケットソート処理を用いて、基準オブジェクトの識別子順に並び替えてもよい。
また、特定部33は、t=n−1における複数個の取得オブジェクトペアそれぞれを判定対象ペアとして、t=nにおける複数個の取得オブジェクトペアのうち、基準オブジェクトが判定対象ペアと共通するオブジェクトペアを比較対象ペアとして抽出してもよい。そして、判定対象ペアと比較対象ペアとで付随オブジェクトが共通するか否かを判定し、付随オブジェクトが共通する場合に、共通オブジェクトペアとして特定する。なお、付随オブジェクトが共通しない場合は、t=n−1においては存在しており、t=nにおいては存在しない、削除オブジェクトペアとして特定する。具体的には、図8における、t=n−1における判定対象ペア(A、B)と、t=nにおける比較対象ペア(A、B)及び(A、C)とでそれぞれ付随オブジェクトが共通するか否かを判定する。ここでは、判定対象ペア(A、B)及び比較対象ペア(A、B)の両者とも付随オブジェクトがBであるため、判定対象ペア(A、B)は共通オブジェクトペアとして特定される。また、判定対象ペア(A、D)と、比較対象ペア(A、B)及び(A、C)とでそれぞれ付随オブジェクトが共通するか否かを判定すると、いずれも判定対象ペアと比較対象ペアとで付随オブジェクトが異なるため、判定対象ペア(A、D)は削除オブジェクトとして特定される。
このように、判定対象ペア及び比較対象ペアを識別子順に並び替えることで、判定対象ペアと基準オブジェクトが共通する比較対象ペアの抽出処理を容易にすることができ、特定部33が共通オブジェクトペアを特定する処理を高速化できる。
ここで、共通オブジェクトペア特定処理により特定された共通オブジェクトペアを用いた、オブジェクトの物理量算出処理について、図9のフロー図を参照しながら説明する。
オブジェクトペア情報取得部31がタイムカウンタt=nにおいて互いに接触しているオブジェクトペアの情報を取得する(S101)。
特定部33が、処理S101にてオブジェクトペア情報取得部31が取得したt=nにおける取得オブジェクトペアと、タイムカウンタt=n−1においてオブジェクトペア情報取得部31が取得したオブジェクトペアとを比較することにより、共通オブジェクトペアと、新規オブジェクトペアと、を特定する(S102)。
割り当て部34は、記憶部12に記憶されているタイムカウンタt=n−1におけるオブジェクトチェックテーブルを参照し、処理S102にて特定部33が特定した共通オブジェクトペアが割り当てられているステージ番号を取得する(S103)。
割り当て部34は、タイムカウンタt=nにおけるオブジェクトチェックテーブルに、共通オブジェクトペアを割り当てる(S104)。このとき、処理S103にて取得した、タイムカウンタt=n−1におけるステージ番号に割り当てる。つまり、共通オブジェクトペアについては、タイムカウンタt=n−1におけるオブジェクトチェックテーブルと同じフラグ設定を行う。
割り当て部34は、処理S104にて共通オブジェクトペアを割り当てたオブジェクトチェックテーブルに新規オブジェクトペアを割り当てる(S105)。そして、作成されたオブジェクトチェックテーブルをタイムカウンタt=nと関連付けて記憶部12に保持する。
計算部35は、処理S102にて特定した共通オブジェクトペアと、新規オブジェクトペアと、を合成して処理オブジェクトペアとする。そして、処理オブジェクトペアについて、処理S105にて作成されたオブジェクトチェックテーブルで割り当てられたステージ番号順に、オブジェクトペアの拘束条件を解くことで各オブジェクトに与えるべき物理量を算出する(S106)。
物理シミュレーション等において、所定の時間間隔dの間でオブジェクトの位置が大きく変化することは少ないので、t=n−1における取得オブジェクトペアとt=nにおける取得オブジェクトペアとを比較すると、新規オブジェクトペアの数より共通オブジェクトペアの数の方が多くなる。このような処理量の多くなる共通オブジェクトペアの割り当てを簡易化することで、割り当て部34の割り当て処理を高速化できる。
次に、処理S5によるオブジェクトのスリープ管理処理について説明する。オブジェクトのスリープ管理処理は、図3に示す、オブジェクトペア情報取得部31、値付与部41、ポインタ上書き部42、ルート値上書き部43、オブジェクト連結部44、及びポインタ値更新部45によって実現される。
スリープ管理を行う場合には、互いに接触している複数のオブジェクトを1つのグループとして管理し、同じグループに属する複数のオブジェクトを同時にスリープさせたり、同時にスリープから解除させたりする必要がある。そうでないと、例えば一部のオブジェクトのスリープが解除されたが接触する他のオブジェクトはスリープしたままだった場合などにおいて、オブジェクトがポッピングやジッタリングなどの不自然な挙動を示し、挙動の連続性を維持できなくなることがあるからである。具体的に、シミュレーション装置1は、互いに接触している複数のオブジェクトが連結して構成される連結オブジェクトに含まれるすべてのオブジェクトに等しい管理IDを付与することで、互いに接触している複数のオブジェクトを1つのグループとして管理することとする。
まず、オブジェクト連結部44が、連結オブジェクトを作成する処理について説明する。連結オブジェクトを作成する処理は、主に、オブジェクトペア情報取得部31、値付与部41、ルート値上書き部42、ポインタ値上書き部43によって実現される。
オブジェクト連結部44は、前述したオブジェクトペア情報取得部31が取得する取得オブジェクトペアを連結することとする。オブジェクト連結部44は、互いに接触している3個以上のオブジェクトの何れかを終端オブジェクトとして、各オブジェクトに接触先オブジェクトを示すポインタ値を付与して各オブジェクトを連結する。そして、オブジェクト連結部44が連結した3個以上のオブジェクトが連結オブジェクトとなる。また、ポインタ値は接触先オブジェクトの識別子とし、終端オブジェクトのポインタ値は必ず自身の識別子となる。つまり、終端オブジェクトのポインタ値が他のオブジェクトを示すことはなく、これにより連結オブジェクトは、各オブジェクトが終端オブジェクトに向かうよう一方向に連結されるものとなる。
ここで、連結オブジェクトを作成する処理について、オブジェクトの連結手順の一例を示した図10を用いて説明する。例えば、仮想空間内にオブジェクトA、オブジェクトB、及びオブジェクトCの3個のオブジェクトが存在するとする。これらのオブジェクトは、タイムカウンタt=nにおいて取得オブジェクトペア(A、C)及び(B、C)としてオブジェクトペア情報取得部34によって取得される。このような、タイムカウンタt=nにおいて互いに接触している3個のオブジェクトを連結することとする。
連結オブジェクトを作成するための前提として、ここでは、識別子の小さいオブジェクトを終端オブジェクトとするよう各オブジェクトを連結することとする。そのために、まず、値付与部41が各オブジェクトにルート値とポインタ値とを付与する。ルート値は、識別子の小さいオブジェクトを終端オブジェクトとするようポインタ値の示す方向を決定するための値である。そして、ポインタ値は、基本的にはルート値の大きいオブジェクトからルート値の小さいオブジェクトを示すよう設定されることとする。なお、識別子の大きいオブジェクトを終端オブジェクトとしてもよい。その場合は、ポインタ値は基本的にはルート値の小さいオブジェクトからルート値の大きいオブジェクトを示すよう設定される。
図10に示すように、初期状態(ステップ0)は、いずれのオブジェクトも連結していない状態とし、ここで、値付与部41が各オブジェクトにルート値及びポインタ値の初期値を付与することとする。各オブジェクトに付与するルート値及びポインタ値の初期値は各オブジェクトの識別子とする。
ステップ1にて、取得オブジェクトペア(B、C)が取得されると、ルート値上書き部43が、取得オブジェクトペアに含まれるオブジェクトのうちそのルート値が大きいオブジェクト(以下、ルート大オブジェクトとする)に付与されているルート値を、ルート値が小さいオブジェクト(以下、ルート小オブジェクト)に付与されているルート値に更新する。そして、ポインタ値上書き部42が、ルート大オブジェクトに付与されているポインタ値を、ルート小オブジェクトの識別子に更新する。つまり、オブジェクトCに付与されるルート値及びポインタ値がBとなり、オブジェクトCからオブジェクトBへのポインタが示される。
ステップ2にて、取得オブジェクトペア(A、C)が取得されると、ルート値上書き部43が、ルート大オブジェクト(オブジェクトC)に付与されているルート値をルート小オブジェクト(オブジェクトA)に付与されているルート値に更新する。そして、ポインタ値上書き部42が、ステップ1と同様に、ルート大オブジェクトに付与されているポインタ値をルート小オブジェクトの識別子に更新する。つまり、オブジェクトCに付与されるルート値及びポインタ値はAとなる。
ステップ3にて、タイムカウンタt=n+1となると、各オブジェクトに付与されているポインタ値が初期化される。タイムカウンタt=n+1となると、オブジェクトペア情報取得部31がタイムカウンタt=n+1における取得オブジェクトペアを取得するため、タイムカウンタt=nにおける各オブジェクトのポインタ値は初期化されることになる。しかし、各オブジェクトに付与されているルート値はタイムカウンタt=nの処理が終了した時点の値とする。
ステップ4にて、取得オブジェクトペア(B、C)が取得されると、ルート値上書き部43が、ルート大オブジェクト(オブジェクトB)に付与されるルート値を、ルート小オブジェクト(オブジェクトC)に付与されているルート値に更新する。そして、ポインタ値上書き部42は、ルート大オブジェクトに付与されているポインタ値を、ルート小オブジェクトの識別子に更新する。つまり、オブジェクトBのルート値がA、ポインタ値がCとなり、オブジェクトBからオブジェクトCへのポインタが示される。
ステップ5にて、取得オブジェクトペア(A、C)が取得されると、オブジェクトA及びオブジェクトCのルート値を比較する。ここで、オブジェクトAに付与されるルート値とオブジェクトCに付与されるルート値とは等しくなる。このような場合は、オブジェクトの識別子の比較により、ポインタ値上書き部42が、識別子の大きいオブジェクト(オブジェクトC)に付与されているポインタ値を、識別子の小さいオブジェクト(オブジェクトA)の識別子に更新する。つまり、オブジェクトCに付与されるポインタ値がAとなり、オブジェクトCからオブジェクトAへのポインタが示される。そして、ステップ5が終了した時点で、オブジェクトAを終端としてオブジェクトC、オブジェクトBが連結されたこととなる。
このように、オブジェクト連結部44によるタイムカウンタt=nにおける処理を終了した時点でのルート値を、タイムカウンタt=n+1における処理の開始時のルート値に設定することで、一度の処理で連結オブジェクトを作成できない場合でも、タイムカウンタを加算するにつれ識別子の小さいオブジェクトを終端オブジェクトとして各オブジェクトを連結していくことができる。
なお、上述の例では、タイムカウンタt=nにおいて、取得オブジェクトペア(B、C)及び(A、C)を1回ずつ処理することとした。この各ステップの処理は、並列に実行されてよい。さらにオブジェクト連結部44は、以上説明した取得オブジェクトペア(B、C)及び(A、C)についての処理を、タイムカウンタt=nにおいて繰り返し実行することとしてもよい。その場合は、ステップ2の後、取得オブジェクトペア(B、C)が取得されると、オブジェクトBのルート値がA、ポインタ値がCとなり、ステップ5が終了した時点と同じ状態となる。いずれの場合でも、ルート値上書き部43がルート値を更新する毎に更新されたルート値を保持することで最終的には、識別子の最も小さいオブジェクトを終端とする連結オブジェクトを作成することができる。
図11Aは、オブジェクト連結部44により連結された連結オブジェクトの一例を模式的に示す図である。図11Aに示すように、連結オブジェクトは、オブジェクトA〜オブジェクトEにより構成され、オブジェクトAを終端オブジェクトとする。そして、矢印は各オブジェクトに付与されるポインタ値の示す接触先オブジェクトを指している。つまり、図11AのオブジェクトAのポインタ値はA、オブジェクトBのポインタ値はA、オブジェクトCのポインタ値はB、オブジェクトDのポインタ値はC、オブジェクトEのポインタ値はD、である。
ここで、図11Aに示すような連結オブジェクトを構成するすべてのオブジェクトに同じ管理IDを付与することで、これらのオブジェクトをグループ管理する。そこで、すべてのオブジェクトに同じ管理IDを付与するために、終端オブジェクトを連結オブジェクトの代表として、各オブジェクトがすべて終端オブジェクトを指すようにする。つまり、連結オブジェクトを構成する各オブジェクトのポインタ値がすべて終端オブジェクトの識別子となるようにする。そうすることで、すべてのオブジェクトに終端オブジェクトの識別子を付与することができ、当該終端オブジェクトの識別子を管理IDとしてグループ管理を行うことができる。
そこで、ポインタ値更新部45が、各オブジェクトに付与されたポインタ値を、各オブジェクトのポインタ値が示す接触先オブジェクトのポインタ値に更新する。具体的に、図11Aに示す連結オブジェクトについて、ポインタ値更新部45が各オブジェクトのポインタ値を1回更新すると、オブジェクトCのポインタ値は、オブジェクトBのポインタ値に更新されるので、Aとなる。また、オブジェクトDのポインタ値は、オブジェクトCのポインタ値であるBとなり、オブジェクトEのポインタ値は、オブジェクトDのポインタ値であるCとなる。図11Bに、図11Aに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した図を示す。図11Bに示すように、1回の更新ではすべてのオブジェクトのポインタ値が終端オブジェクトを示すようにはならない。そこで、図11Bに示す連結オブジェクトについて、ポインタ値更新部45が各オブジェクトのポインタ値を再度更新する。図11Cに、図11Bに示す連結オブジェクトについて各オブジェクトのポインタ値を更新した図を示す。図11Cに示すように、オブジェクトDのポインタ値は、オブジェクトBのポインタ値であるAとなり、オブジェクトEのポインタ値はオブジェクトCのポインタ値であるAとなる。図12は、図11Aに示す連結オブジェクトについて、ポインタ値更新部45が各オブジェクトのポインタ値の更新を行った場合の各オブジェクトのポインタ値の推移を示す図である。図12にも示されるように、2回目の更新で、すべてのオブジェクトのポインタ値が終端オブジェクト(オブジェクトA)を示すものとなる。
ここでは、オブジェクトが5個の場合を例示しているが、オブジェクトの数が増加しても同様の処理によりすべてのオブジェクトのポインタ値が終端オブジェクトを示すようにすることができる。そして、ポインタ値更新部45による更新処理は、オブジェクトの数がRであればlog2R回の処理ですべてのオブジェクトのポインタ値を更新することが可能となり、各オブジェクトから1つずつ終端オブジェクトまで辿るより処理が高速になる。
また、ポインタ値更新部45による更新処理では、いずれのオブジェクトも、ポインタ値をポインタ値が示すオブジェクトのポインタ値に更新するという同様のアルゴリズムにより処理される。よって、ポインタ値更新部45は、連結オブジェクトを構成するオブジェクトそれぞれについて、ポインタ値を更新する処理を並列に実行できる。
1 シミュレーション装置、5 CPU、 6 GPU、11 制御部、12 記憶部、13 通信部、14 操作部、15 表示部、21 完全二分木作成部、22 ノード入れ替え部、23 衝突判定部、31 オブジェクトペア情報取得部、32 並び替え部、33 特定部、34 割り当て部、35 計算部、41 値付与部、42 ポインタ値上書き部、43 ルート値上書き部、44 オブジェクト連結部、45 ポインタ値更新部。
Claims (8)
- 時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置であって、
前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得部と、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当て部と、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算部と、
を含み、
前記計算部は、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、
前記割り当て部は、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、
ことを特徴とするシミュレーション装置。 - 前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのうち、前回の計算時点において取得されたいずれかのオブジェクトペアと2つの構成要素が共通するオブジェクトペアを特定する特定部、をさらに含み、
前記特定部は、所定の基準により、前記取得した複数個のオブジェクトペアのそれぞれに含まれる2つのオブジェクトのうちの一方を基準オブジェクトとして、他方を付随オブジェクトとして特定し、
前記取得した複数個のオブジェクトペアのそれぞれを判定対象ペアとして、前回の計算時点で取得した複数個のオブジェクトペアのうち、基準オブジェクトが当該判定対象ペアと共通するオブジェクトペアを比較相手ペアとして抽出し、前記判定対象ペアと前記比較相手ペアとで付随オブジェクトが共通するか否かを判定することによって、前記2つの構成要素が共通するオブジェクトペアを特定する、
ことを特徴とする請求項1に記載のシミュレーション装置。 - 前記特定部は、前記判定対象ペアのそれぞれについて、前記比較相手ペアと付随オブジェクトが共通するか否か判定する処理を、前記判定対象ペアごとに並列に実行する、
ことを特徴とする請求項2に記載のシミュレーション装置。 - 前記特定部は、
前記取得した複数個のオブジェクトペアを、前記基準オブジェクトの識別子の順に並び替えてオブジェクトペア列を生成する並び替え部、をさらに含み
前回の計算時点において取得された複数個のオブジェクトペア、及び今回の計算時点において取得された複数個のオブジェクトペアのうちのいずれか一方に含まれる各オブジェクトペアについて、他方の複数個のオブジェクトペアを前記並び替え部が並び替えて得られるオブジェクトペア列に基づいて前記比較相手ペアを抽出する、
ことを特徴とする請求項2又は3に記載のシミュレーション装置。 - 前記特定部は、前記取得した複数個のオブジェクトペアのそれぞれに含まれる2つのオブジェクトの識別子の大小を前記所定の基準として用いて、基準オブジェクト及び付随オブジェクトを特定する、
ことを特徴とする請求項2から4のいずれか一項に記載のシミュレーション装置。 - 時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置の制御方法であって、
前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得ステップと、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当てステップと、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算ステップと、
を含み、
前記計算ステップでは、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、
前記割り当てステップでは、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、
ことを特徴とする制御方法。 - 時間とともに仮想空間内を運動する複数のオブジェクトについて、複数の計算時点のそれぞれにおける各オブジェクトの位置をシミュレーションするシミュレーション装置を、
前記複数の計算時点のそれぞれにおいて、当該計算時点で互いに接触している2つのオブジェクトを構成要素とするオブジェクトペアの情報を複数個取得するオブジェクトペア情報取得手段、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれを、互いに共通するオブジェクトを含んだ2以上のオブジェクトペアが同じグループに属さないように、複数のグループのいずれかに割り当てる割り当て手段、及び、
前記複数の計算時点のそれぞれにおいて、前記取得した複数個のオブジェクトペアのそれぞれについて、当該オブジェクトペアに含まれる2つのオブジェクトの接触による当該二つのオブジェクトの位置への影響を計算する計算手段、
として機能させるためのプログラムであって、
前記計算手段は、互いに異なるグループに属するオブジェクトペアについての前記計算は並列に実行しないようにしながら、各オブジェクトペアについての前記計算を並列に実行し、
前記割り当て手段は、今回の計算時点においてオブジェクトペアの割り当てを行う際に、前回の計算時点において各オブジェクトペアを複数のグループに割り当てた際の割り当て情報を参照して、前回の計算時点と今回の計算時点とで互いに2つの構成要素が共通するオブジェクトペアについては、前回割り当てられたグループと同じグループに属するように、各オブジェクトペアの割り当てを決定する、
ことを特徴とするプログラム。 - 請求項7に記載されたプログラムを格納したコンピュータ読み取り可能な情報記憶媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013261859A JP2015118576A (ja) | 2013-12-18 | 2013-12-18 | シミュレーション装置 |
US14/564,497 US10089420B2 (en) | 2013-12-18 | 2014-12-09 | Simulation apparatus, controlling method, program and information storage medium for the simulation apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013261859A JP2015118576A (ja) | 2013-12-18 | 2013-12-18 | シミュレーション装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015118576A true JP2015118576A (ja) | 2015-06-25 |
Family
ID=53368785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013261859A Pending JP2015118576A (ja) | 2013-12-18 | 2013-12-18 | シミュレーション装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10089420B2 (ja) |
JP (1) | JP2015118576A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3086293B1 (en) * | 2013-12-18 | 2020-01-01 | Sony Interactive Entertainment Inc. | Simulation device |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5500650A (en) | 1992-12-15 | 1996-03-19 | Micron Technology, Inc. | Data communication method using identification protocol |
US5734833A (en) | 1996-03-12 | 1998-03-31 | Hewlett-Packard Company | Shared communications channel with enhanced reservation and collision resolution protocols allows any subset of stations to transmit data after collision occured in contention slot |
US5920900A (en) | 1996-12-30 | 1999-07-06 | Cabletron Systems, Inc. | Hash-based translation method and apparatus with multiple level collision resolution |
US7050955B1 (en) | 1999-10-01 | 2006-05-23 | Immersion Corporation | System, method and data structure for simulated interaction with graphical objects |
US6567817B1 (en) | 2000-09-08 | 2003-05-20 | Hewlett-Packard Development Company, L.P. | Cache management system using hashing |
JP4335160B2 (ja) | 2005-03-02 | 2009-09-30 | 任天堂株式会社 | 衝突判定プログラムおよび衝突判定装置 |
JP5039950B2 (ja) | 2008-03-21 | 2012-10-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクト移動制御システム、オブジェクト移動制御方法、サーバ及びコンピュータプログラム |
US8548776B2 (en) * | 2008-06-30 | 2013-10-01 | Intel Corporation | Parallel physics solver |
US9020787B2 (en) * | 2009-02-17 | 2015-04-28 | Disney Enterprises, Inc. | Methods, systems and media for simulating contact scenarios |
JP2012115414A (ja) | 2010-11-30 | 2012-06-21 | Nintendo Co Ltd | ゲーム装置、ゲームを提供する方法、ゲームプログラム、および、ゲームシステム |
-
2013
- 2013-12-18 JP JP2013261859A patent/JP2015118576A/ja active Pending
-
2014
- 2014-12-09 US US14/564,497 patent/US10089420B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US10089420B2 (en) | 2018-10-02 |
US20150169804A1 (en) | 2015-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5967786B2 (ja) | シミュレーション装置 | |
US11127191B2 (en) | Asynchronous and concurrent ray tracing and rasterization rendering processes | |
US8072460B2 (en) | System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture | |
KR101342228B1 (ko) | 렌더링 제어 장치, 그 제어 방법, 컴퓨터 판독 가능한 저장 매체, 렌더링 서버, 및 렌더링 시스템 | |
TW201403542A (zh) | 圖形處理單元中3d加速結構之完全並列原地建構 | |
CN103927781A (zh) | 一种三维场景下视觉相关的模型渐进渲染方法 | |
KR102096196B1 (ko) | 모델 오브젝트 구성 방법, 서버, 및 시스템 | |
JP2017215797A (ja) | 選択制御方法、選択制御装置および選択制御プログラム | |
CN104932986A (zh) | 一种数据重分布方法及装置 | |
CN108829790A (zh) | 一种数据批处理方法、装置及系统 | |
CN108290071A (zh) | 用于在预测游戏者的意图的情况下确定用于执行绘制的资源分配的程序、电子装置、系统和方法 | |
JP5372590B2 (ja) | 情報処理装置、情報処理方法、およびプログラム | |
JP2015118576A (ja) | シミュレーション装置 | |
JP2015118575A (ja) | シミュレーション装置 | |
JP2019106031A (ja) | データ処理システム及びデータ分析処理方法 | |
CN110853122A (zh) | 动画生成方法、装置及存储介质 | |
CN113034338A (zh) | 一种用于gpu的bvh构造方法、装置及存储介质 | |
US9582247B1 (en) | Preserving data correlation in asynchronous collaborative authoring systems | |
JP5932986B2 (ja) | メッシュシーケンスファイルフォーマット | |
CN106156065B (zh) | 一种文件持久化方法、删除方法以及相关装置 | |
US20240112397A1 (en) | Spatial test of bounding volumes for rasterization | |
CN108268697A (zh) | 一种高效率电推进羽流等离子体并行仿真方法 | |
US11887244B2 (en) | Intersection testing for ray tracing | |
CN105573861B (zh) | 分布式文件系统中小文件的修复方法和装置 | |
TW202316378A (zh) | 用於深度學習的三維建模軟體之幾何模型資料預處理方法及系統 |