本実施形態は、画像を生成するための画像生成システムであって、第1のオブジェクトの形状データを含む第1のオブジェクトデータと、前記第1のオブジェクトと同一形状又はほぼ同一形状の第2のオブジェクトの形状データを含む第2のオブジェクトデータと、前記第1のオブジェクトにマッピングされる第1のテクスチャと、前記第2のオブジェクトにマッピングされ、前記第1のテクスチャとはテクスチャパターンが異なる第2のテクスチャとに基づいて、前記第1のオブジェクトに前記第2のオブジェクトを重ねて描画する描画手段と、前記第2のオブジェクトの透明度を可変に制御する透明度制御手段とを含むことを特徴とする。また本実施形態に係る情報記憶媒体は、コンピュータにより使用可能な情報記憶媒体であって、上記手段を実行するためのプログラムを含むことを特徴とする。また本実施形態に係るプログラムは、コンピュータにより使用可能なプログラム(搬送波に具現化されるプログラムを含む)であって、上記手段を実行するための処理ルーチンを含むことを特徴とする。
本実施形態によれば、第1のテクスチャがマッピングされる第1のオブジェクトに、第2のテクスチャがマッピングされる第2のオブジェクトが重ねて描画される。そして、第2のオブジェクトの透明度が可変に制御される。従って、透明度を変化させて、第2のオブジェクトを完全な透明から半透明に段々と変化させることで、第2のテクスチャが徐々に目立って見えてくるような画像表現が可能になる。一方、透明度を変化させて、第2のオブジェクトを段々と透明に変化させることで、第2のテクスチャが徐々に目立たなくなり消えて行くというような画像表現が可能になる。従って、複数のテクスチャを順次差し替える手法に比べて、少ないテクスチャの使用記憶容量で、より多様でリアルな画像表現を実現できるようになる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記第2のテクスチャが、前記第1のオブジェクトの汚れを表現するためのテクスチャであることを特徴とする。このようにすることで、オブジェクトの汚れが段々と目立ってくるというような画像表現や、オブジェクトの汚れが段々と消えて行くというような画像表現が可能になる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記第1のオブジェクトの移動又は動作を演算する手段(又は該手段を実行するためのプログラム、処理ルーチン)を含み、前記第2のオブジェクトが、前記第1のオブジェクトに追従して移動又は動作することを特徴とする。このようにすることで、オブジェクト空間内で移動又は動作するオブジェクトの汚れ等のリアルな表現が可能になる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記第2のオブジェクトが複数のパーツオブジェクトにより構成されており、前記透明度制御手段が、前記複数のパーツオブジェクトの各々の透明度を独立に制御することを特徴とする。このようにすれば、オブジェクトの各部分で透明度の変わり具合を異ならせることが可能になり、より多様な画像表現が可能になる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記描画手段が、前記第1のオブジェクトと同一形状又はほぼ同一形状であり、前記第1のテクスチャとはテクスチャパターンが異なる第3〜第N(N≧3)のテクスチャがマッピングされる第3〜第Nのオブジェクトを、前記第2のオブジェクトと共に、前記第1のオブジェクトに重ねて描画し、前記透明度制御手段が、前記第2〜第Nのオブジェクトの各々の透明度を独立に制御することを特徴とする。このようにすれば、例えば第1のイベントが発生した場合には第2のオブジェクトの透明度を変化させ、第2のイベントが発生した場合には第3のオブジェクトの透明度を変化させるなどの処理が可能になり、画像のリアル度を増すことができる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、ジオメトリ処理後の第1のオブジェクトデータが記憶手段に保存され、前記描画手段が、保存されたジオメトリ処理後の第1のオブジェクトデータを、前記第2のオブジェクトデータとして用いることを特徴とする。
本実施形態によれば、ジオメトリ処理後の第1のオブジェクトデータが記憶手段に格納され、消されずに保存される。そして、ジオメトリ処理後の第1のオブジェクトデータと第1のテクスチャとに基づいて第1のオブジェクトが描画される。そして、その第1のオブジェクトの上に、保存されていたジオメトリ処理後の第1のオブジェクトデータと第2のテクスチャとにより描画される第2のオブジェクトが重ねて描画される。このようにすることで、第1のオブジェクトに第2のオブジェクトを重ねて描画する処理の負担の軽減化を図れる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、第1のオブジェクトのZ値及び第2のオブジェクトのZ値の少なくとも一方に対して、Zシフト値を加算又は減算するZシフト手段(又は該手段を実行するためのプログラム、処理ルーチン)を含むことを特徴とする。このようにすれば、第1のオブジェクトの手前に第2のオブジェクトが常に表示されるようにすることができる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記Zシフト手段が、ジオメトリ処理後の第1のオブジェクトのプリミティブ面のZ値及びジオメトリ処理後の第2のオブジェクトのプリミティブ面のZ値の少なくとも一方に対して、Zシフト値を加算又は減算することを特徴とする。このようにすれば、補間処理の演算誤差等に起因して陰面消去に誤りが生じる問題を、少ない処理負担で解決できるようになる。
また本実施形態に係る画像生成システム、情報記憶媒体及びプログラムは、前記第2のオブジェクトのサイズを第1のオブジェクトのサイズよりも僅かに大きくする処理を行うスケーリング手段(又は該手段を実行するためのプログラム、処理ルーチン)を含むことを特徴とする。このようにすれば、第1のオブジェクトの手前に第2のオブジェクトが常に表示されるようにすることができる。
以下、本発明の好適な実施形態について図面を用いて説明する。なお以下では、本発明を、レーシングゲームに適用した場合を例にとり説明するが、本発明はこれに限定されず、種々のゲームに適用できる。
1.構成
図1に、本実施形態のブロック図の一例を示す。なお同図において本実施形態は、少なくとも処理部100を含めばよく(或いは処理部100と記憶部170、或いは処理部100と記憶部170と情報記憶媒体180を含めばよく)、それ以外のブロック(例えば操作部160、表示部190、音出力部192、携帯型情報記憶装置194、通信部196)については、任意の構成要素とすることができる。
ここで処理部100は、システム全体の制御、システム内の各ブロックへの命令の指示、ゲーム処理、画像処理、音処理などの各種の処理を行うものであり、その機能は、各種プロセッサ(CPU、DSP等)、或いはASIC(ゲートアレイ等)などのハードウェアや、所与のプログラム(ゲームプログラム)により実現できる。
操作部160は、プレーヤが操作データを入力するためのものであり、その機能は、レバー、ボタン、筺体などのハードウェアにより実現できる。
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAMなどのハードウェアにより実現できる。
情報記憶媒体(コンピュータにより使用可能な記憶媒体)180は、プログラムやデータなどの情報を格納するものであり、その機能は、光ディスク(CD、DVD)、光磁気ディスク(MO)、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ(ROM)などのハードウェアにより実現できる。処理部100は、この情報記憶媒体180に格納される情報に基づいて本発明(本実施形態)の種々の処理を行う。即ち情報記憶媒体180には、本発明(本実施形態)の手段(特に処理部100に含まれるブロック)を実行するための情報(プログラム或いはデータ)が格納される。
なお、情報記憶媒体180に格納される情報の一部又は全部は、システムへの電源投入時等に記憶部170に転送されることになる。また情報記憶媒体180に記憶される情報は、本発明の処理を行うためのプログラムコード、画像データ、音データ、表示物の形状データ、テーブルデータ、リストデータ、本発明の処理を指示するための情報、その指示に従って処理を行うための情報等の少なくとも1つを含むものである。
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD、或いはHMD(ヘッドマウントディスプレイ)などのハードウェアにより実現できる。
音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカなどのハードウェアにより実現できる。
携帯型情報記憶装置194は、プレーヤの個人データやセーブデータなどが記憶されるものであり、この携帯型情報記憶装置194としては、メモリカードや携帯型ゲーム装置などを考えることができる。
通信部196は、外部(例えばホスト装置や他の画像生成システム)との間で通信を行うための各種の制御を行うものであり、その機能は、各種プロセッサ、或いは通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお本発明(本実施形態)の手段を実行するためのプログラム或いはデータは、ホスト装置(サーバー)が有する情報記憶媒体からネットワーク及び通信部196を介して情報記憶媒体180に配信するようにしてもよい。このようなホスト装置(サーバー)の情報記憶媒体の使用も本発明の範囲内に含まれる。
処理部100は、ゲーム処理部110、画像生成部130、音生成部150を含む。
ここでゲーム処理部110は、コイン(代価)の受け付け処理、各種モードの設定処理、ゲームの進行処理、選択画面の設定処理、オブジェクトの位置や回転角度(X、Y又はZ軸回り回転角度)を求める処理、オブジェクトを動作させる処理(モーション処理)、視点の位置(仮想カメラの位置)や視線角度(仮想カメラの回転角度)を求める処理、マップオブジェクトなどのオブジェクトをオブジェクト空間へ配置する処理、ヒットチェック処理、ゲーム結果(成果、成績)を演算する処理、複数のプレーヤが共通のゲーム空間でプレイするための処理、或いはゲームオーバー処理などの種々のゲーム処理を、操作部160からの操作データや、携帯型情報記憶装置194からの個人データ、保存データや、ゲームプログラムなどに基づいて行う。
ゲーム処理部110は移動・動作演算部114を含む。
ここで移動・動作演算部114は、車などのオブジェクトの移動情報(位置データ、回転角度データ)や動作情報(オブジェクトの各パーツの位置データ、回転角度データ)を演算するものであり、例えば、操作部160によりプレーヤが入力した操作データやゲームプログラムなどに基づいて、オブジェクトを移動させたり動作させたりする処理を行う。
より具体的には、移動・動作演算部114は、オブジェクトの位置や回転角度を例えば1フレーム(1/60秒)毎に求める処理を行う。例えば(k−1)フレームでのオブジェクトの位置をPMk-1、速度をVMk-1、加速度をAMk-1、1フレームの時間を△tとする。するとkフレームでのオブジェクトの位置PMk、速度VMkは例えば下式(1)、(2)のように求められる。
PMk=PMk-1+VMk-1×△t (1)
VMk=VMk-1+AMk-1×△t (2)
画像生成部130は、ゲーム処理部110からの指示等にしたがって各種の画像処理を行い、例えばオブジェクト空間内の所与の視点で見える画像を生成して、表示部190に出力する。また、音生成部150は、ゲーム処理部110からの指示等にしたがって各種の音処理を行い、BGM、効果音、音声などの音を生成し、音出力部192に出力する。
なお、ゲーム処理部110、画像生成部130、音生成部150の機能は、その全てをハードウェアにより実現してもよいし、その全てをプログラムにより実現してもよい。或いは、ハードウェアとプログラムの両方により実現してもよい。
画像生成部130は、ジオメトリ処理部132(3次元座標演算部)、透明度制御部134、Zシフト部136、描画部140(レンダリング部)を含む。
ここで、ジオメトリ処理部132は、座標変換、クリッピング処理、透視変換、或いは光源計算などの種々のジオメトリ処理(3次元座標演算)を行う。なお、本実施形態では、ジオメトリ処理後(透視変換後)のオブジェクトデータ(オブジェクトの頂点座標などの形状データ、或いは頂点テクスチャ座標、輝度データ等)は、記憶部170のメインメモリ172に格納されて、保存される。
透明度制御部134は、車オブジェクト(第1のオブジェクト)に重ねて描画される汚れ表現用オブジェクト(第2のオブジェクト)の透明度(半透明度、不透明度と等価)を可変に制御する処理を行う。ここで汚れ表現用オブジェクトは、車オブジェクトと同一形状(又はほぼ同一形状)であるが、車オブジェクトにマッピングされるテクスチャ(車の下地のテクスチャ)とは異なるパターンのテクスチャ(汚れテクスチャ)がマッピングされる。
なお、透明度制御部134の制御対象となる透明度は、各ポリゴン(広義にはプリミティブ面)に対して設定される透明度であることが処理負担の軽減化の観点から特に望ましいが、テクスチャに対して設定される透明度(各ピクセルのα値)であってもよい。即ち、透明度制御部134が、テクスチャ記憶部に記憶されるテクスチャの透明度(α値)を直接書き換えるようにしてもよい。
Zシフト部136は、車オブジェクトのZ値(奥行き値)及び汚れ表現用オブジェクトのZ値の少なくと一方に対して、Zシフト値を加減算(加算又は減算)する処理を行う。より具体的には、ジオメトリ処理後の車オブジェクトのポリゴン(プリミティブ面)のZ値及びジオメトリ処理後の汚れ表現用オブジェクトのポリゴンのZ値の少なくとも一方に対して、Zシフト値を加減算する。このようにすることで、車オブジェクトの手前に汚れ表現用オブジェクトが常に表示されるようにすることができる。また、Zバッファ法における陰面消去の誤りの問題も解決できる。
なお、Zシフト部136を設ける代わりに、スケーリング部138を設けるようにしてもよい。このスケーリング部138は、汚れ表現用オブジェクトのサイズを車オブジェクトのサイズよりも僅かに大きくする処理を行う。このようにすることによっても、車オブジェクトの手前に汚れ表現用オブジェクトが常に表示されるようにすることができる。
描画部140は、車オブジェクトのオブジェクトデータや、汚れ表現用オブジェクトのオブジェクトデータや、車オブジェクトにマッピングされる下地テクスチャや、汚れ表現用オブジェクトにマッピングされる汚れテクスチャなどに基づいて、車オブジェクトに汚れ表現用オブジェクトを重ねて描画する処理を行う。そして本実施形態では、透明度制御部134の制御処理により、この汚れ表現用オブジェクトの透明度が変化する。これにより、テクスチャの使用記憶容量を抑えながら、多様でリアルな汚れ表現を実現できるようになる。
なお、描画部140が含む補間部142は、ポリゴンの頂点(例えば3頂点)のZ値に基づき、ポリゴンの各ピクセルのZ値を、DDAなどの補間演算により求める。そして、上述のZシフト部136は、この補間部142での演算誤差よりも大きな値のZシフト値を、ポリゴンのZ値に対して加減算することになる。
また描画部140が含む陰面消去部144は、Z値が格納されるZバッファ178を用いて、Zバッファ法のアルゴリズムにしたがった陰面消去を行う。
なお、本実施形態の画像生成システムは、1人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、このようなシングルプレーヤモードのみならず、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。
また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、1つの端末を用いて生成してもよいし、ネットワーク(伝送ライン、通信回線)などで接続された複数の端末を用いて生成してもよい。
2.本実施形態の特徴
(1)透明度の制御
本実施形態では、図2に示すように、車オブジェクトOB1(第1のオブジェクト)と、OB1と同一形状だが、マッピングされるテクスチャが異なる汚れ表現用オブジェクトOB2(第2のオブジェクト)を用意する。そして、汚れ表現用オブジェクトOB2の透明度TRANS(半透明度、不透明度)を可変に制御しながら、車オブジェクトOB1に対してOB2を重ねて描画する。これにより、図2のB1に示すように、車の汚れをリアルに表現できるようになる。
例えば、車の走行スタート時においては、汚れ表現用オブジェクトOB2の透明度TRANS=0(%)にしておく。このようにすることにより、OB2が完全に透明になり、汚れが付着していない車が表示されるようになる。
そして、車が泥水エリア等に進入するなどのイベントが発生したり、車の走行距離が増えた場合に、OB2の透明度TRANSを徐々に大きくする。これにより、OB2が透明から半透明に変わり、車の汚れが徐々に目立って見えるようになる。
一方、車が泥水エリアから脱出したり、きれいな水を浴びるなどのイベントが発生した場合には、OB2の透明度TRANSを逆に徐々に小さくする。これにより、車の汚れが徐々に落ちて行く様子を表現できるようになる。
例えば、車の汚れを表現する他の手法として、車にマッピングされる汚れテクスチャを順次差し替えて行く手法を考えることができる。
しかしながら、この手法では、汚れ具合が異なる多くの種類のテクスチャを予め用意しておく必要がある。従って、テクスチャの使用記憶容量が増してしまい、画像生成システムの大規模化、高コスト化の問題を招く。
本実施形態によれば、汚れ表現用オブジェクトOB2の透明度TRANSを変化させるだけという簡易な処理で、複数段階の汚れ状態を表現できる。そして、汚れテクスチャとしては、OB2にマッピングされるテクスチャだけを用意すればよいため、テクスチャの使用記憶容量も節約できる。即ち、少ない使用記憶容量で、よりリアルで多種多様な汚れを表現できるようになる。
なお、第2のオブジェクトにマッピングされる第2のテクスチャは、第1のオブジェクトの汚れを表現するためのテクスチャであることが特に望ましいが、これに限定されるものではない。例えば車のリフレクションを表現するための環境テクスチャや、表面の凹凸を表現するためのバンプテクスチャなど、種々のテクスチャを考えることができる。
また本実施形態では、図3に示すように、汚れ表現用オブジェクトOB2は、車オブジェクトOB1に追従して移動(又は動作)する。即ち、車オブジェクトOB1が移動(平行移動、回転移動)した場合に、車オブジェクトOB1の位置PM(代表点)と汚れ表現用オブジェクトの位置PM’は常に同一になり、向く方向(回転角度)も常に同一になる。このようにすることで、車のように移動、回転するオブジェクトの汚れの表現が可能になる。
また本実施形態では図4に示すように、汚れ表現用オブジェクトOB2を複数のパーツオブジェクトOB2-1、OB2-2、OB2-3で構成し、これらのOB2-1、OB2-2、OB2-3の各々の透明度TRANSA、TRANSB、TRANSCを独立に制御するようにしてもよい。
例えば、車の走行距離に対する透明度TRANSA、TRANSB、TRANSCの増加率を、各々、△TRANSA、△TRANSB、△TRANSCとした場合に、△TRANSA>△TRANSB>△TRANSCに設定する。このようにすれば、車の走行距離が増えた場合に、車の前方部の方が後方部に比べて、より早く汚れが目立って見えるようになる。これにより、車の汚れ表現のリアル性、多様性を増すことができる。
なお、汚れ表現用オブジェクトOB2のパーツオブジェクトの構成形態は、図4に示すものに限定されない。例えば、車のバンパー、フェンダー、ボンネット、ドア、フロントガラス、ウィンドウ、トランクというように、更に細かなパーツオブジェクトに分割してもよい。また、パーツオブジェクトの一部についてのみ透明度を変化させ、他の部分は透明度を変化させないようにしてもよい。
また本実施形態では図5に示すように、テクスチャパターンが互いに異なる2個以上の汚れ表現用オブジェクトOB2、OB3、OB4・・・を用意し、これらのOB2、OB3、OB4・・・を車オブジェクトOB1に重ねて描画するようにしてもよい。そして、OB2、OB3、OB4・・・の各々の透明度TRANSA、TRANSB、TRANSC・・・を独立に制御するようにする。
例えば、車が泥水エリアに進入した場合には、泥水の汚れ表現用オブジェクトOB2の透明度TRANSAを変化させる。また車が砂埃エリアに進入した場合には、砂埃の汚れ表現用オブジェクトOB3の透明度TRANSBを変化させ、雨域エリアに進入した場合には、雨の汚れ表現用オブジェクトOB4の透明度TRANSCを変化させる。このようにすれば、車の走行エリアや走行状況に応じて、車に異なった汚れが付着して見えるようになる。この結果が、汚れ表現の多様性や画像のリアル度を更に増すことができる。
(2)ジオメトリ処理後のオブジェクトデータの再利用
さて、車オブジェクトに汚れ表現用オブジェクトを重ねて描画する手法として、車オブジェクトと汚れ表現用オブジェクトとを別々に用意し、これらのオブジェクトの各々に対してジオメトリ処理(座標変換、クリッピング処理、透視変換、又は光源計算等)を別々に施す手法を考えることができる。
しかしながら、この手法によると、汚れ表現用オブジェクトを用いずに車オブジェクトだけを描画する場合に比べて、処理負担が2倍程度になる。この処理負担の増加は、1フレーム内で全ての描画処理を完了しなければならないという処理のリアルタイム性が要求される画像生成システムでは深刻な問題となる。
そこで、本実施形態では、ジオメトリ処理後の車オブジェクトのオブジェクトデータをメインメモリに保存しておき、この保存されたジオメトリ処理後のオブジェクトデータを、汚れ表現用オブジェクトのオブジェクトデータとして再利用している。これにより、上記処理負担の増加の問題を解決できる。
より具体的には、図6のA1に示すように、メインメモリ上の車オブジェクトのオブジェクトデータ(頂点座標、頂点テクスチャ座標、輝度、或いは法線ベクトル等)に基づきジオメトリ処理を行い、ジオメトリ処理後(透視変換後)のオブジェクトデータをメインメモリに格納し、消さずに保存しておく。
次に、図6のA2に示すように、VRAMのテクスチャ記憶部(テクスチャ記憶領域)に車の下地テクスチャを転送する(ジオメトリ処理の前に転送してもよい)。
次に、図6のA3に示すように、ジオメトリ処理後のオブジェクトデータと、テクスチャ記憶部に記憶されている車の下地テクスチャとに基づいて、VRAMのフレームバッファに車オブジェクトを描画する。これにより、フレームバッファ上には、下地テクスチャがマッピングされた車オブジェクトが描画されるようになる。
次に、図6のA4に示すように、テクスチャ記憶部に汚れテクスチャを転送して、オブジェクトにマッピングされるテクスチャを変更する。
次に、図6のA5に示すように、メインメモリに保存しておいたジオメトリ処理後のオブジェクトデータと、テクスチャ記憶部に格納される汚れテクスチャとに基づいて、フレームバッファに汚れ表現用オブジェクトをαブレンディングにより重ねて描画する。これにより、下地テクスチャがマッピングされた車オブジェクトの上に、汚れテクスチャがマッピングされた汚れ表現用オブジェクトが重ねて描画されることになる。
以上の処理を1フレーム内に行うことで、車オブジェクトに対して汚れ表現用オブジェクトを重ねて描画できるようになる。
そして本実施形態では、メインメモリに既に保存されているジオメトリ処理後の車オブジェクトのオブジェクトデータが、汚れ表現用オブジェクトのオブジェクトデータとして再利用される。従って、汚れ表現用オブジェクトに対するジオメトリ処理を再度行う必要がなく、1回で済むため、処理負担をそれほど増すことなく、車の汚れ表現を実現できるようになる。
特に、ジオメトリ処理(3次元座標演算)は、オブジェクトの全ての頂点に対して行う必要があるため、非常に負担の重い処理である。従って、このジオメトリ処理を2回行うことなく1回で済ませることで、処理負担を大幅に軽減できる。
(3)Zシフト処理、スケーリング処理
さて、車オブジェクトと汚れ表現用オブジェクトを重ねて描画する際に、汚れ表現用オブジェクトが車オブジェクトの手前に常に来るような工夫を施さないと、車の汚れが下地に隠れて表示されなくなる事態が生じる。
このような事態を防止するためには、車オブジェクトのZ値(奥行き値)や汚れ表現用オブジェクトのZ値に対してZシフト値を加減算することが望ましい。即ち、汚れ表現用オブジェクトが車オブジェクトの手前に常に表示されるように、これらのオブジェクトの少なくとも一方に対してZシフト値を加減算するZシフト処理を行う。このようにすることで、車の汚れが下地に隠れてしまうという事態を防止できる。
なお、このようなZシフト値を加減算する代わりに、汚れ表現用オブジェクトのサイズを、車オブジェクトのサイズよりも僅かに大きくするスケーリング処理を行うようにしてもよい。このようにすれば、汚れ表現用オブジェクトを、車オブジェクトの手前に常に表示できるようになる。但し、このようなスケーリング処理はZシフト処理に比べて処理負荷が重いという欠点がある。従って、処理負荷の軽減化という観点からは、Zシフト処理の方が望ましい。
さて、本実施形態のような画像生成システムでは、視点から見えない部分を消去し、視点から見える部分だけを表示するための陰面消去が必要になる。そして、この陰面消去の中で代表的なもとのしては、奥行きソート法と呼ばれるものや、Zバッファ法と呼ばれるものが知られている。
奥行きソート法(Zソート法)では、視点からの距離に応じてポリゴン(プリミティブ面)をソーティングし、視点から遠い順にポリゴンを描画する。一方、Zバッファ法では、画面の全てのピクセル(ドット)についてのZ値(奥行き値)を格納するZバッファを用意し、このZバッファを利用して陰面消去を行う。
このようなZバッファ法を用いて陰面消去を行う場合において、車オブジェクトの手前に汚れ表現用オブジェクトを常に表示させるためには、以下のような手法を採用すればよい。
即ち、まず、図1のジオメトリ処理部132が、車オブジェクトのオブジェクトデータ(ポリゴンデータ)を描画部140に転送し、その後、汚れ表現用オブジェクトのオブジェクトデータを描画部140に転送する。そして、描画部140が含む陰面消去部144が、Z値が同一であるピクセルについては、後にオブジェクトデータが転送されてきた方を上書きするように処理を行う。このような手法を採用することで、Zシフト処理やスケーリング処理を行わなくても、車オブジェクトの手前に汚れ表現用オブジェクトを常に表示させることが可能になる。
ところが、このような手法を採用した場合にも、図1の補間部142での補間演算(ポリゴンの各頂点のZ値に基づいてポリゴンの各ピクセルのZ値を求める演算)の誤差に起因して、本来は後ろに表示されるべき車オブジェクトの各部分が、汚れ表現用オブジェクトの手前に表示されてしまうという表示エラーが生じることが判明した。以下、この表示エラーの問題について詳しく説明する。
例えば、図1の描画部140が扱うことができるポリゴンの形状は、描画処理の高速化を図るために、一定形状に固定されている場合がある。より具体的には、描画部140が、その仕様上、三角形ポリゴンしか扱うことができない場合がある。このような場合には、頂点数が4個以上のポリゴンについては、描画部140にそのデータを転送する前に、三角形のポリゴンに分割しておく必要がある。
ところが、このようなポリゴン分割においては、同一座標の頂点を有するポリゴンであっても、分割の仕方によっては、分割後の三角形ポリゴンの頂点構成が異なったものになってしまう場合があることが判明した。
例えば図7(A)では、ポリゴンPL1は三角形ポリゴンPA1とPB1に分割され、ポリゴンPL2は三角形ポリゴンPA2とPB2に分割されている。そして、この場合には、PA1とPA2、PB1とPB2は同一形状(頂点)の三角形ポリゴンになるため、正しい表示が行われる。
一方、図7(B)では、ポリゴンPL1は三角形ポリゴンPA1とPB1に分割され、ポリゴンPL2は三角形ポリゴンPC2とPD2に分割されている。そして、この場合には、PA1とPC2、PB1とPD2は異なる形状の三角形ポリゴンになるため、表示エラーが生じてしまう。即ち、ポリゴンの前後関係が狂ってしまい、本来ならば後ろに隠れるべきポリゴンPL1のピクセルがポリゴンPL2の手前に表示される事態が生じてしまう。
即ち、図1の補間部142は、ポリゴンの頂点のZ値に基づいて、ポリゴンの各ピクセル(ドット)のZ値をDDAなどの手法により算出する。ところが、この補間処理には、通常、例えば1LSB程度の演算誤差(累積誤差)がある。この演算誤差は、補間部142のハードウェア構成等を高性能なものにすれば小さくできるが、これは、ハードウェアのコスト増を招く。従って、この演算誤差を零にすることは実質的に極めて難しい。
一方、図1の陰面消去部144は、Z値が同一である場合には、通常、後にデータが転送されてきた方を上書きするように設定されている。
そして、図7(A)の場合には、三角形ポリゴンPA1とPA2、PB1とPB2の形状(頂点)は同一になっている。従って、補間処理により得られるPA1とPA2の各ピクセルのZ値は、たとえ演算誤差があっても、同一になる。同様に、補間処理により得られるPB1とPB2の各ピクセルのZ値も、たとえ演算誤差があっても、同一になる。従って、この場合には、全てのピクセルにおいて、ポリゴンPA1の上にポリゴンPA2が上書きされ、ポリゴンPB1の上にポリゴンPB2が上書きされるようになる。従って、設定通りにポリゴンが描画されるようになり、正しい表示になる。
しかしながら、図7(B)の場合には、三角形ポリゴンPA1とPC2、PB1とPD2の形状は異なっている。従って、補間処理により得られるPA1とPC2の各ピクセルのZ値が、本来は同じ値になるべきなのに、演算誤差の存在に起因して、異なった値になってしまう場合がある。同様に、補間処理により得られるPB1とPD2の各ピクセルのZ値も、演算誤差の存在に起因して、異なった値になってしまう場合がある。このため、本来は隠れるべきポリゴンPA1、PB1のピクセルが、ポリゴンPC2、PD2の手前に表示される事態が生じ、エラー表示となってしまう。
そこで、本実施形態では、このような問題を解決するために図8に示すような手法を採用している。
即ち、ジオメトリ処理後の車オブジェクトのポリゴンPL1のZ値及びジオメトリ処理後の汚れ表現用オブジェクトのポリゴンPL2のZ値の少なくとも一方に対して、Zシフト値を加減算するようにしている。例えば図8では、ポリゴンPL1のZ値にZシフト値を加算したり、ポリゴンPL2のZ値からZシフト値を減算する(視点から遠いほどZ値が大きい場合)。このようにすることで、たとえ補間処理に演算誤差があったとしても、車オブジェクトのポリゴンPL1の上に、汚れ表現用オブジェクトのポリゴンPL2が正しく上書きされるようになる。この結果、車オブジェクトの手前に汚れ表現用オブジェクトが常に表示されるようになり、適正な車の汚れ表現を実現できるようになる。
さて、Z値に加減算するZシフト値の大きさは、図1の補間部142でのDDAの演算誤差よりも大きな値にすることが望ましい。
より具体的には図9に示すように、DDAの演算誤差が、例えば、−N×LSB〜N×LSBの場合には、加減算するZシフト値の大きさを、−(N+K)×LSB〜(N+K)×LSBにする(但し、K≧1)。このようにすれば、演算誤差に起因する陰面消去の誤りの問題を効果的に解決できる。
また、どのポリゴンのZ値にZシフト値を加減算するかは、ポリゴン(又はオブジェクト)に対して予め関連づけて設定された識別情報に基づいて判断することが望ましい。
例えば図10のテーブルでは、Zシフト処理を行うか否かを示すシフトフラグSFL(ポリゴンがZシフト値の加減算の対象か否かを識別するための識別情報)が、各ポリゴンに対して予め関連づけて設定されている。例えば、図10では、SFLが1となっているポリゴンPL1、PL3、PL4に対してはZシフト処理が行われ、SFLが0となっているポリゴンPL2に対してはZシフト処理が行われない。このような設定を予め行っておくことで、Zシフト処理の際に、どのポリゴンが処理対象になるかを簡易に判断できるようになる。これにより、処理負担を大幅に軽減できる。
3.本実施形態の処理
次に、本実施形態の処理の詳細例について、図11、図12のフローチャートを用いて説明する。
図11は、汚れ表現用オブジェクトの透明度の制御処理に関するフローチャートである。
まず、車が泥水エリアに進入しているか否かを判断する(ステップS1)。この判断は、車の位置データや泥水エリアの位置データなどに基づいて行う。
そして、車が泥水エリアに進入している場合には、汚れ表現用オブジェクトの透明度TRANSを増加させる(ステップS2)。これにより、最初は完全な透明であった汚れ表現用オブジェクトが半透明になり、車の汚れが徐々に目立ってくるようになる。一方、車が泥水エリアに進入していない場合にはステップS5に移行する。
次に、透明度TRANSが100(%)以上か否かを判断し(ステップS3)、100(%)以上の場合には、TRANS=100(%)に固定する(ステップS4)。
次に、車が泥水エリアから脱出したか否かを判断する(ステップS5)。そして、車が泥水エリアから脱出した場合には、透明度TRANSが50(%)より大きいか否かを判断する(ステップS6)。そして、大きい場合には、透明度TRANSを徐々に小さくする(ステップS7)。これにより、汚れ表現用オブジェクトが徐々に透明になり、車の汚れが徐々に落ちて行く様子を表現できるようになる。
次に、汚れ表現用オブジェクトの透明度TRANS=0(%)か否かを判断し(ステップS8)、TRANS=0(%)でない場合には、汚れ表現用オブジェクトを透明度TRANSで車オブジェクトに重ねて描画する(ステップS9)。一方、TRANS=0(%)の場合には、ステップS9の処理を省略して、処理負担の軽減化を図る。
図12は、ジオメトリ処理後のオブジェクトデータを再利用する手法の処理例を示すフローチャートである。
まず、オブジェクトデータに基づいてジオメトリ処理を行う。即ち、車オブジェクトをローカル座標系からワールド座標系へ座標変換し(ステップS11)、次に、ワールド座標系から視点座標系に座標変換する(ステップS12)。そして、クリッピング処理を行い(ステップS13)、スクリーン座標系への透視変換を行う(ステップS14)。
次に、図6で説明したように、透視変換後(ジオメトリ処理後)の車オブジェクトのオブジェクトデータをメインメモリに格納し、保存する(ステップS15)。そして、車オブジェクトにマッピングする下地テクスチャをVRAMに転送する(ステップS16)。
次に、ステップS15でメインメモリに保存された透視変換後のオブジェクトデータと、ステップS16でVRAMに転送された車の下地テクスチャとに基づいて、フレームバッファに車オブジェクトを描画する(ステップS17)。
次に、汚れテクスチャをVRAMに転送する(ステップS18)。そして、ステップS15でメインメモリに保存された透視変換後のオブジェクトデータと、ステップS18でVRAMに転送された汚れテクスチャとに基づいて、フレームバッファに汚れ表現用オブジェクトを描画する(ステップS19)。即ち、ステップS17で既に描画されている車オブジェクトの上に、汚れテクスチャがマッピングされた汚れ表現用オブジェクトを、αブレンディング処理などにより重ね書きする。
なお、図8のようなZシフト処理を行う場合には、例えば図12のステップS14の後に、処理対象となるポリゴンにZシフト処理を施すか否かを図10のシフトフラグSFLに基づき判断する処理を挿入する。そして、Zシフト処理を施すと判断した場合には、所与のZシフト値を、そのポリゴンのZ値(ポリゴンの頂点のZ値)に加減算すればよい。
4.ハードウェア構成
次に、本実施形態を実現できるハードウェアの構成の一例について図13を用いて説明する。
メインプロセッサ900は、CD982(情報記憶媒体)に格納されたプログラム、通信インターフェース990を介して転送されたプログラム、或いはROM950(情報記憶媒体の1つ)に格納されたプログラムなどに基づき動作し、ゲーム処理、画像処理、音処理などの種々の処理を実行する。
コプロセッサ902は、メインプロセッサ900の処理を補助するものであり、高速並列演算が可能な積和算器や除算器を有し、マトリクス演算(ベクトル演算)を高速に実行する。例えば、オブジェクトを移動させたり動作(モーション)させるための物理シミュレーションに、マトリクス演算などの処理が必要な場合には、メインプロセッサ900上で動作するプログラムが、その処理をコプロセッサ902に指示(依頼)する。
ジオメトリプロセッサ904は、座標変換、透視変換、光源計算、曲面生成などのジオメトリ処理を行うものであり、高速並列演算が可能な積和算器や除算器を有し、マトリクス演算(ベクトル演算)を高速に実行する。例えば、座標変換、透視変換、光源計算などの処理を行う場合には、メインプロセッサ900で動作するプログラムが、その処理をジオメトリプロセッサ904に指示する。
データ伸張プロセッサ906は、圧縮された画像データや音データを伸張するデコード処理を行ったり、メインプロセッサ900のデコード処理をアクセレートする処理を行う。これにより、オープニング画面、インターミッション画面、エンディング画面、或いはゲーム画面などにおいて、MPEG方式等で圧縮された動画像を表示できるようになる。なお、デコード処理の対象となる画像データや音データは、ROM950、CD982に格納されたり、或いは通信インターフェース990を介して外部から転送される。
描画プロセッサ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は、プロセッサ、メモリ(RAM、VRAM、ROM等)間でのDMA転送を制御するものである。
CDドライブ980は、プログラム、画像データ、或いは音データなどが格納されるCD982(情報記憶媒体)を駆動し、これらのプログラム、データへのアクセスを可能にする。
通信インターフェース990は、ネットワークを介して外部との間でデータ転送を行うためのインターフェースである。この場合に、通信インターフェース990に接続されるネットワークとしては、通信回線(アナログ電話回線、ISDN)、高速シリアルバスなどを考えることができる。そして、通信回線を利用することでインターネットを介したデータ転送が可能になる。また、高速シリアルバスを利用することで、他の画像生成システム、他のゲームシステムとの間でのデータ転送が可能になる。
なお、本発明の各手段は、その全てを、ハードウェアのみにより実行してもよいし、情報記憶媒体に格納されるプログラムや通信インターフェースを介して配信されるプログラムのみにより実行してもよい。或いは、ハードウェアとプログラムの両方により実行してもよい。
そして、本発明の各手段をハードウェアとプログラムの両方により実行する場合には、情報記憶媒体には、本発明の各手段をハードウェアを利用して実行するためのプログラムが格納されることになる。より具体的には、上記プログラムが、ハードウェアである各プロセッサ902、904、906、910、930等に処理を指示すると共に、必要であればデータを渡す。そして、各プロセッサ902、904、906、910、930等は、その指示と渡されたデータとに基づいて、本発明の各手段を実行することになる。
図14(A)に、本実施形態を業務用ゲームシステムに適用した場合の例を示す。プレーヤは、ディスプレイ1100上に映し出されたゲーム画像を見ながら、レバー1102、ボタン1104等を操作してゲームを楽しむ。内蔵されるシステムボード(サーキットボード)1106には、各種プロセッサ、各種メモリなどが実装される。そして、本発明の各手段を実行するための情報(プログラム又はデータ)は、システムボード1106上の情報記憶媒体であるメモリ1108に格納される。以下、この情報を格納情報と呼ぶ。
図14(B)に、本実施形態を家庭用のゲームシステムに適用した場合の例を示す。プレーヤはディスプレイ1200に映し出されたゲーム画像を見ながら、ゲームコントローラ1202、1204を操作してゲームを楽しむ。この場合、上記格納情報は、本体システムに着脱自在な情報記憶媒体であるCD1206、或いはメモリカード1208、1209等に格納されている。
図14(C)に、ホスト装置1300と、このホスト装置1300とネットワーク1302(LANのような小規模ネットワークや、インターネットのような広域ネットワーク)を介して接続される端末1304-1〜1304-nとを含むシステムに本実施形態を適用した場合の例を示す。この場合、上記格納情報は、例えばホスト装置1300が制御可能な磁気ディスク装置、磁気テープ装置、メモリ等の情報記憶媒体1306に格納されている。端末1304-1〜1304-nが、スタンドアロンでゲーム画像、ゲーム音を生成できるものである場合には、ホスト装置1300からは、ゲーム画像、ゲーム音を生成するためのゲームプログラム等が端末1304-1〜1304-nに配送される。一方、スタンドアロンで生成できない場合には、ホスト装置1300がゲーム画像、ゲーム音を生成し、これを端末1304-1〜1304-nに伝送し端末において出力することになる。
なお、図14(C)の構成の場合に、本発明の各手段を、ホスト装置(サーバー)と端末とで分散して実行するようにしてもよい。また、本発明の各手段を実行するための上記格納情報を、ホスト装置(サーバー)の情報記憶媒体と端末の情報記憶媒体に分散して格納するようにしてもよい。
またネットワークに接続する端末は、家庭用ゲームシステムであってもよいし業務用ゲームシステムであってもよい。そして、業務用ゲームシステムをネットワークに接続する場合には、業務用ゲームシステムとの間で情報のやり取りが可能であると共に家庭用ゲームシステムとの間でも情報のやり取りが可能な携帯型情報記憶装置(メモリカード、携帯型ゲーム装置)を用いることが望ましい。
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。
例えば、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の1の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
また本発明により第2のオブジェクトにマッピングされるテクスチャは、第1のオブジェクトの汚れを表すテクスチャであることが特に望ましいが、これに限定されるものではない。
また、第1のオブジェクトと第2のオブジェクトは、その一部において同一形状(又はほぼ同一形状)であれば十分である。
また、第1のオブジェクトが第2のオブジェクトの上に来るように描画処理を行ってもよい。
また、本実施形態では、ジオメトリ処理として座標変換や透視変換を例に挙げたが、本発明のジオメトリ処理はこれらに限定されない。
また、オブジェクトにマッピングされるテクスチャは、色情報のテクスチャに限定されず、輝度情報、半透明情報(α値)、表面形状情報(バンプ値)、反射率情報、屈折率情報、或いは深さ情報などについてのテクスチャでもよい。
また本発明はレーシングゲーム以外にも種々のゲーム(格闘ゲーム、シューティングゲーム、ロボット対戦ゲーム、スポーツゲーム、競争ゲーム、ロールプレイングゲーム、音楽演奏ゲーム、ダンスゲーム等)に適用できる。
また本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、マルチメディア端末、ゲーム画像を生成するシステムボード等の種々の画像生成システムに適用できる。