1.構成
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
図1に本実施形態の画像生成システム(ゲームシステム)の機能ブロック図の例を示す。なお本実施形態の画像生成システムは図1の構成要素(各部)の一部を省略した構成としてもよい。
操作部160は、プレーヤが移動体の操作データを入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。
記憶部170は、種々のデータを記憶する処理を行う。主記憶部172は、処理部100で用いるワーク領域として用いることができる。特に、本実施の主記憶部172は、パラメータ設定部116で設定される移動・動作パラメータ、補正パラメータを記憶することができる。また描画バッファ174は、画像情報を記憶することができる。
また、オブジェクトデータ記憶部176は、オブジェクトデータを記憶することができる。特に、本実施形態のオブジェクトデータ記憶部176は、第1のオブジェクト(移動体)や、第2のオブジェクト(枯葉、雪、雨)のオブジェクトデータを記憶することができる。なお、第1のオブジェクトが移動体である場合には、複数種類の移動体を記憶することができる。
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(CD、DVD)、光磁気ディスク(MO)、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ(ROM)などにより実現できる。処理部100は、情報記憶媒体180に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD、タッチパネル型ディスプレイ、或いはHMD(ヘッドマウントディスプレイ)などにより実現できる。音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
携帯型情報記憶媒体194は、プレーヤの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶媒体194としては、メモリカードや携帯型ゲーム装置などがある。通信部196は外部(例えばホスト装置や他の画像生成システム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)は、ホスト装置(サーバ)が有する情報記憶媒体からネットワーク及び通信部196を介して情報記憶媒体180(記憶部170)に配信してもよい。このようなホスト装置(サーバ)の情報記憶媒体の使用も本発明の範囲内に含めることができる。
処理部100(プロセッサ)は、操作部160からの操作データやプログラムなどに基づいて、ゲーム処理、画像生成処理、或いは音生成処理などの処理を行う。処理部100は記憶部170内の主記憶部172をワーク領域として各種処理を行い、処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
処理部100は、オブジェクト空間設定部110、移動・動作処理部112、エリア設定部114、パラメータ設定部116、描画部120、音生成部130を含む。なおこれらの一部を省略する構成としてもよい。
オブジェクト空間設定部110は、移動体、物体、粒子、枯葉、雪、雨、キャラクタ、建物、球場、車、飛行機、船、潜水艦、樹木、柱、壁、マップ(地形)などの表示物を表す各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト)をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。特に、本実施形態では、記憶部170のオブジェクトデータ記憶部176に記憶される第1のオブジェクト(移動体)や、第2のオブジェクト(枯葉、雪、雨)をオブジェクト空間に配置する処理を行う。
特に本実施形態のオブジェクト空間設定部110は、第1のオブジェクトのローカル座標系における第1のオブジェクトの位置をオブジェクト空間に変換することによって、第1のオブジェクトをオブジェクト空間に設定することができ、また、第2のオブジェクトのローカル座標系における第2のオブジェクトの位置をオブジェクト空間に変換することによって、第2のオブジェクトをオブジェクト空間に設定することができる。
移動・動作処理部112は、オブジェクト(車、電車又は飛行機、枯葉、雪、雨等)の移動・動作演算(移動・動作シミュレーション)を行う。すなわち操作部160によりプレーヤが入力した操作データや、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、オブジェクトをオブジェクト空間内で移動させたり、オブジェクトを動作(モーション、アニメーション)させたりする処理を行う。具体的には、オブジェクトの移動情報(位置、回転角度、速度、或いは加速度)や動作情報(オブジェクトを構成する各パーツの位置、或いは回転角度)を、1フレーム(1/60秒)毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理(シミュレーション処理)や画像生成処理を行う時間の単位である。
特に本実施形態では、第1のオブジェクト及び第2のオブジェクトの移動及び動作の少なくとも一方を演算する。具体的に説明すると、本実施形態の移動・動作処理部112は、エリア設定部114で設定された制御エリア内に存在する第2のオブジェクトの位置と、後述するパラメータ設定部116において設定される制御エリア面の各格子点に対応付けられる移動・動作パラメータとに基づいて、第2のオブジェクトの移動及び動作の少なくとも一方を演算する。
また、本実施形態の移動・動作処理部112は、第2のオブジェクトの位置がエリア設定部114で設定された補正エリアの外に位置するように、第2のオブジェクトの位置を補正する演算を行う。具体的に説明すると、第2のオブジェクトの位置を補正する演算は、第2のオブジェクトの位置と、後述するパラメータ設定部116において設定される補正エリア面の各格子点とに対応付けられる補正パラメータとに基づいて、第2のオブジェクトの位置を補正する演算を行うことができる。なお、パラメータ設定部116において、制御エリア面を格子状に分割した複数の格子点のそれぞれに対応づけて補正パラメータを設定した場合には、第2のオブジェクトの位置と、制御エリア面の各格子点とに対応付けられる補正パラメータとに基づいて、前記第2のオブジェクトの位置を補正する演算を行うようにしてもよい。
また、本実施形態の移動・動作処理部112の第2のオブジェクトの位置を補正する演算は、エリア設定部114で第1のオブジェクトを内包するボリュームを用いて補正エリアを設定し、第2のオブジェクトの少なくとも一部がボリューム内に存在する場合には、第2のオブジェクトをボリューム外に位置するように第2のオブジェクトの位置を補正する演算を行うようにしてもよい。
また、本実施形態の移動・動作処理部112は、第2のオブジェクトの移動及び動作の少なくとも一方を演算した後に、第2のオブジェクトの位置を補正する演算を行うようにしてもよい。
また、本実施形態の移動・動作処理部112は、第2のオブジェクトの位置に基づいて移動・動作パラメータを補間し、補間した値に基づいて第2のオブジェクトの移動及び動作の少なくとも一方を演算してもよい。
また、本実施形態の移動・動作処理部112は、オブジェクト空間に設定された第2のオブジェクトの位置を第1のオブジェクトのローカル座標系に変換し、変換した位置に基づいて第2のオブジェクトの移動・動作の演算や補正の演算を行うようにようにしてもよい。具体的に説明すると、第1のオブジェクトのローカル座標系の位置(座標値)を、オブジェクト空間(ワールド座標系)の位置(座標値)に変換するための行列式Mを用いて演算を行う。つまり、オブジェクト空間(ワールド座標系)に設定された第2のオブジェクトの位置(座標値)に、行列式Mの逆行列を乗算することによって、第1のオブジェクトのローカル座標系における第2のオブジェクトの位置(座標値)を求めることができる。そして、求めた位置に基づいて、簡易に第2のオブジェクトの移動・動作や補正の演算を行うことができる。つまり、オブジェクト空間上を第1のオブジェクトが移動する度に、オブジェクト空間上で第2のオブジェクトの移動・動作を制御する煩雑な演算処理に比較して格段に演算量を抑えることができる。
エリア設定部114は、第1のオブジェクトの位置に応じて所与のエリアを設定する。特に、本実施形態のエリア設定部114は、第1のオブジェクトの位置に応じて制御エリアを設定する。例えば、第1のオブジェクトの周囲の少なくとも一部を含むエリアを制御エリアとして設定することができる。
具体的には、第1のオブジェクトの周囲であって、制御エリア面と制御エリア面に対する垂直方向の所定範囲によって囲まれたエリアを、制御エリアとして設定することができる。また、第1のオブジェクトの周囲のうち進行方向に対して前方部分と側面部分とを制御エリアとして設定してもよい。また、第1のオブジェクトが車である場合には、車の周囲のうち、上昇気流が発生しやすい周囲の一部(例えば車のフロントガラス部分)を制御エリアとして設定してもよい。
また、本実施形態のエリア設定部114は、複数種類の第1のオブジェクトに対して共通の制御エリアを設定することができる。例えば、第1のオブジェクトが車である場合には、乗用車、スポーツカー、バス、トラックなどの種々の車種に応じて、同じ制御エリアを設定するようにすることができる。このようにすれば、車種毎に制御エリアを設定する場合に比較して記憶領域を節約できるからである。
また、本実施形態のエリア設定部114は、第1のオブジェクトが占める範囲を含む補正エリアを設定することができる。補正エリアは、補正エリア面を格子状に分割する複数の2次元の格子点と、当該複数の2次元の格子点のそれぞれに対応付けられる補正パラメータとに基づいて、補正エリアを設定することができる。また、補正エリアは、第1のオブジェクトを内包するボリュームを用いて補正エリアを設定するようにしてもよい。ここで、ボリュームとは、例えば、第1のオブジェクトを囲う球(バウンディングスフィア)や直方体(バウンディングボックス)などの簡単な形状をもつ立体とすることができる。なお、本実施形態のエリア設定部114は、第1のオブジェクトの概形を表すボリュームを用いて、補正エリアを設定してもよい。例えば、第1のオブジェクトが、「針の刺さった球」である場合には、針の部分を無視した球(バウンディングスフィア)のボリュームを用いて補正エリアを設定するようにしてもよい。
また、本実施形態のエリア設定部114は、制御エリアを第1のオブジェクトのローカル座標系に設定することができる。つまり、本実施形態のオブジェクト空間設定部110は、第1のオブジェクトのローカル座標系における第1のオブジェクトの位置をオブジェクト空間に変換することによって、第1のオブジェクトをオブジェクト空間に設定する。そして、本実施形態のエリア設定部114は、その際のローカル座標系に制御エリアを設定する。このようにすれば、オブジェクト空間上で第2のオブジェクトの移動・動作を演算する必要がないので、演算量を抑えることができる。なお、補正エリアについても同様に、第1のオブジェクトのローカル座標系に補正エリア設定することによって、演算量を抑えるようにしてもよい。
パラメータ設定部116は、処理部100が演算するために用いられるパラメータを設定する。例えば、第1のオブジェクトや第2のオブジェクトの移動・動作の演算に用いられるパラメータを設定する。
特に本実施形態のパラメータ設定部116は、制御エリアに基づいて、制御エリア面を格子状に分割する複数の格子点のそれぞれに対応づけて移動・動作パラメータを設定することができる。ここで、制御エリア面とは2つの座標軸からなる所定範囲の面とすることができる。
特に本実施形態のパラメータ設定部116は、第1のオブジェクトのローカル座標系に設定された制御エリアに基づいて、制御エリア面を格子状に分割する複数の格子点を、第1のオブジェクトのローカル座標系に設定することができる。つまり、本実施形態のオブジェクト空間設定部110は、第1のオブジェクトのローカル座標系における第1のオブジェクトの位置をオブジェクト空間に変換することによって、第1のオブジェクトをオブジェクト空間に設定するが、その際のローカル座標系に制御エリア面を設定し、制御エリア面を格子状に分割する複数の格子点を設定する。このようにすれば、制御エリア内に存在する第2のオブジェクトの位置(X、Zの座標値)と、各格子点の位置(X、Zの座標値)とに基づいて、移動・動作パラメータを取得し、取得した移動・動作パラメータに基づいて、第2のオブジェクトの移動・動作を演算することができる。例えば、取得した移動・動作パラメータに基づいて第2のオブジェクトの移動速度を演算し、演算された移動速度に基づいて第2のオブジェクトを移動させる演算を行うようにすることができる。
また、本実施形態のパラメータ設定部116は、複数種類の第1のオブジェクトに対して、共通の制御エリア面を格子状に分割する複数の格子点のそれぞれに対応づけて共通の移動・動作パラメータを設定するようにしてもよい。このようにすれば、本実施の画像生成システムで使用する記憶領域を節約することができるからである。
また、本実施形態のパラメータ設定部116は、補正エリア面を格子状に分割する複数の格子点のそれぞれに対応づけて、補正パラメータを設定することができる。ここで、補正エリア面とは2つの座標軸からなる所定範囲の面とすることができる。例えば、第1のオブジェクトのローカル座標系においてのX座標及びZ座標で構成される所定範囲の面とすることができる。補正エリア面は、第1のオブジェクトに基づいて設定することができる。例えば、第1のオブジェクトを構成する点(X,Z)を含むように設定することができる。
特に本実施形態のパラメータ設定部116は、第2のオブジェクトの位置(X、Zの座標値)と、補正エリア面の各格子点の位置(X、Zの座標値)との位置関係に基づいて、第2のオブジェクトの位置を補正することができる。なお、補正エリア面を格子状に分割する場合には、制御エリア面を格子状に分割する場合と異なる手法で分割するようにしてもよい。例えば、補正エリア面は制御エリア面よりも細かく分割し、各格子点に対応づけて補正パラメータを格納するようにしてもよい。
また、本実施形態のパラメータ設定部116は、複数種類の第1のオブジェクトごとに補正パラメータを設定する場合には、共通の補正エリア面の格子点に対応づけて共通の補正パラメータを設定してもよいが、それぞれ異なる補正エリア面を用意し、第1のオブジェクトごとに格子状に分割した複数の格子点のそれぞれに対応づけて補正パラメータを設定することが望ましい。第1のオブジェクトの形状に応じて補正パラメータを設定した方が、第1のオブジェクトの形状に沿った補正を正確に行うことができるからである。
また、本実施形態のパラメータ設定部116は、補正エリア面を設定せずに、制御エリア面を用いて補正パラメータを設定することができる。つまり、制御エリア面の各格子点に対応づけて、移動・動作パラメータだけでなく、補正パラメータも設定するようにしてもよい。
仮想カメラ制御部は、オブジェクト空間内の所与(任意)の視点から見える画像を生成するための仮想カメラ(視点)の制御処理を行う。具体的には、仮想カメラの位置(X、Y、Z)又は回転角度(X、Y、Z軸回りでの回転角度)を制御する処理(視点位置、視線方向あるいは画角を制御する処理)を行う。
例えば仮想カメラによりオブジェクト(例えばキャラクタ、ボール、車)を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度(仮想カメラの向き)を制御する。この場合には、移動・動作処理部112で得られたオブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させる制御や、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置(移動経路)又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
描画部120は、処理部100で行われる種々の処理(ゲーム処理)の結果に基づいて描画処理を行い、これにより画像を生成し、表示部190に出力する。いわゆる3次元ゲーム画像を生成する場合には、まず表示物(オブジェクト、モデル)を定義する各頂点の頂点データ(頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)を含む表示物データ(オブジェクトデータ、モデルデータ)が入力され、入力された表示物データに含まれる頂点データに基づいて、頂点処理が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理(テッセレーション、曲面分割、ポリゴン分割)を行うようにしてもよい。頂点処理では、頂点の移動処理や、座標変換(ワールド座標変換、カメラ座標変換)、クリッピング処理、透視変換、あるいは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、表示物を構成する頂点群について与えられた頂点データを変更(更新、調整)する。そして、頂点処理後の頂点データに基づいてラスタライズ(走査変換)が行われ、ポリゴン(プリミティブ)の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル(表示画面を構成するフラグメント)を描画するピクセル処理(フラグメント処理)が行われる。ピクセル処理では、テクスチャの読出し(テクスチャマッピング)、色データの設定/変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を描画バッファ174(ピクセル単位で画像情報を記憶できるバッファ。VRAM、レンダリングターゲット)に出力(描画)する。すなわち、ピクセル処理では、画像情報(色、法線、輝度、α値等)をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内に設定された仮想カメラ(所与の視点)から見える画像が生成される。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として1画面に表示できるように画像を生成することができる。
なお描画部120が行う頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン(プリミティブ)の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ(頂点シェーダやピクセルシェーダ)により実現されてもよい。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、ハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
そして描画部120は、表示物を描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
ジオメトリ処理では、表示物に関して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後(透視投影変換後)の表示物データ(表示物の頂点の位置座標、テクスチャ座標、色データ(輝度データ)、法線ベクトル、或いはα値等)は、主記憶部172に保存される。
テクスチャマッピングは、記憶部170に記憶されるテクスチャ(テクセル値)を表示物にマッピングするための処理である。具体的には、表示物の頂点に設定(付与)されるテクスチャ座標等を用いて記憶部170からテクスチャ(色(RGB)、α値などの表面プロパティ)を読み出す。そして、2次元の画像であるテクスチャを表示物にマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
隠面消去処理としては、描画ピクセルのZ値(奥行き情報)が格納されるZバッファ(奥行きバッファ)を用いたZバッファ法(奥行き比較法、Zテスト)による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Zバッファに格納されるZ値を参照する。そして参照されたZバッファのZ値と、プリミティブの描画ピクセルでのZ値とを比較し、描画ピクセルでのZ値が、仮想カメラから見て手前側となるZ値(例えば小さなZ値)である場合には、その描画ピクセルの描画処理を行うとともにZバッファのZ値を新たなZ値に更新する。
αブレンディング(α合成)は、α値(A値)に基づく半透明合成処理(通常αブレンディング、加算αブレンディング又は減算αブレンディング等)のことである。例えば、通常αブレンディングでは、α値を合成の強さとして線形補間を行うことにより2つの色を合成した色を求める処理を行う。
なお、α値は、各ピクセル(テクセル、ドット)に関連づけて記憶できる情報であり、例えばRGBの各色成分の輝度を表す色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度(透明度、不透明度と等価)、バンプ情報などとして使用できる。
音生成部130は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
なお、本実施形態の画像生成システムは、1人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、1つの端末を用いて生成してもよいし、ネットワーク(伝送ライン、通信回線)などで接続された複数の端末(ゲーム機、携帯電話)を用いて分散処理により生成してもよい。
2.本実施形態の手法
2.1 第2のオブジェクトの移動・動作の演算手法についての説明
本実施形態の画像生成システムでは、移動体(第1のオブジェクトの一例)の周囲の少なくとも一部を含むエリアを、制御エリアとして設定し、制御エリア内に存在する枯葉(第2のオブジェクトの一例)に対して、制御エリアに基づき設定される制御エリア面の各格子点に対応付けられる移動・動作パラメータに基づいて、移動・動作の演算を行う手法(移動及び動作の少なくとも一方を演算する手法)を採用する。このようにすれば、画像生成システムの処理負荷を抑えつつ、移動体の周囲に存在する枯葉が気流の影響を受けて移動・動作する様子をリアルに表現することができる。
まず、制御エリアの設定例について説明する。制御エリアとは、第2のオブジェクトに対して移動・動作パラメータに基づく特別な処理を行うエリアである。本実施形態では、移動体の移動に伴い発生する気流の影響を受ける枯葉の移動・動作を表現するために、枯葉の移動・動作を制御するための制御エリアを設定する。
本実施形態では、ローカル座標系における移動体の位置(座標値)を、オブジェクト空間(ワールド座標系)の位置(座標値)に変換することによって、移動体をオブジェクト空間に設定する。そして、その際の当該ローカル座標系において制御エリアを設定する。
ここで、本実施形態において、最終的に出力される画像を生成する過程におけるローカル座標系とオブジェクト空間(ワールド座標系)との関係を図2(A)(B)(C)を用いて説明すると、図2(A)(B)に示すように、ローカル座標系(モデリング座標系)に移動体や枯葉をはじめとするオブジェクトの各々を、シーン全体を表すオブジェクト空間(ワールド座標系)に変換する座標変換を行う。つまり、図2(A)(B)に示すように、移動体や枯葉のローカル座標系の座標値を、拡大縮小、回転、平行移動の座標変換を行い、図2(C)に示すようにワールド座標の座標値に変換する座標変換を行う。そして、オブジェクト空間(ワールド座標系)において、移動体や枯葉をはじめとするオブジェクトが配置され、オブジェクト空間における所与の視点から見える画像を生成する。
すなわち、本実施形態では、ワールド座標系に座標変換されることになる移動体のローカル座標系において制御エリアを設定するものである。このようにすれば、オブジェクト空間における移動体の位置に左右されずに制御エリアを設定することができる。つまり、移動体のローカル座標系において制御エリアを設定すれば、後述するローカル座標系の座標値で示される制御エリア面を格子状に分割した複数の格子点のそれぞれに対応づけて移動・動作パラメータを設定することができるので、結果的に、枯葉の移動・動作を制御するための移動・動作パラメータは、ワールド座標系(オブジェクト空間)における移動体の位置に関係なく一意に設定することができる。要するに、移動体がオブジェクト空間において移動する度に移動・動作パラメータを設定する煩わしさを回避することができる。
具体的に、ワールド座標系における例を示した図3(A)と、ローカル座標系における例を示した図3(B)を用いて説明する。
例えば、仮に、図3(A)に示すようにワールド座標系において、移動体OB1が坂の上(P点)又は、坂の下(Q点)の位置に応じて制御エリアCAを設定する場合には、移動体OB1のP点、Q点の位置に応じて、移動・動作パラメータを設定することになり、データ量や演算処理が多くなり、画像生成システムの処理負荷が高まることになる。
一方、図3(B)に示すように、移動体OB1のローカル座標系に制御エリアCAを設定すれば、移動体がワールド座標系において自由に移動したとしても移動・動作パラメータを一意に設定することができる。つまり、図3(A)でP点、Q点のいずれに移動体OB1が存在したとしても、移動・動作パラメータを設定し直す必要はなく、データ量や処理量を抑えることができる。
さらに、このように移動体のローカル座標系において制御エリアを設定すれば、オブジェクト空間(ワールド座標系)に存在する枯葉を、移動体のローカル座標系に逆変換することによって、気流制御のシミュレーション演算を容易に行うことができる。
例えば、仮に、ワールド座標系で、制御エリアを設定する場合には、図3(A)に示すように、P点、Q点のいずれに移動体OB1が位置していたとしても、移動体OB1の位置に応じて設定された制御エリアCAを基準に、枯葉OB2に対して、制御エリアCA内に存在するか否かを判断し枯葉OB2が制御エリアCA内に存在する場合には移動・動作の演算を行うことになる。つまり、移動体OB1の位置が変化する度に、制御エリアCAの変化に応じて、枯葉OB2と制御エリアCAとの相対的な位置関係を演算して、枯葉OB2の移動・動作の演算を行うことになる。
一方、本実施形態によれば、移動体OB1がP点、Q点のいずれの位置に存在していたとしても、単に枯葉OB2に対して、移動体OB1のローカル座標系における位置を求めれば、枯葉OB2が制御エリアCA内に存在するか否かの判断や移動・動作の演算を容易に行うことができる。要するに、オブジェクト空間における移動体OB1の位置の変化に左右されずに制御エリアCAを設定されるので、結果的に、枯葉OB2と制御エリアCAとの相対的な位置関係を演算する煩雑な処理を回避することができる。
次に、図4を用いて、本実施形態の画像生成システムにおける制御エリアの設定手法について説明すると、制御エリアは、移動体の周囲の少なくとも一部を含むエリアに設定される。移動体の周囲の少なくとも一部とは、移動体の周囲の上方、下方、前方、後方、左側方、及び右側方、の少なくとも一部のことをいう。例えば、図4(A)(B)を用いて説明すると、移動体の周囲の上方とは、図4(A)(B)のAに示すエリアをいい、移動体の周囲の下方とは、図4(A)(B)のBに示すエリアをいい、移動体の周囲の前方とは図4(A)(B)のCに示すエリアをいい、移動体の周囲の後方とは、図4(A)(B)のDに示すエリアのことをいう。また、移動体の左側方とは図4(A)(B)のEに示すエリアをいい、移動体の右側方とは図4(A)(B)のFに示すエリアをいう。なお、図4に示すように、移動体の周囲の上方、下方、前方、後方、左側方、及び右側方の各境界部分は、多少のずれがあってもよいし、曖昧に設定してもよい。
また、制御エリアは移動体の周囲のエリアとしてもよい。例えば、移動体の移動によって生じる移動体周囲の気流を表現したい場合には、図5の(A)(B)に示すように、移動体OB1の周囲に制御エリアCAを設定する。
また、図6(A)(B)に示すように、移動体の周囲のエリアであって、移動体OB1の後方部分の領域(移動体OB1の進行方向に対する後方部分である、いわゆるスリップストリーム領域SA)を除くエリアを制御エリアCAとして設定することができる。例えば、図6(A)(B)に示すように、移動体OB1が矢印方向に移動する場合には、通常、スリップストリーム領域SAは、空気抵抗が弱くなる部分であるので移動体OB1が移動することによって生じる気流が生じにくい。したがって、移動体の周囲の領域うちスリップストリーム領域を除く領域を制御エリアCAとして設定することができる。
次に、図7〜9を用いて制御エリア内に存在する第2のオブジェクトを移動・動作させるための移動・動作パラメータの設定手法について説明する。
図7に示すように、移動体OB1のローカル座標系において、移動体OB1の周囲であって、0<=X<=3、0<=Y<=4、0<=Z<=5で囲まれたエリアを制御エリアCAとして設定する。
そして、移動体OB1のローカル座標系に設定された制御エリアCAに基づいて制御エリア面CPを設定する。図7に示すように、制御エリアCAは、移動体OB1の周囲であって、0<=X<=3、及び、0<=Z<=5で囲まれた(X,Z)を含む範囲であるので、制御エリア面CPは、図8(A)に示すように、0<=X<=3、及び、0<=Z<=5からなる面として設定する。なお、制御エリア面CPは、0<=X<=3、及び、0<=Z<=5よりも広い範囲で設定してもよい。
次に、制御エリア面CPを格子状に分割する。例えば、図8(A)では、移動体OB1のローカル座標系のX軸、Z軸に対して大きさ「1」の間隔で格子状に分割する。なお、格子状に分割する場合には、所定間隔で分割することができれば間隔の大きさは問わない。例えば、大きさ「0.5」の間隔で分割してもよい。
そして、制御エリア面CPを格子状に分割した移動体OB1のローカル座標系の(X,Z)で示される各格子点(X,Z)に対応づけて移動・動作パラメータテーブルに、移動・動作パラメータ設定する。
図9(A)は、枯葉OB2に対して高さ方向(Y軸方向)に移動させる高さ方向の速度パラメータ(移動・動作パラメータの一例)を設定した例を示す。
例えば、図7に示すように移動体OB1のフロントガラス部分に上昇気流が発生したように枯葉OB2を移動させ、移動体OB1のフロントガラス以外の部分では、枯葉OB2が落下する様子を表現したい場合には、次のように移動・動作パラメータを設定する。
まず、移動体OB1のローカル座標系において、移動体OB1のフロントガラス部分に対応する制御エリア面CPの格子点を特定する。図7の例では、移動体OB1のフロントガラス部分に対応する制御エリア面CPの格子点は、(X,Z)=(1,3)、(X,Z)=(2,3)である。
そして、制御エリア面CPの格子点に対応づけて、移動・動作パラメータテーブルに高さ方向の速度パラメータ(移動・動作パラメータの一例)を設定する。例えば、図9(A)に示すように、フロントガラス部分に対応する制御エリア面CPの格子点に対応する移動・動作パラメータテーブルの(X,Z)=(1,3)、(X,Z)=(2,3)の高さ方向の速度パラメータを「1」に設定する。そして、他の格子点(X,Z)に対応する高さ方向の速度パラメータを「0」に設定する。
上述した移動・動作パラメータの例は、高さ方向の速度パラメータを設定する例を説明したが、例えば、速度ベクトル(移動・動作パラメータの一例)を設定するようにしてもよい。具体的に、図9(B)を用いて、移動・動作パラメータテーブルに速度ベクトルを設定する例を説明する。
例えば、図7に示すように移動体OB1のフロントガラス部分に上昇気流を発生する様子を表現したい場合、例えば、枯葉OB2を斜め上方向に移動させるようにし、移動体OB1のフロントガラス以外の部分では、枯葉OB2が落下する様子を表現したい場合には、次のように速度ベクトル(移動・動作パラメータの一例)を設定することができる。
図9(B)は、枯葉OB2が、斜め上方向に移動する場合の移動・動作パラメータを設定した例である。例えば、移動体OB1のフロントガラス部分に対応する格子点(X,Z)=(1,3)及び、(X,Z)=(2,3)に対応づけて速度ベクトルを設定する。例えば、格子点(X,Z)=(1,3)及び、(X,Z)=(2,3)に対応づける速度ベクトルの値を(x,y,z)=(0,1,−1)に設定する。一方、格子点(X,Z)=(1,3)及び、(X,Z)=(2,3)以外の格子点の速度ベクトルを0に設定する。
このように予め移動・動作パラメータ(図9(A)の例では高さ方向の速度パラメータ、図9(B)の例では速度ベクトル)を設定すれば、後で説明するように設定した移動・動作パラメータに基づいて枯葉OB2を簡易に演算することができるので、従来の厳密に気流のシミュレーションの演算を行う手法に比較して、処理負荷を抑えることができる。
尚、図6の例に示すように、移動体OB1の周囲のエリアであって、スリップストリーム領域SAを除くエリアを制御エリアCAとして設定した場合には、制御エリアCAが占める(X,Z)の位置を含むように制御エリア面CPを設定し、制御エリア面CPの格子点のうち、制御エリアCAを構成する点(X,Z)に対応する格子点に移動・動作パラメータを設定し、制御エリアCAを構成する点(X,Z)に対応しない格子点に移動・動作パラメータを設定しないようにしてもよい。また、制御エリアCAを構成する点(X,Z)に対応しない格子点には、予め定められた所定値(NULL値や、デフォルト値)を設定してもよい。
次に、本実施形態の画像生成システムの移動・動作パラメータに基づく第2のオブジェクトの移動・動作の演算手法について説明する。
具体的に説明すると、オブジェクト空間に存在する枯葉OB2(第2のオブジェクトの一例)を、移動体OB1のローカル座標系に逆変換して枯葉OB2の位置を求め、枯葉OB2の位置と、格子点に対応する移動・動作パラメータとに基づいて、枯葉OB2の現在の移動・動作の値を、移動・動作パラメータの値に近づける処理を行う。なお、枯葉OB2の現在の移動・動作の値に対して、移動・動作パラメータを加算、乗算するようにしてもよい。
ここで、本実施形態の移動・動作パラメータの値に近づけるとは、移動・動作パラメータの値に設定してもよいし、枯葉OB2の現在の移動・動作(例えば速度)の値と、移動・動作パラメータの値との差分を求め、求めた差分値に係数を乗算した値を、枯葉OB2の現在の値に加算する。
例えば、図9(A)に示す高さ方向の速度パラメータを取得する場合を例に説明すると、図8(A)に示すように、枯葉OB2が(X,Z)=(2,3)の位置に存在する場合には、格子点(X,Z)=(2,3)に対応付けられる高さ方向の速度パラメータを移動・動作パラメータテーブルから取得する。例えば、図9(A)の例では、取得した速度パラメータの値が「1」であるので、「1」に近づける処理を行う。ここで、枯葉OB2の現在の上向き方向の速度が「0.5」である場合には、速度パラメータの値「1」と、枯葉OB2の現在の速度「0.5」の差分値「0.5」に係数「0.5」を乗算した値を求める。そして、求めた値「0.25」を、枯葉OB2の現在の速度「0.5」に加算した値である「0.75」が最終的に求められる枯葉OB2の速度になる。そして、枯葉OB2の速度「0.75」に基づいて、枯葉OB2を上向き方向に移動させる。その結果、例えば、図8(B)に示すように、枯葉OB2がV1方向(上向き方向)に移動・動作するように表現することができる。
また、図9(B)に示す速度ベクトルを取得する場合を例にとり説明すると、枯葉OB2が(X,Z)=(2,3)の位置に存在する場合には、格子点(X,Z)=(2,3)に対応付けられる速度ベクトルの値「(x,y,z)=(0,1,−1)」に近づける処理を行う。ここで、枯葉OB2の現在の速度ベクトルが(x,y,z)=(0,1,0)である場合には、「(x,y,z)=(0,1,−1)」に近づける処理を行う。具体的には、係数を「0.5」として求めた場合には、(x,y,z)=(0,1,−0.5)が枯葉OB2の速度ベクトルとして求まる。そして、枯葉OB2は、(x,y,z)=(0,1,−0.5)に基づいて、例えば、図8(B)に示すように、枯葉OB2がV2方向(斜め上方向)に移動・動作するように表現することができる。
このように、本実施形態の画像生成システムでは、移動体OB1のローカル座標系において、枯葉OB2の位置と、制御エリア面CPの各格子点との位置関係に基づいて、移動・動作パラメータを取得し、取得した移動・動作パラメータに基づいて、枯葉OB2の移動・動作の演算を行うので、従来の気流のシミュレーション演算に基づいて枯葉の移動・動作を演算する手法に比較して、簡易な計算で枯葉の気流によって生じる移動・動作の演算を行うことができる。例えば、移動体OB1のフロントガラス部分に上昇気流が発生したように枯葉OB2を移動させ、移動体OB1のフロントガラス以外の部分では、枯葉OB2が落下する様子をリアルに表現することができる。
なお、移動体OB1のローカル座標系に逆変換した枯葉の位置が、制御エリアCA外に存在する場合には、移動・動作パラメータに基づく移動・動作の演算を行わないようにするようにしてもよい。演算量を少なくして画像生成システムの処理負荷を抑えることができるからである。
つまり、本実施形態では、移動体OB1のローカル座標系に逆変換した枯葉OB2の位置が、制御エリアCA内に存在するか否かを判断し、その後に、枯葉OB2の位置と、各格子点とに対応付けられる移動・動作パラメータとに基づいて、移動・動作の演算を行うようにする。
例えば、制御エリアCAが、図7に示すように、移動体OB1のローカル座標系において、移動体OB1の周囲であって、0<=X<=3、0<=Y<=4、0<=Z<=5で囲まれたエリアである場合には、Y>4に存在する枯葉OB2´は、制御エリアCA外であるので、移動・動作パラメータに基づく移動・動作の演算を行わないようにする。一方、枯葉OB2は、制御エリア内に存在するので、移動・動作パラメータに基づく移動・動作の演算を行う。
また、本実施形態の制御エリアCAは、移動体の周囲の少なくとも一部に設定されているので、枯葉の位置が移動体の内部に存在する場合には、後述する補正演算を行うことによって枯葉の位置を適正な位置に補正した後に、移動・動作の演算を行うようにしてもよい。
また、枯葉OB2の位置(X,Z)が、制御エリア面CPのいずれかの格子点(X,Z)上に存在しない場合には、枯葉OB2の位置に基づいて、複数の移動・動作パラメータを補間し、補間した値に基づいて枯葉OB2の移動・動作の演算を行うようにしていもよい。このようにすれば、制御エリア面CPを粗く格子状に分割することによって、各格子点に対応付けられる移動・動作パラメータのデータ量を削減することができる。
具体的に説明すると、枯葉OB2の位置に基づいて移動・動作パラメータを取得し、線形補間した値を取得する。例えば、図10では、枯葉OB2の位置P0の制御エリア面に投影される座標値(XとZからなる値)と、複数の格子点P1〜P4にそれぞれ対応付けられる移動・動作パラメータを線形補間した値を求め、求められた値に基づいて、移動・動作の演算を行うようにしてもよい。
また、上述した移動・動作パラメータテーブル例では、高さ方向の速度パラメータを格納する例、速度ベクトルを格納する例について説明したが、移動量のパラメータ、加速度のパラメータを格納してもよい。また、複数のパラメータ(速度パラメータ、加速度パラメータ等)ごとに、個別のテーブル(速度パラメータテーブル、加速度パラメータテーブル)を用いて格納してもよい。また、移動体の移動速度、移動方向、及び回転方向のうち少なくとも1つに基づいて移動・動作パラメータを設定してもよい。例えば、移動体が低速の場合と高速の場合とに分けて、移動・動作パラメータを設定してもよい。また、移動・動作パラメータも移動体がバックする場合には、移動体がバックに応じた移動・動作パラメータを設定してもよい。また、移動体がスピンする場合には、移動体の回転方向に応じた移動・動作パラメータを用意するようにしてもよい。例えば、移動体の重心を軸に回転するような速度ベクトルを制御エリア面の各格子点に対応づけて格納することができる。
2.2 第2のオブジェクトの位置の補正する演算手法についての説明
次に第2のオブジェクトの補正の演算を行う手法について説明する。本実施形態の画像生成システムでは、移動体(第1のオブジェクトの一例)の周囲の少なくとも一部を含むエリアを制御エリアとして設定し、制御エリア内に存在する枯葉(第2のオブジェクトの一例)に対して移動・動作を行う。しかし、制御エリア内に存在する枯葉に対して、移動・動作パラメータに基づいて画一的に処理を行うと、結果として枯葉の位置が不適切な位置に存在するような画像が表現されてしまう場合がある。
例えば、図11(A)に示すように、移動体OB1の中に、移動体OB2がめり込んでしまうような画像が生成されてしまう恐れがある。本来ならば、図11(B)に示すように、枯葉OB2が移動体OB1の外に位置した方が自然である。
したがって、本実施形態の画像生成システムでは、枯葉OB2が、移動体OB1にめり込むような位置に枯葉OB2が存在する場合には、適正な位置に補正する処理を行うようにしている。
まず、補正パラメータに基づいて第2のオブジェクトの位置を補正する手法について説明する。図12に示すように、まず補正エリア面RPを設定する。補正エリア面RPは、移動体OB1に基づいて設定する。例えば、移動体OB1の占める位置(X,Z)が含むように設定する。なお、補正エリア面RPを設定せずに、制御エリア面CPの複数の格子点に対応づけて補正パラメータを設定してもよい。なお、補正エリア面RPも、制御エリア面CPと同様に、移動体OB1のローカル座標系に設定する。このようにすれば、オブジェクト空間における移動体の位置に関係なく、補正パラメータを設定することができ、補正の演算を簡易に行うことができるからである。
次に、補正エリア面RPを格子状に分割した複数の格子点のそれぞれに対応づけて補正パラメータを設定する。なお、補正エリア面RPを格子状に分割する場合には、制御エリア面CPを格子状に分割する場合よりも詳細に分割してもよい。
図13は、高さ方向(Y軸方向)の補正を行う高さパラメータ(補正パラメータの一例)を格納した補正パラメータテーブルの例を示す。
例えば、移動体OB1の形状に応じて補正エリア面の格子点に高さパラメータを設定する。例えば、補正エリア面の(X,Z)=(1,1)付近は、移動体OB1のルーフ部分であり、ルーフ部分の高さ(Yの値)が「2」である場合には、(X,Z)=(1,1)の高さパラメータに「2」を格納する。また、補正エリア面の(X,Z)=(1,3)付近は、移動体OB1のフロントガラス部分であり、フロントガラス部分の高さ(Yの値)が「1.5」である場合には、(X,Z)=(1,3)の高さパラメータに「1.5」を格納する。また、補正エリア面の(X,Z)=(1,4)付近は、移動体OB1のボンネット部分であり、ボンネット部分の高さ(Yの値)が「1」である場合には、(X,Z)=(1,4)の高さパラメータに「1」を格納する。
そして、枯葉OB2の位置と、補正エリア面の各格子点に対応づけて設定された補正パラメータに基づいて、枯葉OB2を補正する演算を行う。具体的には、図13の高さパラメータに基づいて補正を行う場合には、枯葉OB2の高さ(Yの値)が、枯葉OB2の位置にある格子点の高さパラメータよりも低い場合には、高さパラメータの値に枯葉OB2の高さ(Yの値)を変更する演算を行う。
例えば、図12に示すように、枯葉OB2が例えば、(X,Y,Z)=(1,0.9,4)の位置ある場合には、格子点(X,Z)=(1,4)の高さパラメータを取得する。つまり、図13の例では、格子点(X,Z)=(1,4)に対応付けられる高さパラメータ「1」を取得する。そして、枯葉OB2が、高さ(Yの値)が「0.9」であり、高さパラメータ「1」よりも低いので、移動体OB1にめり込まないように、枯葉OB2を(X,Z)=(1,4)の補正パラメータ値である「1」の高さに上げる補正処理を行う。
また、枯葉OB2が、例えば、(X,Y,Z)=(2,3,2)の位置にある場合には、(X,Z)=(2,2)の補正エリア面RPの格子点に対応付けられる高さパラメータの値が「2」であるので、枯葉OB2は、補正パラメータ値よりも高い位置(Y=3の位置)にあるので、枯葉OB2の位置を変更しない。
以上の処理に基づいて、本実施形態の画像生成システムでは、枯葉OB2の補正の演算が行われる。このようにすれば、移動体OB1が凹凸のある複雑な形状を有する場合でも、枯葉OB2が移動体OB1にめり込むような不自然な画像を生成することを防止することができる。また、本実施形態の画像生成システムによれば、厳密に3次元空間で枯葉OB2を構成するポリゴンの頂点と、移動体OB1を構成するポリゴンの頂点との頂点演算を行って、枯葉OB2の位置を補正する演算を行う手法に比較して、少ない演算量で補正を行うことができる。
なお、第2のオブジェクトの位置を補正する演算は、前述の移動・動作パラメータを補間した場合と同様に、複数の補正パラメータを補間し、補間した値に基づいて補正の演算を行うようにしてもよい。なお、補正は第2のオブジェクトを補正エリア面に投影した点の周囲の複数の格子点に対応付けられる補正パラメータを線形補間してもよいし、例えば高さパラメータを取得する場合には複数の格子点に対応付けられる補正パラメータのうち最も大きな値の補正パラメータを取得するようにしてもよい。
次に、ボリュームを用いて第2のオブジェクトの位置を補正する演算する手法について説明する。
図14は、バウンディングボックスを用いて補正する例を示した図である。移動体OB1が例えばバスのような略直方体の形状を特徴とするオブジェクトである場合には、直方体のバウンディングボックスBBを用いることができる。
そして、枯葉OB2の一部がバウンディングボックスBBの中に存在するか否かを判断する。具体的には枯葉OB2を構成するポリゴンの頂点座標と、バウンディングボックスBBを構成するポリゴンの頂点座標に基づいて、枯葉OB2の一部が、バウンディングボックスBBの中に存在するか否かを判断する。
枯葉OB2の一部がバウンディングボックスBBの中に存在する場合には、枯葉OB2の位置をバウンディングボックスBBの外に位置するように枯葉OB2の位置を修正する。例えば、枯葉OB2の位置座標のY値を、バウンディングボックスBBの外に位置するように変更する。
なお、枯葉OB2の位置を補正する演算は、制御エリア内の移動・動作パラメータに基づく枯葉OB2の移動・動作の演算を行う前に補正の演算を行ってもよい。また、制御エリア内の移動・動作パラメータに基づく枯葉OB2の移動・動作の演算を行った後には、決定された枯葉OB2の位置に基づいて補正の演算を行う方が望ましい。枯葉OB2が移動体OB1にめり込むような画像を生成することを確実に防止することができるからである。
3. 本実施形態の処理
次に図15を用いて、本実施形態の手法を実現する処理例を詳細に説明する。
図15は、本実施形態の手法における枯葉の移動・動作、及び補正の演算を行うフローチャートである。
まず、移動体の位置を演算する(ステップS110)。次に、移動体の位置に応じて制御エリアを設定する(ステップS120)。なお、制御エリアは、移動体のローカル座標系において設定される。そして、制御エリアに基づいて設定された制御エリア面を格子状に分割した複数の格子点に対応づけて移動・動作パラメータと補正パラメータとを設定する(ステップS130)。つまり、移動・動作パラメータと補正パラメータとは、制御エリア面を分割した移動体のローカル座標系における複数の格子点(X,Z)に対応づけて設定される。
次に、移動体のローカル座標系における枯葉の位置を演算する(ステップS140)。枯葉の位置は、移動体をローカル座標系からワールド座標系に変換される行列式の逆行列を、ワールド座標系における枯葉の位置(座標)に乗算することによって求めることができる。そして、枯葉の位置と、制御エリア面の各格子点に対応付けられた移動・動作パラメータとに基づいて、枯葉の移動・動作を演算する(ステップS150)。
次に、枯葉の位置が補正エリア内か否かを判断する(ステップS160)。なお、枯葉の少なくとも一部が補正エリア内に属するか否かを判断してもよい。枯葉の位置が補正エリア内であると判断される場合には(ステップS160のYes)、枯葉が補正エリア外に位置するように、補正パラメータに基づいて補正する演算を行う(ステップS170)。一方、枯葉の位置が補正エリア内であると判断されない場合には(ステップS160のNo)、次のステップに進む。
次に、制御エリア内に存在する全ての枯葉について演算を行ったか否かを判断し(ステップS180)、制御エリア内に存在する全ての枯葉について移動・動作の演算を行っていない場合には(ステップS180のNo)、移動・動作の演算を行っていない枯葉に対して、ステップS140〜ステップS180の処理を行う。一方、制御エリア内に存在する全ての枯葉について移動・動作の演算を行った場合には(ステップS180のYes)、処理を終了する。
4.応用例
(1)移動体が壁に衝突する場合の実施例
本実施形態の画像生成システムによれば、上述した枯葉の気流制御の他に、例えば、移動体が、壁(例えば、煉瓦等)に衝突する場合に、衝突したことによって、壁が崩れる様子を表現する画像を生成することができる。
移動体が煉瓦の壁に衝突する場合を例にとり説明すると、移動体の周囲に制御エリアを設定し、移動体が煉瓦に衝突することによって壊れた煉瓦の破片の速度ベクトル(移動・動作パラメータの一例)を、制御エリア面の各格子点に対応づけて移動・動作パラメータテーブルに予め設定する。そして、制御エリア内に存在する煉瓦の破片の位置と、制御エリア面の各格子点に対応づけられる速度ベクトルとに基づいて、煉瓦の破片に対して移動・動作の演算を行う。このようにすれば、厳密に煉瓦の破片の移動・動作のシミュレーション演算を行わなくても、簡易に移動・動作の演算を行うことができる。
また、制御エリア面の各格子点に対応づけて設定された補正パラメータに基づいて、移動体の周囲に崩れ落ちる煉瓦の破片が移動体の中にめり込まないに補正する演算を行うことができる。このようにすれば、煉瓦の破片と、移動体との衝突判定を厳密に行わなくても簡易な演算で、壊れた煉瓦の破片が移動体の周囲に落ちる様子を表現することができる。
(2)移動体が枝の下を通る場合の実施例
本実施形態の画像生成システムによれば、例えば木の枝が移動体の通過に伴って揺れる動作を表現することができる。
例えば、移動体の周囲に制御エリアを設定し、制御エリア面の各格子点に対応づけて予め木の枝が揺れる動作を示すモーションデータ(移動・動作パラメータの一例)を制御エリア面の各格子点に対応づけて予め設定する。そして、制御エリア内に木の枝が存在する場合には、木の枝の位置と、制御エリア面の各格子点に対応付けられるモーションデータとに基づいて、木の枝が揺れる動作の演算を行う。モーションデータは、例えば、木の枝が移動体の進行方向に動いた後に弾性力によって元の位置に戻るという一連の動作とすることができる。このようにすれば、移動体の高さの近くに存在する木の枝の下を移動体が通過する場合には、木の枝が揺れる様子を表現することができる。
(3)移動・動作パラメータを動的に変更する場合の実施例
本実施形態の画像生成システムでは、移動体の移動速度、移動方向に基づいて移動・動作パラメータを動的に変更してもよい。制御エリアに存在する枯葉の移動・動作を移動体のスピードや移動方向に応じて表現することができるからである。さらに、オブジェクト空間の天候や風力、他の移動体の移動によって発生する気流等に応じて、移動・動作パラメータを動的に変更してもよい。つまり、移動体が移動することによって生じる気流だけでなく、天候、風等の移動体以外の他の要因に基づいて生じる気流に応じて、移動・動作パラメータを動的に変更して、枯葉の移動・動作の演算を行ってもよい。要するに、本実施形態では、ゲーム状況(移動体の移動速度、移動方向、天候、風力等)に応じて、移動・動作パラメータを動的に変更してもよい。
このように、ゲーム状況に応じた気流制御を表現する場合には、補正パラメータを変更することなく、移動・動作パラメータテーブルに格納されている移動・動作パラメータのみを、動的に変更する。つまり、移動・動作パラメータは移動・動作パラメータテーブルに設定され、補正パラメータは補正パラメータテーブルに設定され、それぞれ異なるテーブルで設定されているので、移動・動作パラメータのみを変更すれば、ゲーム状況に応じた枯葉の気流制御を表現することができる。
(4)移動体が変形する場合の実施例
本実施形態の画像生成システムでは、移動体が変形した場合には、変形後の移動体に基づいて、補正パラメータテーブルに格納される補正パラメータを変更してもよい。例えば、移動体が壁等に衝突して移動体の形状が変形する場合には、枯葉の位置は変形後の移動体の形状に応じて適切な位置に補正することが望ましいからである。
また、ボリュームを用いて枯葉の位置を補正する演算を行う場合には、変形後の移動体を内包したボリューム又は変更後の移動体の概形を表すボリュームを用いて、補正の演算を行うようにしてもよい。
5.ハードウエア構成
図16に本実施形態を実現できるハードウェア構成の例を示す。メインプロセッサ900は、DVD982(情報記憶媒体。CDでもよい。)に格納されたプログラム、通信インターフェース990を介してダウンロードされたプログラム、或いはROM950に格納されたプログラムなどに基づき動作し、ゲーム処理、画像処理、音処理などを実行する。コプロセッサ902は、メインプロセッサ900の処理を補助するものであり、マトリクス演算(ベクトル演算)を高速に実行する。例えばオブジェクトを移動させたり動作(モーション)させる物理シミュレーションに、マトリクス演算処理が必要な場合には、メインプロセッサ900上で動作するプログラムが、その処理をコプロセッサ902に指示(依頼)する。
ジオメトリプロセッサ904は、メインプロセッサ900上で動作するプログラムからの指示に基づいて、座標変換、透視変換、光源計算、曲面生成などのジオメトリ処理を行うものであり、マトリクス演算を高速に実行する。データ伸張プロセッサ906は、圧縮された画像データや音データのデコード処理を行ったり、メインプロセッサ900のデコード処理をアクセレートする。これにより、オープニング画面やゲーム画面において、MPEG方式等で圧縮された動画像を表示できる。
描画プロセッサ910は、ポリゴンや曲面などのプリミティブ面で構成されるオブジェクトの描画(レンダリング)処理を実行する。オブジェクトの描画の際には、メインプロセッサ900は、DMAコントローラ970を利用して、描画データを描画プロセッサ910に渡すと共に、必要であればテクスチャ記憶部924にテクスチャを転送する。すると描画プロセッサ910は、描画データやテクスチャに基づいて、Zバッファなどを利用した隠面消去を行いながら、オブジェクトをフレームバッファ922に描画する。また描画プロセッサ910は、αブレンディング(半透明処理)、デプスキューイング、ミップマッピング、フォグ処理、バイリニア・フィルタリング、トライリニア・フィルタリング、アンチエイリアシング、シェーディング処理なども行う。頂点シェーダやピクセルシェーダなどのプログラマブルシェーダが実装されている場合には、シェーダプログラムに従って、頂点データの作成・変更(更新)やピクセル(あるいはフラグメント)の描画色の決定を行う。1フレーム分の画像がフレームバッファ922に書き込まれるとその画像はディスプレイ912に表示される。
サウンドプロセッサ930は、多チャンネルのADPCM音源などを内蔵し、BGM、効果音、音声などのゲーム音を生成し、スピーカ932を介して出力する。ゲームコントローラ942やメモリカード944からのデータはシリアルインターフェース940を介して入力される。
ROM950にはシステムプログラムなどが格納される。業務用ゲームシステムの場合にはROM950が情報記憶媒体として機能し、ROM950に各種プログラムが格納される。なおROM950の代わりにハードディスクを利用してもよい。RAM960は各種プロセッサの作業領域となる。DMAコントローラ970は、プロセッサ、メモリ間でのDMA転送を制御する。DVDドライブ980(CDドライブでもよい。)は、プログラム、画像データ、或いは音データなどが格納されるDVD982(CDでもよい。)にアクセスする。通信インターフェース990はネットワーク(通信回線、高速シリアルバス)を介して外部との間でデータ転送を行う。
なお本実施形態の各部(各手段)の処理は、その全てをハードウェアのみにより実現してもよいし、情報記憶媒体に格納されるプログラムや通信インターフェースを介して配信されるプログラムにより実現してもよい。或いは、ハードウェアとプログラムの両方により実現してもよい。
そして本実施形態の各部の処理をハードウェアとプログラムの両方により実現する場合には、情報記憶媒体には、ハードウェア(コンピュータ)を本実施形態の各部として機能させるためのプログラムが格納される。より具体的には、上記プログラムが、ハードウェアである各プロセッサ902、904、906、910、930に処理を指示すると共に、必要であればデータを渡す。そして、各プロセッサ902、904、906、910、930は、その指示と渡されたデータとに基づいて本発明の各部の処理を実現する。
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語として引用された用語は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。また接触痕跡の表現手法も、本実施形態で説明したものに限定されず、これらと均等な手法も本発明の範囲に含まれる。
なお、本実施形態の画像生成システムでは、例えば移動体が、飛行機や、船である場合には、その移動体の形状に応じた制御エリアを設定し、移動・動作パラメータを設定することが望ましい。例えば、移動体が船である場合には、船の周囲の海面領域を制御エリアとして設定し、制御エリア内に存在する物体に対して海流の影響を与えるように移動・動作の演算を行うようにしてもよい。
本実施形態の画像生成システムでは、制御エリア面を格子状に分割する格子点に基づいて移動・動作パラメータや、補正パラメータを設定する例を説明したが、第2のオブジェクトに対する振る舞いを示すパラメータを設定するようにしてもよい。
例えば、移動体(第1のオブジェクトの一例)が燃えて、枯葉(第2のオブジェクトの一例)が引火する様子を表現したい場合には、制御エリア面を格子状に分割する複数の格子点に対応づけて温度パラメータを設定するようにしてもよい。このようにすれば、例えば、枯葉の位置と、格子点に対応付けられる温度パラメータとに基づいて、枯葉に引火するか否かを判断し(例えば、温度パラメータと所与の閾値に基づいて判断し)、引火すると判断される場合には枯葉が引火されたような画像を生成するようにしてもよい。
また本発明は種々のゲーム(レーシングゲーム、格闘ゲーム、シューティングゲーム、ロボット対戦ゲーム、スポーツゲーム、競争ゲーム、ロールプレイングゲーム、音楽演奏ゲーム、ダンスゲーム等)に適用できる。また本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、パーソナルコンピュータ、マルチメディア端末、ゲーム画像を生成するシステムボード、携帯電話等の種々の画像生成システムに適用できる。