説明

近傍粒子探索に用いるデータ構造の構築方法、そのプログラム、およびそのプログラムを格納した記憶媒体

【課題】GPU等上で粒子法シミュレーションの近傍粒子探索に用いるデータ構造の構築を完結させ、GPU等を効率的に利用する近傍粒子探索に用いるデータ構造の構築方法、そのプログラム、およびそのプログラムを格納した記憶媒体を提供する。
【解決手段】近傍粒子探索のデータ構造の構築方法は、GPU12等のストリーミングプロセッサで実行され、3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算する。GPUを用いる場合にはバケットテクスチャを用い、このバケットテクスチャは、物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成される。GPUの場合では、バーテックスシェーダを用いて、バケットに格納される粒子の前記粒子番号と粒子座標を読み出し、2次元画像空間に書き込む書き込みステップを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、粒子法シミュレーションをGPU等のストリーミングプロセッサ(Streaming processor)で完結的に実行することにより近傍粒子探索を高速化する手法を実現し、例えば多数の剛体の衝突計算等をリアルタイムで計算可能にした近傍粒子探索に用いるデータ構造の構築方法、そのプログラム、およびそのプログラムを格納した記憶媒体に関する。
【背景技術】
【0002】
「粒子法シミュレーション」とは、対象とする物体を多数の粒子の集まり(集合)としてとらえ、多数の粒子の個々の挙動に注目して計算を行うシミュレーション手法である。コンピュータでの計算上、上記粒子には、通常、直径が一定である「球」が用いられる。物体の形状を球の集合体によって表現するとき、当該球の大きさ(直径)の決め方に依存して物体の形状の近似度または空間解像度が変化する。また、球の直径を変化させ、空間解像度を変化させることにより、コンピュータによるシミュレーション計算における計算精度と計算速度を制御することが可能となる。
【0003】
近年、上記の粒子法シミュレーションを利用して、多数の剛体の衝突計算、流体や粉体等の挙動計算が行われ、コンピュータの表示装置の画面上で衝突や流動等のシミュレーションの研究が行われている。この研究結果は、例えば、非特許文献1に記載されている。これらのシミュレーション技術の研究は、コンピュータグラフィックス(CG)の基礎となる技術として重要である。
【0004】
上記の粒子法シミュレーションの研究では、従来、CPU(Central Processing Unit)を利用して計算アルゴリズムを作る方法は多く行われていた。しかし、GPU(Graphics Processing Unit)等のストリーミングプロセッサ(Streaming processor)を積極的に利用した粒子法シミュレーションの研究はあまり行われていなかった。例えばGPUを利用した従来の或る研究によれば、近傍粒子探索をCPUで実行し、CPUで得た探索データをGPUに転送して画像処理するようにしていた。この技術によれば、CPUを主たる計算実行部として使用して当該CPUで近傍粒子探索の計算アルゴリズムを実行させ、GPUは従たる計算実行部として画像表示処理の計算アルゴリズムだけを実行させるように構成されていた。従って、従来の計算技術によれば、粒子法シミュレーションにおける近傍粒子探索および画像処理の計算アルゴリズムを、GPUの内部だけで完結させて実行させるようには構成できてはいなかった。
【非特許文献1】田中正幸等、「粒子法を用いた剛体計算手法の開発とコンピュータ・グラフィックスへの適用」、日本機械学会、第19回計算力学講演会講演論文集、701−702頁、2006。
【発明の開示】
【発明が解決しようとする課題】
【0005】
従来の粒子法シミュレーションの計算ではすべての計算(近傍粒子探索に用いるデータ構造の構築、画像処理等)がGPU上のみで完結させるように構成されていなかったため、計算効率が良好ではなく、GPUが本来的に有している画像処理能力を十分に発揮することができず、多数の剛体の衝突計算等のリアルタイムな剛体シミュレーションや、流体シミュレーション等を行うことができなかった。そこで、GPUやその他のストリーミングプロセッサを完結的に利用して、GPU等の上で近傍粒子探索に用いるデータ構造の構築を実行し、その画像処理能力を最大限に発揮させる手法の開発が求められている。
【0006】
本発明の目的は、上記の課題に鑑み、GPU等のストリーミングプロセッサ上で粒子法シミュレーションの近傍粒子探索に用いるデータ構造の構築を完結させ、GPU等を効率的に利用し、その最大限の(画像)処理能力を発揮させ、高速計算を可能にし、例えばリアルタイムの剛体シミュレーションや流体シミュレーション等の計算処理/表示処理を実現することができる近傍粒子探索に用いるデータ構造の構築方法、そのプログラム、およびそのプログラムを格納した記憶媒体を提供することにある。
【課題を解決するための手段】
【0007】
本発明に係る近傍粒子探索に用いるデータ構造の構築方法、そのプログラム、およびそのプログラムを格納した記憶媒体は、上記の目的を達成するために、次のように構成される。
【0008】
本発明に係るデータ構造の構築方法は、GPU等のごときグラフィックス演算プロセッサで実行され、ビデオメモリの内部で作られた画像データから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算する方法で用いられ、物理的対象物を多数の粒子で表現し、ビデオメモリ内における3次元画像データ構造での多数の粒子の相互の格納位置関係に基づいて物理的対象物の存在状態を定める手法が用いられる。3次元画像データ構造に含まれるバケットテクスチャは、物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、多数の粒子に割り付けられた粒子番号を多数のバケットの各々に格納するものであり、グラフィックス演算プロセッサで、バーテックスシェーダを用いて、バケットに格納される粒子の前記粒子番号と粒子座標を読み出し、2次元画像空間に書き込む書き込みステップを有する。この書き込みステップでは、バケットに複数個の粒子が存在するときに、シミュレーションの1タイムステップで、複数個の粒子の各々の粒子番号と粒子座標を、複数回の書き込み(処理のためのレンダリング)に分けて1つずつ書き込むことで特徴づけられる。
【0009】
上記のデータ構造の構築方法において、グラフィックス演算プロセッサとしてGPUを用いる場合には、複数回の処理のためのレンダリングの各々で書き込む粒子の粒子番号と粒子座標の選択、および書き込まれるピクセルにおけるチャンネルの選択は、GPUに用意された深度テスト、カラーマスク、ステンシルテストの各機能を用いて行われる。
また、GPU等を含むストリーミングプロセッサを用いる場合には、複数回の処理サイクルの各ステップで書き込む粒子の粒子番号とメモリ箇所(Memory Location)の選択、およびボクセル(Voxel)のために割り当てられたメモリにおけるメモリ箇所の選択は、ストリーミングプロセッサに用意された複数のカウンタの各機能を用いて行うこともできる。
すなわち、ストリーミングプロセッサで実行され、メモリの内部で作られたデータアレイから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算する方法で用いられる、近傍粒子探索に用いるデータ構造の構築方法である。物理的対象物を多数の粒子で表現し、メモリ内における3次元画像データ構造での多数の粒子の相互の格納位置関係に基づいて物理的対象物の存在状態を定める手法が用いられ、3次元画像データ構造に含まれるバケットアレイは、物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、多数の粒子に割り付けられた粒子番号を多数の前記バケットの各々に格納する。ストリーミングプロセッサで、バケットに格納される粒子の粒子番号と粒子座標を読み出し、メモリにおけるアレイに書き込む書き込みステップを有し、書き込みステップで、バケットに複数個の粒子が存在するときに、シミュレーションの1タイムステップで、複数個の粒子の各々の粒子番号と粒子座標を、複数回の処理のためのカーネル(a kernel)に分けて1つずつ書き込む。
【0010】
データ構造の構築方法は、上記の方法において、バケットに最大4個の粒子が存在するとき、粒子番号が書き込まれるピクセル等のRGBAから成る4つのチャンネル等の各々に個別に昇順または降順に従う粒子番号の粒子からその粒子番号が順次に格納される。
【0011】
上記のデータ構造の構築方法において、グラフィックス演算プロセッサとしてGPUを用いる場合には、より具体的に次のステップを有する。
4個の粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合にはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目でのピクセルへの書き込みでは、深度バッファを最大値で初期化し、深度テストを用いて小さい値を持つものを合格させることにより、Rチャンネルに粒子番号ib0を書き込んで1回目の処理のためのレンダリングを行うステップと、
2パス目でのピクセル等への書き込みでは、カラーマスクを用いてRチャンネルへの書き込みを禁止しかつステンシルテスト等を用いることにより、Gチャンネルに粒子番号ib1を書き込んで2回目の処理のためのレンダリングを行うステップと、
3パス目でのピクセルへの書き込みでは、カラーマスクを用いてRとGの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、Bチャンネルに粒子番号ib2を書き込んで3回目の処理のためのレンダリングを行うステップと、
4パス目でのピクセルへの書き込みでは、カラーマスクを用いてRとGとBの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、Aチャンネルに粒子番号ib3を書き込んで4回目の処理のためのレンダリングを行うステップと、
を有する。
一般的にストリーミングプロセッサを用いる場合には、上記のピクセル(written pixel)の代わりにボクセルに割り当てられたメモリを用い、上記のチャンネルの代わりにボクセル(Voxel)のために割り当てられたメモリにおけるメモリ箇所(Memory Location)を用い、さらに、GPUに用意された上記の深度テスト、カラーマスク、ステンシルテストの各機能の代わりに、それぞれに対応するカウンタの機能を用いる。
すなわち、4個の粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合にはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目でのボクセル(voxel)のために割り当てられたメモリへの書き込みでは、カウンタが0になるように初期化しかつ第1のメモリ箇所への最初の書き込みを受け入れることにより、第1のメモリ箇所に粒子番号ib0を書き込んで1回目のルーチンのためのカーネルを実行するステップと、
2パス目でのボクセル(voxel)のために割り当てられたメモリへの書き込みでは、カウンタを用いることにより、第1のメモリ箇所への書き込みを禁止しかつ第2のメモリ箇所へ次の値を書き込むことにより、第2のメモリ箇所に粒子番号ib1を書き込んで2回目のルーチンのためのカーネルを実行するステップと、
3パス目でのボクセル(voxel)のために割り当てられたメモリへの書き込みでは、カウンタを用いることにより、第1と第2のメモリ箇所への書き込みを禁止しかつ第3のメモリ箇所へ次の値を書き込むことにより、第3のメモリ箇所に粒子番号ib2を書き込んで3回目のルーチンのためのカーネルを実行するステップと、
4パス目でのボクセル(voxel)のために割り当てられたメモリへの書き込みでは、カウンタを用いることにより、第1と第2と第3のメモリ箇所への書き込みを禁止しかつ第4のメモリ箇所へ次の値を書き込むことにより、第4のメモリ箇所に粒子番号ib3を書き込んで4回目のルーチンのためのカーネルを実行するステップと、を有する。
【0012】
データ構造の構築方法は、上記の方法において、好ましくは、上記物理対象物は多数の剛体であり、物理対象物のシミュレーション画像は多数の剛体の衝突計算に基づくシミュレーション画像である。
【0013】
データ構造の構築方法に関して、ストリーミングプロセッサの一例である上記GPUはグラフィックス演算プロセッサである。
【0014】
また本発明に係る前述した近傍粒子探索に用いるデータ構造の構築プログラムは、GPU等を含むストリーミングプロセッサで、上述した近傍粒子探索方法を構成する各手順等を実行させるためのプログラムである。
【0015】
本発明によれば次の効果を奏する。
粒子法シミュレーションを適用して剛体、流体、粉体等を近似し、近傍粒子探索に用いるデータ構造の構築方法を実施することによって物理的現象をコンピュータ上でシミュレーションとして行う方法において、近傍粒子探索に用いるデータ構造の構築計算を実行するための各手順をGPU等のストリーミングプロセッサの上で完結させるように構成し、GPU等を効率的に利用し、その最大限の画像演算処理能力を発揮させることができ、高速計算を行うことができ、これにより例えばリアルタイムの剛体シミュレーションや流体シミュレーション等を実現することができる。
また、剛体シミュレーションや流体シミュレーション等をシミュレーションCGとして画像表示に利用することにより水の流れ等の自然物の表現に最適なゲーム等の重要要素技術として利用することができる。
【発明を実施するための最良の形態】
【0016】
以下に、本発明の好適な実施形態(実施例)を添付図面に基づいて説明する。
【0017】
図1は、粒子法シミュレーションで近傍粒子探索に用いるデータ構造の構築方法が実施されるコンピュータシステムの基本的な構成を示す。
この実施形態の説明では、主たる実施形態として、グラフィックス演算プロセッサとして例えばGPUを用いる例を説明する。
【0018】
コンピュータシステム10は、例えばPC(Personal Computer)を利用して構成され、演算処理部としてのCPU11とGPU12を備える。またコンピュータシステム10は、記憶装置としてメインメモリ13Aとビデオメモリ(VRAM)13Bを備え、周辺装置として少なくとも入力装置14および表示装置15を備えている。CPU11とGPU12とメインメモリ13Aと入力装置14と表示装置15はバス16を介して相互に接続されている。入力装置14は入力インターフェース17を介してバス16に接続され、表示装置15は出力インターフェース18を介してバス16に接続されている。またビデオメモリ13Bは、GPU12に直接に接続されている。ビデオメモリ13Bに対してはGPU12を通してデータの行き来が行われる。
【0019】
CPU(中央演算処理装置)11は、例えばPC等に装備される通常的な演算処理部である。またGPU12は「Graphics Processing Unit(グラフィックス演算プロセッサ)」であり、画像演算処理を実行する。当該GPU12は、複数のプロセッサを内蔵して成り、並列計算機として用いられる。GPU12としては、例えばNVIDIA社製の「GeForce 7900GTX」が使用される。なお、GPU12で使用される製品はこれに限定されず、類似した構造・機能を有する画像処理用のプロセッサまたはその他のストリーミングプロセッサを用いることができる。このGPU12は、メインメモリ13Aに格納された近傍粒子探索プログラム13A−1を実行し、粒子法シミュレーションにおける近傍粒子探索演算を実施する。近傍粒子探索プログラム13A−1は、近傍粒子探索に用いるデータ構造の構築を実行する。またGPU12は、メインメモリ13Aに格納された通常的な画像処理プログラム13A−2を実行し、近傍粒子探索の計算で得られかつピクセルに格納された画像データを用いて画像処理を実施し、作成した画像データを用いて表示装置15の画面に描画(表示のためのレンダリング)する。表示装置15の画面には、粒子法シミュレーションの計算に基づいて、CG画像が表示される。
【0020】
本実施形態の以下の説明では、粒子法シミュレーションに基づく多数の剛体の衝突計算を実行することに基づくリアルタイムの剛体シミュレーションの演算が説明される。このシミュレーションの演算では、GPU12のみで、近傍粒子探索に用いるためのデータ構造の構築手法が実行される。
【0021】
次に前述のGPU12内の要部の基本構成を模式的に図2に示す。GPU12は、並列的に配置された複数のプロセッサ21を備え、これらのプロセッサによる並列計算処理に基づいて、表示(描画)のためのレンダリングが実行される。特に本実施形態に係る近傍粒子探索に用いるデータ構造の構築(バケット構築)の方法によれば、後述するように、1つのバケットに例えば4個の粒子が存在するとき、4個の粒子の粒子番号と粒子座標を、処理のためのレンダリングを4回繰り返して1つのピクセルのRGBAチャンネルの各々に書き込む。GPU12における当該バケット構築の処理によって画像演算処理の高速化が実現される。より具体的に、GPU12は、「GeForce 7900GTX」である場合、前段に並列的に配置された8個のバーテックス(頂点)シェーダ(VS)22と後段において並列的に配置された24個のフラグメントシェーダ(FS)23とを有している。バーテックス(頂点)プロセッサ(21)で実行されるプログラムがバーテックスシェーダ22であり、フラグメントプロセッサ(21)で実行されるのがフラグメントシェーダ23である。
【0022】
上記において、バーテックスプロセッサは、並列的に配置されたプロセッサであり、多数の頂点の座標変換(入力された頂点座標を、レンダリングされる画像の空間での座標に変換すること)を一斉に処理することに特化されたプロセッサである。GPU21は、頂点の座標変換を、CPUに比較して高速に計算することができる。バーテックスプロセッサの動作を指定するものがバーテックスシェーダである。
【0023】
さらにGPU12には、深度テスト機能部24、カラーマスク機能部25、ステンシルテスト機能部26が備えられている。またブロック27はシェーダ指令分配部である。
【0024】
本発明に係る近傍粒子探索に用いるデータ構造の構築手法を実現するための近傍粒子探索プログラム13A−1は、上記GPU12の内部構造を利用してGPU12のみで完結的に実行される。
【0025】
次に多数の剛体が衝突する剛体シミュレーションの実施形態を説明する。この剛体シミュレーションの説明を通して近傍粒子探索プログラム13A−1の実行に基づいて実施される近傍粒子探索に用いるデータ構造の構築手法の内容を明らかにする。
【0026】
多数の剛体の例としては、例えば、多数のトーラス部材、あるいは多数のチェスの駒である。本実施形態に係る剛体シミュレーションの結果として得られたCGの例を図3と図4に示す。図3は、例えば10922個のトーラスを落下・衝突させた物理現象に関する剛体シミュレーションの衝突計算に基づく結果画像(CG)を示し、図4は、例えば16384個のチェスの駒を落下・衝突させた物理現象に関する剛体シミュレーションの衝突計算に基づく結果画像(CG)を示している。
【0027】
上記の多数の剛体の衝突計算において、多数の剛体の各々の形状は、すべて、粒子的手法(粒子法シミュレーション)を適用することにより、同一の大きさの球(粒子)の集合体として近似的に表現されて取り扱われる。球に基づく剛体の形状の近似は、当該剛体のポリゴンモデルに基づいて行われ、例えば本発明者等によって提案されたGPUを用いたボクセル化手法(「Fast solid voxelization using graphics hardware」, Transactions of JSCES, page No. 20060023, 2006)を用いて生成される。なお、用いる球の大きさ(空間解像度)は計算精度と計算速度を考慮して適切に決定される。
【0028】
各々の剛体が球の集合体として近似的に表現されて成る多数の剛体の衝突計算においては、(1)個々の剛体の計算、(2)剛体間の衝突の検出処理(剛体を構成する球の間の距離の計算)、および(3)衝突に基づく応答処理(球に働く力とトルクの計算)が実行される。以下、これらの計算の考え方について分説する。
【0029】
(1)剛体の計算:
剛体の計算に必要とされる物理量は、(数式1)に示すように、重心の座標、並進速度、回転量を表すクオータニオン、角速度、慣性テンソルである。
【0030】
【数1】

【0031】
剛体の運動の計算は、並進運動と回転運動に分けて計算する。並進運動の計算の内容は(数2)に示され、回転運動の計算の内容は(数3)に示される。
【0032】
【数2】

【0033】
【数3】

【0034】
(2)衝突の検出処理:
剛体の衝突を検出するために剛体を構成する球の間の距離を計算する。球の間の距離が球の直径よりも小さければ、2つの球は衝突しているとみなす。多数の剛体の衝突の検出では、すべての剛体の各々を構成する球に関して上記の距離計算を行うことが必要となる。計算量は球の数の2乗に比例し、剛体の数が多くなると球の数も多くなり、計算量も膨大になる。そこで、本実施形態による衝突検出処理の構成では、計算量を減らすために、多数の剛体が存在することになる仮想的に空間(メモリにおける3次元のデータ格納空間)を「バケット(またはグリッドともいう)」と呼ばれる格子(3次元空間格子)に分割して、多数の剛体の各々を表現する多数の球をバケットに格納する。1つのバケットは1つの立方体を成し、仮にバケットの一辺の長さを球の直径と同じ長さである3次元データ構造を用いる場合には、或る球iと衝突している可能性のある球は、球iが格納されているバケットと隣接している3 個の各バケットの内部に格納されている球に限定されることになる。上記のごとくバケットを構築することに基づいて衝突検出を行うことにより、計算量を減らし、計算コストを大幅に下げることができる。本実施形態によるバケット構築の詳細については、後述される。
【0035】
(3)衝突に基づく応答:
衝突応答では1つの剛体を構成する球に加わる力を計算する。衝突力の計算では、接触する2つの球に関して、個別要素法で用いられる線形バネとダッシュポットを用いる。かかる衝突力の計算の内容については(数4)に示される。
【0036】
【数4】

【0037】
次に、GPU12のみを用いることに基づく近傍粒子探索に用いるためのデータ構造の構築手法の高速化について説明する。本実施形態によれば、多数の剛体の衝突に関する上記の各計算は、すべて、GPU12上で実装される。これによって上記計算の高速化を達成することができる。GPU12での近傍粒子探索プログラム13A−1に基づく計算アルゴリズムを説明する。
【0038】
最初に、上記の計算アルゴリズムのために用意されるデータ構造を説明する。
【0039】
前述した各計算をGPU12で行うとき、前述した各物理量は、ビデオメモリ13Bに含まれる複数枚のテクスチャ13B−1(図1に示す)として格納され、保持される。
【0040】
具体的に、剛体計算を行うために、各剛体の重心座標、クオータニオン、並進運動量、角運動量については、それぞれ、ビデオメモリ13Bに格納された2枚のテクスチャ13B−1を用いる。衝突計算を行うために、各球の中心座標、速度、バケット、各球に働く力、各球に働くトルクについては、それぞれ、ビデオメモリ13Bに格納された1枚のテクスチャ13B−1を用いる。
【0041】
本実施形態の場合、粒子法シミュレーションに基づく多数の剛体の衝突計算では、3次元空間を想定し、さらに、前述したように当該3次元空間を分割する3次元空間格子すなわちバケットを用意する。しかし、現在の使用可能なGPU12では3次元テクスチャへの書込みを行うことはできない。そこで本実施形態では、(L×L×L)個の格子数から成る3次元バケットを、所要枚数の2次元格子を(D×D)枚敷き詰めて構成される1枚の2次元テクスチャを利用して表現するようにした。この場合、3次元バケット上でのインデックスを(i,j,k)とし、かつ2次元テクスチャ上のインデックスを(s,t)とするとき、これらの2つのインデックスの間は、次の(17)式と(18)式で関係づけられる。
s=i+L(k−D[k/D]) (17)
t=j+Lf[k/D] (18)
なおi,j,kとs,tは、それぞれ、[0,L−1]と[0,D×L−1]の範囲に含まれる値を取る。
【0042】
次に、図5に示したフローチャートを参照して、GPU12を用いた高速化の計算アルゴリズムを説明する。
【0043】
表示装置15の表示画面で描画を行うための1回の計算(シミュレーション)を行う単位時間を1タイムステップとするとき、当該1タイムステップでの計算は以下の8段階で計算される。
【0044】
段階1 :球の物理量の計算 …(ステップS11)
段階2 :バケット構築 …(ステップS12)
段階3 :衝突検出 …(ステップS13)
段階4 :衝突応答(球に働く力とトルクの計算)…(ステップS14)
段階5 :剛体並進運動量の計算 …(ステップS15)
段階6 :剛体角運動量の計算 …(ステップS16)
段階7 :剛体重心座標の計算 …(ステップS17)
段階8 :剛体クオータニオンの計算 …(ステップS18)
【0045】
上記の計算(シミュレーション)で最終的に得られた剛体の重心座標とクオータニオンを用いて表示のためのレンダリング処理が行われ、シミュレーションの結果画像の描画が行われる(ステップS19)。次の判断ステップS20ではシミュレーションを継続する否かを判断し、YESの場合には上記のステップS11に戻ってステップS11〜S19を繰り返し、NOの場合にはシミュレーションを終了する。上記のごとく、1回の表示のためのレンダリング処理(ステップS19)に対して、上記の8段階の計算ステップS11〜S18が1タイムステップの時間内で実行される。
【0046】
上記において、ステップS12で実行される「バケット構築」の計算で、近傍探索の処理計算が行われる。この計算はGPU12のみで完結的に行われ、これにより計算の高速化が図られる。バケット構築の計算の詳細内容については以下で説明される。
【0047】
以下に、上記のステップS11〜S19の計算内容を説明する。
【0048】
ステップS11:球の物理量の計算
多数の剛体の衝突計算を粒子法で計算するには、各剛体を構成する球の中心座標と速度を計算する。球の中心座標と速度に関する計算の内容は(数5)に示す通りである。
【0049】
【数5】

【0050】
ステップS12:バケット構築
「バケットの構築」とは、多数の剛体の各々を表現するために用意された多数の球(粒子)のすべての番号を、前述のごとく、ビデオメモリ13Bの内部のデータ構造として、空間を分割する要素として用意された3次元空間格子すなわちバケットに格納する処理を意味する。具体的には、多数の球のそれぞれに割り振られた番号を、多数のバケットのそれぞれの内部に格納する処理であり、多数の球のそれぞれに関するデータを分散させる(scattering)処理である。
【0051】
バケットの構築に関する上記処理では、バーテックス(頂点)シェーダによる書き込み機能(処理のためのレンダリング)を用いる。当該書き込み機能は、入力とされる座標に頂点を書き込こむことができるという機能である。換言すれば、バーテックスシェーダでは、ビデオメモリ13Bのテクスチャにアクセスするためのバーテックステクスチャフェッチ(VTF)という機能を有しており、バーテックスシェーダの当該機能を用いることにより、球の座標を参照することができる。その球の座標に対応するバケットの座標に頂点を配置することによって、GPU12において上記のデータ分散処理を行うことができる。
【0052】
球の数をn(i,i,…,in−1)とするとき、上記の頂点は球の数と同じ数n(p,p,…,pn−1)だけ用意される。これらの頂点の各々に対しては1つの球が対応づけられる。頂点p,p,…,pn−1の各々に対応する球の番号をi,i,…,in−1とする。球の番号は例えばi<i<…<in−1の順序(昇順)で並んでいるとする。なお球の並び方は降順であってもかまわない。
【0053】
上記の対応関係を前提にして、バーテックスシェーダは、上記のバーテックステクスチャフェッチ(VTF)を用いて、前回のタイムステップでのすべての球の座標を参照し、当該座標に基づきバケットテクスチャ上での座標を計算し、その座標に球の番号を出力することで、バケットテクスチャに球の番号を書き込むことが可能となる。
【0054】
ところが、上記の処理の場合には、バケットの内部に1つの球が存在しているときのみに正しくバケット構築することができ、他方、1つのバケットの内部に複数個の球が存在しているときにはバケットを正しく構築することができない。1つのバケットの内部に複数個の球が存在する可能性のあるとき、正しいバケット構築を実現するためには、そのバケットに格納された球の数の番号を参照しながら,球の1個1個を順にバケットに格納しなければならない。GPU12に用いられる並列処理によれば、1回の処理のためのレンダリングでは書き込まれた球の番号を参照することができないので、当該並列処理後には各バケットには1個の番号しか書き込まれない。例えば1つのバケットに4個の球が存在するときには、4つの頂点が同一のピクセルに書き込まれるため、最終的にはそのピクセルには1個の球についての番号が書き込まれることになることになる。
【0055】
そこで、本実施形態によるバケット構築では、1つのバケットbの内部には、複数の球を格納し得るように構成する。この方法を図6のフローチャートを参照して説明する。
【0056】
ここで、バケットbに最大4個の球が入る場合を考える。これらの4個の球の番号をib0,ib1,ib2,ib3として1ピクセルのRGBAチャネルのそれぞれの値を書き込む。これらの4つの球の番号はib0<ib1<ib2<ib3の順(昇順)に並んでいるものとする。なお4つの球の番号の並び方は降順であってよい。そして、バケット構築では、1つのピクセルに対する書き込みを4回の球番号の書き込みに分けることにより、1個のバケットの内部に最大4個の球が存在する場合にも、GPU12を用いて行うことができる。換言すれば、バケットbに4個の球が存在している場合には、1タイムステップで4回の書き込み(処理のためのレンダリング)に分けることで、GPU12に基づきバケット構築を行う。
【0057】
前述したバーテックスシェーダ(VS)22では、頂点に対応する球の座標を用いて、その座標のバケット内での座標を計算し、球の番号をフラグメントシェーダ(FS)23に渡す。フラグメントシェーダ(FS)23では、球の番号を「色」と「深度」として書き出す。
【0058】
図6を参照して、バケット構築S12の処理内容を具体的に述べる。バケット構築S12の工程は、順次に行われる4つのパス(pass)のステップS101〜S104から成っている。
【0059】
1パス目における1つのピクセルへの最初の書き込み(ステップS101)は、Rチャンネルに球番号ib0を書き込むステップである。球番号ib0は4個の球のうち最も小さい番号を持つものである。すなわち、最小の深度を有するピクセルとして書き込まれ、最初の処理のためのレンダリングが行われる。この球番号ib0の書き込みの場合には、まずRチャンネルを選択するためのカラーマスクを設定し(ステップS31)、深度テストを設定し(ステップS32)、次いで深度バッファを最大値で初期化し(ステップS33)、設定された上記深度テストを用いて小さい値を持つものを合格させるようにし、当該書き込み(頂点のレンダリングS34)を可能にしている。
【0060】
2パス目における上記同一ピクセルへの書き込み(ステップS102)は、Rチャンネルに書き込まれた値を上書きしないように、Gチャンネルに球番号ib1を書き込むステップである。この書き込みでは、Gチャンネルを選択するためのカラーマスクを用いることにより(ステップS41)、RBAの各チャンネルへの書き込みを禁止する。深度バッファは、1パス目で用いたものをそのまま用い、かつ深度テストは大きな値を持つものを合格させるように設定する(ステップS42)。しかしこれでは、上記ピクセルのGチャンネルには最大の球番号ib3が書き込まれることになるので、これを禁止するためステンシルテストを用いる(ステップS43)。ステンシルテストでは、ステンシルバッファを0で初期化し(ステップS44)、ステンシルテストでは値を増加させるように設定する。さらにステンシルテストでは値が1以上であるときには書き込みを失敗するように設定する(ステップS43)。これによって、ピクセルに1回書き込み処理を行った後において書き込み失敗になった球番号を書き込まないようにすることができる。このようにして、同一ピクセルへの2パス目の書き込みにおいて、Gチャンネルに球番号ib1を書き込む(ステップS45)。
【0061】
その後、同一ピクセルにおける3パス目のBチャンネルへの球番号ib2の書き込み(ステップS103)、4パス目の球番号ib3の書き込み(ステップ」S104)の場合にも、上記と同様な処理が行われ、球番号ib2および球番号ib3をそれぞれBチャンネルおよびAチャンネルに書き込む。3パス目のステップS103は、Bチャンネルを選択するためのカラーマスクの設定、ステンシルバッファのクリア、頂点のレンダリング(書き込み)のステップS51〜S53を有し、4パス目のステップS104は、Aチャンネルを選択するためのカラーマスクの設定、ステンシルバッファのクリア、頂点のレンダリング(書き込み)のステップS61〜S63を有している。
【0062】
以上のように、GPU12を用いた近傍粒子探索に用いるデータ構造の構築、すなわちバケット構築では、バケットに複数個(例えば4個)の球が存在する場合において、これらの球の番号を1つのバケットに格納しかつピクセルに対応づけるとき、バケットへの格納処理(ピクセルのRGBAチャンネルへの球番号の書き込み処理)を複数回(例えば4回)の処理のためのレンダリングに分けて行う。1回の処理のためのレンダリングでは、前述のルールに従って、1個の球の番号をピクセルの1つのチャンネルに書き込む。各レンダリングにおける球番号の書き込み順序と書き込みチャンネルの選択に関する前述のルールは、GPU12の有する機能である深度テスト、カラーマスク、ステンシルテストを利用して決定される。
【0063】
ステップS13:衝突計算
この衝突計算では、或る球iと衝突している可能性のある近傍に存在する球の探索を行う。この探索では、球の座標テクスチャとして生成したバケットテクスチャを入力とし、フラグメントシェーダを用いて処理を行う。この処理によって、バケットを参照することで、或る球iが格納されているバケットを囲む3 個のバケット内に格納されている球の番号を得て,その番号を用いて球の座標が格納されているテクスチャを参照することでその球座標(球の中心座標)を得る。各球の球座標を用いてこれらの球と球iとの距離計算を行い、衝突計算を行う。
【0064】
ステップS14:衝突応答(球に働く力とトルクの計算)
衝突していると判断された2つの球に関しては、2つの球の座標(位置ベクトル)と、それらの速度(速度ベクトル)と、剛体の重心に対する相対位置ベクトルとを用いて、前述の(12)式から、球に働く力と、その力によって剛体に生じるトルクを計算することができる。
【0065】
ステップS15,S16:剛体の並進運動量と角運動量の計算
ステップS14で、球に働く力とその力によって剛体に生じるトルクとを計算したので、前述した(15)式と(16)式を用いてそれらを足し合わせ、多数の剛体の各々に働く力を計算する。次いで、前述の(2)式と(4)式を用いて剛体の並進運動量と角運動量を更新する。
【0066】
ステップS17,S18:剛体の重心座標とクオータニオンの計算
剛体の重心座標は前述の(3)式を用いて計算される。本実施形態では、剛体の重心座標と重心速度テクスチャを入力として、他の1枚の剛体の重心座標テクスチャに出力を行う。また剛体のクオータニオンの更新は前述の(10)式を用いて計算される。本実施形態では、さらに、剛体のクオータニオンと角速度テクスチャを入力として他の1枚の剛体のクオータニオンテクスチャに更新された値を書き出す。
【0067】
ステップS19:レンダリング処理(表示のためのレンダリング)
上記のごとくして計算された剛体の重心座標とクオータニオンを用いて、下記の(数6)に示される計算内容に基づいて表示装置15の画面に描画を行う表示のためのレンダリングが行われる。
【0068】
【数6】

【0069】
GPU12での計算においては、基本的に以上の8段階のアルゴリズムを繰り返すことにより、表示装15の表示画面に、多数の剛体の衝突シミュレーションの画像をリアルタイムで表示することが可能になる。
【0070】
なお、図5に示した剛体シミュレーションの高速化の計算アルゴリズムの変形例を図7に示す。図7の処理の流れにおいて、図5で説明したステップと実質的に同一のステップには同一の符号を付している。図7に示した計算アルゴリズムによれば、剛体並進運動量の計算S15および剛体重心座標の計算S16と、剛体角運動量の計算S17および剛体クオータニオンの計算S18とが並列的な処理によって同時に実行されるように構成することができる。これはGPU12における並列処理を利用したものである。その他の処理の流れは図5で説明した内容と同じである。これによれば、剛体シミュレーションの計算アルゴリズムにおける1タイムステップの時間をさらに短縮でき、より一層高速化を達成することができる。
【0071】
図3に示した10922個のトーラスの落下・衝突の剛体シミュレーション画像では1タイムステップに要する時間は16.6ミリ秒であり、レンダリング時のフレームレートは23FPSであった。また図4に示した16384個のチェスの駒の落下・衝突の剛体シミュレーション画像では1タイムステップに要する計算時間は12.8ミリ秒であり、レンダリング時のフレームレートは21.2FPSであった
【0072】
上記の実施形態の説明では剛体の向きについて「クオータニオン」という物理量を用いたが、計算上ではこれの代わりに「回転行列」を用いることもできる。「クオータニオン」も「回転行列」も「物体の姿勢」を示す物理量である。
【0073】
前述の実施形態での粒子法シミュレーションの近傍粒子探索に用いるデータ構造の構築手法は多数の剛体の衝突に関する剛体シミュレーションに適用されたが、本発明による当該データ構造の構築手法は、これに限定されず、例えば図8と図9に示すように流体や粉体の流動的な動き等の自然物表現に対しても適用することができる。
【0074】
図8は、水等の流体に複数の球体形状の流体(液滴)が落下したときの流体の変化状態を示すシミュレーションの結果画像を示す。図9は、ロート状容器に収容された粉体が下方に流動し、容器の下端開口部から外側に落下して、下側に配置される容器に収容される変化状態を示すシミュレーションの結果画像を示している。
【0075】
前述した近傍粒子探索に用いるデータ構造の構築方法は、図1に示した近傍粒子探索プログラム13A−1がGPU12で実行されることにより実現される。近傍粒子探索に用いるデータ構造の構築方法に係る近傍粒子探索プログラム13A−1は、それ自体CDROM等の記憶媒体に格納され、独立したプログラム製品として構成され得る。
【0076】
前述した実施形態の説明では、GPUでのプログラムの実装でシェーダ(Shader)を使う例を説明した。これはGPUのグラフィックス機能に特化したプログラムモデルを使用した例である。しかしながら、本発明はこれに限定されない。グラフィックス演算プロセッサとして、上記のGPUを含む一般的なストリーミングプロセッサを用いることができ、さらにプログラミングモデルとして一般的なプログラミングモデルを用いて実装することができる。
【0077】
上記のGPU12を含むストリーミングプロセッサ(Streaming Processor)では、一般的に、上記のシェーダ(Shader)の他に、クーダ(CUDA)、CTM、Brook等のプログラミングモデルを用いて実装できる。前述した実施形態によるGPUにおけるシェーダ(Shader)の実装では、計算空間におけるスライス、ボクセル、および粒子に関するデータをテクスチャ13B−1としてビデオメモリ13Bに格納した。プログラム実装としてクーダ(CUDA)等を用いる場合にはテクスチャの代わりに一般的な「配列(Array)」が用いられる。
【0078】
前述した通り、データ構造の構築方法でグラフィックス演算プロセッサとしてGPUを用いる場合には、複数回の処理のためのレンダリングの各々で書き込む粒子の粒子番号と粒子座標の選択、および書き込まれるピクセルにおけるチャンネルの選択は、GPUに用意された深度テスト、カラーマスク、ステンシルテストの各機能を用いて行われた。
【0079】
他方、グラフィックス演算プロセッサとして、ストリーミングプロセッサを用いる場合には、一般的に、上記のピクセル(written pixel)の代わりにメモリ位置(Memory Location)を用い、上記のチャンネルの代わりに、ボクセル(Voxel)のためのメモリにおけるメモリ位置を用い、さらに、GPUに用意された上記の深度テスト、カラーマスク、ステンシルテストの各機能の代わりに、ストリーミングプロセッサに用意されたカウンタの機能を用いる。このカウンタは、上記の深度テスト、カラーマスク、ステンシルテストの代わりに機能する。
【0080】
従って、グラフィックス演算プロセッサとして、ストリーミングプロセッサを用いる場合には、複数回の処理サイクルの各ステップで書き込む粒子の粒子番号とメモリ位置(Memory Location)の選択、およびボクセル(Voxel)のためのメモリにおけるメモリ位置の選択は、ストリーミングプロセッサに用意されたカウンタの機能を用いて行われる。
【0081】
前述した通り、データ構造の構築方法、すなわち図6に示したバケット構築S12の工程は、グラフィックス演算プロセッサとしてGPU12を用いてプログラム実装を行う場合には、
4個の粒子の粒子番号をib0,ib1,ib2,ib3(ib0<ib1<ib2<ib3)であるとするとき、
1パス目でのピクセルへの書き込みでは、深度バッファを最大値で初期化し、深度テストを用いて小さい値を持つものを合格させることにより、Rチャンネルに粒子番号ib0を書き込んで1回目の処理のためのレンダリングを行うステップ(S101)と、
2パス目でのピクセル等への書き込みでは、カラーマスクを用いてRチャンネルへの書き込みを禁止しかつステンシルテスト等を用いることにより、Gチャンネルに粒子番号ib1を書き込んで2回目の処理のためのレンダリングを行うステップ(S102)と、
3パス目でのピクセルへの書き込みでは、カラーマスクを用いてRとGの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、Bチャンネルに粒子番号ib2を書き込んで3回目の処理のためのレンダリングを行うステップ(S103)と、
4パス目でのピクセルへの書き込みでは、カラーマスクを用いてRとGとBの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、Aチャンネルに粒子番号ib3を書き込んで4回目の処理のためのレンダリングを行うステップ(S104)と、
を有していた。
【0082】
上記のバケット構築S12の工程に関する処理の意味は、一般化的に述べると、最大4個の値をストリーミングプロセッサで書き込み時には、4回のステップ(S101〜S104)に分けて書き込みを行うという意味である。4回のステップの各々で、それまで書き込まれていない値が1個書き込まれる。
上記のGPU12を用いたプログラム実装の場合には、GPU12のグラフィックス特有の機能である「深度テスト」、「カラーマスク」、「ステンシルテスト」が用いられる。
「深度テスト」という機能は、「今まで書き込んだ値を除外する」という処理を行う。「カラーマスク」という機能は、「書き込み先を選択する」という処理を行う。「ステンシルテスト」という機能は、「1ステップで1つの値のみの書き込みを許す」という処理を行う。
なお、「1ステップでデータの書き込み先のメモリに粒子番号を書き込む」という処理以外にも、「深度バッファ」と「ステンシルバッファ」も更新される。
【0083】
上記のGPU12を含むストリーミングプロセッサを用いる場合において、一般的に、プログラム実装で、クーダ(CUDA)というプログラムモデルを用いることができる。クーダ(CUDA)を用いる場合には、GPU12のグラフィックス機能である「深度テスト」、「カラーマスク」、「ステンシルテスト」を用いることができない。そこで、クーダ(CUDA)を用いる場合には、これらのグラフィック機能と同等な機能を作るため、書き込み先のメモリと、カウンタを用意する。
【0084】
上記のカウンタによれば、カウンタによって「今まで書き込んだ値を除外する」という処理(「深度テスト」の機能)を行い、さらに「書き込み先を選択する」という処理(「カラーマスク」の機能)と「1ステップで1つの値のみの書き込みを許す」という処理(「ステンシルテスト」の機能)を行うように構成する。
さらに「1ステップでデータの書き込み先のメモリに粒子番号を書き込む」という処理以外にも、上記の「カウンタ」も更新される。ここで、「カウンタの更新」は、カウンタを1だけインクレメントすることを意味する。
【0085】
上記のごとく、GPU等のストリーミングプロセッサを用いかつプログラミングモデルとしてクーダ(CUDA)を実装するとき、テクスチャの代わりにビデオメモリに作成された配列を用いる。なお、テクスチャは、「ビデオメモリに作成された配列」に含まれる概念である。「ビデオメモリに作成された配列」は、一般的に「専用メモリに作成された配列」と解釈することができる。
【0086】
GPU等のストリーミングプロセッサにおいて、プログラミングモデルとしてシェーダの代わりにクーダ(CUDA)を用いて実装する場合、ピクセル(written pixel)の代わりにメモリ位置(Memory Location)を用い、チャンネルの代わりにボクセル(Voxel)のためのメモリにおけるメモリ位置を用い、さらに深度テスト、カラーマスク、ステンシルテストの各機能の代わりに、それぞれに対応するカウンタの機能を用いる。
【産業上の利用可能性】
【0087】
本発明は、剛体の衝突計算に基づく剛体シミュレーションや流体等のシミュレーションに利用され、さらにゲーム等のリアルタイムアプリケーションにおける自然物等の表現手段として利用することができる。
【図面の簡単な説明】
【0088】
【図1】本発明に係る近傍粒子探索に用いるデータ構造の構築方法が実施されるコンピュータシステムの基本的な構成を示すシステム構成図である。
【図2】コンピュータシステムに実装されたGPUの内部の基本的構成を示すブロック図である。
【図3】10922個のトーラスを落下・衝突させた物理現象に関する剛体シミュレーションに基づく結果画像(CG)の図である。
【図4】16384個のチェスの駒を落下・衝突させた物理現象に関する剛体シミュレーションに基づく結果画像(CG)の図である。
【図5】GPUを用いた剛体シミュレーションの高速化の計算アルゴリズムを示すフローチャートである。
【図6】バケット構築の処理手順の詳細内容を示すフローチャートである。
【図7】GPUを用いた剛体シミュレーションの高速化の計算アルゴリズムの変形例を示すフローチャートである。
【図8】流体に複数の球体形状の流体が落下したときの物理現象に関する流体シミュレーションに基づく結果画像(CG)の図である。
【図9】ロート状容器に収容された粉体が下方に流動し、容器の下端開口部から外側に落下して、下側に配置される容器に収容されるときの粉体シミュレーションに基づく結果画像(CG)の図である。
【符号の説明】
【0089】
10 コンピュータシステム
11 CPU
12 GPU
13A メインメモリ
13A−1 近傍粒子探索プログラム
13A−2 画像処理プログラム
13B ビデオメモリ
13B−1 テクスチャ

【特許請求の範囲】
【請求項1】
GPUで実行され、ビデオメモリの内部で作られた画像データから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算する方法で用いられる、近傍粒子探索に用いるデータ構造の構築方法であり、
前記物理的対象物を多数の粒子で表現し、前記ビデオメモリ内における3次元画像データ構造での前記多数の粒子の相互の格納位置関係に基づいて前記物理的対象物の存在状態を定める手法が用いられ、
前記3次元画像データ構造に含まれるバケットテクスチャは、前記物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、前記多数の粒子に割り付けられた粒子番号を多数の前記バケットの各々に格納し、
前記GPUで、当該GPUのバーテックスシェーダを用いて、前記バケットに格納される前記粒子の前記粒子番号と粒子座標を読み出し、2次元画像空間に書き込む書き込みステップを有し、
前記書き込みステップで、前記バケットに複数個の前記粒子が存在するときに、シミュレーションの1タイムステップで、前記複数個の粒子の各々の粒子番号と粒子座標を、複数回の処理のためのレンダリングに分けて1つずつ書き込むことを特徴とする近傍粒子探索に用いるデータ構造の構築方法。
【請求項2】
前記複数回の処理のためのレンダリングの各々で書き込む前記粒子の粒子番号と書き込むピクセルの選択、および書き込まれるピクセルにおけるチャンネルの選択は、前記GPUに用意された深度テスト、カラーマスク、ステンシルテストの各機能を用いて行われることを特徴とする請求項1記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項3】
前記バケットに4個の前記粒子が存在するとき、粒子番号が書き込まれるピクセルのRGBAから成る4つのチャンネルの各々に個別に昇順または降順に従う粒子番号の粒子からその粒子番号が順次に格納されることを特徴とする請求項2記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項4】
4個の前記粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合にはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目での前記ピクセルへの書き込みでは、深度バッファを最大値で初期化し、深度テストを用いて小さい値を持つものを合格させることにより、前記Rチャンネルに粒子番号ib0を書き込んで1回目の処理のためのレンダリングを行うステップと、
2パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記Rチャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Gチャンネルに粒子番号ib1を書き込んで2回目の処理のためのレンダリングを行うステップと、
3パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記RとGの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Bチャンネルに粒子番号ib2を書き込んで3回目の処理のためのレンダリングを行うステップと、
4パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記RとGとBの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Aチャンネルに粒子番号ib3を書き込んで4回目の処理のためのレンダリングを行うステップと、
を有することを特徴とする請求項3記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項5】
前記物理的対象物は多数の剛体であり、前記多数の剛体の衝突計算に基づくシミュレーションの演算が実行されることを特徴とする請求項1記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項6】
GPUで実行され、ビデオメモリの内部で作られた画像データから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算するプログラムで用いられる、近傍粒子探索に用いるデータ構造の構築プログラムであり、
前記GPUに、
前記物理的対象物を多数の粒子で表現し、前記ビデオメモリ内における3次元画像データ構造での前記多数の粒子の相互の格納位置関係に基づいて前記物理的対象物の存在状態を定める手順と、
前記3次元画像データ構造に含まれるバケットテクスチャは、前記物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、前記多数の粒子に割り付けられた粒子番号を多数の前記バケットの各々に格納する手順と、
バーテックスシェーダを用いて、前記バケットに格納される前記粒子の粒子番号と粒子座標を読み出し、2次元画像空間に書き込む書き込み手順とを実行させ、
前記書き込み手順で、前記バケットに複数個の前記粒子が存在するときに、シミュレーションの1タイムステップで、前記複数個の粒子の各々の粒子番号と粒子座標を、複数回の処理のためのレンダリングに分けて1つずつ書き込む手順を実行させることを特徴とする近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項7】
前記複数回の処理のためのレンダリングの各々で書き込む前記粒子の粒子番号と書き込むピクセルの選択、および書き込まれるピクセルにおけるチャンネルの選択は、前記GPUに用意された深度テスト、カラーマスク、ステンシルテストの各機能を用いて行われることを特徴とする請求項6記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項8】
前記GPUに、
前記バケットに4個の前記粒子が存在するとき、粒子番号が書き込まれるピクセルのRGBAから成る4つのチャンネルの各々に個別に昇順または降順に従う粒子番号の粒子からその粒子番号が順次に格納される手順を実行させることを特徴とする請求項7記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項9】
前記GPUに、
4個の前記粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合にはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目での前記ピクセルへの書き込みでは、深度バッファを最大値で初期化し、深度テストを用いて小さい値を持つものを合格させることにより、前記Rチャンネルに粒子番号ib0を書き込んで1回目の処理のためのレンダリングを行う手順と、
2パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記Rチャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Gチャンネルに粒子番号ib1を書き込んで2回目の処理のためのレンダリングを行う手順と、
3パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記RとGの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Bチャンネルに粒子番号ib2を書き込んで3回目の処理のためのレンダリングを行う手順と、
4パス目での前記ピクセルへの書き込みでは、カラーマスクを用いて前記RとGとBの各チャンネルへの書き込みを禁止しかつステンシルテストを用いることにより、前記Aチャンネルに粒子番号ib3を書き込んで4回目の処理のためのレンダリングを行う手順と、
を実行させることを特徴とする請求項8記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項10】
前記物理対象物は多数の剛体であり、
前記GPUに、前記多数の剛体の衝突計算に基づくシミュレーションの演算を行わせる手順を実行させることを特徴とする請求項6記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項11】
請求項6〜10のいずか1項に記載された近傍粒子探索に用いるデータ構造を構築するためのプログラムを記録したことを特徴とするコンピュータ読取り可能な記録媒体。
【請求項12】
ストリーミングプロセッサで実行され、メモリの内部で作られたデータアレイから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算する方法で用いられる、近傍粒子探索に用いるデータ構造の構築方法であり、
前記物理的対象物を多数の粒子で表現し、前記メモリ内における3次元画像データ構造での前記多数の粒子の相互の格納位置関係に基づいて前記物理的対象物の存在状態を定める手法が用いられ、
前記3次元画像データ構造に含まれるバケットアレイは、前記物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、前記多数の粒子に割り付けられた粒子番号を多数の前記バケットの各々に格納し、
前記ストリーミングプロセッサで、当該ストリーミングプロセッサの分散オペレーションを用いて、前記バケットに格納される前記粒子の前記粒子番号と粒子座標を読み出し、前記メモリにおけるアレイに書き込む書き込みステップを有し、
前記書き込みステップで、前記バケットに複数個の前記粒子が存在するときに、シミュレーションの1タイムステップで、前記複数個の粒子の各々の粒子番号と粒子座標を、複数回の処理のためのカーネルに分けて1つずつ書き込む近傍粒子探索に用いることを特徴とするデータ構造の構築方法。
【請求項13】
前記複数回の処理のための各ステップで書き込む前記粒子の粒子番号と書き込むデータの選択、およびボクセルのために割り当てられたメモリにおける複数のメモリ箇所の選択は、前記ストリーミングプロセッサに用意されたカウンタの機能を用いて行われることを特徴とする請求項12記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項14】
前記バケットに4個の前記粒子が存在するとき、粒子番号が書き込まれる第1から第4の前記メモリ箇所の各々に個別に昇順または降順に従う粒子番号の粒子からその粒子番号が順次に格納される請求項13の近傍粒子探索に用いるデータ構造の構築方法。
【請求項15】
4個の前記粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合にはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタが0になるように初期化しかつ第1の前記メモリ箇所への最初の書き込みを受け入れることにより、前記第1のメモリ箇所に粒子番号ib0を書き込んで1回目のルーチンのためのカーネルを実行するステップと、
2パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記第1のメモリ箇所への書き込みを禁止しかつ第2の前記メモリ箇所へ次の値を書き込むことにより、前記第2のメモリ箇所に粒子番号ib1を書き込んで2回目のルーチンのためのカーネルを実行するステップと、
3パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記第1と第2のメモリ箇所への書き込みを禁止しかつ第3の前記メモリ箇所へ次の値を書き込むことにより、前記第3のメモリ箇所に粒子番号ib2を書き込んで3回目のルーチンのためのカーネルを実行するステップと、
4パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記の第1と第2と第3のメモリ箇所への書き込みを禁止しかつ第4の前記メモリ箇所へ次の値を書き込むことにより、前記第4のメモリ箇所に粒子番号ib3を書き込んで4回目のルーチンのためのカーネルを実行するステップと、
を有することを特徴とする請求項13記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項16】
前記物理的対象物は多数の剛体であり、前記多数の剛体の衝突計算に基づくシミュレーションの演算が実行されることを特徴とする請求項12記載の近傍粒子探索に用いるデータ構造の構築方法。
【請求項17】
ストリーミングプロセッサで実行され、メモリの内部で作られたデータアレイから構築される3次元デジタル画像データを2次元デジタル画像データに変換することにより物理的対象物のシミュレーションを演算するプログラムで用いられる、近傍粒子探索に用いるデータ構造の構築プログラムであり、
前記ストリーミングプロセッサに、
前記物理的対象物を多数の粒子で表現し、前記メモリ内における3次元画像データ構造での前記多数の粒子の相互の格納位置関係に基づいて前記物理的対象物の存在状態を定める手順と、
前記3次元画像データ構造に含まれるバケットアレイは、前記物理的対象物が生じる空間に対応して作られたメモリ空間を分割するバケットによって構成され、前記多数の粒子に割り付けられた粒子番号を多数の前記バケットの各々に格納する手順と、
前記ストリーミングプロセッサで、当該ストリーミングプロセッサの分散オペレーションを用いて、前記バケットに格納される前記粒子の前記粒子番号と粒子座標を読み出し、前記メモリにおけるアレイに書き込む書き込み手順とを有し、
前記書き込みステップで、前記バケットに複数個の前記粒子が存在するときに、シミュレーションの1タイムステップで、前記複数個の粒子の各々の粒子番号と粒子座標を、複数回の処理のためのカーネルに分けて1つずつ書き込む手順を有することを特徴とする近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項18】
前記複数回の処理のための各ステップで書き込む前記粒子の粒子番号と書き込むデータの選択、およびボクセルのために割り当てられたメモリにおける複数のメモリ箇所の選択は、前記ストリーミングプロセッサに用意されたカウンタの機能を用いて行われることを特徴とする請求項17記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項19】
前記バケットに4個の前記粒子が存在するとき、粒子番号が書き込まれる第1から第4の前記メモリ箇所の各々に個別に昇順または降順に従う粒子番号の粒子からその粒子番号が順次に格納される請求項18記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項20】
前記ストリーミングプロセッサに、
4個の前記粒子の粒子番号をib0,ib1,ib2,ib3(昇順の場合ににはib0<ib1<ib2<ib3、降順の場合にはib0>ib1>ib2>ib3)であるとするとき、
1パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタが0になるように初期化しかつ第1の前記メモリ箇所への最初の書き込みを受け入れることにより、前記第1のメモリ箇所に粒子番号ib0を書き込んで1回目のルーチンのためのカーネルを実行する手順と、
2パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記第1のメモリ箇所への書き込みを禁止しかつ第2の前記メモリ箇所へ次の値を書き込むことにより、前記第2のメモリ箇所に粒子番号ib1を書き込んで2回目のルーチンのためのカーネルを実行する手順と、
3パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記第1と第2のメモリ箇所への書き込みを禁止しかつ第3の前記メモリ箇所へ次の値を書き込むことにより、前記第3のメモリ箇所に粒子番号ib2を書き込んで3回目のルーチンのためのカーネルを実行する手順と、
4パス目での前記ボクセルのために割り当てられた前記メモリへの書き込みでは、前記カウンタを用いることにより、前記の第1と第2と第3のメモリ箇所への書き込みを禁止しかつ第4の前記メモリ箇所へ次の値を書き込むことにより、前記第4のメモリ箇所に粒子番号ib3を書き込んで4回目のルーチンのためのカーネルを実行する手順と、
を実行させることを特徴とする請求項19記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項21】
前記物理対象物は多数の剛体であり、
前記ストリーミングプロセッサに、前記多数の剛体の衝突計算に基づくシミュレーションの演算を行わせる手順を実行させることを特徴とする請求項20記載の近傍粒子探索に用いるデータ構造の構築プログラム。
【請求項22】
請求項17〜21のいずか1項に記載された近傍粒子探索に用いるデータ構造を構築するためのプログラムを記録したことを特徴とするコンピュータ読取り可能な記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2009−43245(P2009−43245A)
【公開日】平成21年2月26日(2009.2.26)
【国際特許分類】
【出願番号】特願2008−184478(P2008−184478)
【出願日】平成20年7月16日(2008.7.16)
【出願人】(505011534)プロメテック・ソフトウェア株式会社 (5)
【Fターム(参考)】