説明

プログラム、情報記憶媒体及び画像生成装置

【課題】より高速な並列処理を実現すること。
【解決手段】ヒット判定を、メインプロセッサエレメント(MPE10)と複数のサブプロセッサエレメント(SPE)12とで並列処理で実行する。MPE10とSPE12それぞれが分担するノード(ポリゴン集合)の数は、過去のSPEのヒット判定処理結果に基づいてSPEの処理負荷を予測する予測関数f(X)に基づいて、MPE10のヒット判定の処理負荷と、SPE12のヒット判定の処理負荷とがほぼ同等となり、ほぼ同時にヒット判定を終了するように決定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メインプロセッサと複数のサブプロセッサとを備え、プロセスに応じて実行台数を含む実行サブプロセッサの割り当てを動的に行うサブプロセッサマネージャ機能を有するコンピュータに、仮想三次元空間内を移動する移動オブジェクトの画像を生成させる機能を実現するためのプログラム等に関する。
【背景技術】
【0002】
コンピュータの中には、複数のプロセッサを搭載するものが存在する。マルチプロセッサタイプのコンピュータでは、従来シングルプロセッサが単独で逐次実行していたタスクを複数のプロセッサで分担して演算処理したり同時並列的に処理することができることから、シングルプロセッサのコンピュータに比べて大幅な高速化が期待できるものとして期待されている。
【0003】
一方、仮想3次元空間内に配置されたポリゴンモデルで構成された多数のオブジェクトを制御しながら同空間内を仮想カメラで撮影した3DCGをリアルタイムに生成するビデオゲームを実現するコンピュータでは、常時多数のオブジェクト同士のヒット判定(衝突判定処理)や衝突後のオブジェクトの挙動算出など高負荷な処理を所定のフレーム時間間隔(例えば1/60秒間隔)内で繰り返し実行する必要がありマルチプロセッサによる高速化の恩恵を受け易く、その利用方法が様々提案されている。
【0004】
そこで、複数のプロセッサで担当するオブジェクトを分担して複数のオブジェクトの挙動を物理演算処理する技術が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2008−171176号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、複数のプロセッサそれぞれの負荷状況は随時変動するものであるため、希望通りの高速化が図れない場合が多い。
本発明は、随時変動し得る各プロセッサの負荷状況を考慮したより高速な並列処理を実現することを目的とする。
【課題を解決するための手段】
【0007】
以上の課題を解決するための第1の形態は、メインプロセッサと複数のサブプロセッサとを備え、プロセスに応じて実行台数を含む実行サブプロセッサの割り当てを動的に行うサブプロセッサマネージャ機能を有するコンピュータに、仮想三次元空間において移動オブジェクトが多数のプリミティブの何れと衝突したかを判定する衝突判定処理を並列実行させるためのプログラムであって、
前記プリミティブを、前記メインプロセッサが分担するメインプロセッサ分担プリミティブと、前記サブプロセッサが分担するサブプロセッサ分担プリミティブとに割り振る割り振り設定手段(例えば、図7の処理部200、分担設定部216、図11のステップS38、S70、S72)、
前記メインプロセッサに前記メインプロセッサ分担プリミティブに関する前記衝突判定処理を実行させるとともに、前記サブプロセッサマネージャ機能により前記衝突判定処理の実行が割り当てられた実行サブプロセッサに前記サブプロセッサ分担プリミティブに関する前記衝突判定処理を実行させる並列処理制御手段(例えば、図7の処理部200、ヒット判定部214,232、図11のステップS122、図14のステップS92)、
前記並列処理制御手段により実行制御された前記メインプロセッサによる前記メインプロセッサ分担プリミティブに関する前記衝突判定処理の演算量(例えば、図9の今回MPE処理量558)と、前記実行サブプロセッサによる前記サブプロセッサ分担プリミティブに関する前記衝突判定処理の演算量(例えば、図9の今回SPE処理量560)とに基づいて、前記メインプロセッサ分担プリミティブ及び前記サブプロセッサ分担プリミティブの分担数を設定する分担数設定手段(例えば、図7の処理部200、分担設定部216、統計処理部218、図11のステップS38)、として前記コンピュータを機能させるとともに、
前記割り振り設定手段が、前記分担数設定手段により設定された分担数に基づいて、前記プリミティブを割り振るように前記コンピュータを機能させて、前記サブプロセッサマネージャ機能により動的に変更される実行サブプロセッサの台数に応じた前記衝突判定処理の並列実行を行うためのプログラムである。
【0008】
また、別形態として、メインプロセッサと複数のサブプロセッサとを備え、プロセスに応じて実行台数を含む実行サブプロセッサの割り当てを動的に行うサブプロセッサマネージャ機能を有して、仮想三次元空間において移動オブジェクトが多数のプリミティブの何れと衝突したかを判定する衝突判定処理を並列実行して前記仮想三次元空間の画像を生成する画像生成装置であって、
前記プリミティブを、前記メインプロセッサが分担するメインプロセッサ分担プリミティブと、前記サブプロセッサが分担するサブプロセッサ分担プリミティブとに割り振る割り振り設定手段(例えば、図1の制御ユニット1210、図7の処理部200、分担設定部216、図11のステップS38、S70、S72)と、
前記メインプロセッサに前記メインプロセッサ分担プリミティブに関する前記衝突判定処理を実行させるとともに、前記サブプロセッサマネージャ機能により前記衝突判定処理の実行が割り当てられた実行サブプロセッサに前記サブプロセッサ分担プリミティブに関する前記衝突判定処理を実行させる並列処理制御手段(例えば、図1の制御ユニット1210、図7の処理部200、ヒット判定部214,232、図11のステップS122、図14のステップS92)と、
前記並列処理制御手段により実行制御された前記メインプロセッサによる前記メインプロセッサ分担プリミティブに関する前記衝突判定処理の演算量と、前記実行サブプロセッサによる前記サブプロセッサ分担プリミティブに関する前記衝突判定処理の演算量とに基づいて、前記メインプロセッサ分担プリミティブ及び前記サブプロセッサ分担プリミティブの分担数を設定する分担数設定手段(例えば、図1の制御ユニット1210、図7の処理部200、分担設定部216、統計処理部218、図11のステップS38)と、を備え、
前記割り振り設定手段が、前記分担数設定手段により設定された分担数に基づいて、前記プリミティブを割り振り、前記サブプロセッサマネージャ機能により動的に変更される実行サブプロセッサの台数に応じた前記衝突判定処理の並列実行を行うことを特徴とする画像生成装置として実現しても良い。
【0009】
第1の形態によれば、3DCGを生成するに当り高処理負荷の代表とも言える衝突判定(ヒット判定)をメインプロセッサと、実行が割り当てられた台数分の実行サブプロセッサとで並列処理することができるので、サブプロセッサだけで並列処理する場合よりも更なる処理の高速化を図ることができる。
ただし、実行サブプロセッサの台数は随時変更し得る。そこで、メインプロセッサとサブプロセッサとに判定処理するプリミティブ(3Dグラフィックスにおけるオブジェクトモデルを構成する平面、及び円柱や円錐、球などの単純な数式で定義される形状を含む意味)をどれだけ分担するかを、実際の衝突判定処理の並列実行の実績に基づいて設定することができる。より効率的な並列処理を実現し更なる高速化を実現する。
【0010】
第2の形態は、前記分担数設定手段が、前記メインプロセッサ分担プリミティブの数と、前記サブプロセッサ分担プリミティブの数とが所定の同等条件を満たすように前記分担数を設定するように前記コンピュータを機能させるための第1の形態のプログラムである。
【0011】
ここで言う「同等条件」とは、メインプロセッサの処理負荷と、衝突判定に使われているサブプロセッサにおける処理負荷がほぼ同等となる条件という意味である。具体的には、分担されたプリミティブについての衝突判定処理に要するそれぞれの所要時間がメインプロセッサとサブプロセッサとで同等となり、衝突判定処理がほぼ同じタイミングとなる条件を意味する。
第2の形態によれば、第1の形態と同様の効果が得られるとともに、メインプロセッサとサブプロセッサとで衝突判定完了のタイミングがズレて何れかのプロセッサが他方の完了待ちをする時間を低減することができる。
【0012】
第3の形態は、前記分担数設定手段が、前記メインプロセッサ分担プリミティブの数を、前記サブプロセッサ分担プリミティブの数より多く設定して後、前記衝突処理の並列実行を行うにつれて徐々に同等となるように設定する、ように前記コンピュータを機能させるための第1の形態のプログラムである。
【0013】
第3の形態によれば、第1の形態と同様の効果が得られるとともに、最初はメインプロセッサの処理負荷がやや多くなるように分担プリミティブの数を設定し、それから徐々にメインプロセッサとサブプロセッサとの処理負荷が同等に近づくように分担するプリミティブの数を設定することができるので、その時々の状態によって衝突判定に使用できるサブプロセッサの数が動的に変化する環境でも、その時の状態に最適な分担を実現することができる。
【0014】
第4の形態は、前記サブプロセッサが、それぞれローカルメモリを有しており、
前記多数のプリミティブは、所属する全てのプリミティブのデータ総量が前記ローカルメモリの記憶容量以下となる数の隣接するプリミティブ(例えば、図5のポリゴンPL0,PL1,PL2,・・・)でなる複数のプリミティブ集合(例えば、図5のノードND1,ND2,・・・)にて構成され、
前記割り振り設定手段が、前記プリミティブ集合を単位として割り振りを行い、
前記分担数設定手段が、前記プリミティブ集合を単位として前記分担数を設定する、ように前記コンピュータを機能させるための第1〜第3の何れか形態のプログラムである。
【0015】
第4の形態によれば、第1〜第3の形態の何れかと同様の効果を得られるとともに、プリミティブの分担に際し、複数のプリミティブをプリミティブ集合として纏めて扱うことで、サブプロセッサのローカルメモリに衝突判定に要するデータの一括ロードが可能とし、データのロードに要するオーバーヘッドを低減し、更なる高速化を実現できる。
【0016】
第5の形態は、前記多数のプリミティブの中から、前記衝突判定処理の判定対象とする判定対象プリミティブを、前記プリミティブ集合を単位として選択する判定対象選択手段(例えば、図7の処理部200、判定対象選択部212、図11のステップS36)として前記コンピュータを更に機能させ、
前記割り振り設定手段が、前記判定対象選択手段により選択されたプリミティブ集合を割り振るように前記コンピュータを更に機能させるための第4の形態のプログラムである。
【0017】
第5の形態によれば、第4の形態と同様の効果が得られるとともに、衝突判定処理の対象とするプリミティブ集合を事前に選択し限定することで、衝突判定に要する負荷を軽減し、更に高速化を図ることができる。
【0018】
第6の発明は、第1〜第5の何れかの形態のプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体である。ここで言う「情報記憶媒体」とは、例えば磁気ディスクや光学ディスク、ICメモリなどを含む。第6の発明によれば、第1〜第5の何れかの形態のプログラムをコンピュータに読み取らせて実行させることによって、コンピュータに第1〜第5の形態の何れかと同様の効果を発揮させることができる。
【図面の簡単な説明】
【0019】
【図1】家庭用ゲーム装置のシステム構成例を示す図。
【図2】家庭用ゲーム装置ハードウェア構成の一例を示すブロック図。
【図3】マルチコアプロセッサのハードウェア構成の一例を示すブロック図。
【図4】ソフトフェア構成の一例を示す概念図。
【図5】ゲームの概要とオブジェクトのポリゴンモデル構造の一例を示す図。
【図6】ヒット判定処理の原理を説明する概念図。
【図7】機能構成例を示す機能ブロック図。
【図8】ゲーム空間初期設定データのデータ構成例を示す図。
【図9】ヒット判定関連データのデータ構成例を示す図。
【図10】ゲームプログラムの主たる処理の流れを説明するためのフローチャート。
【図11】ヒット判定処理におけるメインプロセッサエレメント(MPE)の処理の流れを説明するためのフローチャート。
【図12】図11よりつづくフローチャート。
【図13】分担数算出処理の流れを説明するためのフローチャート。
【図14】サブプロセッサエレメント(SPE)におけるヒット判定処理の流れを説明するためのフローチャート。
【図15】本発明を適用した画像生成装置の変形例を示す斜視外観図。
【発明を実施するための形態】
【0020】
〔第1実施形態〕
次に、本発明を適用した第1実施形態として、画像生成装置の1つである据え置き型の家庭用ゲーム装置において、ポリゴンモデルからなる複数のオブジェクトをゲームキャラクタや背景物などとして仮想3次元空間に配置し、その様子を3DCG(3次元コンピュータグラフィクス)によりリアルタイムに生成して所与のビデオゲームを実行する例を説明する。
【0021】
[ゲーム装置の構成]
図1は、家庭用ゲーム装置の構成例を示すシステム構成図である。家庭用ゲーム装置1200は、例えば各種マイクロプロセッサやICメモリ等が実装された制御ユニット1210と、光学ディスク1202やメモリカード1204といった情報記憶媒体の読み取り装置1206,1208を備える。
【0022】
制御ユニット1210は、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)及びDSP(Digital Signal Processor)などの各種マイクロプロセッサ、ASIC(Application Specific Integrated Circuit)、ICメモリなどの電気電子機器を備え家庭用ゲーム装置1200の各部を制御する。
また、制御ユニット1210は、インターネットやLAN(Local Area Network)、WAN(Wide Area Network)と言った通信回線1と有線又は無線接続し、外部装置との間でデータ通信を実現する通信装置1212を備える。更に、近距離無線モジュール1214を備え、近距離無線を介して複数のゲームコントローラ1230との間でデータの送受信を実現する。近距離無線の形式としては、例えばBluetooth(登録商標)やUWB(超広帯域無線)、無線LANなどが適宜適用可能である。
【0023】
そして、制御ユニット1210は、ゲームコントローラ1230から受信した操作入力信号に基づいてゲーム画面やゲーム音を生成し、生成したゲーム画面やゲーム音に基づく映像信号や音信号を信号ケーブル1209で接続されたビデオモニタ1220(ディスプレイモニタ)に出力する。
ビデオモニタ1220には、画像を表示するフラットパネルディスプレイ1222と、音声を出力するスピーカ1224とが備えられており、プレーヤはフラットパネルディスプレイ1222に映し出されるゲーム画面を見ながら、スピーカ1224から放音されるゲーム音を聞きつつゲームコントローラ1230で各種操作を入力してゲームを楽しむ。尚、複数のプレーヤが同時にゲームに参加する場合には、同時に複数のゲームコントローラ1230を用意する。
【0024】
ゲームコントローラ1230は、内蔵するコントローラ制御ユニット1260を中心に各種入力デバイス及び出力デバイスを、例えばIIC(Inter-Integrated Circuit)バスなどによって実現されるローカルバス回路によって接続しており、コントローラ制御ユニット1260によって各デバイス間の入出力を制御する。
【0025】
具体的には、入力デバイスとしては、選択の決定やキャンセル、タイミングの入力などに用いられるプッシュボタン1232と、図で言うところの上下左右の各方向を単独入力するための4つの方向入力キー1234と、操作方向と操作量とを同時に入力することのできる右アナログレバー1236及び左アナログレバー1238とを備える。
【0026】
コントローラ制御ユニット1260は、例えば、CPUやローカルバス回路におけるデータ通信を制御するバスコントローラICなどの各種マイクロチップやICメモリなどの電子部品、ゲーム装置本体1201の近距離無線モジュール1214と無線通信を実現する近距離無線モジュール1256などを実装する。
【0027】
尚、ゲームコントローラ1230が必要とする電力は、図示されない内蔵されたバッテリーから供給されるものとする。また、ゲームを実行するのに必要なプログラム及び各種設定データは、通信装置1212を介して通信回線1に接続し、外部装置からダウンロードして取得する構成であっても良い。また、制御ユニット1210やコントローラ制御ユニット1260においてプログラムの実行により実現される機能の一部又は全部を、電子回路等のハードウェアによって実現する構成としても良い。
【0028】
[ハードウェア構成の説明]
図2は、家庭用ゲーム装置1200のハードウェア構成の一例を示すブロック図である。家庭用ゲーム装置1200は、制御ユニット1210として、中央演算装置に該当するマルチコアプロセッサ2と、メインメモリ4と、AV(Audio Video)ボード6と、I/Oコントローラ8とを備える。
【0029】
マルチコアプロセッサ2は、データ読み書き自在に接続されたメインメモリ4を主たる演算用記憶領域として使用する家庭用ゲーム装置1200の中央演算装置である。
【0030】
図3は、本実施形態におけるマルチコアプロセッサ2のハードウェア構成の一例を示すブロック図である。マルチコアプロセッサ2は、オペレーティングシステム(OS)の実行や、アプリケーションプログラムの実行に関わる制御系処理向けに設計されたメインプロセッサエレメント10(以下、MPE[Main Processor Element]と記す)と、繰り返しの演算処理向けに設計された複数のサブプロセッサエレメント12(以下、SPE[Sub Processor Element]と記す)と、メモリコントローラ14と、外部I/Oインタフェースコントローラ16とを備え、それらが高速な内部バス18によりデータ送受可能に接続している。
【0031】
より具体的には、MPE10は公知のパソコン等のシングルコアタイププロセッサと同様のアーキテクチャを有するメインプロセッサ10aと、L2キャッシュメモリ10bとを備える。
【0032】
SPE12は、それぞれメインプロセッサ10aとは別のプログラムに基づいて単独で演算処理することのできるサブプロセッサ12aと、メインメモリ4にDMA(Direct Memory Access)制御方式でデータ転送するDMAコントローラ12cを備える。サブプロセッサ12aは、MPE10の命令によりDMAコントローラ12cを介してメインメモリ4にアクセスしてSPE用のプログラムや演算処理に関わるデータをローカルメモリ12bにダウンロードし、ダウンロードしたプログラムを実行できる。そして、演算処理の結果をメインメモリ4にアップロードし、処理終了をMPE10に通知することができる。
【0033】
外部I/Oインタフェースコントローラ16は、AVボード6やI/Oコントローラ8とのデータ送受を実現する。
【0034】
AVボード6は、図2に示すように、GPU6aと、VRAM6bと、AVインタフェースコントローラ6cとを備える。AVボード6は、マルチコアプロセッサ2で演算処理された仮想3次元空間に配置された各オブジェクトの位置や姿勢といった情報や仮想カメラの位置や姿勢、視点方向などの情報に基づいて仮想3次元空間内を仮想カメラで撮影した3DCGを生成してゲーム空間画像を生成する。そして、ゲーム空間画像に各種情報表示を合成してゲーム画面と当該画面をフラットパネルディスプレイ1222に表示させる映像信号を生成し、ビデオ端子22に出力する。また、操作音や効果音、BGMなどのゲーム音を生成し、スピーカ1224で放音させるための音声信号を生成しオーディオ端子24に出力する。ビデオ端子22及びオーディオ端子24には信号ケーブル1209が接続され、映像信号及び音声信号をビデオモニタ1220のフラットパネルディスプレイ1222及びスピーカ1224に出力する。
【0035】
I/Oコントローラ8は、内外の情報記憶媒体とのデータの読み取りや書き込み、ゲームコントローラ1230などの付属装置とのデータの送受信を管理する集積回路である。
具体的には、I/Oコントローラ8は、内外の情報記憶媒体として内部メモリ30やHDD(ハードディスクドライブ)32、メモリカードリーダ34(図1の読み取り装置1208相当)、ODD(オプティカルディスクドライブ;図1の読み取り装置1206相当)と接続し、それらの情報記憶媒体から記憶されているプログラムやデータを読み出し、また書き込むことができる。また、通信回線1とのデータ通信のために通信装置1212と接続し、ゲームコントローラ1230とのデータ通信のために近距離無線モジュール1214と接続し、各データ通信に関する処理を実行することができる。
【0036】
[ソフトウェア構成の説明]
図4は、本実施形態におけるソフトフェア構成の一例を示す概念図である。
本実施形態ではビデオゲームを実行させるためのゲームプログラム40は、MPE10上で実現されるゲーム装置向けのリアルタイムOS(オペレーティングシステム)42上で実行される。
そして、ゲームプログラム40は、ゲームプログラム本体44から予め用意されているサブプロセッサ実行環境ライブラリ46を利用することで、リアルタイムOS42上で実現されるサブプロセッサマネージャ48(以下、SPM[Sub Processor Manager])を介して、SPE用プログラム50のロード、実行などのプロセス管理をすることができる。
【0037】
サブプロセッサマネージャ(SPM)48は、SPE用プログラム50の実行環境を実現する。具体的には、ゲームプログラム40の実行中に必要となったタスクを、SPE12へ分担する機能を有する。分担の方式としては、(1)高負荷の同一タスク(同一処理)を同時に複数のSPE12に与える単一タスク並列処理方式と、(2)ゲームプログラム40や他アプリケーションから要求される複数のタスクそれぞれについて、各タスクを実現するための複数のスレッドを生成して、要求されている各タスクをユーザレベルで十分にリアルタイムに応答があると体感できる程度に十分早く処理できるように処理順を自動計算してSPE12へスケジューリングして動的に分担する複数タスク並列処理方式と、が用意されている。これらは、ゲームプログラム本体44からサブプロセッサ実行環境ライブラリ46でマルチコアプロセッサのメーカにより予め用意されている適当なAPI(Application Program Interface)を利用することにより選択的に利用できる。
【0038】
タスクを分担したならば、SPM48は、分担したタスクに必要なSPE用プログラム50をローカルメモリ12bへロードさせるとともに、当該タスクにおける演算処理に必要なデータのポインタ等を発行しローカルメモリ12bへロードさせる。そして、分担したタスクの実行命令を出す。
【0039】
SPE用プログラム50は、ゲームプログラム40の実行中に必要となる様々なタスクの内容に合わせて予め用意される。例えば、ヒット判定処理、圧縮されたテクスチャデータや映像データ、音声データのデコード処理、プレーヤキャラクタの耐久力をプレーヤに通知するヒットポイントゲージの表示更新処理、プレーヤキャラクタ等の表示に適用する画像特殊効果処理、外部装置とのデータ通信処理などのタスクに対応したプログラムを適宜用意することができる。
【0040】
SPE12は、そのときロードされているSPE用プログラム50に従って演算処理を実行する。そして、SPM48により分担されたタスクを実行完了すると、演算処理結果を他のSPE12に送信したりメインメモリ4の指定領域に書き込み、所定のフラグをセットするなどしてSPM48にタスクの終了を通知することができる。
【0041】
SPM48は、SPE12のタスク終了の通知を受けると、それらの演算処理結果を纏めゲームプログラム40へ返す。すなわち、SPM48は、複数のSPE12の利用を前提としたタスクコントロールをすることで並列処理を実現し、ゲームプログラム40を実行する中で発生する様々な処理の高速化を実現することができる。
【0042】
尚、図4ではSPE12を一つだけ表記しているが、実際のハードウェア構成上はSPE12は複数有り、それぞれについてSPE用プログラム50がロードされることになる。その際、前述の単一タスク並列処理方式でタスクを分担する場合には、複数のSPE12で同じSPE用プログラム50がロードされてほぼ同時に実行することになるが、複数タスク並列処理方式ではスケジュールに従って異なるタイミングでSPE用プログラム50がロードされ実行されることになる。また、SPE12のローカルメモリ12bへのプログラムやデータのロードやメモリの解放等の実行にはオーバーヘッドが発生するので、プログラムやデータの入れ替えが頻発すると並列処理による高速化の恩恵を受け難くなるので注意が必要である。
【0043】
このように、SPE12には様々なタスクを分担させて並列処理させることができるので、本実施形態ではオブジェクト同士のヒット判定(衝突判定)をMPE10とSPE12との両方を用いた並列処理で実行する。
【0044】
[ゲームの概要とモデル構造の説明]
図5は、本実施形態におけるゲームの概要とオブジェクトのポリゴンモデル構造の一例を示す図である。
本実施形態のビデオゲームは、プレーヤが操縦するプレーヤキャラクタとなる移動オブジェクト60が、複数の背景オブジェクト62が配置されたゲーム空間内を、背景オブジェクト62を避けながら所定のゴールエリアに向けて疾走する障害物レースゲームである。プレーヤキャラクタとなる移動オブジェクト60は、背景オブジェクト62と接触すると、ヒットポイントがその都度減算されダメージを受ける。ゴールエリア到達までにヒットポイントが残っていればゲームクリア、「0」になるとゲームオーバとなる。
【0045】
背景オブジェクト62のように、本実施形態のゲームに登場する背景物等はその表面形状を複数のポリゴン(プリミティブの一種)で構成されている。そして、オブジェクトのポリゴンモデルデータは、隣接する複数のポリゴンPL(PL0,PL1,PL2,・・・;図中の個別の三角形)を複数のポリゴン集合ND(ND1,ND2,・・・;以下「ノード」と呼ぶ;図中は複数の三角形を含む太線囲みで表示)に分けて構成される。
【0046】
一つのノードNDに含まれるポリゴンPLの数は、SPE12のローカルメモリ12bにヒット判定処理向けのSPE用プログラム50と、ヒット判定処理に必要な移動オブジェクト60の情報及びそのヒット判定の相手となる少なくとも一つのノードに含まれる複数のポリゴンの情報とを格納すると、演算処理に必要な容量を残してローカルメモリ12bの記憶領域の大部分が使い切り状態となるように予め設定されている。つまり、ヒット判定処理向けのSPE用プログラム50がロードされているローカルメモリ12bに、メモリサイズをオーバーしない範囲内で一度のロード命令でポリゴンのデータを纏めて処理できるように一つのノードNDに含まれるポリゴン数が事前に調整されている。
【0047】
尚、本実施形態では背景オブジェクト62の外形を3角形ポリゴンで形成する例を示しているがこれに限るものではなく、多角形ポリゴンや、球、円柱、円錐と言ったその他の種類のプリミティブの単独又は複数で適宜構成することができる。
【0048】
[ヒット判定処理の原理の説明]
図6は、本実施形態におけるヒット判定処理の原理を説明する概念図である。本実施形態では、ゲームプログラム実行中に必要とされるヒット判定処理という一つのタスクを、移動キャラクタ60が衝突するであろうと予測されるヒット先候補のノードの全ポリゴンについて実行する。これは高負荷なタスクである。そこで、SPM48は、その時点で利用可能なSPE12に対して単一タスク並列処理方式でヒット判定タスクを分担して並列処理させる。
【0049】
より具体的には、ヒット判定というタスクを、MPE10と、複数のSPE12とで並列処理させる。MPE10とSPE12とでは、移動キャラクタ60のヒット先を判定するために同じくヒット判定処理を実行する点では共通するが、ヒット判定の対象とするノードつまりはポリゴンがそれぞれ異なるように分担される。
【0050】
ノードの分担においては、ヒット判定タスクの高速化の観点と、何れかのプロセッサエレメントの処理待ち時間の最小化の観点とから、MPE10におけるヒット判定処理の終了と、SPE12でのヒット判定処理の終了とがほぼ同時となるのを目標として、ノードを割り当てする。
【0051】
ただし、並列処理に利用できるSPE12の数や、割り当てるノードの総量は、移動キャラクタ60の数や背景オブジェクト62の種類や数、プレーヤからのゲーム操作の有無、他の処理の実行状況など、その時々のゲームの進行状態により変化する。例えば、次に登場する背景オブジェクト62に適用するテクスチャデータのデコードタスクが先行して行われていたり、音声合成処理等の処理タスクを実行しているなどすればヒット判定を分担可能なSPE12の数が変化する。移動キャラクタ60が平原を移動する場面と、林の中を木々を避けつつ移動する場面とでは、後者の方がヒット先候補とされるノードの数が増える傾向にある。つまり、最適なノードの分担の仕方は、ゲームのプログラム段階では最適解が決められずその時々に応じて決定する必要がある。
【0052】
そこで、本実施形態では、ゲームプログラム40又はSPM48が前回までの実際のヒット判定処理の処理結果をサンプリングし、統計的にSPE12の分担可能な処理負荷を予測して、その予測に基づいてMPE10におけるヒット判定処理の終了と、SPE12でのヒット判定処理の終了とがほぼ同等となるようにノードの割り当てをする。
【0053】
具体的には、先ず前提として、(1)SPE12が、ノードに含まれるポリゴン一つについて移動オブジェクト60とのヒット判定処理をすると、SPE処理量Msを「1」カウントアップする。(2)SPE12が、SPE処理量Msを処理するのに要した時間を、MPE10が1つのポリゴンについてヒット判定処理するのに要する時間を単位として換算する。
【0054】
つまり、MPE10が1つのポリゴンについて移動オブジェクト60とのヒット判定処理をするとMPE処理量Mmを「1」カウントアップし、SPE12が全分担ノードのポリゴンのヒット判定を終了した時点でカウントを終了する。これを、SPE処理時間Tsのカウントと見なす。例えば、SPE12が10個のポリゴンをヒット判定処理した時点で、MPE10が5個のポリゴンをヒット判定処理していれば、SPE12は“2単位”(個/MPEにおける1ポリゴン処理所要時間)で計算したことになる。
【0055】
MPE処理量MmとSPE処理量Msは、移動オブジェクト60のヒット判定処理開始前にリセットされ、ヒット判定処理開始とともにカウントが始まる。そして、SPE12の分担ノード全てのポリゴンのヒット判定終了とともに、その時点におけるMPE処理量MmとSPE処理量Msとが統計データとして蓄積される。統計データの蓄積は、統計的に有意義なサンプリング数を上限として、先入れ先出しで更新される。
【0056】
さて、統計的に意味のあるサンプリング数だけMPE処理量MmとSPE処理量Msとがサンプリングできたならば、SPE処理量MsをX軸成分とし、これに対するMPE処理量MmをY軸成分として、予測関数Y=f(X)を最小二乗法で求める。尚、予測関数f(X)の求め方は、最小二乗法に限らずその他の統計的手法により求めるとしても良い。
【0057】
そして、「MPE10の処理終了とSPE12の処理終了をほぼ同じにする」とするノード分担の目標に基づき、今回のヒット判定処理において、移動オブジェクト60のヒット先候補となるノードNDに含まれるポリゴン総数をPalとし、MPE分担ポリゴン数をPm、SPE分担ポリゴン数をPsとして、式(1)及び式(2)の連立方程式を解いてSPE分担ポリゴン数Psを算出する。
f(Pm)=f(Ps) ・・・式(1)
Pal=Pm+Ps・・・式(2)
尚、統計データのサンプリング数が統計的に有意義に達する前では、予めゲーム製作者がその開発段階でチューニングして設定した初期予測関数g(X)を用意しておいて、これを用いるものとする。
【0058】
そして、SPE分担ポリゴン数Psを算出できたならば、今回ヒット先候補とされるノードの平均ポリゴン数PaでSPE分担ポリゴン数Psを除算して、小数点以下を丸めてSPE分担ノード数Nsとする。SPE分担ノード数Nsが算出できたならば、MPE分担ノード数Nmは、ヒット先候補となるノードの総数Nal−Nsで算出する。尚、ここで算出したSPE分担ポリゴン数Nsは、その時ヒット判定処理に使用できるSPE全体(SPE台数)での分担数であり、実際には使用可能なSPEの台数で割った数が個々のSPEにおける分担数となる。
【0059】
ヒット判定処理は、1枚のゲーム空間画像を生成する間(1フレーム時間を1/60秒とするのであれば1/60秒の間)に何百、何千という回数行われるので、統計的に有意義なサンプリング数は1秒程度あれば十分に達成可能である。すなわち、その時々のゲーム場面における最適な分担が行われるようになる。
【0060】
[機能ブロックの説明]
図7は、本実施形態における機能構成例を示す機能ブロック図である。同図に示すように本実施形態の家庭用ゲーム装置1200は、操作入力部100と、処理部200と、音出力部350と、画像表示部360と、通信部370と、記憶部500とを備える。
【0061】
操作入力部100は、ボタンスイッチや、ジョイスティック、タッチパッド、トラックボール、加速度センサユニット、傾斜センサユニット、などによって実現され、プレーヤによって為された各種の操作入力に応じて操作入力信号を処理部200に出力する。図1では、各ゲームコントローラ1230が操作入力部100に該当する。
【0062】
処理部200は、例えばマイクロプロセッサやASIC(特定用途向け集積回路)、ICメモリなどの電子部品によって実現され、操作入力部100や記憶部500をはじめゲーム装置の各機能部との間でデータの入出力を行うとともに、所定のプログラムやデータ、操作入力部100からの操作入力信号に基づいて各種の演算処理を実行して、ゲーム装置の動作を制御する。図1では、ゲーム装置本体1201に内蔵された制御ユニット1210が処理部200に該当する。
そして本実施形態における処理部200は、メイン演算部202と、サブ演算部230と、音生成部250と、画像生成部260と、通信制御部270とを備える。
【0063】
メイン演算部202は、処理部200における主たる演算処理部である。図3のメインプロセッサエレメント(MPE)10がこれに該当する。サブ演算部230は、メイン演算部202を補助する演算処理を実行する。図3のサブプロセッサエレメント(SPE)12がこれに該当する。
【0064】
そして、メイン演算部202は、OS(オペレーティングシステム)制御部204と、ゲーム演算部210を備える。但し、ゲーム演算部210の一部はサブ演算部230によっても実現される。
【0065】
OS制御部204は、ゲームプログラムなどのアプリケーションプログラムがハードウェアリソースを使用可能にする環境を提供する。図4のリアルタイムOS42がこれに該当する。そして、OS制御部204は、サブ演算部制御部206を有する。
サブ演算部制御部206は、メイン演算部202で実行される演算処理からサブ演算部230で実行する演算処理を制御する機能を実現する。図4のサブプロセッサマネージャ(SPM)48がこれに該当する。
【0066】
ゲーム演算部210は、ゲーム実行に関する各種処理を実行する。例えば、(1)仮想3次元空間に移動キャラクタ60や背景オブジェクト62などのオブジェクトを配置してゲーム空間を形成する処理、(2)ゲーム空間を撮影するための仮想カメラを配置し移動制御する処理、(3)各プレーヤの操作入力に応じて移動オブジェクト60を移動させる処理、(4)ヒット判定の結果に応じて移動オブジェクト60の移動を変更する処理、(5)ヒット判定の結果に応じて移動オブジェクト60のヒットポイントや得点の算出などの処理、(7)ゲームステージの移動や登場するキャラクタの選択などゲームの進行状態を変更する処理、(8)ゲーム終了判定処理、などを実行する。
【0067】
そして、本実施形態のゲーム演算部210は、判定対象選択部212と、ヒット判定部214,232と、分担設定部216と、統計処理部218とを備える。
【0068】
判定対象選択部212は、ヒット判定が必要な移動オブジェクトとそのヒット先候補となるノード(つまりはポリゴン)の選択をする。例えば、仮想カメラの撮影範囲内であって、プレーヤキャラクタとなる移動オブジェクト60の周囲所定範囲内の背景オブジェクト62のノードを選択するとしても良い。或いは、予め背景オブジェクト62のポリゴンをBSP木構造のデータ構造で構成して選択するとしても良い。その場合、BSP木構造における外部リーフはノードとされる。
【0069】
ヒット判定部214,232は、仮想3次元空間内のオブジェクト間のヒット判定処理を実行する。本実施形態では、ヒット判定処理はMPE10とSPE12との並列処理により実現されるので、ヒット判定部はメイン演算部202とサブ演算部230とにそれぞれ含まれる格好となる。
【0070】
分担設定部216は、SPE12の処理負荷を予測する予測関数f(X)に基づくヒット判定処理におけるノードの分担処理を行う。
統計処理部218は、分担処理において分担の基礎になる予測関数f(X)の算出に関する処理、及びその元になる各種パラメータのサンプリングに関する処理を実行する。
【0071】
音生成部250は、例えばデジタルシグナルプロセッサ(DSP)などのプロセッサやその制御プログラムによって実現され、ゲームに係る効果音やBGM、各種操作音の音信号を生成し音出力部350に出力する。図2のAVボード6、オーディオ端子24などがこれに該当する。
【0072】
音出力部350は、音生成部250から入力される音信号に基づいて効果音やBGM等を音出力するための装置である。図1ではビデオモニタ1220のスピーカ1224がこれに該当する。
【0073】
画像生成部260は、例えば、デジタルシグナルプロセッサ(DSP)などのプロセッサ、その制御プログラム、フレームバッファ等の描画フレーム用ICメモリ等によって実現される。図2ではAVボード6、ビデオ端子22などが該当する。そして、画像生成部260は、1フレーム時間(例えば1/60秒)で1枚の3DCG画像を生成し、生成した画像の画像信号を画像表示部360に出力する。
【0074】
画像表示部360は、画像生成部260から入力される画像信号に基づいてゲーム画面を表示する。例えば、フラットパネルディスプレイ、ブラウン管(CRT)、プロジェクター、ヘッドマウントディスプレイといった画像表示装置によって実現できる。図1ではビデオモニタ1220のフラットパネルディスプレイ1222が該当する。
【0075】
通信制御部270は、通信回線1を介した外部装置とのデータ通信に係るデータ処理を実行し、通信部370を介して外部装置とのデータのやりとりを実現する。
【0076】
通信部370は、通信回線1と物理レベルで接続して通信を実現する。例えば、無線通信機、モデム、TA(ターミナルアダプタ)、有線用の通信ケーブルのジャックや制御回路等によって実現され、図1では通信装置1212がこれに該当する。
【0077】
記憶部500は、処理部200に家庭用ゲーム装置1200を統合的に制御させるための諸機能を実現するためのプログラムや、ゲームを実行するためのプログラム、各種データ等を記憶する。また、処理部200の作業領域として用いられ、処理部200が各種プログラムに従って実行した演算結果や操作入力部100から入力される入力データ等を一時的に記憶する。この機能は、例えばRAMやROMなどのICメモリ、ハードディスク等の磁気ディスク、CD−ROMやDVDなどの光学ディスクなどによって実現される。
【0078】
本実施形態では、記憶部500は予め記憶しているものとしてOSプログラム501と、ゲームを実行するためのゲームプログラム504と、ゲーム空間初期設定データ530と、キャラクタ初期設定データ540と、初期予測関数g(X)とを記憶している。また、ゲーム進行に応じて生成・更新されるデータとして、キャラクタステータスデータ544と、ヒット判定関連データ550と、統計データ580とを記憶する。その他、ゲーム進行に必要なフラグや、カウンター、タイマーなどの情報を適宜記憶することができる。
【0079】
OSプログラム501は、処理部200で読み込み実行することにより、処理部200をOS制御部204として機能させるためのプログラムであり、処理部200をサブ演算部制御部206として機能させるためのSPM(サブプロセッサマネージャ)プログラム502を含む。
【0080】
ゲームプログラム504は、処理部200が読み出して実行することによって、ゲーム演算部210としての機能を実現させることができるプログラムである。本実施形態では、サブ演算部230が実行するSPE用プログラム506を含む(図4のSPE用プログラム50に相当)。
【0081】
ゲーム空間初期設定データ530は、仮想3次元空間内にゲームの舞台となる空間を形成するための地形オブジェクト等の各種オブジェクトの初期設定データを格納する。本実施形態では、移動オブジェクト60が衝突する可能性のある背景オブジェクト62を設定するデータを格納している。具体的には、例えば図8に示すように、ゲーム空間初期設定データ530は、複数の背景オブジェクトデータ532を格納する。各背景オブジェクトデータ532は、ポリゴン集合毎に設定された複数のノードデータ534と、テクスチャデータ536と、配置座標538とを含む。そして、一つのノードデータ534には、ノードID534aと、当該ノードに含まれるポリゴンデータ534bとが格納されている。
尚、ゲーム空間初期設定データ530は、ヒット判定処理に際して、ノードIDを元にそれに包含されるポリゴンデータを読み出し可能なようにノードIDとポリゴンデータとを対応づけされていれば良く、図示されたデータ構成に限らず他のデータ構成など、適宜設定することができる。
【0082】
キャラクタ初期設定データ540は、プレーヤキャラクタである移動オブジェクト60や、その他の移動オブジェクトのポリゴンモデルデータやテクスチャデータ、モーションデータなどその動作制御に必要な各種初期設定データを格納する。
【0083】
ゲーム実行中におけるプレーヤキャラクタである移動オブジェクト60の位置座標、姿勢情報、速度や加速度、ヒットポイントや能力値、所持するアイテムの種類と数、モーション制御に必要なパラメータなど、プレーヤキャラクタを含む各キャラクタの状態を示すパラメータは、キャラクタ毎に纏められたキャラクタステータスデータ544に格納される。
【0084】
初期予測関数g(X)542は、統計データ580に統計的に意義のあるサンプル数だけMPE処理量MmとSPE処理量Msとが取得できるまでの間、予測関数f(X)に代用される関数である。初期予測関数g(X)によるノードの分担は、MPE10の処理負荷がSPEのそれよりもやや高くなるように設定されている。統計データ580に十分な数のサンプルが蓄積されると、そこから統計的に予測関数f(X)が求められ、その予測関数f(X)を用いて、ヒット判定に関するMPE10とSPE12の処理負荷がほぼ同等となるようにノードが分担されることとなる。尚、図中では、初期予測関数g(X)542は一つであるが、ゲームステージやシーン別に対応づけて複数設ける構成としても良い。
【0085】
ヒット判定関連データ550は、ヒット判定の並列処理に必要な各種情報を格納する。
例えば、図9に示すように、サンプリング回数552と、移動オブジェクトリスト554と、ヒット判定対象ノードリスト556と、今回MPE処理量(Mm)558と、今回SPE処理量(Ms)560と、予測関数f(X)562と、MPE分担ノード数(Nm)564と、SPE分担ノード数(Ns)566と、MPE分担ノード情報568と、SPE分担ノード情報570と、SPE別処理終了フラグ572と、ヒットデータ574とを格納する。
【0086】
サンプリング回数552は、ゲーム開始時点で初期値「0」とされ、MPE処理量Mm及びSPE処理量Msが統計データ580に格納されてサンプリングされる毎に「1」加算される。
移動オブジェクトリスト554は、1つのゲーム画面を生成するにあたり、ヒット判定をする必要があるとされた移動オブジェクトのリストである。
【0087】
ヒット判定対象ノードリスト556は、移動オブジェクトリスト554にリストアップされた移動オブジェクト毎に用意され、当該移動オブジェクトの衝突が予測される(衝突の可能性がある)ノードNDのリストである。このリストは、ゲーム演算部210が公知のヒット判定対象の選別方法を実行することにより作成される。例えば、背景オブジェクトデータ532を、当該背景オブジェクトを構成するポリゴンのBSP木構造のデータ構造とし、移動オブジェクト60がBSP木構造化に使用した空間分割面に対してどの位置に存在するかを判定して選択するとしても良い。
【0088】
今回MPE処理量(Mm)558及び今回SPE処理量(Ms)560は、今回のヒット判定の並列処理に関する処理結果を示すパラメータである。
前者は、ヒット判定処理開始時点で初期値「0」とされ、MPE10が一つの移動オブジェクト60と一つのポリゴンとのヒット判定処理を実行する都度「1」カウントアップされる。後者は、複数のSPE12からアクセス可能なパラメータであり、ヒット判定処理開始時点で初期値「0」とされ、各SPE12が一つの移動オブジェクト60と一つのポリゴンとのヒット判定処理を実行する都度「1」カウントアップされる。そして、今回MPE処理量(Mm)558及び今回SPE処理量(Ms)560ともに、全SPE12での全分担ノードの全ポリゴンについてのヒット判定処理が終了すると、統計データとしてサンプリング(記録)された後にリセットされる。
【0089】
MPE分担ノード情報568及びSPE分担ノード情報570は、ヒット判定対象ノードリスト556の内、MPE10及び各SPE12がそれぞれ分担するノードを識別するための情報を格納する。例えば、ヒット判定対象ノードリスト556のうちそれぞれが分担するリスト順最初のノードのアドレスやポインタでも良いし、ノードIDでも良い。
【0090】
SPE別処理終了フラグ572は、ヒット判定の並列処理で使用可能なSPE12毎に用意され、ヒット判定開始時点の初期値が「0」、各SPE12により分担された全ノードについてヒット判定処理を終了すると「1」が書き込まれる。
【0091】
ヒットデータ574は、MPE10とSPE12のどちらからも書込可能なデータであって、ヒット判定の並列処理開始時点でリセットされ、ヒット判定処理された移動オブジェクト60の識別情報574aと対応づけてヒット先のポリゴン情報574bが次々に格納される。
【0092】
統計データ580は、統計的に意義のあるサンプル数(例えば、数千程度)を上限に、MPE処理量MmとSPE処理量Msとをセットにして格納する。格納したサンプル数が上限に達したならば、先入れ先出し方式でサンプルタイミングが古い方から順次削除され新しいサンプルデータが格納されてゆく。
【0093】
[処理の流れの説明]
次に、本実施形態における処理の流れについて説明する。ここで説明する一連の処理の流れは、処理部200がOSプログラム501を読み出し実行してゲーム装置としてのハードウェア制御の基本的機能を実現した後、ゲームプログラム504を読み出して実行することによって実現される。
尚、ゲーム空間を仮想カメラで撮影したゲーム空間画像のレンダリング処理や、レンダリングされたゲーム空間画像へのヒットポイントゲージなどの各種情報表示を合成してゲーム画面を生成する処理、映像信号を出力する処理、及びゲーム音の生成と音声信号の出力に関する処理については、AVボード6(図2参照)により公知のビデオゲームと同様に随時リアルタイムに実行されるものとしてここでの説明は省略する。
【0094】
図10は、本実施形態のゲームプログラム504の主たる処理の流れを説明するためのフローチャートである。MPE10は、先ずゲーム進行の制御に必要な各種パラメータの初期化をし(ステップS2)、次いでゲーム空間初期設定データ530を参照して、仮想3次元空間内に様々な背景オブジェクト62を配置してゲームの舞台となるゲーム空間を形成する(ステップS4)。そして、キャラクタ初期設定データ540を参照して、ゲーム空間内の初期位置にプレーヤが操作するプレーヤキャラクタとなる移動キャラクタ60と、それを撮影する仮想カメラとを配置する(ステップS6)。
【0095】
次いで、MPE10は、ゲームを開始させると(ステップS8)、ステップS10〜S162の処理を、ステップS164で所定のゲーム終了条件を満たすと判定するまで、フラットパネルディスプレイ1222の1フレームの描画時間以下の時間サイクルで繰り返し実行する。
【0096】
具体的には、MPE10は、ゲームコントローラ1230からの操作入力に応じてプレーヤキャラクタとなる移動オブジェクト60の姿勢制御や移動制御をする(ステップS10)。例えば、前進後退、上下左右への操舵、加速/減速、アイテムの使用などがこれに該当する。操作入力に応じた移動オブジェクト60の姿勢や移動の制御に関するタスク(例えば、簡易な物理演算によって加速や減速、姿勢の変化を計算する処理)はSPE12に実行させる構成としても良い。
【0097】
次いで、MPE10は、プレーヤキャラクタとなる移動オブジェクト60を追従して撮影するように仮想カメラの位置や姿勢、画角、ピント位置などを制御する処理を実行する(ステップS12)。この処理も、SPE12に実行させる構成とすることができる。
【0098】
次に、MPE10は、ヒット判定の並列処理に使用可能なSPE12を選出し(ステップS14)、ヒット判定処理を実行する(ステップS16)。この時、ヒット判定の使用に可能なSPE12は、先に述べた操作入力に応じた移動オブジェクト60の姿勢や移動の制御に関するタスクなどその他のタスク実行が割り当てられている可能性があり、その時々により選出されるSPEの数や個体が変化する。
【0099】
図11〜図12は、ヒット判定処理におけるMPE10の処理の流れを説明するためのフローチャートである。
MPE10は、先ずヒット判定を要する移動オブジェクトのリストアップをする(ステップS32)。プレーヤキャラクタとなる移動オブジェクト60は勿論、プレーヤキャラクタの邪魔をする他の移動キャラクタをゲームに登場させたり、プレーヤキャラクタが発射した銃弾やミサイルやバリア、魔法の作用域を示すエフェクトなどを登場させる場合には、それらもリストアップの対象とされる。リストアップの結果は、ヒット判定関連データ550の移動オブジェクトリスト554(図9参照)として記憶される。
【0100】
次いで、MPE10はリストアップされた全移動オブジェクトについてループAの処理を実行する(ステップS34〜S148)。
ループAでは、処理対象とされる移動オブジェクトが衝突する可能性のあるノードNDをリストアップし、ヒット判定対象ノードリスト556(図9参照)として記憶する(ステップS36)。ノードNDのリストアップ方法は、公知の手法を適宜利用することで実現できる。例えば、仮想カメラの視界内にあって、ループAの処理対象とされる移動オブジェクトから所定範囲内の背景オブジェクト62のノードNDを選択するとしても良い。背景オブジェクト62やそれを構成するポリゴンをBSP木構造で記述している場合には、当該処理対象オブジェクの位置をBSP木構造の空間分割面に対する相対位置に基づいて選択するとしても良い。
そして、衝突の可能性のあるノードNDを選択したらならば、MPE10は分担数算出処理を実行する(ステップS38)
【0101】
図13は、本実施形態における分担数算出処理の流れを説明するためのフローチャートである。同処理において、MPE10は先ず、ヒット判定対象ノードリスト556にリストアップされている全てのノードNDに含まれるポリゴン数を算出して今回ヒット判定対象のポリゴン総数Palを算出する(ステップS50)。
【0102】
次いで、ヒット判定関連データ550のサンプリング回数552(図9参照)が統計的に意義のある十分大きい値に達したかを判定する(ステップS52)。達していなければ(ステップS52のNO)、今回ヒット判定対象のポリゴン総数Palと初期予測関数g(X)と基づいてSPE分担ポリゴン数Psを算出する(ステップS54)。もし、サンプリング回数552が基準値に達していれば、統計データ580に蓄積されている過去のMPE処理量MmとSPE処理量Msとに基づいて予測関数f(X)を求め(ステップS56)、この予測関数f(X)と先に算出した今回ヒット判定対象のポリゴン総数Palと基づいてSPE分担ポリゴン数Psを算出する(ステップS58)。
【0103】
そして、算出したSPE分担ポリゴン数PsからSPE分担ノード数Nsを算出し(ステップS60)、MPE分担ノード数Nmを算出して(ステップS62)、分担数算出処理を終了する。SPE分担ノード数Nsの算出は、ノード当りのポリゴン数を規定する場合には規定数でSPE分担ポリゴン数Psを除算すれば良いし、ノード当りのポリゴン数に有る程度の幅を許容する構成の場合には、1ノード当たりの平均ポリゴン数で除算して求めれば良い。
【0104】
分担数算出処理を終了したらならば、図11のフローチャートに戻って、MPE10は次に、ループAの処理対象のオブジェクトに対応づけられたヒット判定対象ノードリスト556のリスト先頭からNm番目までのノードをMPE10の分担ノードとして設定し(ステップS70)、Nm+1番目以降のノードをSPE12の分担ノードとして設定する(ステップS72)。SPE12の分担ノードは、Nm+1番目以降のノードをヒット判定に使用可能なSPE12に均等に分担する。
【0105】
これでヒット判定を並列処理するための準備が整ったことになるので、MPE10は次に、今回SPE処理量(Ms)560を「0」に初期化し、SPE別処理終了フラグ572を「0」に初期化する(ステップS74)。そして、SPE12でヒット判定処理を実行させるためのSPE用プログラム506(図7参照)を先に選出されたSPE12のローカルメモリ12b(図3参照)にロードさせ(ステップS75)、ロードさせたSPE12に実行開始の命令を発行する(ステップS76)。
【0106】
図14は、本実施形態におけるSPEにおけるヒット判定処理の流れを説明するためのフローチャートである。同処理では先ず、SPE12は、自身の担当ノードのデータつまりはヒット判定対象となるポリゴンデータを、メインメモリ4からローカルメモリ12bにロードし(ステップS90)、それらのうち1つのポリゴンとループAの処理対象オブジェクトとのヒット判定処理を実行して(ステップS92)、今回SPE処理量(Ms)560を「1」アップする(ステップS94)。そして、もしヒット判定処理したポリゴンと移動オブジェクトとがヒットしていれば(ステップS96のYES)、SPE12はヒットデータ574にヒット情報を追加する(ステップS98)。
【0107】
SPE12は、ステップS92〜S98を自担当ノードに含まれる全てのポリゴンについてヒット判定処理を実行するまで繰り返し(ステップS100のNO)、ヒット判定処理を完遂すれば(ステップS100のYES)、自身に対応づけられているSPE別処理終了フラグ572を「1」に設定し(ステップS102)、ヒット判定処理を終了する。
【0108】
図11のフローチャートに戻り、MPE10はSPE12に実行開始の命令を発行した後、つまりSPE12においてヒット判定処理が同時並行的に実行されている間、今回MPE処理量(Mm)558を「0」に初期化して(ステップS120)、自担当ノードに含まれる一つのポリゴンとループAの処理対象オブジェクトとのヒット判定処理を実行し(ステップS122)、今回MPE処理量(Mm)558を「1」アップする(ステップS124)。
【0109】
そして、もし今回ヒット判定処理したポリゴンと移動オブジェクトとがヒットしていれば(ステップS126のYES)、ヒットデータ574にヒット情報を追加する(ステップS128)。
【0110】
図12のフローチャートに移って、MPE10は現在処理対象としているノードの全てのポリゴンについてヒット判定を実行したかを判定する(ステップS130)。まだ、未処理のポリゴンが残っていれば(ステップS130のNO)、ステップS122に移行してそれら残りのポリゴンについてのヒット判定処理を実行する。もし、未処理のポリゴンが無ければ(ステップS130のYES)、MPE分担ノード全てのポリゴンについてヒット判定処理したかを判定する(ステップS132)。
【0111】
まだ、未処理のノードが有れば(ステップS132のNO)、MPE10はSPE別処理終了フラグ572を参照して、SPE12側で分担されたノードのポリゴン全てのヒット判定が終了しているかを判定する(ステップS134)。
【0112】
そして、まだSPE12側でヒット判定の並列処理が続いている場合には(ステップS134のNO)、ステップS122に移行してMPE分担ノードの別のノードのポリゴンについてのヒット判定処理を実行する。
反対に、SPE12側でヒット判定の並列処理が終了していれば(ステップS134のYES)、MPE10は現在ループAの処理対象としている移動オブジェクトに対応づけられたヒット判定対象ノードリスト556から、MPE10によってヒット判定が終了したノードと、SPE分担ノードとを削除して更新する(ステップS136)。そして、今回MPE処理量(Mm)558と今回SPE処理量(Ms)560とを統計データ580に格納して(ステップS138)、サンプリング回数552を「1」アップして(ステップS140)、ステップS38に移行して分担数算出処理から繰り返す。
【0113】
一方、ステップS132においてMPE分担ノード全てのヒット判定処理が終了済みと判定されたならば(ステップS132のYES)、SPE12のヒット判定処理の終了を待って(ステップS142)、今回MPE処理量(Mm)558と今回SPE処理量(Ms)560とを統計データ580に格納して(ステップS144)、サンプリング回数552を「1」アップして(ステップS146)、今回のループAの処理を終了する(ステップS148)。
【0114】
そして、移動オブジェクトリスト554にリストアップされている全ての移動オブジェクトについてループAを実行したならば、MPE10におけるヒット判定処理を終了する。
【0115】
図10のフローチャートに戻って、MPE10は次に、ヒット判定の結果に応じて衝突の影響が反映されるように衝突反力を設定したり移動方向を曲げるなど移動オブジェクトの移動制御を補正し(ステップS160)、ヒット判定の結果に応じてゲームの進行状態を変更する(ステップS162)。例えば、プレーヤキャラクタが背景オブジェクト62と衝突するとヒットポイントを減らしたり、反対に所定の救助オブジェクトと衝突するとヒットポイントを回復したりする。その他、ゲーム内容によっては、プレーヤキャラクタと所定の背景オブジェクトとの衝突でゲームステージを切り換えるなどの処理を実行する構成としても良い。
【0116】
そして、MPE10は、ゲーム終了条件を満たすか否かを判定する(ステップS164)。本実施形態では、プレーヤキャラクタのヒットポイントが「0」になる前に所定のゴールエリアに到達すればゲームクリアでゲーム終了、到達前にヒットポイントが「0」になってしまえばゲームオーバでゲーム終了判定する。
【0117】
ゲーム終了条件を満たしていなければ(ステップS164のNO)、ステップS10に移行してゲームプレイに係る処理を続行する。ゲーム終了条件を満たしていれば(ステップS164のYES)、ゲームを終了する。
【0118】
以上、本実施形態によれば、オブジェクト同士のヒット判定の結果に応じてゲーム進行状態が変化する3DCGを用いたビデオゲームのヒット判定処理を、MPE10と複数のSPE12とで同時並列処理することにより、SPE12のみに並列処理させる場合よりも処理を高速化できる。
【0119】
また、ヒット判定の対象とするポリゴンをMPE10とSPE12に割り振る際、過去のSPE12の処理実績からSPE12へ分担するポリゴン数に応じた処理負荷を予測し、MPE10とSPE12のヒット判定処理の終了がほぼ同じタイミングとなるように割り振るので、より効率的で高速にヒット判定を並列処理できる。
【0120】
更には、ポリゴンの割り振りにおいては、SPE12のローカルメモリ12bのサイズを考慮し、一度に出来るだけ多くのポリゴンデータがロードできるようなポリゴン集合を単位とすることで、データロードの繰り返しを防ぎ、データのロードに係わるオーバーヘッドを低減し、更なる高速化を図ることができる。
【0121】
[変形例]
以上、本発明を適用した実施形態について説明したが、本発明の実施形態はこれに限定されるものではなく、発明の主旨を逸脱しない範囲で適宜構成要素の変更・省略・追加をすることができる。
【0122】
例えば、本発明を適用した画像生成装置は、家庭用ゲーム装置1200に限らず、図15に示すような業務用ゲーム装置1300として実現することができる。
業務用ゲーム装置1300は、ゲーム装置本体1301に、(1)プレーヤが各種操作入力をするためのジョイスティック1306や複数のプッシュスイッチ1308といった入力デバイスが設けられた操作台1304と、(2)ゲーム画像を表示させるための液晶パネルディスプレイやCRTといった画像表示装置1322と、(3)スピーカ1324と、(4)コインカウンタ1340と、(5)制御ユニット1310と、図示されない電源装置とを備えて構成される。制御ユニット1310は、第1実施形態の制御ユニット1210に相当し、通信回線1と有線又は無線接続し、外部装置との間でデータ通信を実現する通信装置1312を備える。そして、制御ユニット1310は、搭載されているICメモリなどの記憶装置に記憶されているシステムプログラムやゲームプログラムを読み出して演算処理して業務用ゲーム装置1300の各部を制御する。
【0123】
或いは、本発明を適用した画像生成装置は、ゲームプログラムをアプリケーションとして実行可能な携帯電話やパソコン、カーナビ、シリコンオーディオプレーヤなどとして実現しても良い。
【0124】
また、上記実施形態では、ヒット判定処理をMPE10とSPE12とで同一タスクの同時並行処理として実現する構成を説明したがこれに限らない。例えば、複数タスク並列処理方式で実現する構成としても良い。具体的には、前述したゲームプログラム40や他アプリケーションから要求される複数のタスクそれぞれについて、各タスクを実現するための複数のスレッドを生成する。そして、要求されている各タスクの処理順を自動計算(スケジューリング)してSPE12へ動的に分担する。この場合、SPE12へヒット判定処理させるSPE用プログラムのロードタイミングや、その開始命令の発行タイミングはそのスケジューリングに基づきバラバラに行われることとなる。
【0125】
また、そうした複数タスク並列処理方式を、専用のプロセッサを設けて専従させるとしても良い。その場合、専用プロセッサはMPE10に内蔵しても良いし、独立して内部バス16に接続させる構成としても良い。
【0126】
また、上述した実施形態では、ゲーム空間中の背景物等をポリゴンで構成されることとし、そのポリゴンを、ヒット判定処理の対象とするプリミティブの一例として説明した。しかし、ゲーム空間中の背景物等を直方体や球といったプリミティブで構成し、それらをヒット判定処理の対象としてもよいのは勿論である。
【符号の説明】
【0127】
2 マルチコアプロセッサ
4 メインメモリ
10 メインプロセッサエレメント(MPE)
12 サブプロセッサエレメント(SPE)
60 移動キャラクタ
62 背景オブジェクト
100 操作入力部
200 処理部
202 メイン演算部
204 OS制御部
206 サブ演算部制御部
210 ゲーム演算部
212 判定対象選択部
214 ヒット判定部
216 分担設定部
218 統計処理部
230 サブ演算部
232 ヒット判定部
500 記憶部
504 ゲームプログラム
506 SPE用プログラム
530 ゲーム空間初期設定データ
532 背景オブジェクトデータ
534 ノードデータ
534b ポリゴンデータ
542 初期予測関数g(X)
550 ヒット判定関連データ
552 サンプリング回数
556 ヒット判定対象ノードリスト
558 今回MPE処理量
560 今回SPE処理量
562 予測関数f(X)
1200 家庭用ゲーム装置
1201 ゲーム装置本体
1230 ゲームコントローラ

【特許請求の範囲】
【請求項1】
メインプロセッサと、複数のサブプロセッサとを備え、プロセスに応じて実行台数を含む実行サブプロセッサの割り当てを動的に行うサブプロセッサマネージャ機能を有するコンピュータに、仮想三次元空間において移動オブジェクトが多数のプリミティブの何れと衝突したかを判定する衝突判定処理を並列実行させるためのプログラムであって、
前記プリミティブを、前記メインプロセッサが分担するメインプロセッサ分担プリミティブと、前記サブプロセッサが分担するサブプロセッサ分担プリミティブとに割り振る割り振り設定手段、
前記メインプロセッサに前記メインプロセッサ分担プリミティブに関する前記衝突判定処理を実行させるとともに、前記サブプロセッサマネージャ機能により前記衝突判定処理の実行が割り当てられた実行サブプロセッサに前記サブプロセッサ分担プリミティブに関する前記衝突判定処理を実行させる並列処理制御手段、
前記並列処理制御手段により実行制御された前記メインプロセッサによる前記メインプロセッサ分担プリミティブに関する前記衝突判定処理の演算量と、前記実行サブプロセッサによる前記サブプロセッサ分担プリミティブに関する前記衝突判定処理の演算量とに基づいて、前記メインプロセッサ分担プリミティブ及び前記サブプロセッサ分担プリミティブの分担数を設定する分担数設定手段、
として前記コンピュータを機能させるとともに、
前記割り振り設定手段が、前記分担数設定手段により設定された分担数に基づいて、前記プリミティブを割り振るように前記コンピュータを機能させて、
前記サブプロセッサマネージャ機能により動的に変更される実行サブプロセッサの台数に応じた前記衝突判定処理の並列実行を行うためのプログラム。
【請求項2】
前記分担数設定手段が、前記メインプロセッサ分担プリミティブの数と、前記サブプロセッサ分担プリミティブの数とが所定の同等条件を満たすように前記分担数を設定する、
ように前記コンピュータを機能させるための請求項1に記載のプログラム。
【請求項3】
前記分担数設定手段が、前記メインプロセッサ分担プリミティブの数を、前記サブプロセッサ分担プリミティブの数より多く設定して後、前記衝突処理の並列実行を行うにつれて徐々に同等となるように設定する、
ように前記コンピュータを機能させるための請求項1に記載のプログラム。
【請求項4】
前記サブプロセッサは、それぞれローカルメモリを有しており、
前記多数のプリミティブは、所属する全てのプリミティブのデータ総量が前記ローカルメモリの記憶容量以下となる数の隣接するプリミティブでなる複数のプリミティブ集合にて構成され、
前記割り振り設定手段が、前記プリミティブ集合を単位として割り振りを行い、
前記分担数設定手段が、前記プリミティブ集合を単位として前記分担数を設定する、
ように前記コンピュータを機能させるための請求項1〜3の何れか一項に記載のプログラム。
【請求項5】
前記多数のプリミティブの中から、前記衝突判定処理の判定対象とする判定対象プリミティブを、前記プリミティブ集合を単位として選択する判定対象選択手段として前記コンピュータを更に機能させ、
前記割り振り設定手段が、前記判定対象選択手段により選択されたプリミティブ集合を割り振るように前記コンピュータを更に機能させる、
ための請求項4に記載のプログラム。
【請求項6】
請求項1〜5の何れか一項に記載のプログラムを記憶したコンピュータ読取可能な情報記憶媒体。
【請求項7】
メインプロセッサと、複数のサブプロセッサとを備え、プロセスに応じて実行台数を含む実行サブプロセッサの割り当てを動的に行うサブプロセッサマネージャ機能を有して、仮想三次元空間において移動オブジェクトが多数のプリミティブの何れと衝突したかを判定する衝突判定処理を並列実行して前記仮想三次元空間の画像を生成する画像生成装置であって、
前記プリミティブを、前記メインプロセッサが分担するメインプロセッサ分担プリミティブと、前記サブプロセッサが分担するサブプロセッサ分担プリミティブとに割り振る割り振り設定手段と、
前記メインプロセッサに前記メインプロセッサ分担プリミティブに関する前記衝突判定処理を実行させるとともに、前記サブプロセッサマネージャ機能により前記衝突判定処理の実行が割り当てられた実行サブプロセッサに前記サブプロセッサ分担プリミティブに関する前記衝突判定処理を実行させる並列処理制御手段と、
前記並列処理制御手段により実行制御された前記メインプロセッサによる前記メインプロセッサ分担プリミティブに関する前記衝突判定処理の演算量と、前記実行サブプロセッサによる前記サブプロセッサ分担プリミティブに関する前記衝突判定処理の演算量とに基づいて、前記メインプロセッサ分担プリミティブ及び前記サブプロセッサ分担プリミティブの分担数を設定する分担数設定手段と、
を備え、
前記割り振り設定手段が、前記分担数設定手段により設定された分担数に基づいて、前記プリミティブを割り振り、
前記サブプロセッサマネージャ機能により動的に変更される実行サブプロセッサの台数に応じた前記衝突判定処理の並列実行を行うことを特徴とする画像生成装置。

【図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

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2011−134220(P2011−134220A)
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願番号】特願2009−294785(P2009−294785)
【出願日】平成21年12月25日(2009.12.25)
【出願人】(000134855)株式会社バンダイナムコゲームス (1,157)
【Fターム(参考)】