説明

プログラム、情報記憶媒体、及び画像生成システム

【課題】陽炎等のリアルな画像を生成できるプログラム、情報記憶媒体及び画像生成システムを提供すること。
【解決手段】 画像生成システムは、元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に前記揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部を含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム、情報記憶媒体、及び画像生成システムに関する。
【背景技術】
【0002】
従来より、キャラクタなどのオブジェクトが配置設定されるオブジェクト空間内(仮想的な3次元空間)において仮想カメラ(所与の視点)から見える画像を生成する画像生成システム(ゲームシステム)が知られており、いわゆる仮想現実を体験できるものとして人気が高い。
【0003】
このような画像生成システムでは、プレーヤの仮想現実感を高めるために、いわゆる陽炎についてもリアルに表現できることが望ましい。このような陽炎のリアルな画像を生成する技術としては、例えば特開2000−197765号公報に開示される従来技術がある。
【0004】
しかしながらこの従来技術では、熱せられた空気の上昇のように陽炎の揺らぎが下から上に伝わる様子を表現することは難しかった。
【特許文献1】特開2000−197765号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明は、以上のような課題に鑑みてなされたものであり、その目的とするところは、陽炎等のリアルな画像を生成できるプログラム、情報記憶媒体及び画像生成システムを提供することにある。
【課題を解決するための手段】
【0006】
本発明は、画像を生成する画像生成システムであって、元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に前記揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部とを含む画像生成システムに関係する。また本発明は、上記各部としてコンピュータを機能させるプログラムに関係する。また本発明は、コンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶(記録)した情報記憶媒体に関係する。
【0007】
本発明によれば、ポリゴン頂点座標とテクスチャ座標が格子の各格子点に設定され、各格子点の揺らぎ値が演算される。そして各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンが描画される。これにより、元画像の各部分が揺らいで見える画像が生成されるようになり、陽炎等のリアルな画像の生成が可能になる。
【0008】
また本発明は、画像を生成する画像生成システムであって、元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、各格子点のテクスチャ座標と、各格子点のポリゴン頂点座標に前記揺らぎ値を加算することで得られたポリゴン頂点座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部とを含む画像生成システムに関係する。また本発明は、上記各部としてコンピュータを機能させるプログラムに関係する。また本発明は、コンピュータ読み取り可能な情報記憶媒体であって、上記各部としてコンピュータを機能させるプログラムを記憶(記録)した情報記憶媒体に関係する。
【0009】
本発明によれば、ポリゴン頂点座標とテクスチャ座標が格子の各格子点に設定され、各格子点の揺らぎ値が演算される。そして各格子点のテクスチャ座標と、各格子点のポリゴン頂点座標に揺らぎ値を加算することで得られたポリゴン頂点座標とに基づいて、元画像をテクスチャとしてポリゴンが描画される。これにより、元画像の各部分が揺らいで見える画像が生成されるようになり、陽炎等のリアルな画像の生成が可能になる。
【0010】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記揺らぎ値演算部が、揺らぎ波形に基づき得られた揺らぎ値を格子の第1の辺上の格子点に対して設定し、前記第1の辺上の格子点に設定された揺らぎ値を、前記第1の辺から対向する第3の辺に向かって、格子線上の格子点に対して時間経過に伴い伝播する処理を行って、格子の各格子点の揺らぎ値を求めるようにしてもよい。
【0011】
このようにすれば、全ての格子点に対応した揺らぎ波形を用意する必要が無くなるため、処理負荷の軽減や処理データ量の削減等を図れる。また第1の辺から対向する第3の辺に揺らぎが伝播する様子を表現することが可能になり、陽炎等の更にリアルな画像を生成できる。
【0012】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記第1の辺から前記第3の辺に向かって格子線上に第1〜第Jの格子点が設定されている場合において、前記揺らぎ値演算部が、第(J−1)の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、前記第3の辺上にある第Jの格子点の現在のフレームでの揺らぎ値を求め、第(J−2)の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、第(J−1)の格子点の現在のフレームでの揺らぎ値を求め、・・・・・・・前記第1の辺上にある第1の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、第2の格子点の現在のフレームでの揺らぎ値を求めるようにしてもよい。
【0013】
このようにすれば、第1辺から第3の辺に向かって揺らぎの波が伝播して行く様子を簡素な処理でリアルに表現できるようになる。
【0014】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記揺らぎ値演算部が、前回のフレームでの格子点の揺らぎ値に減衰率を乗算して得られた値に基づいて、現在のフレームでの格子点の揺らぎ値を求めるようにしてもよい。
【0015】
このようにすれば第1の辺から第3の辺の方向に向かうにつれて揺らぎ値が増幅等して行くような画像の生成が可能になり、生成画像のバラエティ度を増すことができる。
【0016】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記揺らぎ値演算部が、1つの揺らぎ波形の異なるサンプリング点から得た揺らぎ値を、前記格子線上の各格子点に対して初期値としてプリセットし、その後に格子点の揺らぎ値を時間経過に伴い変化させる処理を行うようにしてもよい。
【0017】
このようにすれば、各格子点に初期値としてプリセットされた揺らぎ値が隣接する格子点に直ぐに伝播されるようになり、リアルな揺らぎ画像を早い段階で生成することが可能になる。また、揺らぎ波形の異なるサンプリング点で得た揺らぎ値(サンプリング点での揺らぎ値に所与の係数を乗算した値)が、初期値としてプリセットされるため、初期値の設定処理の簡素化を図れると共に自然な揺らぎ画像を生成できる。
【0018】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記座標設定部が、格子の第1の辺に沿った方向での格子区画の長さよりも、前記第1の辺に直交する第2の辺に沿った方向での格子区画の長さの方が短くなるように分割された格子を設定するようにしてもよい。
【0019】
このように格子を設定すれば、例えば第1の辺から第3の辺の方向に向かって揺らぎ値を伝播させた場合には、揺らぎ値を滑らかに伝播させることが可能になり、揺らぎ画像のチラツキ等の発生を効果的に防止できる。なお、このように格子を設定した場合において、例えば第2の辺から対向する第4の辺の方向に向かって揺らぎ値を伝播させたり、第4の辺から第2の辺の方向に向かって揺らぎ値を伝播させるようにしてもよい。
【0020】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記座標設定部が、元画像の描画領域が確保されるメモリのページサイズ分の大きさの領域に、前記第1の辺から対向する第3の辺へと向かう方向にL個(Lは2以上の整数)の格子区画が並ぶように格子を設定するようにしてもよい。
【0021】
このようにすれば、描画領域のデータがメモリのページを跨いで読み出されたり或いは書き込まれたりする事態を防止しながら、効率的なメモリアクセスが可能になる。
【0022】
また本発明に係る画像生成システム、プログラム及び情報記憶媒体では、前記揺らぎ値演算部が、格子の格子点に対して揺らぎ値の初期値をプリセットし、その後に格子点の揺らぎ値を時間経過に伴い変化させる処理を行うようにしてもよい。
【0023】
このようにすれば、各格子点に初期値としてプリセットされた揺らぎ値が隣接する格子点に直ぐに伝播されるようになり、リアルな揺らぎ画像を早い段階で生成することが可能になる。
【発明を実施するための最良の形態】
【0024】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【0025】
1.構成
図1に本実施形態の画像生成システム(ゲームシステム)の機能ブロック図の例を示す。なお本実施形態の画像生成システムは図1の構成要素(各部)の一部を省略した構成としてもよい。
【0026】
操作部160は、プレーヤが操作データを入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。
【0027】
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(CD、DVD)、ハードディスク、メモリーカード、メモリーカセット、磁気ディスク、或いはメモリ(ROM)などにより実現できる。処理部100は、情報記憶媒体180に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
【0028】
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD(液晶表示装置)、タッチパネル型ディスプレイ、或いはHMD(ヘッドマウントディスプレイ)などにより実現できる。音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
【0029】
携帯型情報記憶装置194は、プレーヤの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶装置194としては、メモリカードや携帯型ゲーム装置などがある。通信部196は外部(例えばホスト装置や他の画像生成システム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
【0030】
なお本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)は、ホスト装置(サーバー)が有する情報記憶媒体からネットワーク及び通信部196を介して情報記憶媒体180(記憶部170)に配信してもよい。このようなホスト装置(サーバー)の情報記憶媒体の使用も本発明の範囲内に含めることができる。
【0031】
処理部100(プロセッサ)は、操作部160からの操作データやプログラムなどに基づいて、ゲーム処理、画像生成処理、或いは音生成処理などの処理を行う。ここでゲーム処理としては、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。この処理部100は記憶部170をワーク領域として各種処理を行う。処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
【0032】
処理部100は、オブジェクト空間設定部110、移動・動作処理部112、仮想カメラ制御部114、座標設定部116、揺らぎ値演算部118、描画部120、音生成部130を含む。なおこれらの一部を省略する構成としてもよい。
【0033】
オブジェクト空間設定部110は、キャラクタ、車、戦車、建物、樹木、柱、壁、マップ(地形)などの表示物を表す各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブ面で構成されるオブジェクト)をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクト(モデルオブジェクト)の位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。
【0034】
移動・動作処理部112は、オブジェクト(キャラクタ、車、又は飛行機等)の移動・動作演算(移動・動作シミュレーション)を行う。即ち操作部160によりプレーヤが入力した操作データや、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、オブジェクト(移動オブジェクト)をオブジェクト空間内で移動させたり、オブジェクトを動作(モーション、アニメーション)させる処理を行う。具体的には、オブジェクトの移動情報(位置、回転角度、速度、或いは加速度)や動作情報(各パーツオブジェクトの位置、或いは回転角度)を、1フレーム(1/60秒)毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理(シミュレーション処理)や画像生成処理を行う時間の単位である。
【0035】
仮想カメラ制御部114は、オブジェクト空間内の所与(任意)の視点から見える画像を生成するための仮想カメラ(視点)の制御処理を行う。具体的には、仮想カメラの位置(X、Y、Z)又は回転角度(X、Y、Z軸回りでの回転角度)を制御する処理(視点位置や視線方向を制御する処理)を行う。
【0036】
例えば仮想カメラによりオブジェクト(例えばキャラクタ、ボール、車)を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度(仮想カメラの向き)を制御する。この場合には、移動・動作処理部112で得られたオブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置(移動経路)又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。
【0037】
座標設定部116は、元画像を縦横に分割するメッシュを想定し、メッシュの縦横の線の交点を格子点とする格子を設定する。そして、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する。例えば、格子点の元画像上の座標を(XO、YO)とし、ポリゴン頂点座標を(X、Y)とし、テクスチャ座標を(U、V)とした場合には、X=U=XO、Y=V=YOとなるように座標を設定する。
【0038】
揺らぎ値演算部118は各格子点の揺らぎ値を求める処理を行う。具体的には、時間経過(フレーム経過と同義)に伴い変化する揺らぎ値を演算して格子点に設定する。この演算された揺らぎ値は、各格子点のテクスチャ座標(或いはポリゴン頂点座標)に加算される。例えばテクスチャ座標(ポリゴン頂点座標)に揺らぎ値を加算せずに、元画像をテクスチャとしてポリゴンを描画すると、陽炎の揺らぎが無い元画像がそのまま生成されるようになる。
【0039】
本実施形態では揺らぎ値演算部118が、揺らぎ波形(揺らぎ波形テーブル、揺らぎ波形関数)に基づき得られた揺らぎ値を、格子の第1の辺上(例えば下辺)の格子点に対して設定(付与)する。そしてこのようにして第1の辺上の格子点に設定された揺らぎ値を、第1の辺(例えば下辺)から対向する第3の辺(例えば上辺)に向かって、格子線上の格子点に対して時間経過に伴い伝播する処理を行う。即ち、格子点の揺らぎ値に伝播率を乗算した値を、格子線上の格子点(上方の格子点)に時間経過に伴い徐々に伝播する処理を行って、格子線上の各格子点の揺らぎ値を求める。この場合、揺らぎ値に伝播率を乗算した値に更に加えて、前回のフレーム(例えば1フレーム前)での格子点の揺らぎ値に減衰率を乗算して得られた値や、ランダム値などに基づいて、現在のフレームでの格子点の揺らぎ値を求めてもよい。
【0040】
なお揺らぎ値演算部118は、格子の格子点(制御点、頂点)に対して揺らぎ値の初期値をプリセットする。具体的には、1つの揺らぎ波形の異なるサンプリング点(1周期分のサンプリング点)から得た揺らぎ値を、格子線上の格子点に対して初期値としてプリセットする。そしてその後に格子点の揺らぎ値を時間経過に伴い変化させる処理(フレーム処理)を行う。
【0041】
描画部120は、処理部100で行われる種々の処理(ゲーム処理)の結果に基づいて描画処理を行い、これにより画像を生成し、表示部190に出力する。いわゆる3次元ゲーム画像を生成する場合には、まず、座標変換(ワールド座標変換、カメラ座標変換)、クリッピング処理、或いは透視変換等のジオメトリ処理が行われ、その処理結果に基づいて、描画データ(プリミティブ面の頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)が作成される。そして、この描画データ(プリミティブ面データ)に基づいて、透視変換後(ジオメトリ処理後)のオブジェクト(1又は複数プリミティブ面)を描画バッファ172(フレームバッファ、ワークバッファなどのピクセル単位で画像情報を記憶できるバッファ。VRAM)に描画する。これにより、オブジェクト空間内において仮想カメラ(所与の視点)から見える画像が生成される。
【0042】
そして本実施形態では描画部120が、各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンを描画する。或いは、各格子点のテクスチャ座標と、各格子点のポリゴン頂点座標に揺らぎ値を加算することで得られたポリゴン頂点座標とに基づいて、元画像をテクスチャとしてポリゴンを描画する。このようにすることで元画像の揺らぎ画像を生成できる。
【0043】
描画部120は、テクスチャマッピング部122、隠面消去部126を含む。なおこれらの一部を省略する構成にしてもよい。
【0044】
テクスチャマッピング部122は、テクスチャ記憶部174に記憶されるテクスチャ(テクセル値)をオブジェクトにマッピングするための処理を行う。具体的には、オブジェクト(プリミティブ面)の頂点に設定(付与)されるテクスチャ座標等を用いてテクスチャ記憶部174からテクスチャ(色、α値などの表面プロパティ)を読み出す。そして、2次元の画像又はパターンであるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理やバイリニア補間(テクセル補間)などを行う。
【0045】
そして本実施形態ではテクスチャマッピング部122が、各格子点のテクスチャ座標に揺らぎ値を加算することで得られたテクスチャ座標に基づいて、テクスチャとして設定された元画像を、ポリゴンにマッピングする。このようにして、陽炎等が表現されたリアルな画像を生成できるようになる。
【0046】
隠面消去部126は、各ピクセルのZ値(奥行き情報)が格納されるZバッファ176(奥行きバッファ)を用いて、Zバッファ法(奥行き比較法、Zテスト)により隠面消去処理を行う。即ちオブジェクトのプリミティブ面の各ピクセルを描画する際に、Zバッファ176に格納されるZ値を参照する。そして参照されたZバッファ176のZ値と、プリミティブ面の描画対象ピクセルでのZ値とを比較し、描画対象ピクセルでのZ値が、仮想カメラから見て手前側となるZ値(例えば小さなZ値)である場合には、そのピクセルの描画処理を行うと共にZバッファ176のZ値を新たなZ値に更新する。
【0047】
音生成部130は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
【0048】
なお、本実施形態の画像生成システムは、1人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、1つの端末を用いて生成してもよいし、ネットワーク(伝送ライン、通信回線)などで接続された複数の端末(ゲーム機、携帯電話)を用いて分散処理により生成してもよい。
【0049】
2.本実施形態の手法
次に本実施形態の手法について図面を用いて説明する。
【0050】
2.1 揺らぎ値の加算による陽炎の表現
本実施形態のような画像生成システムにおいては、プレーヤの仮想現実感を高めるために、いわゆる陽炎などについてもリアルに表現できることが望ましい。ここで陽炎とは、砂浜や野原に見える色のないゆらめきであり、大気や地面が熱せられて空気密度が不均一になり、それを通過する光が不規則に屈折するために見られる現象である。この陽炎には、サバンナのように遠距離において蜃気楼を伴ってゆっくりと揺らいで見えるものや、ジェット機の噴射口のように細かく速く揺らいで見えるものなどがある。前者の陽炎は空気密度の差が小さいものであり、後者の陽炎は空気密度の差が大きいものである。
【0051】
例えば建物が燃えているような火事のシーンにおける空気感を表現するためには、前者の陽炎のようにゆっくりと揺らいで見える陽炎を表現することが望ましい。このようなシーンでは、シーン内での空気密度は比較的均一であると推測されるからである。そして陽炎は「熱せられた空気の上昇」であるから、シーン内において下から上へ揺らぎが伝播しているように見える画像を生成することが望ましい。また、熱せられた空気は周りの空気に熱を奪われるため、結果として揺らぎは減衰するものと考えられる。また、揺らぎの方向は曖昧であり、上下の揺らぎ以外にも、風や対流などにより左右の揺らぎもあり得る。
【0052】
以上のような陽炎の揺らぎをリアルに表現するために、本実施形態では、フレームバッファ(広義には描画領域)に描画された画像を分割し、その分割された要素(画像)を歪めることで、陽炎の揺らぎを表現している。例えばフレームバッファからワークバッファに元画像をコピーし、このワークバッファ上の元画像をテクスチャ画像としてマッピングする際に、ポリゴンのテクスチャ座標U、V(又はポリゴンの頂点座標X、Y)を変動させる。また陽炎は下から上に波が伝播して見えるものであるため、揺らぎが下から上に伝播すると共に徐々に減衰して見える画像を生成する。具体的には本実施形態では以下のような手法を採用している。
【0053】
まず、図2のA1に示すようにフレームバッファへの描画処理を行って元画像を生成する。具体的には例えば、オブジェクトに対してジオメトリ処理(透視変換等の座標変換処理)を施して、ジオメトリ処理後のオブジェクト(ポリゴン)をフレームバッファ(広義には描画領域)に描画することで、元画像を生成する。そして図2のA2に示すように、この生成された元画像をワークバッファ(広義には描画領域)にコピーしておく。
【0054】
また図2のA3に示すように、元画像(表示画面、フレームバッファ)を縦横に分割するメッシュの縦横の線の交点を格子点(制御点)とする格子を設定(想定)する。そしてポリゴン頂点座標とテクスチャ座標を各格子点に設定(付与)する。
【0055】
例えば格子点P1、P2、P3、P4の座標が(XO1、YO1)、(XO2、YO2)、(XO3、YO3)、(XO4、YO4)であり、P1〜P4に設定される頂点座標が(X1、Y1)、(X2、Y2)、(X3、Y3)、(X4、Y4)であり、P1〜P4に設定されるテクスチャ座標(頂点テクスチャ座標)が(U1、V1)、(U2、V2)、(U3、V3)、(U4、V4)であったとする。すると、例えばX1=U1=XO1、Y1=V1=YO1、X2=U2=XO2、Y2=V2=YO2、X3=U3=XO3、Y3=V3=YO3、X4=U4=XO4、Y4=V4=YO4の関係が成り立つように、ポリゴン頂点座標とテクスチャ座標を各格子点に設定する。
【0056】
なおPL1は、格子点P1、P2、P3、P4を頂点とするポリゴンである。そしてPL1、PL2、PL3・・・・は、隣り合う4つの格子点(頂点)により区画される各格子区画に相当するポリゴンである。例えばPL1は、隣り合う4つの格子点(頂点)P1、P2、P3、P4により区画される格子区画に相当するポリゴンである。ここで、ポリゴンは図2のA3のような四角形ポリゴンであってもよいし、3角形ポリゴンであってもよい。また本実施形態のポリゴンはいわゆるスプライトも含むものである。
【0057】
本実施形態では、時間経過に伴い変化する揺らぎ値が各格子点について演算される。そして、演算された揺らぎ値が格子点のテクスチャ座標に加算される。そして図4のA4に示すように、各格子点に設定されたポリゴン頂点座標と、揺らぎ値が加算されたテクスチャ座標とに基づいて、元画像(ワークバッファにコピーされた元画像)をテクスチャとしてフレームバッファにポリゴン(PL1、PL2・・)を描画する。これにより、元画像の揺らぎ画像が生成され、リアルな陽炎の表現が可能になる。
【0058】
例えば図3(A)に示すように、テクスチャ座標に揺らぎ値を加算せずに、各格子点のポリゴン頂点座標(X1、Y1)〜(X4、Y4)と、各格子点のテクスチャ座標(U1、V1)〜(U4、V4)とに基づいて、元画像をテクスチャとしてポリゴンを描画したとする。すると、矩形のテクスチャ領域TRの画像がポリゴンPLにマッピングされるため、揺らぎの無い画像が生成されるようになる。
【0059】
一方、図3(B)に示すように、各格子点のポリゴン頂点座標(X1、Y1)〜(X4、Y4)と、各格子点のテクスチャ座標(U1、V1)〜(U4、V4)に揺らぎ値(ΔU1、ΔV1)〜(ΔU4、ΔV4)を加算することで得られたテクスチャ座標(U1+ΔU1、V1+ΔV1)〜(U4+ΔU4、V4+ΔV4)とに基づいて、元画像をテクスチャとしてポリゴンを描画したとする。すると、非矩形のテクスチャ領域TRの画像がポリゴンPLにマッピングされるため、陽炎のように歪んだ画像(揺らぎを持った画像)に元画像を変形させることできる。しかも、揺らぎ値(ΔU1、ΔV1)〜(ΔU4、ΔV4)を時間経過に伴い変化させることで、元画像の各部分が時間経過に伴いゆらゆらと揺れる画像を生成できるようになる。
【0060】
なお、図3(A)(B)では、各格子点のテクスチャ座標(U1、V1)〜(U4、V4)に対して揺らぎ値(ΔU1、ΔV1)〜(ΔU4、ΔV4)を加算しているが、各格子点のポリゴン頂点座標(X1、Y1)〜(X4、Y4)に対して揺らぎ値(ΔX1、ΔY1)〜(ΔX4、ΔY4)を加算するようにしてもよい。このようにすることによっても、陽炎のように歪んだ画像に元画像を変形させることできる。そして、揺らぎ値(ΔX1、ΔY1)〜(ΔX4、ΔY4)を時間経過に伴い変化させることで、元画像の各部分が時間経過に伴いゆらゆらと揺れる画像を生成できるようになる。
【0061】
また、揺らぎ値の加算はテクスチャ座標(ポリゴン頂点座標)の一方のみに行ってもよいし、両方に行ってもよい。また揺らぎ値は、正の値と負の値の両方の値をとることができる。例えば正の値の揺らぎ値を加算すれば、テクスチャ座標(ポリゴン頂点座標)を正の方向に変化させることができ、負の値の揺らぎ値を加算すれば、テクスチャ座標(ポリゴン頂点座標)を負の方向に変化させることができる。またテクスチャ座標(ポリゴン頂点座標)の値が許容範囲外の値にならないようにするためにはクランプ処理を行えばよい。即ち、揺らぎ値の加算により得られた値がU、V空間(X、Y空間)の下限値或いは上限値を超えた場合には、下限値或いは上限値にクランプする処理を行う。このようにすることで、最終的に元画像をテクスチャマッピングした時に、元画像が存在しない場所のテクセル値等が参照されて表示化けが生じてしまうのを防止できる。
【0062】
以上のように本実施形態では、揺らぎ値を加算して得られたテクスチャ座標やポリゴン頂点座標に基づいて、元画像をテクスチャとしてポリゴンを描画することで、あたかも陽炎が揺らいで見える画像の生成に成功している。しかも本実施形態では、このような陽炎画像の生成を、揺らぎ値の加算処理を行うだけで実現できるため、少ない処理でリアルな画像を生成できる。
【0063】
なお、以下では、テクスチャ座標に揺らぎ値を加算する場合を例にとり、本実施形態の各種手法について説明するが、ポリゴン頂点座標に揺らぎ値を加算する場合にも、以下の本実施形態の各種手法は適用できる。
【0064】
2.2 揺らぎ値の伝播
揺らぎ値を出力する揺らぎ波形(揺らぎ波形テーブル、揺らぎ波形関数)を、全ての格子点の個数分だけ用意し、これらの揺らぎ波形を用いて、全ての格子点の揺らぎ値を設定しようとすると、揺らぎ波形のデータ量が多くなってしまい、メモリの使用記憶容量を圧迫する。また陽炎は「熱せられた空気の上昇」であるため、生成される画像においても、陽炎の揺らぎが下から上に伝播するような画像を生成できることが望ましい。そこで本実施形態では、以下に説明するような手法を採用している。
【0065】
即ち本実施形態では、図4のB1、B2のような揺らぎ波形(揺らぎ波形テーブル、揺らぎ波形関数)に基づき得られた揺らぎ値を、B3に示すように格子の辺SD1(下辺)上の格子点に対して設定する。そして辺SD1上の格子点に設定された揺らぎ値を、辺SD1から対向する辺SD3に向かって、格子線上の格子点に対して時間経過に伴い伝播する処理を行って、格子の各格子点の揺らぎ値を求める。
【0066】
例えば揺らぎ波形により得られる揺らぎ値を、辺SD1上の格子点L1に設定する。そして次のフレームにおいては、格子点L1に設定された揺らぎ値を格子点L2に伝播させる。この伝播された揺らぎ値を、更に次のフレームでは格子点L3に伝播させ、その更に次のフレームでは格子点L4に伝播させる。このように、格子点L1に対して設定された揺らぎ値を、格子線上の格子点L2〜L10に対して徐々に伝播させて行く。このようにすれば、あたかも陽炎の揺らぎが画面の下辺SD1から上辺SD3に徐々に伝播して行く様子を表現でき、リアルな画像を生成できる。また、全ての格子点の個数分の揺らぎ波形を用意する必要が無いため、揺らぎ波形のデータ量等を軽減できる。しかも、辺SD1上の格子点に対して異なった値の揺らぎ値を設定するようにすれば、ランダムに見える揺らぎを表現でき、画像のリアル度を増すことができる。
【0067】
なお図4において辺SD1上の格子点への揺らぎ値の設定は、辺SD1上の格子点の個数分の複数の揺らぎ波形により設定してもよいし、1つの揺らぎ波形により設定してもよい。1つの揺らぎ波形により設定する場合には、1つの揺らぎ波形の異なるサンプリング点から得た揺らぎ値を、辺SD1上の各格子点の揺らぎ値として設定すればよい。
【0068】
また図4では、格子の下辺SD1の格子点に対して揺らぎ波形による揺らぎ値を設定しているが、他の辺(SD2、SD3、或いはSD4)の格子点に対して揺らぎ波形による揺らぎ値を設定してもよい。例えば、左辺SD2の格子点に対して揺らぎ値を設定して、伝播方向をSD2からSD4へと向かう方向に設定したり、右辺SD4の格子点に対して揺らぎ値を設定して、伝播方向をSD4からSD2へと向かう方向に設定すれば、陽炎が風により左右に揺らぐ様子を表現できる。また図4のB1、B2では、揺らぎ値としてΔUとΔVの両方を設定しているが、いずれか一方のみを設定するようにしてもよい。
【0069】
2.3 揺らぎ値を求める処理の具体例
揺らぎ値を求める処理は具体的には以下のような手法で実現できる。
【0070】
例えば図5では、辺SD1から辺SD3に向かって格子線上に格子点L1〜LJ(第1〜第Jの格子点)が設定されている。この場合には、格子点LJ−1の前回のフレーム(例えば1フレーム前)での揺らぎ値ΔUJ−1n-1に伝播率K1を乗算して得られた値K1×ΔUJ−1n-1に基づいて、辺SD3上にある格子点LJの現在のフレームでの揺らぎ値ΔUJnを求める。また格子点LJ−2の前回のフレームでの揺らぎ値ΔUJ−2n-1に伝播率K1を乗算して得られた値K1×ΔUJ−2n-1に基づいて、格子点LJ−1の現在のフレームでの揺らぎ値ΔUJ−1nを求める。このようにして格子点の揺らぎ値を順次求めて行き、最後に、格子点L1の前回のフレームでの揺らぎ値ΔU1n-1に伝播率K1を乗算して得られた値K1×ΔU1n-1に基づいて、格子点L2の現在のフレームでの揺らぎ値ΔU2nを求める。なお格子点U1の現在のフレームでの揺らぎ値には、揺らぎ波形(揺らぎ波形テーブル、揺らぎ波形関数)により求められた値が設定される。
【0071】
以上のような手法で各格子点の揺らぎ値を漸化式により求めて行けば、格子点L1に設定された揺らぎ値を格子点L2〜LJに対して時間経過に伴い徐々に伝播させることが可能になり、辺SD1から辺SD3に向かって揺らぎの波が伝播して行く様子を簡素な処理でリアルに表現できる。
【0072】
なお図6では、このような揺らぎ値の伝播処理に加えて、前回のフレームでの格子点の揺らぎ値に減衰率を乗算して得られた値に基づいて現在のフレームでの格子点の揺らぎ値を求める処理を行っている。
【0073】
例えば、格子点LJ−1の前回のフレームでの揺らぎ値ΔUJ−1n-1に伝播率K1を乗算して得られた値K1×ΔUJ−1n-1と、格子点LJの前回のフレームでの揺らぎ値ΔUJn-1に減衰率K2を乗算して得られた値K2×ΔUJn-1とに基づいて、格子点LJの現在のフレームでの揺らぎ値ΔUJnを求める。また格子点LJ−2の前回のフレームでの揺らぎ値ΔUJ−2n-1に伝播率K1を乗算して得られた値K1×ΔUJ−2n-1と、格子点LJ−1の前回のフレームでの揺らぎ値ΔUJ−1n-1に減衰率K2を乗算して得られた値K2×ΔUJ−1n-1とに基づいて、格子点LJ−1の現在のフレームでの揺らぎ値ΔUJ−1nを求める。このようにして格子点の揺らぎ値を順次求めて行き、最後に、格子点L1の前回のフレームでの揺らぎ値ΔU1n-1に伝播率K1を乗算して得られた値K1×ΔU1n-1と、格子点L2の前回のフレームでの揺らぎ値ΔU2n-1に減衰率K2を乗算して得られた値K2×ΔU2n-1とに基づいて、格子点L2の現在のフレームでの揺らぎ値ΔU2nを求める。
【0074】
図6のように、前回のフレームでの揺らぎ値の加算処理を行うようにすれば、辺SD1から辺SD3の方に向かうにつれて、揺らぎ値が増幅して行くような揺らぎ表現を実現できる。即ち揺らぎ値が画面の上に行くにつれて増幅して行くような画像を生成でき、生成画像のバラエティ度を増すことができる。
【0075】
なお図6では、格子点の揺らぎ値を設定する際に、乱数RNDを更に加える処理を行うことで、揺らぎのランダム要素の度合いを更に高めている。また、揺らぎ値を求める処理は図5、図6で説明した処理に限定されず、種々の変形実施が可能である。例えば乱数RNDを加える処理を行わないようにしてもよい。
【0076】
2.4 初期値のプリセット
図5、図6のような手法で揺らぎ値を求める場合に、最初のフレームでは格子点L1に対してだけ、零ではない揺らぎ値が設定され、他の格子点L2〜LJの揺らぎ値は零に設定される。従って、例えば次のフレームにおいては、格子点L1からL2への揺らぎ値の伝播は行われるが、格子点L2からL3や、L3からL4や・・・・LJ−1からLJへの揺らぎ値の伝播は行われないことになる。従って、例えば格子点LJ−1からLJへの揺らぎ値の伝播が行われるまでに時間を要してしまい、リアルな揺らぎ画像が生成されるまでに所定時間の経過が必要になってしまうという課題がある。
【0077】
そこで本実施形態では、格子の格子点に対して揺らぎ値の初期値をプリセットし、その後に格子点の揺らぎ値を時間経過に伴い変化させる処理を行うようにしている。
【0078】
より具体的には図7に示すように、1つの揺らぎ波形の異なるサンプリング点から得た揺らぎ値(サンプリング点の揺らぎ値に所与の係数を乗算した値等)を、格子線上にある各格子点に対して初期値としてプリセットする。そしてその後に格子点の揺らぎ値を時間経過に伴い変化させる。例えば図5、図6の格子点LJ、LJ−1、LJ−2に対しては、図7のC1に示すような揺らぎ波形の各サンプリング点(時間軸方向に並ぶサンプリング点)から得られた揺らぎ値を、初期値としてプリセットする。同様に格子点L3、L2、L1に対しては、図7のC2に示すような揺らぎ波形の各サンプリング点から得られた揺らぎ値を、初期値としてプリセットする。例えば伝播率、減衰率をK1、K2(K1<1.0、K2<1.0)とし、格子線上の格子点の個数をn個とし、上からi番目のサンプリング点での揺らぎ波形の揺らぎ値をq(i)とする。この場合には、上からi番目のサンプリング点の初期値は、例えばp(i)=(K1+K2)(n-1)×q(i)に設定できる。
【0079】
以上のように初期値をプリセットすれば、最初のフレームにおいても、格子点L2〜LJに対して零ではない揺らぎ値が予め設定されるようになる。従って、例えば格子点LJ−1からLJへの揺らぎ値の伝播処理や、格子点LJ−2からLJ−1への揺らぎ値の伝播処理も直ぐに行われるようになり、リアルな揺らぎ画像を早い段階で生成することが可能になる。
【0080】
2.5 格子区画の設定
格子の分割数を多くして格子区画を小さくすれば、揺らぎ値を滑らかに伝播させることが可能になり、生成画像の画質を向上できる。しかしながら、処理の負荷が大きくなると共に制御が複雑化してしまうという課題がある。この点、例えば図4のように辺SD1上の格子点に揺らぎ値を設定して伝播させる手法においては、SD1に沿った方向での分割数をそれほど多くしなくても、テクスチャマッピングのバイリニア補間が行われるため、画質はそれほど低下しない。即ち図4の格子点L1のテクスチャ座標が左右方向にずれても、格子点L1のテクセル値はバイリニア補間により平均化されて求められるため、分割数が少なくても画像のチラツキ等は生じにくい。しかしながら、辺SD2に沿った方向での分割数が少ないと、上下に隣り合う格子点間ではバイリニアによる補間処理の効果を期待できないため、揺らぎ画像のチラツキ等が発生し易くなってしまう。
【0081】
そこで本実施形態では図8に示すように、辺SD1に沿った方向での分割数Nよりも辺SD2に沿った方向での分割数Mを多くしている。例えば図8では辺SD1に沿った方向での分割数はN=10(格子線数は11本)になっており、辺SD2に沿った方向での分割数はM=56(格子線数は57本)になっている。そして本実施形態では、格子の辺SD1に沿った方向(水平方向)での格子区画(LC1〜LC4)の長さよりも、辺SD2に沿った方向(垂直方向)での格子区画の長さの方が短くなるように格子を設定して、複数のポリゴンを生成している。
【0082】
図8のようにSD1に沿った方向での分割数を少なくして、この方向での格子区画の長さ(幅)を長くしても、バイリニア補間による平均化処理により、画質はそれほど低下しない。またこの方向での分割数を少なくすることで、辺SD1上の格子点の個数を少なくできる。これにより、これらの格子点に揺らぎ値を与える図4の処理の高速化、制御の簡素化を図ることができ、揺らぎ値の伝播処理の負荷を少なくできる。一方、図8のように辺SD2に沿った方向での分割数を多くして、この方向での格子区画の長さ(高さ)を短くすれば、揺らぎ値が滑らかに伝播されるようになり、揺らぎ画像のチラツキ等の発生を効果的に防止でき、生成画像の高画質化を図れる。
【0083】
なお、図8のように格子を設定した場合においても、例えば辺SD2から辺SD4へと向かう方向を伝播方向として揺らぎ値の伝播処理を行ったり、辺SD4から辺SD2へと向かう方向を伝播方向として揺らぎ値の伝播処理を行ってもよい。
【0084】
さて、描画領域(フレームバッファ、ワークバッファ)が確保されるメモリ(シンクロナスDRAM等)では、ページサイズ単位でデータの読み出し・書き込みを行うことで、データの読み出し・書き込み処理の高速化を図れる。
【0085】
そこで本実施形態では図8に示すように、描画領域が確保されるメモリのページサイズ分の大きさの領域(D1に示す領域)に、辺SD1から対向する辺SD3へ向かう方向に、例えば4個(広義にはL個)の格子区画LC1、LC2、LC3、LC4が並ぶように格子を設定している。このようにすれば、描画領域のデータがメモリのページを跨いで読み出されたり、書き込まれたりする事態を防止でき、メモリからのデータの読み出し・書き込み処理の高速化を図れる。また図8のように縦方向に格子区画LC1〜LC4が並ぶように格子を設定すれば、縦方向での分割数を多くすることが容易になり、揺らぎ画像のチラツキ等の発生を防止できる。
【0086】
なお格子の横方向の分割数や、縦方向での分割数や、格子区画の幅や高さ等は図8に示すものに限定されず、種々の変形実施が可能である。
【0087】
2.6 揺らぎ値等の具体例
図9に、図4の辺SD1上の格子点に設定する揺らぎ値(ΔU)の揺らぎ波形の具体例を示す。図9に示すように本実施形態では、辺SD1上の格子点に対して、フレーム経過(時間経過)に伴い変化する揺らぎ値を与えている。なお揺らぎ波形のデータ量の軽減化等を図るためには、1つの揺らぎ波形の異なるサンプリング点から得た揺らぎ値を、辺SD1上の各格子点に対して設定することが望ましい。
【0088】
図10は、例えば格子の左から6番目の格子線上の格子点の横方向での揺らぎ値(ΔU)が、時間経過に伴い変化する様子を示した図である。例えば図10のE1は、上辺SD3に近い格子点の揺らぎ値を示しており、E2は、下辺SD1に近い格子点の揺らぎ値を示している。また図11は、図10のフレーム1、2、3、4、5の揺らぎ値の波形を重ねて示した図である。図10、図11に示すように本実施形態では、辺SD1上の格子点に与えられた揺らぎ値が、フレーム経過と共に上方の格子点に徐々に伝播されている。
【0089】
図12は、本実施形態の陽炎画像生成手法により生成されたゲーム画像の一部を拡大して示した図である。図12に示すように本実施形態では、フレーム経過に伴い下から上に画像の揺らぎが伝播されており、リアルな陽炎画像の生成に成功している。
【0090】
3.本実施形態の処理
次に、本実施形態の詳細な処理例について図13、図14のフローチャートを用いて説明する。
【0091】
図13は初期設定処理のフローチャートである。まず、VRAMにワークバッファを確保する(ステップS1)。そして伝播率(K1)、減衰率(K2)などのパラメータの初期化を行う(ステップS2)。
【0092】
次に図9で説明した揺らぎ波形のテーブル(配列)をセットする(ステップS3)。即ち揺らぎ波形テーブルをRAMにロードする。そして図7で説明したように各格子点(制御点)に対して揺らぎ値(ΔU、ΔV)の初期値をプリセットする(ステップS4)。なお、テクスチャ座標Uに対してだけ揺らぎ値を加算する場合には、揺らぎ値ΔUの初期値だけをプリセットすればよい。
【0093】
図14はフレーム毎に行われる処理のフローチャートである。まずフレーム(1/60秒)更新のタイミングか否かを判断する(ステップS11)。そしてフレーム更新である場合には、ジオメトリ処理後(透視変換後)のオブジェクト(ポリゴン)をフレームバッファに描画して、図2のA1に示すような元画像を生成する(ステップS12)。
【0094】
次に図5、図6等で説明した手法により、揺らぎ値の伝播処理を行う(ステップS13)。そして図2のA2で説明したように、フレームバッファの元画像をワークバッファにコピーする(ステップS14)。そして、格子点のテクスチャ座標(U、V)に揺らぎ値(ΔU、ΔV)を加算する処理を行う(ステップS15)。なおテクスチャ座標Uに対してだけ揺らぎ値を加算する場合には、UとΔUの加算処理だけを行えばよい。
【0095】
次に、図2のA4で説明したように、ポリゴン頂点座標と、加算により得られたテクスチャ座標(U+ΔU、V+ΔV)を用いて、ワークバッファの元画像をテクスチャとしてポリゴンを描画する(ステップS16)。このようにすることで図12で説明したようなリアルな陽炎画像を生成できる。
【0096】
なお図14の処理は、画面(描画領域)を分割した分割領域毎に行ってもよい。例えば図8において、画面を分割した上側の領域(D2)について図14の処理を行い、次に画面を分割した下側の領域(D3)について図14の処理を行うようにする。このようにすれば、メモリに確保されるワークバッファの領域サイズを小さくでき、メモリの使用記憶容量を節約できる。
【0097】
なおこのように画面を分割して処理を行う場合には、隣り合う分割領域間にオーバーラップ領域が生じるように分割することが望ましい。例えば図8において、8ページライン分(8×4=32格子線分)のD2に示す上側領域と、8ページライン分(8×4=32格子線分)のD3に示す下側領域とに分割し、真ん中の2ページライン分(8格子線分)のD4に示す領域についてはオーバーラップさせる。このようにすれば、D2に示す上側領域について図14の処理を行う際に、D4に示すオーバーラップ領域の揺らぎ値を使用できるようになる。またD3に示す下側領域について図14の処理を行う際に、D4に示すオーバーラップ領域の揺らぎ値を使用できるようになる。これにより、適正な揺らぎ値の伝播処理を実現できる。
【0098】
4.ハードウェア構成
図15に本実施形態を実現できるハードウェア構成の例を示す。メインプロセッサ900は、CD982(情報記憶媒体)に格納されたプログラム、通信インターフェース990を介してダウンロードされたプログラム、或いはROM950に格納されたプログラムなどに基づき動作し、ゲーム処理、画像処理、音処理などを実行する。コプロセッサ902は、メインプロセッサ900の処理を補助するものであり、マトリクス演算(ベクトル演算)を高速に実行する。例えばオブジェクトを移動させたり動作(モーション)させる物理シミュレーションに、マトリクス演算処理が必要な場合には、メインプロセッサ900上で動作するプログラムが、その処理をコプロセッサ902に指示(依頼)する。
【0099】
ジオメトリプロセッサ904は、メインプロセッサ900上で動作するプログラムからの指示に基づいて、座標変換、透視変換、光源計算、曲面生成などのジオメトリ処理を行うものであり、マトリクス演算を高速に実行する。データ伸張プロセッサ906は、圧縮された画像データや音データのデコード処理を行ったり、メインプロセッサ900のデコード処理をアクセレートする。これにより、オープニング画面やゲーム画面において、MPEG方式等で圧縮された動画像を表示できる。
【0100】
描画プロセッサ910は、ポリゴンや曲面などのプリミティブ面で構成されるオブジェクトの描画(レンダリング)処理を実行する。オブジェクトの描画の際には、メインプロセッサ900は、DMAコントローラ970を利用して、描画データを描画プロセッサ910に渡すと共に、必要であればテクスチャ記憶部924にテクスチャを転送する。すると描画プロセッサ910は、描画データやテクスチャに基づいて、Zバッファなどを利用した隠面消去を行いながら、オブジェクトをフレームバッファ922に描画する。また描画プロセッサ910は、αブレンディング(半透明処理)、デプスキューイング、ミップマッピング、フォグ処理、バイリニア・フィルタリング、トライリニア・フィルタリング、アンチエリアシング、シェーディング処理なども行う。1フレーム分の画像がフレームバッファ922に書き込まれるとその画像はディスプレイ912に表示される。
【0101】
サウンドプロセッサ930は、多チャンネルのADPCM音源などを内蔵し、BGM、効果音、音声などのゲーム音を生成し、スピーカ932を介して出力する。ゲームコントローラ942やメモリカード944からのデータはシリアルインターフェース940を介して入力される。
【0102】
ROM950にはシステムプログラムなどが格納される。業務用ゲームシステムの場合にはROM950が情報記憶媒体として機能し、ROM950に各種プログラムが格納される。なおROM950の代わりにハードディスクを利用してもよい。RAM960は各種プロセッサの作業領域となる。DMAコントローラ970は、プロセッサ、メモリ間でのDMA転送を制御する。CDドライブ980は、プログラム、画像データ、或いは音データなどが格納されるCD982にアクセスする。通信インターフェース990はネットワーク(通信回線、高速シリアルバス)を介して外部との間でデータ転送を行う。
【0103】
なお本実施形態の各部(各手段)の処理は、その全てをハードウェアのみにより実現してもよいし、情報記憶媒体に格納されるプログラムや通信インターフェースを介して配信されるプログラムにより実現してもよい。或いは、ハードウェアとプログラムの両方により実現してもよい。
【0104】
そして本実施形態の各部の処理をハードウェアとプログラムの両方により実現する場合には、情報記憶媒体には、ハードウェア(コンピュータ)を本実施形態の各部として機能させるためのプログラムが格納される。より具体的には、上記プログラムが、ハードウェアである各プロセッサ902、904、906、910、930に処理を指示すると共に、必要であればデータを渡す。そして、各プロセッサ902、904、906、910、930は、その指示と渡されたデータとに基づいて本発明の各部の処理を実現する。
【0105】
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語(描画領域、L個等)として引用された用語(フレームバッファ・ワークバッファ、4個等)は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。
【0106】
また、揺らぎ値の設定手法や、揺らぎ値を時間経過に伴い変化させる手法も、本実施形態で説明したものに限定されず、これらと均等な手法も本発明の範囲に含まれる。例えば図4〜図6とは異なる手法で揺らぎ値を設定して時間経過に伴い変化させてもよい。
【0107】
また本発明は種々のゲームに適用できる。また本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、マルチメディア端末、ゲーム画像を生成するシステムボード、携帯電話等の種々の画像生成システムに適用できる。
【図面の簡単な説明】
【0108】
【図1】本実施形態の画像生成システムの機能ブロック図の例。
【図2】本実施形態の手法の説明図。
【図3】図3(A)(B)は揺らぎ値の加算処理の説明図。
【図4】揺らぎ値の伝播処理の説明図。
【図5】揺らぎ値を求める処理の具体例。
【図6】揺らぎ値を求める処理の具体例。
【図7】揺らぎ値の初期値をプリセットする手法の説明図。
【図8】格子区画の設定手法の説明図。
【図9】揺らぎ波形の具体例。
【図10】揺らぎ値が伝播する様子を示す図。
【図11】揺らぎ値が伝播する様子を示す図。
【図12】本実施形態で生成されるゲーム画像の一部を拡大して示した図。
【図13】本実施形態の具体的な処理のフローチャート。
【図14】本実施形態の具体的な処理のフローチャート。
【図15】ハードウェア構成例。
【符号の説明】
【0109】
SD1〜SD4 第1の辺〜第4の辺、PL、PL1〜PL3 ポリゴン、
TR、TR1〜TR3 テクスチャ領域、P1〜P4 格子点、
100 処理部、110 オブジェクト空間設定部、112 移動・動作処理部、
114 仮想カメラ制御部、116 座標設定部、118 揺らぎ値演算部、
120 描画部、122 テクスチャマッピング部、126 陰面消去部、
130 音生成部、160 操作部、170 記憶部、
172 描画バッファ、174 テクスチャ記憶部、176 Zバッファ、
180 情報記憶媒体、190 表示部、
192 音出力部、194 携帯型情報記憶装置、196 通信部

【特許請求の範囲】
【請求項1】
画像を生成するためのプログラムであって、
元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、
時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、
各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に前記揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部として、
コンピュータを機能させることを特徴とするプログラム。
【請求項2】
画像を生成するためのプログラムであって、
元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、
時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、
各格子点のテクスチャ座標と、各格子点のポリゴン頂点座標に前記揺らぎ値を加算することで得られたポリゴン頂点座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部として、
コンピュータを機能させることを特徴とするプログラム。
【請求項3】
請求項1又は2において、
前記揺らぎ値演算部が、
揺らぎ波形に基づき得られた揺らぎ値を格子の第1の辺上の格子点に対して設定し、前記第1の辺上の格子点に設定された揺らぎ値を、前記第1の辺から対向する第3の辺に向かって、格子線上の格子点に対して時間経過に伴い伝播する処理を行って、格子の各格子点の揺らぎ値を求めることを特徴とするプログラム。
【請求項4】
請求項3において、
前記第1の辺から前記第3の辺に向かって格子線上に第1〜第Jの格子点が設定されている場合において、
前記揺らぎ値演算部が、
第(J−1)の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、前記第3の辺上にある第Jの格子点の現在のフレームでの揺らぎ値を求め、第(J−2)の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、第(J−1)の格子点の現在のフレームでの揺らぎ値を求め、・・・・・・・前記第1の辺上にある第1の格子点の前回のフレームでの揺らぎ値に伝播率を乗算して得られた値に基づいて、第2の格子点の現在のフレームでの揺らぎ値を求めることを特徴とするプログラム。
【請求項5】
請求項3又は4において、
前記揺らぎ値演算部が、
前回のフレームでの格子点の揺らぎ値に減衰率を乗算して得られた値に基づいて、現在のフレームでの格子点の揺らぎ値を求めることを特徴とするプログラム。
【請求項6】
請求項3乃至5のいずれかにおいて、
前記揺らぎ値演算部が、
1つの揺らぎ波形の異なるサンプリング点から得た揺らぎ値を、前記格子線上の各格子点に対して初期値としてプリセットし、その後に格子点の揺らぎ値を時間経過に伴い変化させる処理を行うことを特徴とするプログラム。
【請求項7】
請求項1乃至6のいずれかにおいて、
前記座標設定部が、
格子の第1の辺に沿った方向での格子区画の長さよりも、前記第1の辺に直交する第2の辺に沿った方向での格子区画の長さの方が短くなるように分割された格子を設定することを特徴とするプログラム。
【請求項8】
請求項7において、
前記座標設定部が、
元画像の描画領域が確保されるメモリのページサイズ分の大きさの領域に、前記第1の辺から対向する第3の辺へと向かう方向にL個(Lは2以上の整数)の格子区画が並ぶように格子を設定することを特徴とするプログラム。
【請求項9】
請求項1乃至8のいずれかにおいて、
前記揺らぎ値演算部が、
格子の格子点に対して揺らぎ値の初期値をプリセットし、その後に格子点の揺らぎ値を時間経過に伴い変化させる処理を行うことを特徴とするプログラム。
【請求項10】
コンピュータ読み取り可能な情報記憶媒体であって、請求項1乃至9のいずれかのプログラムを記憶したことを特徴とする情報記憶媒体。
【請求項11】
画像を生成する画像生成システムであって、
元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、
時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、
各格子点のポリゴン頂点座標と、各格子点のテクスチャ座標に前記揺らぎ値を加算することで得られたテクスチャ座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部と、
を含むことを特徴とする画像生成システム。
【請求項12】
画像を生成する画像生成システムであって、
元画像を縦横に分割するメッシュの縦横の線の交点を格子点とする格子を設定し、ポリゴン頂点座標とテクスチャ座標を各格子点に対して設定する座標設定部と、
時間経過に伴い変化する各格子点の揺らぎ値を演算する揺らぎ値演算部と、
各格子点のテクスチャ座標と、各格子点のポリゴン頂点座標に前記揺らぎ値を加算することで得られたポリゴン頂点座標とに基づいて、元画像をテクスチャとしてポリゴンを描画して、元画像の揺らぎ画像を生成する描画部と、
を含むことを特徴とする画像生成システム。
【請求項13】
請求項11又は12において、
前記揺らぎ値演算部が、
揺らぎ波形に基づき得られた揺らぎ値を格子の第1の辺上の格子点に対して設定し、前記第1の辺上の格子点に設定された揺らぎ値を、前記第1の辺から対向する第3の辺に向かって、格子線上の格子点に対して時間経過に伴い伝播する処理を行って、格子の各格子点の揺らぎ値を求めることを特徴とする画像生成システム。

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

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2006−11538(P2006−11538A)
【公開日】平成18年1月12日(2006.1.12)
【国際特許分類】
【出願番号】特願2004−183802(P2004−183802)
【出願日】平成16年6月22日(2004.6.22)
【出願人】(000134855)株式会社ナムコ (1,157)
【Fターム(参考)】