以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
1.構成
図1に本実施形態の端末(画像生成装置、ゲーム装置、携帯電話、携帯端末、携帯型ゲーム装置)の機能ブロック図の例を示す。なお本実施形態の端末は図1の構成要素(各部)の一部を省略した構成としてもよい。
入力部160は、プレーヤ(操作者)からの入力情報を入力するための入力機器(コントローラ)であり、プレーヤの入力情報を処理部に出力する。本実施形態の入力部160は、プレーヤの入力情報(入力信号)を検出する検出部162を備える。入力部160は、例えば、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイなどがある。また、入力部160は、振動信号に基づいて振動させる処理を行う振動部を備えていてもよい。
また、入力部160は、3軸の加速度を検出する加速度センサや、角速度を検出するジャイロセンサ、撮像部を備えた入力機器でもよい。例えば、入力部160は、プレーヤが把持して動かすものであってもよいし、プレーヤが身につけて動かすものであってもよい。また、入力部160は、プレーヤが把持する刀型コントローラや銃型コントローラ、あるいはプレーヤが身につける(プレーヤが手に装着する)グローブ型コントローラなど実際の道具を模して作られた入力機器でもよい。また入力部160は、入力機器と一体化されている端末(携帯電話、携帯端末、携帯型ゲーム装置)なども含まれる。
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。例えば、図2に示すように、オブジェクトデータ記憶部173では、オブジェクト空間に配置される、倍率が1倍のオブジェクトのモデルデータが記憶されている。
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(CD、DVD)、光磁気ディスク(MO)、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ(ROM)などにより実現できる。処理部100は、情報記憶媒体180に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)を記憶することができる。
表示部190は、本実施形態により生成された画像を出力するものであり、その機能は、CRT、LCD、タッチパネル型ディスプレイ、或いはHMD(ヘッドマウントディスプレイ)などにより実現できる。
音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
通信部196は外部(例えば他の端末、サーバ)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお、サーバが有する情報記憶媒体や記憶部に記憶されている本実施形態の各部としてコンピュータを機能させるためのプログラムやデータを、ネットワークを介して受信し、受信したプログラムやデータを情報記憶媒体180や記憶部170に記憶してもよい。このようにプログラムやデータを受信して端末を機能させる場合も本発明の範囲内に含む。
処理部100(プロセッサ)は、入力部160からの入力データやプログラムなどに基づいて、ゲーム処理、画像生成処理、或いは音生成処理などの処理を行う。
この処理部100は記憶部170内の主記憶部171をワーク領域として各種処理を行う。処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
処理部100は、受け付け部110、オブジェクト配置部111、エフェクトオブジェクト配置部111a、移動・動作処理部112、移動処理部112a、倍率制御部113、スケーリング処理部114、ゲーム演算部115、判断部116、算出部117、仮想カメラ制御部118、通信制御部119、描画部120、音処理部130を含む。なおこれらの一部を省略する構成としてもよい。
受け付け部110は、プレーヤの入力情報を受け付ける処理を行う。例えば、自機(プレーヤの操作対象の移動体)を移動させるための移動入力情報を受け付ける処理や、自機から弾(ミサイル、機関砲)を発射させる発射入力情報を受け付ける処理を行う。
オブジェクト配置部111は、オブジェクトをオブジェクト空間に配置する処理を行う。例えば、オブジェクト配置部111は、自機、敵機(コンピュータプログラムに基づいて移動・動作、攻撃を行う移動体、ノンプレーヤキャラクター)の他に、建物、球場、車、樹木、柱、壁、マップ(地形)などの表示物を、オブジェクト空間に配置する処理を行う。ここでオブジェクト空間とは、仮想的なゲーム空間であり、例えば、ワールド座標系、仮想カメラ座標系のように、3次元座標(X,Y,Z)においてオブジェクトが配置される空間である。
例えば、オブジェクト配置部111は、ワールド座標系にオブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト)を配置する。また、例えば、ワールド座標系でのオブジェクトの位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。
特に、本実施形態のオブジェクト配置部111は、予めモデリングされた(倍率1の大きさの)オブジェクトについて、スケーリング(拡大或いは縮小)する処理を行い、スケーリングされたオブジェクトをオブジェクト空間に配置する処理を行っている。
例えば、オブジェクト配置部111は、図2に示すように、スケーリング対象のオブジェクト(例えば、スケーリングフラグが1であるオブジェクト)について、スケーリング処理を行い、スケーリングされたオブジェクト配置する処理を行う。一方、スケーリング対象でないオブジェクト(例えば、スケーリングフラグが0であるオブジェクト)については、スケーリング処理を行わずに、オブジェクトデータ記憶部173において記憶されているオブジェクトをそのままオブジェクト空間に配置する処理を行う。
エフェクトオブジェクト配置部111aは、オブジェクト空間において、エフェクト発生位置から仮想カメラが追従する移動体の移動情報に基づき算出された特定位置に向かって、エフェクトオブジェクトを配置する処理を行う。例えば、移動情報とは、移動方向、移動速度、移動加速度、位置、向き(回転角度)等を含む。
また、エフェクトオブジェクト配置部111aは、描画部120が、オブジェクト空間に存在する複数の移動体のうち、特定の移動体の移動に追従する仮想カメラから見える画像を生成する場合には、特定の移動体の移動情報に基づいて算出された特定位置に向かって、エフェクトオブジェクトを配置する処理を行う。
また、エフェクトオブジェクト配置部111aは、端末(第1の端末)で移動処理を行う移動体の移動情報又は端末(第1の端末)で制御される仮想カメラの移動情報に基づいて算出された特定位置に向かって、エフェクトオブジェクトを配置する処理を行う。つまり、本実施形態では、ネットワークを介して他の端末とデータの送受信処理を行い、いわゆるマルチプレーヤオンラインゲームを行う場合には、各端末が独立してエフェクトオブジェクトの配置処理を行う。
また、エフェクトオブジェクト配置部111aは、画像生成で用いられる仮想カメラの移動情報に基づいて算出された特定位置に向かって、エフェクトオブジェクトを配置する処理を行う。
なお、エフェクトオブジェクト配置部111aは、スケーリング処理部114によってスケーリングされたエフェクトオブジェクトを、特定位置に向かって配置するようにしてもよい。
移動・動作処理部112は、オブジェクト空間にあるオブジェクトの移動・動作演算を行う。すなわち入力部160から受け付けた入力情報や、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、オブジェクトをオブジェクト空間内で移動させたり、オブジェクトを動作(モーション、アニメーション)させたりする処理を行う。具体的には、オブジェクトの移動情報(移動速度、移動速度、移動加速度、位置、向きなど)や動作情報(オブジェクトを構成する各パーツの位置、或いは回転角度)を、1フレーム(1/60秒)毎に順次求める処理を行う。なおフレームは、オブジェクトの移動・動作処理や画像生成処理を行う時間の単位である。
例えば、本実施形態の移動処理部112aは、入力部160の入力情報(移動用の入力情報)に基づいて、自機を移動させる処理や、移動処理プログラムに基づいて、敵機を移動させる処理を行う。
なお、移動・動作処理部112は、他の端末とネットワークを介してデータを送受信している場合には、他の端末から受信した移動情報等のデータに基づいて、本端末のオブジェクト空間に配置される他の移動体(他の端末を操作するプレーヤの操作対象の移動体)を移動・動作させるようにしてもよい。
倍率制御部113は、所与のオブジェクトをスケーリング(拡大・縮小)するための倍率を、算出する処理を行う。つまり、倍率制御部113は、スケーリング対象のオブジェクト(例えば、スケーリングフラグが1であるオブジェクト)について、オブジェクトデータ記憶部173において記憶されているオブジェクトをスケーリングするための倍率を算出する。スケーリングする倍率は、スケーリング対象の複数のオブジェクト毎に算出する。
より具体的に説明すると、倍率制御部113は、仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とに基づいて、倍率を算出する処理を行う。例えば、倍率制御部113は、仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とのなす角が小さくなるほど、倍率を増加させる処理を行う。つまり、仮想カメラの視線方向上にオブジェクトが配置される場合には、そのオブジェクトの倍率が最も大きな値になるように倍率が制御され、仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とがずれるほど(ずれ角度が大きいほど)倍率が小さな値になるように、そのオブジェクトの倍率を制御する。つまり、倍率制御部113は、オブジェクトの位置が視線方向の軸(視軸)に近いほど、倍率を増加させる処理を行う。例えば、本実施形態の倍率制御部113は、仮想カメラの視線方向を向くベクトルと、仮想カメラからオブジェクトに向くベクトルとの内積値に基づいて、倍率を算出する。
また、倍率制御部113は、仮想カメラからオブジェクトまでの距離に基づいて、倍率を算出してもよい。倍率制御部113は、仮想カメラの視点位置から、スケーリング対象のオブジェクトの位置まで距離に基づいて、そのオブジェクトの倍率を変化させるようにしてもよい。例えば、仮想カメラの視点位置からオブジェクトのまでの距離が300以内である場合には、視点位置からオブジェクトの位置までの距離が増加する(距離が長くなる)につれて倍率を所定値域(例えば、2.0〜2.5)の最小値(例えば、2.0)から最大値(例えば、2.5)に向かって増加させる処理を行い、仮想カメラの視点位置からオブジェクトまでの距離が300を超えると、倍率を所定値域の最大値(2.5)に設定する処理を行う。
なお、本実施形態の倍率制御部113は、オブジェクトの位置が仮想カメラの視点位置から300以内である場合には、仮想カメラからオブジェクトまでの距離に基づいて、所定値域で変化する第1の倍率と、仮想カメラの視線方向と、仮想カメラから前記オブジェクトに向く方向とに基づいて算出された第2の倍率とに基づいて、スケーリングするための倍率を算出するようにしてもよい。
倍率制御部113は、仮想カメラの視点位置に基づいて設定された所定範囲内にオブジェクトが位置する場合には、仮想カメラとオブジェクトとの距離が減少するに従って、算出された倍率が1倍に近づくように、算出された倍率を補正する処理を行うようにしてもよい。
スケーリング処理部114は、スケーリング対象のオブジェクトについて倍率制御部113によって求められた倍率に基づいて、当該スケーリング対象のオブジェクトをスケーリングする処理を行う。なお、スケーリング処理部114は、仮想カメラの視点位置に基づいて設定された所定範囲内にオブジェクトが位置する場合には、補正された倍率に基づいて、オブジェクトをスケーリングする処理を行う。
ゲーム演算部115は、種々のゲーム処理を行う。例えば、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、ゲーム終了条件が満たされた場合にゲームを終了する処理、最終ステージをクリアした場合にはエンディングを進行させる処理などがある。
本実施形態のゲーム演算部115は、各移動体(自機、敵機を含む)のパラメータを更新する処理を行う。例えば、各移動体の耐久値の初期値を所定値(例えば、100)に設定し、耐久値が「0」になると、その移動体は撃墜されたものとして判定する処理を行う。例えば、自機の耐久値が「0」になると、ゲームクリアできないものと判定し、ゲームを終了させる処理を行う。一方、ゲーム中の全ての敵機の耐久値が「0」になると、ゲームクリアと判定する処理を行う。
判断部116は、オブジェクト空間内でエフェクトを発生させるための所定条件を満たしたか否かを判断する処理を行う。例えば、判断部116は、自機(プレーヤの操作対象の移動体)から発射されるミサイル(移動体の一例)が、敵機(移動体の一例)にヒットした場合(ヒットして耐久値0になった)には、そのヒット位置又はヒット時の敵機の位置をエフェクト発生位置として制御する。かかる場合には、エフェクトオブジェクト配置部111aが、エフェクトオブジェクトをエフェクト発生位置から特定位置に向かって配置する処理を行う。
判断部116は、他の端末(第2の端末)から、エフェクト発生情報を受信した場合には、所定条件を満たしたと判断する処理を行う。例えば、他の端末から、ヒットして耐久値0になった敵機のIDを含むエフェクト発生情報を受信した場合には、そのIDに対応する敵機の位置でエフェクトを発生させるための所定条件を満たしたと判断する。
算出部117は、所定条件を満たした場合に、移動体の移動情報に基づいて、特定位置を算出する処理を行う。つまり、算出部117は、移動体の移動方向、移動速度、移動加速度、位置、向きの少なくとも1つを含む移動情報に基づいて、特定位置を算出する処理を行う。例えば、算出部117は、移動体の移動速度及び移動方向に基づいて、特定位置を算出する処理を行う。つまり、算出部117は、移動体の移動速度及び移動方向に基づいて、所定期間後(例えば10秒後)の移動体の位置を推定し、推定された位置を特定位置とする。算出部117は、描画部120が、オブジェクト空間に複数の移動体のうち、特定の移動体の移動に追従する仮想カメラから見える画像を生成する場合には、その特定の移動体の移動情報に基づいて、特定位置を算出する処理を行う。また、算出部117は、端末(第1の端末)で移動処理を行う移動体の移動情報又は仮想カメラの移動情報に基づいて、特定位置を算出する処理を行う。
また、本実施形態の算出部117は、所定条件を満たした場合に、仮想カメラの移動情報に基づいて、特定位置を算出する処理を行うようにしてもよい。つまり、算出部117は、仮想カメラの移動方向、移動速度、移動加速度、位置(視点位置)、向き(視線方向)の少なくとも1つを含む移動情報に基づいて、特定位置を算出するようにしてもよい。例えば、算出部117は、仮想カメラの移動速度及び移動方向に基づいて、特定位置を算出する処理を行う。つまり、算出部117は、仮想カメラの移動速度及び移動方向に基づいて、所定期間後(10秒後)の仮想カメラの位置を推定し、推定された位置を特定位置とする。算出部117は、描画部120が複数の仮想カメラのうち、いずれかの仮想カメラから見える画像を生成する場合には、画像生成で用いられる仮想カメラの移動情報に基づいて、特定位置を算出する。
仮想カメラ制御部118は、オブジェクト空間内の所与(任意)の視点から見える画像を生成するための仮想カメラ(視点)の制御処理を行う。具体的には、3次元の画像を生成する場合には、ワールド座標系における仮想カメラの位置(X、Y、Z)、回転角度(例えば、X、Y、Z軸の各軸の正方向からみて時計回りに回る場合における回転角度)を制御する処理を行う。要するに、仮想カメラ制御部118は、仮想カメラの視点位置、視線方向、画角、移動方向、移動速度の少なくとも1つを制御する処理を行う。
特に、本実施形態の仮想カメラ制御部118は、移動体の移動に追従する仮想カメラを制御する。例えば、図3(A)に示すような、HUD View(一人称視点の一例)や、図3(B)に示すような、Cockpit View(一人称視点の一例)、図3(C)に示す後方視点(三人称視点の一例)によって、仮想カメラを制御する。
例えば、仮想カメラ制御部118は、移動・動作処理部112で得られたオブジェクトの位置、向き又は速度などの移動情報に基づいて、仮想カメラを制御する。つまり、仮想カメラ制御部118は、ワールド座標において、移動・動作処理部112で処理される移動体の移動情報と仮想カメラの移動情報とが所定の関係を保つように制御する。より具体的には、ワールド座標において、移動・動作処理部112で処理される移動体の位置(移動体の中心点P0)と仮想カメラの位置(CP)とが所定の関係を保つように制御する。例えば、所定の距離を保つように制御する。また、移動体の移動方向及び移動速度と、仮想カメラの移動方向及び移動速度とが所定の関係性を保つように制御する。例えば、移動体の移動方向と仮想カメラの移動方向が同一の方向になるように制御したり、移動体の移動速度と仮想カメラの移動速度とが同一の速度になるように制御する。また、仮想カメラ制御部118は、移動体の向きと、仮想カメラの向き(視線方向)とが所定の関係を保つように仮想カメラの向き(視線方向)を制御する。例えば、移動体の向きと仮想カメラの向きとが同一の方向を向くように制御する。
なお、仮想カメラ制御部118は、仮想カメラを予め決められた向きに設定したり、予め決められた移動経路で移動させる制御を行うようにしてもよい。かかる場合には、仮想カメラの位置(移動経路)又は向きを制御するための仮想カメラデータ(記憶部170、情報記憶媒体180等に記憶されている仮想カメラデータ)に基づいて、仮想カメラを制御する。
また、仮想カメラ制御部118は、オブジェクト空間において所与の位置から見下ろすような俯瞰用仮想カメラを配置させて当該俯瞰用仮想カメラを制御するようにしてもよい。
また、仮想カメラ制御部118は、リプレイ用で画像を生成するためのリプレイ用仮想カメラをオブジェクト空間に配置させて、当該リプレイ用仮想カメラを制御するように使用してもよい。リプレイ用仮想カメラは、移動体の移動に必ずしも追従させる必要はないが、移動体の移動情報に応じて、リプレイ用仮想カメラを制御するようにしてもよい。
通信制御部119は、端末(例えば第1の端末)が他の端末(例えば第2の端末)とネットワークを介して相互にエフェクト発生情報を含むデータを送受信する処理を行う。
なお、本実施形態の端末では、通信制御で必要となるネットワーク情報をゲームサーバから取得し、管理する処理等を行う。例えば、端末は、各端末に個別に付与される端末の識別情報(オンラインゲームに参加できる端末を識別するために個別に付与されたデータ、ID)と、端末の識別情報に対応付けられたパケットの送信先を指定する宛先情報(IPアドレスなど)とを取得し、管理する処理を行う。
通信制御部119は、他の端末(第2の端末)に送信するパケットを生成する処理、パケット送信先の端末のIPアドレスやポート番号を指定する処理、受信したパケットに含まれるデータを記憶部170に保存する処理、受信したパケットを解析する処理、その他のパケットの送受信に関する制御処理等を行う。
本実施形態の通信制御部119は、画像を描画するフレームレートに応じてパケットを生成し、接続先の他の端末に生成したパケットを送信する処理を行うようにしてもよい。
ここで、端末間で送受信されるデータは、入力部の入力情報としてもよいし、各移動体の位置情報としてもよい。特に、本実施形態において端末間で送受信されるデータは、撃墜を受けた敵機を特定するための情報(例えば、耐久値が0になった敵機のID等)などのエフェクト発生情報を含む。
また、本実施形態の通信制御部119は、他の端末(第2の端末)から送信されたパケットを受信すると、受信したパケットを解析し、パケットに含まれるエフェクト発生情報などのデータを記憶部に記憶する処理を行う。
また本実施形態の通信制御部119は、複数の端末間においての接続(第1の端末と第2の端末との接続)が確立されてから接続が切断されるまで、データを互いに送受信する処理を行う。
なお、複数の端末で構成されるネットワークシステムの場合は、複数の端末間でデータの送受信を行いながらオンラインゲームを実行するピア・ツー・ピア(いわゆるP2P)方式としてもよいし、特定のサービスを提供するためのサーバと端末間においてデータを送受信できるものであってもよい。また、サーバを介して各端末がデータ(情報)の送受信を行いながらオンラインゲームを実行するクライアント・サーバ方式によるものであってもよい。また、本実施形態のネットワークシステムでは、有線通信のみならず無線通信でデータを送受信してもよい。
描画部120は、処理部100で行われる種々の処理の結果に基づいて描画処理を行い、これにより画像を生成し、表示部190に出力する。言い換えると、描画部120は、オブジェクト空間において、仮想カメラから見える画像を生成する。
例えば、描画部120は、オブジェクト(モデル)の各頂点の頂点データ(頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)を含むオブジェクトデータ(モデルデータ)が入力され、入力されたオブジェクトデータに含まれる頂点データに基づいて、頂点処理(頂点シェーダによるシェーディング)が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理(テッセレーション、曲面分割、ポリゴン分割)を行うようにしてもよい。
頂点処理では、頂点処理プログラム(頂点シェーダプログラム、第1のシェーダプログラム)に従って、頂点の移動処理や、座標変換、例えばワールド座標変換、視野変換(カメラ座標変換)、クリッピング処理、透視変換(投影変換)、ビューポート変換等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点データを変更(更新、調整)する。
そして、頂点処理後の頂点データに基づいてラスタライズ(走査変換)が行われ、ポリゴン(プリミティブ)の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル(表示画面を構成するフラグメント)を描画するピクセル処理(ピクセルシェーダによるシェーディング、フラグメント処理)が行われる。ピクセル処理では、ピクセル処理プログラム(ピクセルシェーダプログラム、第2のシェーダプログラム)に従って、テクスチャの読出し(テクスチャマッピング)、色データの設定/変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を画像バッファ172(ピクセル単位で画像情報を記憶できるバッファ。VRAM、レンダリングターゲット)に出力(描画)する。すなわち、ピクセル処理では、画像情報(色、法線、輝度、α値等)をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内において仮想カメラ(所与の視点)から見える画像が生成される。なお、仮想カメラ(視点)が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として1画面に表示できるように画像を生成することができる。
なお頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン(プリミティブ)の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ(頂点シェーダやピクセルシェーダ)により実現される。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、従来のハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
そして描画部120は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後(透視投影変換後)のオブジェクトデータ(オブジェクトの頂点の位置座標、テクスチャ座標、色データ(輝度データ)、法線ベクトル、或いはα値等)は、記憶部170に保存される。
テクスチャマッピングは、記憶部170に記憶されるテクスチャ(テクセル値)をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定(付与)されるテクスチャ座標等を用いて記憶部170からテクスチャ(色(RGB)、α値などの表面プロパティ)を読み出す。そして、2次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
隠面消去処理としては、描画ピクセルのZ値(奥行き情報)が格納されるZバッファ(奥行きバッファ)を用いたZバッファ法(奥行き比較法、Zテスト)による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Zバッファに格納されるZ値を参照する。そして参照されたZバッファのZ値と、プリミティブの描画ピクセルでのZ値とを比較し、描画ピクセルでのZ値が、仮想カメラから見て手前側となるZ値(例えば小さなZ値)である場合には、その描画ピクセルの描画処理を行うとともにZバッファのZ値を新たなZ値に更新する。
αブレンディング(α合成)は、α値(A値)に基づく半透明合成処理(通常αブレンディング、加算αブレンディング又は減算αブレンディング等)のことである。
例えば、αブレンディングでは、これから画像バッファ172に描画する描画色(上書きする色)C1と、既に画像バッファ172(レンダリングターゲット)に描画されている描画色(下地の色)C2とを、α値に基づいて線形合成処理を行う。つまり、最終的な描画色をCとすると、C=C1*α+C2*(1−α)によって求めることができる。
なお、α値は、各ピクセル(テクセル、ドット)に関連づけて記憶できる情報であり、例えば色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度(透明度、不透明度と等価)、バンプ情報などとして使用できる。
なお、描画部120は、他の端末(第2の端末)とネットワークを介してデータを送受信するマルチプレーヤオンラインゲームを行う場合であっても、端末(第1の端末)で移動処理を行う移動体の移動に追従する仮想カメラ(端末(第1の端末)で制御される仮想カメラ)から見える画像を生成する処理を行う。つまり、各端末が独立した描画処理を行う。
音処理部130は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
なお、本実施形態の端末は、1人のプレーヤのみがプレイできるシングルプレーヤモード、或いは、複数のプレーヤがプレイできるマルチプレーヤモードでゲームプレイできるように制御してもよい。例えば、マルチプレーヤモードで制御する場合には、ネットワークを介して他の端末とデータを送受信してゲーム処理を行うようにしてもよいし、1つの端末が、複数の入力部からの入力情報に基づいて処理を行うようにしてもよい。
2.スケーリング処理
本実施形態では、シューティングゲームのための画像生成処理に関するものであり、予めモデリングされた1倍の大きさオブジェクトについて、倍率を乗算してスケーリング処理を行い、スケーリングされたオブジェクトをワールド座標系に配置する処理を行う。そして、スケーリングされたオブジェクトが配置されたオブジェクト空間において、仮想カメラから見える画像を生成する処理を行う。本実施形態では、スケーリングする倍率を1倍以上にし、オブジェクトを誇張表現して迫力、スピード感のある画像を生成する。
(1)スケーリング処理の詳細
まず、本実施形態においてオブジェクトデータ記憶部173に記憶されるオブジェクトについて説明する。本実施形態のオブジェクトデータ記憶部173には、モデリングされたオブジェクトを1倍として記憶している。また、図2に示すように、オブジェクトデータ記憶部173に、スケーリング対象となるオブジェクト、スケーリング対象とはならないオブジェクトとを、それぞれ識別して記憶する。より具体的には、スケーリング対象となるオブジェクトのスケーリングフラグを「1」とし、スケーリング対象とはならないオブジェクトのスケーリングフラグを「0」として、各オブジェクトのIDに対応づけて記憶する。
例えば、敵機NPC(ノンプレーヤキャラクター、ターゲットオブジェクト、標的オブジェクト、移動体)、ミサイルMI、エフェクトオブジェクト(爆発オブジェクト、煙オブジェクト、炎オブジェクト)などはスケーリング対象として記憶している。一方、地上物オブジェクト(木、陸地、戦車など)、プレーヤの操作対象の自機POB(プレーヤオブジェクト、移動体)は、スケーリング対象外のオブジェクトとして記憶する。例えば、図3(C)に示すような後方視点で画像を生成する場合には、自機POBの倍率はスケーリング対象とならずに(倍率は1倍のままで)オブジェクト空間に配置される。
本実施形態では、スケーリング対象となるオブジェクト(スケーリングフラグ「1」のオブジェクト)については、そのオブジェクトの倍率を算出し、オブジェクトを構成する各ポリゴンの各頂点座標それぞれに算出された倍率を乗算することによって、オブジェクトをスケーリングする処理を行う。
例えば、図4に示すように、オブジェクトOB1を構成する各ポリゴンの各頂点座標それぞれに2倍の倍率を乗算してスケーリング処理(拡大処理)を行い、スケーリング処理後のオブジェクトOB1をワールド座標系に配置する。
そして、本実施形態では、スケーリング対象とはならないオブジェクト(スケーリングフラグ「0」のオブジェクト)については、オブジェクトデータ記憶部173に格納されているオブジェクトをそのまま(つまり、1倍の大きさのまま)ワールド座標系の配置位置に配置する。例えば、図4に示すように、オブジェクトOB2については、倍率1のままで、ワールド座標系のオブジェクトOB2に配置する処理を行う。
なお、一般的に、スケーリング処理は拡大処理又は縮小処理のことをいうが、本実施形態は、迫力やスピード感の得られる画像を生成するために拡大を目的とするスケーリング処理を行っている。
なお、スケーリング処理は、カメラ座標系において原点(視点位置)を中心に、オブジェクトをスケーリングする処理を行ってもよいし、オブジェクトのローカル座標系の原点を中心に、オブジェクトをスケーリングする処理を行ってもよい。また、スケーリング処理を行うことによってオブジェクトの配置位置がずれてしまう場合には、オブジェクトを、スケーリング処理前の配置位置に配置されるように補正する処理を行ってもよい。
(2)仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とに基づいて、倍率を算出する手法
図5に示すように、本実施形態では、仮想カメラCの視線方向CVと、仮想カメラCからオブジェクトOB1に向く方向OVに基づいて、オブジェクトOB1の倍率を算出する処理を行う。例えば、仮想カメラCの視線方向CVと、仮想カメラの視点位置CPからオブジェクトOB1の配置位置P1に向く方向のOVとのなす角度θ(0度≦θ≦90度)が小さいほど、倍率が大きくなるように倍率を変化させる。つまり、視線方向CVと、方向OVとが一致する場合、つまり角度θが0度である場合には、倍率は最大値となり、視線方向CVと、方向OVとのなす角度θが90度である場合には、倍率は最小の値となる。
要するに、本実施形態では、オブジェクトOB1の位置P1が視線方向CV軸(視軸)に近いほど、倍率を増加させる。例えば、投影面に投影されたオブジェクトの代表点と、投影面の中心点(注視点)の距離が変化(増加)するにしたがって倍率を変化(減少)させるように制御する。具体的には、投影面の中心点にオブジェクトの代表点が一致するときは、所定値域(例えば2.0〜2.5)の最大値(例えば、2.5)を倍率の値とし、投影面の中心点とオブジェクトの代表点との距離が長くなるに従い、倍率を最小値(例えば、2.0)に向かって減少させる。
例えば、本実施形態では、仮想カメラCの視線方向CVの単位ベクトルEcと、仮想カメラの位置CPからオブジェクトOB1に向く方向のOVの単位ベクトルEoとの内積値IPを求め、倍率を算出することができる。例えば、下式(1)によって内積値IPを求める。
IP=Ec・Eo・・・(1)
そして、本実施形態では、所定の値(例えば、2)と、内積値IPに0.5を乗算した値との合計値を、スケーリング処理で用いられる倍率として求める。例えば、下式(2)によって、スケーリング処理で用いられる倍率(scale)を求める。
scale=2+IP*0.5・・・(2)
つまり、視線方向CVと、方向OVとのなす角度θが0°≦θ≦90°の範囲で変化すると、倍率は2〜2.5の値域で変化することになる。
このようにすれば、画面中央部に近づくほどオブジェクトが2.5倍の大きさで拡大され、画面端部になるほど2倍の大きさで拡大されるような画像を生成することができる。
さらに、図6(A)(B)を用いて、スケーリング処理を行わない場合と、スケーリング処理を行う場合とを対比して説明する。
まず、図6(A)は、スケーリング処理を行わずに画像を生成する場合の例を示す。例えば、オブジェクトOB1が、倍率1のまま視線方向CV上の配置位置P11に配置されている場合、生成される画像F1においてオブジェクトOB1は画面中央に表示される。そして、オブジェクトOB1が、倍率1のまま視線方向CVからθ1だけずれた角度の方向に移動して配置位置P12に位置されると、生成される画像F2においてオブジェクトOB1は画面右端に表示される。そして、オブジェクトOB1が倍率1のまま視線方向CVからθ2だけずれた角度方向に移動して配置位置P13に位置されると仮想カメラCの視野範囲CAの外に配置されてしまうので、生成される画像F3においてオブジェクトOB1は、表示されなくなる。つまり、仮想カメラCの視野範囲(ビューボリューム、視錘台)の外にオブジェクトOB1が配置されるので、画像F3においてオブジェクトは表示されなくなる。
一方、図6(B)は、仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とに基づいて倍率を算出し、算出された倍率に基づいてスケーリング処理を行い画像を生成する場合の例を示す。例えば、オブジェクトOB1が、視線方向CV上の配置位置P11に配置されている場合、オブジェクトOB1は最大の倍率で(例えば、2.5倍)で拡大される。したがって、生成される画像F4においてオブジェクトOB1は画面中央に拡大されて表示される。例えば、図6(A)の画像F1と比較すると、より大きく画面中央に表示されることになる。
そして、オブジェクトOB1が、視線方向CVからθ1だけずれた角度の方向に移動して配置位置P12に位置されると、P11に位置していたときよりも倍率が減少され、例えば、オブジェクトがP12に位置している場合において生成される画像F5では、画像F4よりも小さいサイズでオブジェクトOB1が画面右端に表示される。しかし、図6(A)の画像F2よりも、大きくオブジェクトOB1が表示される。
そして、オブジェクトOB1が視線方向CVからθ2だけずれた角度方向に移動して配置位置P13に位置されると、オブジェクトOB1の倍率は、P12に位置していたときよりも減少されるが、オブジェクトOB1は、視野範囲外に位置するので画像F6において表示されなくなる。
このように、図6(B)に示すように、仮想カメラの視線方向と、仮想カメラからオブジェクトに向く方向とに基づいて、倍率を算出してスケーリング処理を行うと、画面中央部に表示されるほどオブジェクトOB1が拡大して表示される。通常、画面中央部は、プレーヤの意識が最も集中しやすい箇所である。したがって、画面端部よりも画面中央部に近づくほどオブジェクトOB1を大きくした方が、オブジェクトOB1の大きさの変化に抑揚をつけることができ、迫力感、スピード感のある画像を生成することができる。つまり、プレーヤがあまり意識しない画面端部では、画面中央部よりもオブジェクトOB1の大きさを小さくすることで、画面中央部にオブジェクトOB1が表示される際の迫力、スピード感をより増大させることができる。
(3)仮想カメラとオブジェクトとの距離に応じて倍率を算出する手法
本実施形態では、仮想カメラの視点位置からスケーリング対象のオブジェクトの位置までの距離に基づいて、倍率を求めてもよい。なお、仮想カメラの視点位置からスケーリング対象のオブジェクトの位置までの距離は、仮想カメラの視点位置からオブジェクトの位置までの直線距離でもよいし、仮想カメラの視点位置から、オブジェクトまでの視線方向についての距離でもよい(カメラ座標系におけるZ方向への距離でもよい)。
例えば、仮想カメラの位置からスケーリング対象のオブジェクトの位置までの距離をDとし、距離Dが0以上であってLmax以下にあるとき(0≦D≦Lmax)は、仮想カメラとオブジェクトとの距離Dが増加するに従って、倍率を増加させるように変化させる。
例えば、シューティングゲームにおける画像を生成する場合には、Lmaxは、プレーヤがターゲットオブジェクトを射撃可能な範囲の値とすることが望ましい。このようにすれば、射撃可能なターゲットオブジェクトを拡大して表示させることができ、識別し易いからである。
より具体的に、図7(A)(B)を用いて、スケーリング処理を行わない場合と、仮想カメラからオブジェクトまでの距離Dに基づいて倍率を制御してスケーリング処理を行う場合とを対比して説明する。
図7(A)は、スケーリング処理を行わずに画像を生成する場合の例を示す。例えば、オブジェクトOB1が、倍率1のまま視線方向CV上の配置位置P14に配置されている場合、生成される画像F7においてオブジェクトOB1は画面中央に表示される。しかし、P14が視点CPからあまりに遠いところにある場合には、画像F7に示すように、表示されるオブジェクトOB1は数ドットで表示されるので識別しづらいものとなっている。
そして、オブジェクトOB1が、倍率1のまま仮想カメラCから相対的に遠ざかりP15に位置する。すると、生成される画像F8においてオブジェクトOB1は画面中央に表示されるが、数ドットで表示されたままであり、識別しづらいものとなっている。
さらに、オブジェクトOB1が、倍率1のまま仮想カメラCから相対的に遠ざかりP16に位置する。すると、生成される画像F9においてオブジェクトOB1は画面中央に表示されるが、表示されるオブジェクトOB1の大きさに変化はなく、識別しづらいものとなっている。
一方、図7(B)は、仮想カメラの位置CPからオブジェクトOB1までの距離に基づいてスケーリング処理を行い画像を生成する場合の例を示す。例えば、オブジェクトOB1が、1倍より大きな倍率(例えば、2〜2.5の値域で変化するの倍率)でスケーリングされて配置位置P14に配置されている場合、生成される画像F10においてオブジェクトOB1は画面中央に拡大されて表示される。例えば、図7(A)の画像F7と対比すると、識別し易くなる。
そして、オブジェクトOB1が、仮想カメラCから相対的に遠ざかりP15に位置すると、P14に位置していたときよりも、倍率が増加するのでオブジェクトOB1が拡大されてオブジェクト空間に配置される。そして、生成される画像F11においては、オブジェクトOB1は画像F10よりも小さく表示され、オブジェクトOB1が識別されつつも遠ざかっていく様子を視認できるようになる。例えば、図7(A)の画像F8と比較すると、識別し易くなる。
さらに、オブジェクトOB1が、仮想カメラCから相対的に遠ざかりP16に位置すると、P15に位置していたときよりも、倍率が増加するのでオブジェクトOB1がさらに拡大されてオブジェクト空間に配置される。そして、生成される画像F12において、オブジェクトOB1は画像F11よりも小さく表示され、オブジェクトOB1が識別されつつも遠ざかっていく様子を視認できるようになる。例えば、図7(A)の画像F9と比較すると、識別し易くなる。
このように、図7(B)では、図7(A)よりも、オブジェクトOB1を視認し易いものとなっており、さらにオブジェクトOB1が仮想カメラCから相対的に遠ざかっていく様子を確認することができる。
(4)倍率の変化
本実施形態では、仮想カメラからオブジェクトまでの距離に基づいて、倍率を変化させる場合には、その変化が緩やかになるように制御している。
例えば、本実施形態では、0≦D≦Lmaxにおいて仮想カメラからオブジェクトまでの距離Dが増加するに従って、倍率を所定値域(2から2.5の値域)の最小値から最大値にかけて増加させる処理を行っている。このようにすれば、スケーリング処理を行っても遠近感に矛盾が生じないような画像を生成することができるからである。
具体的に、図8(A)、(B)を用いて説明する。例えば、図8(A)は、仮想カメラの視点位置CPから、スケーリング対象のオブジェクトの位置までの距離Dと、倍率との関係を示す。図8(A)に示すように、視点位置からオブジェクトまでの距離Dが0のときは倍率=2であり、0≦D≦Lmax(例えば、Lmax=300メートル)では、距離Dが増加するに従って倍率が2〜2.5の値域で増加する。
仮に、図8(B)に示すように、0≦D≦Lmaxにおいて、倍率を0〜2.5の値域で変化させようとすると、倍率の変化が急になり、遠近感に矛盾が生じる画像を生成してしまうことになる。
例えば、図9に示すように、オブジェクトOB1がP14、P15、P16というように、仮想カメラCから相対的に遠ざかる場合であっても、生成される画像では、画像F13、F14、F15に示すように、徐々にオブジェクトOB1が大きく表示されてしまう。つまり、オブジェクト空間においては仮想カメラからオブジェクトOB1が遠ざかっているにもかかわらず、生成される画像F13、14、15では、仮想カメラCは相対的に、オブジェクトOB1に近づいているように表示されてしまう。
そこで、本実施形態では、このような矛盾が生じないようにするために、所定値域である2〜2.5の値域で、距離Dの増加に応じて、倍率を増加させる処理を行い、遠近感に違和感のない画像を生成するようにしている。つまり、3次元画像を生成する処理では、透視投影変換処理でスケーリング処理(ビューボリュームを正規化するためのスケーリング処理)を行っている。つまり、透視投影変換処理に影響を及ぼさない範囲で、仮想カメラからオブジェクトまでの距離Dに基づいて倍率を変化させる必要がある。したがって、本実施形態では、遠近感に矛盾が生じないような画像を生成するために、これらの透視投影変換に伴うスケーリングの倍率を考慮して、0≦D≦Lmaxにおいて仮想カメラからオブジェクトまでの距離Dに基づいて変化させる倍率の所定値域(例えば、2.0〜2.5)を設定している。
このように、仮想カメラからオブジェクトまでの距離に基づいて、スケーリングを行う際には、遠近感に違和感のない画像を生成するために、倍率の変化を緩やかにする必要がある。しかし、倍率の変化を緩やかにすると迫力やスピード感が乏しくなってしまう。本実施形態では、上述したように、仮想カメラの方向CVと、仮想カメラからオブジェクトに向かう方向OVとに基づいて、算出される倍率を用いてスケーリング処理を行うことで、この問題を解決できる。
例えば、仮想カメラとオブジェクトとの距離に応じて算出する第1の倍率K1(2≦K1≦2.5)と、仮想カメラの方向CVと、仮想カメラからオブジェクトに向かう方向OVとに基づいて算出される第2の倍率K2(0≦K2≦0.5)とに基づいて、スケーリング処理で用いる倍率を求める。例えば、K1とK2とを加算した値K(K=K1+K2)を、スケーリング処理で用いる倍率とする。このようにすれば、遠近感に矛盾のない画像を生成することができるとともに、画面中央部では拡大されたオブジェクトが表示されるので、迫力やスピード感の得られる画像を生成することができる。
(5)倍率の補正
本実施形態では、スケーリング対象のオブジェクトが仮想カメラに接近している場合には、より自然な大きさに見えるように、オブジェクトの倍率を元の大きさになるように補正する処理を行っている。
図10は、仮想カメラCを自機POBの後方視点で制御する場合における、画像F20の一例を示す。
例えば、倍率=1のときの、自機POBと敵機NPCとのオブジェクトの大きさがほぼ同じであり、敵機NPCがスケーリング対象のオブジェクト、自機POBがスケーリング対象ではないオブジェクトであるとする。そして、敵機NPCが約2倍の大きさでオブジェクト空間に配置されると、図10に示すように、画像F20では敵機NPCが自機POBよりも大きく見える画像が生成される。
本来ならば、自機POBと敵機NPCは同じ大きさの機体であるにもかかわらず、仮想カメラCから近距離に敵機EOBが位置することになると、スケーリング対象外の自機POBと、スケーリング対象の敵機EOBとの大きさの違いが目立ってしまう。
そこで、本実施形態では、図11に示すように、仮想カメラCを中心に半径R以内(例えば50メートル以内)にある所定範囲内にスケーリング対象のオブジェクト(例えば敵機NPC)が位置する場合には、仮想カメラCとそのオブジェクトとの距離が零のときに1倍になるように、倍率を補正する処理を行う。そして、補正された倍率に基づいて、オブジェクトをスケーリングする処理を行う。例えば、半径Rに対する仮想カメラの視点位置CPからオブジェクトOB1までの距離の割合に基づいて、1倍と、算出した倍率Kとを線形合成する。
このようにすれば、スケーリング対象のオブジェクトが仮想カメラに近づくほど、本来の大きさ(1倍の大きさ)になるようにスケーリングされるので、より自然な画像を生成することができる。
例えば、図11に示すように、敵機NPCが所定範囲内に位置する場合には、敵機NPCは、仮想カメラCとそのオブジェクトとの距離が零のときに1倍になるように倍率が補正され、補正された倍率に基づきスケーリングされた敵機NPCがオブジェクト空間に配置される。そして、生成される画像F21では、敵機NPCと自機POBとの大きさがほぼ同じになり、大きさ差異が目立たなくなり自然な画像が生成される。
(6)リプレイ(再生処理)
本実施形態では、リプレイ用仮想カメラに基づいて、スケーリング処理を行うようにしてもよい。つまり、本実施形態では、各仮想カメラのローカル座標系で、スケーリング処理を行うようにする。
例えば、リプレイ用仮想カメラでレンダリングするための情報として、ゲーム処理中に、ワールド座標系における自機や敵機などの各オブジェクトの位置情報や、動作情報(回転情報)を、リプレイ用のデータとして記憶部に記憶する。
そして、リプレイ時では、リプレイ用のデータに基づいて、各オブジェクトの位置、動作演算を行い、リプレイ用仮想カメラから見える画像を生成する。リプレイ時に、スケーリング処理を行う場合には、各オブジェクトの位置情報とリプレイ用仮想カメラの位置情報とに基づいて、1倍の大きさのオブジェクトに対してスケーリング処理を行えばよい。
(7)フローチャート
図12を用いて、スケーリングの処理のフローチャートの一例について説明する。まず、スケーリング対象のオブジェクトか否かを判断する処理を行う(ステップS1)。スケーリング対象のオブジェクトでない場合は(ステップS1のN)、ステップS13に進み、スケーリング対象のオブジェクトであると判断されると(ステップS1のY)、そのオブジェクトをワールド座標に配置する処理を行う(ステップS2)。
そして、仮想カメラの視点位置と当該オブジェクトの位置との距離Dの2乗(D2)を求める(ステップS3)。そして、D2≦0である場合には、r0に0.0を代入する(ステップS4)。一方、0<D2<3002である場合には、r0にD2/3002を代入する(ステップS5)。一方、D2≧3002である場合には、r0に1.0を代入する(ステップS6)。
次に、仮想カメラの視線ベクトルの単位ベクトルをEc、仮想カメラの視点位置からオブジェクトの位置へのベクトルの単位ベクトルをEoとし、これらの内積から2ベクトルのcosθの値を求める。つまり、cosθ=Ec・Eoを求める(ステップS7)。
次に、r1に(cosθ)2を代入し(ステップS8)、処理対象のオブジェクトが通常オブジェクト(属性が通常である場合)は、scaleに2.0+0.5*r0+0.5*r1を代入する(ステップS9)、処理対象のオブジェクトがエフェクトオブジェクト(属性がエフェクトである場合)は、scaleに1.0+0.5*r0を代入する(ステップS10)。
次に、D2<502である場合には、ステップS11に進み、scaleを補正する処理を行う。つまり、r2にD2/502を代入し、1.0*(1.0−r2)+scale*r2の値を、新たなscale値として代入する処理を行う(ステップS11)。
次に、求めたscale値に基づき、オブジェクトをスケーリングする処理を行う(ステップS12)。
そして、フラスタムチェック(視野範囲CA(ビューボリューム、視錘台)にオブジェクトが属するか否かのチェック)を行い(ステップS13)、偽判定である場合にはステップS15に進み、真判定である場合には、拡大されたオブジェクトを描画処理に回すための処理を行う(ステップS14)、そして、次のオブジェクトについて、スケーリング処理を行う。以上で処理が終了する。
3.エフェクトオブジェクトを配置する手法
本実施形態では、自機から発射されたミサイルや機関砲などが敵機にヒットすると敵機が爆発するエフェクトを発生させる処理を行っている。例えば、エフェクトが発生すると爆発、炎、煙などのエフェクトオブジェクトをオブジェクト空間に配置している。本実施形態においてエフェクトオブジェクトを配置する手法について、以下、詳細に説明する。
なお、本実施形態では、戦闘機を移動させるフライトシミュレーションに関する画像生成処理を行うものであるので、自機が移動する場合には、自機の移動に追従(連動)するように仮想カメラの移動制御を行っている。例えば、図3(A)〜(C)に示すように、自機の移動速度ベクトルPVと、仮想カメラの移動速度ベクトルCMVとが、所定の関係(例えば、速度が同一、移動方向が同一)になるように制御する。ここで移動速度ベクトルとは、その大きさ(長さ)によって移動速度を示し、その向きによって移動方向を示すベクトルである。
また、フライトシューティングゲームで登場する戦闘機(飛行機など)は前進することによって飛行を行うものであるので、仮想カメラの視線方向と仮想カメラの移動方向とが同一になる傾向にある。本実施形態においては、説明を簡易にするために、特に指摘しない限り、仮想カメラの視線方向CVと仮想カメラの移動速度ベクトルCMVとが同一方向であるものとして説明する。
(1)エフェクトの発生
本実施形態では、オブジェクト空間の所与の位置でエフェクトを発生させるための所定条件を満たしたか否かを判断し、所定条件を満たした場合にエフェクトを発生させる処理を行う。例えば、敵機などの移動体が撃墜したと判断された場合、すなわち、敵機の耐久値が0になった場合(敵機のダメージ率が100%になった場合)に、所定条件を満たすと判断する。なお、プログラムの進行に伴い、イベントを発生させるタイミングが到来した場合に、エフェクトを発生させるための所定条件を満たしたと判断してもよい。
本実施形態のエフェクト発生についてより具体的に説明する。図13(A)は、ミサイル発射の入力情報を受け付けてミサイルMIが発射されるときの自機POB、敵機NPCの例を示す。例えば、自機POBの移動に追従する仮想カメラCから見える画像F30が生成される。画像F30では、敵機NPCに向かってミサイルMIが飛ぶ様子が表示されることになる。
そして、図13(B)に示すように、自機POBが左方向に移動すると、自機POBに追従する仮想カメラCから見える画像F31では、画面右寄りに、敵機NPC、ミサイルMIが表示されることになる。
そして、図13(C)に示すように、自機POBが前方に移動すると、自機POBの視野範囲外で、ミサイルMIが敵機NPCにヒットし(交差し)、ミサイルMIのヒットによって敵機NPCの耐久値が0となると、エフェクトが発生したと判断する。
本実施形態では、エフェクト発生時において、敵機NPC及びミサイルMIをオブジェクト空間から削除(消去)し、爆発オブジェクトBO(エフェクトオブジェクトの一例)を、エフェクト発生位置EPに配置する処理を行う。なお、エフェクト発生位置EPは、例えば、ミサイルMIが敵機NPCにヒットしたときの敵機NPCの配置位置、或いは、ミサイルMIと敵機NPCとのヒット位置とすることができる。なお、図13(C)に示すように、爆発オブジェクトBOが仮想カメラCの視野範囲外にあるので、画像F32に示すように、爆発オブジェクトBOを描画することができない。
(2)エフェクトオブジェクトの配置手法の例1
まず、エフェクト発生位置EPに基づいて、エフェクトオブジェクトの配置手法について説明する。
図14(A)は、エフェクト発生時のエフェクトオブジェクトの例を示す。本実施形態では、エフェクト発生時に、エフェクト発生位置EPに爆発オブジェクトBOを配置させる処理を行う。なお、図14(A)に示すように、エフェクト発生位置EPが仮想カメラCの視野範囲外にある場合には、エフェクト発生時において生成される画像F32では、爆発する様子を表現することができない。
図14(B)は、自機が前方に移動したとき(例えば、エフェクト発生時から1秒後)のエフェクトオブジェクトの例を示す。本実施形態では、時間経過に伴い、煙オブジェクト(エフェクトオブジェクトの一例)EOBを、エフェクト発生位置EPを中心に放射状に配置させる。つまり、爆発の後、黒煙などが発生する演出画像を生成している。しかし、図14(B)に示すように、仮想カメラCの視野範囲外において、煙オブジェクトEOBが配置されている場合には、生成される画像F33では煙が発生する様子を表現することができない。
図14(C)は、自機が更に前方に移動したとき(例えば、エフェクト発生時から2秒後)の煙オブジェクトEOBの例を示す。本実施形態では、さらに時間が経過すると、煙オブジェクトが更に、エフェクト発生位置EPを中心に、放射状に拡散されるように各煙オブジェクトが配置される。つまり、各煙オブジェクトの、EPを中心に放射状に向く移動速度ベクトルEVに基づき、各煙オブジェクトEOBが配置される。しかし、図14(C)に示すように、仮想カメラの視野範囲外において、煙オブジェクトEOBが配置されている場合には、生成される画像F34では、煙が拡散されていく様子を表現することができない。
なお、これらの煙オブジェクトEOBは、各煙オブジェクトの移動速度ベクトルEVに基づいて配置されるが、エフェクト発生時から3秒後にオブジェクト空間から消去される。
(3)エフェクトオブジェクトの配置手法の例2
エフェクトオブジェクトの配置手法の例1によれば、仮想カメラの視野範囲外にエフェクトオブジェクトが配置されてしまうと、エフェクトを表現した画像を生成できなくなってしまう。そこで、本実施形態では、特定位置を算出し、エフェクト発生位置から特定位置に向かって、エフェクトオブジェクトを配置する手法を採用する。このようにすれば、仮想カメラの視野範囲内にエフェクトを配置する可能性を高くすることができる。また、何れの方向において、エフェクトが発生したのかを有る程度予測することができ、より臨場感のあるエフェクトを表現することができる。
まず、本実施形態の特定位置の算出手法について説明する。本実施形態では、エフェクト発生時に、自機POBの移動情報に基づいて、自機POBの10秒後(所定期間後)の推定位置(予測位置)を、特定位置として算出する処理を行う。例えば、図15(A)に示すように、エフェクト発生時において、自機POBの移動速度ベクトルPVに基づいて、10秒後の特定位置Qを推定する。
なお、本実施形態では、自機POBの移動に追従する仮想カメラCの移動方向に基づいて、仮想カメラCの10秒後の推定位置を、特定位置として算出してもよい。
そして、本実施形態では、オブジェクト空間において、エフェクト発生位置EPから特定位置Qに向かって、煙オブジェクトEOBを配置する処理を行う。つまり、エフェクト発生位置EPから特定位置Qに向く方向(特定方向)EQVに、煙オブジェクトEOBを配置する処理を行う。
図15(B)は、エフェクト発生時から1秒後の煙オブジェクトEOBの例を示す。例えば、本実施形態では、時間が経過するにつれて、煙オブジェクトEOBが、特定位置Qに向かうように順次配置される。
図15(C)は、エフェクト発生時から2秒後の煙オブジェクトEOBの例を示す。例えば、自機POBが移動速度ベクトルPVの方向(推定位置Qの方向)に移動すると、煙オブジェクトEOBが、仮想カメラCの視野範囲内に配置されるようになる。例えば、エフェクト発生時から2秒後において生成される画像F36では、煙オブジェクトEOBが描画されているので、敵機などの戦闘機が撃墜された様子を表現することができる。
本実施形態では、エフェクト発生時から3秒間経過するまで、煙オブジェクトEOBを、特定位置Qに向かって配置する処理を行っている。そして、エフェクト発生時から3秒後に大爆発エフェクトオブジェクトを配置した後、エフェクトオブジェクトを消去する処理を行う。
また、図15(C)に示すように画像F36では、煙オブジェクトEOBが、画面右側に描画されているので、自機POBの右側(仮想カメラCの右側)でエフェクトが発生している様子を表現することができる。
このように、本実施形態では、特定位置を算出し、エフェクト発生位置から特定位置に向かって、エフェクトオブジェクトを配置する手法を採用すると、エフェクトオブジェクトが画面に表示される(フレームインする)可能性が高くなり、エフェクト発生の演出効果をより高めることができる。
次に、移動体が複数ある場合について説明する。本実施形態では、特定の移動体の移動に追従する仮想カメラから見える画像を生成する場合には、その特定の移動体の移動情報に基づいて、特定位置を算出する処理を行う。
例えば、図16に示すように、自機POB1、戦闘機POB2、戦闘機POB3がオブジェクト空間に存在し、自機POB1に追従する仮想カメラC1から見える画像を生成する場合には、自機POB1の移動方向ベクトルPV1に基づいて、自機POB1のエフェクト発生時から10秒後の推定位置Q1を、特定位置として算出する処理を行う。そして、本実施形態では、図17(A)に示すように、エフェクト発生位置EPから特定位置Q1に向かって、エフェクトオブジェクトを配置する処理を行う。このようにすれば、自機POB1が推定に近い移動をしている場合には、図17(A)に示すように、自機POB1の移動に追従する仮想カメラC1の視野範囲に、エフェクトオブジェクトが配置されるようになり、プレーヤはエフェクト演出のある画像を生成することができる。
言い換えると、本実施形態では、仮想カメラC1で画像を生成する場合には、他の仮想カメラC2、C3に追従する戦闘機POB2、POB3の移動速度ベクトルPV2、PV3に基づいて算出された特定位置Q2、Q3に向かってエフェクトオブジェクトを配置させないように制御する。仮に、仮想カメラC2、C3に追従する戦闘機POB2、POB3の移動方向に基づいて算出された特定位置Q2、Q3に向かってエフェクトオブジェクトを配置させてしまうと、不自然な画像が生成されてしまう可能性があるからである。例えば、煙オブジェクトEOBが戦闘機POB2の移動方向上に向かって移動してしまう様子を、仮想カメラC1が撮影することになった場合、煙が不自然に曲がるなど、現実世界では生じ得ない画像が生成されてしまう。したがって、本実施形態では、描画する際に用いられる仮想カメラが追従するオブジェクトの移動方向に基づいて、特定位置を算出し、その特定位置に向かってエフェクトオブジェクトを配置する。
したがって、図17(B)に示すように、仮想カメラC2に基づいて画像を生成する場合には、その仮想カメラC2が追従する戦闘機POB2の移動方向ベクトルPV2に基づいて特定位置Q2を算出し、エフェクト発生位置EPから特定位置Q2に向かって、エフェクトオブジェクトを配置する処理を行う。つまり、エフェクト発生位置EPから特定位置Q2の方向に向かってエフェクトオブジェクトが配置されたオブジェクト空間において、仮想カメラC2から見える画像を生成する。このようにすれば、自然な画像を生成することができる。
同様に、図17(C)に示すように、仮想カメラC3に基づいて画像を生成する場合には、その仮想カメラC3が追従する戦闘機POB3の移動方向ベクトルPV3に基づいて特定位置Q3を算出し、エフェクト発生位置EPから特定位置Q3に向かって、エフェクトオブジェクトを配置する処理を行う。つまり、エフェクト発生位置EPから特定位置Q3の方向に向かってエフェクトオブジェクトが配置されたオブジェクト空間において、仮想カメラC3から見える画像を生成する。このようにすれば、自然な画像を生成することができる。
また、仮想カメラが複数存在する場合において仮想カメラの移動速度ベクトルCMVに基づいて特定位置を算出する場合には、描画部120の画像生成で用いられる仮想カメラの移動方向に基づいて特定位置を算出し、算出された特定位置に向かってエフェクトオブジェクトを配置する。現実世界では生じ得ない不自然な画像が生成されてしまう事態を回避するためである。例えば、描画部120の画像生成で用いられる仮想カメラとは、描画するフレーム(タイミング)で、レンダリング処理、頂点シェーダで用いられる仮想カメラのことをいう。
例えば、図17(A)に示すように、仮想カメラC1〜C3が存在する場合において、仮想カメラC1に基づいて画像を生成する場合には、その仮想カメラC1の移動速度ベクトルCMV1に基づいて所定期間後の仮想カメラC1の推定位置を特定位置を算出し、算出された特定位置に向かってエフェクトオブジェクトを配置する。言い換えると、仮想カメラC1に基づいて画像を生成する場合には、仮想カメラC2の移動速度ベクトルCMV2に基づいて算出された(或いは仮想カメラC3の移動速度ベクトルCMV3に基づいて算出された位置)に向かって、エフェクトオブジェクトを配置しないように制御する。
なお、本実施形態では、オブジェクト空間に存在する移動体(自機、敵機、戦闘機など)の移動に追従せずに、ワールド座標に配置される仮想カメラに基づいて画像を生成する場合がある。かかる場合には、特定位置に向かって、エフェクトオブジェクトを配置する手法を採用してもよいし、エフェクト発生位置に基づいて、エフェクトオブジェクトを配置する手法(例1)を採用してもよい。
また、エフェクト発生位置を注視するように制御されているターゲット仮想カメラに基づいて、画像を生成する場合には、特定位置に向かって、エフェクトオブジェクトを配置する手法を採用せずに、エフェクト発生位置に基づいて、エフェクトオブジェクトを配置する手法(例1)を採用することが望ましい。自然なエフェクト画像を生成できるからである。
また、仮想カメラが移動体の移動に追従するものでなくても、その仮想カメラが移動するものであれば、仮想カメラの移動速度ベクトルに基づいて、仮想カメラの所定期間後(例えば10秒後)の推定位置を特定位置として算出し、算出された特定位置に向かってエフェクトオブジェクトを配置するようにしてもよい。
また、リプレイ用の画像生成処理の際を考慮すると、特定位置に向かってエフェクトオブジェクトを配置する処理を行う場合には、通常オブジェクトの位置情報、動作情報をリプレイ用のデータとして記憶部に記憶してもよいが、各エフェクトオブジェクトの位置情報、動作情報(回転情報)をリプレイ用のデータとして記憶部に記憶させないように制御してもよい。ゲームプレイ中に配置されたエフェクトオブジェクトをリプレイ用仮想カメラで撮影してしまうと、不自然な画像を生成してしまうことになるからである。
なお、リプレイ用仮想カメラで、リプレイ画像を生成する場合には、エフェクトオブジェクトを、そのリプレイ用仮想カメラの移動情報(リプレイ用仮想カメラが移動体に追従している場合には、リプレイ用仮想カメラが追従する移動体の移動情報でもよい)に基づいて特定位置を算出し、その特定位置に向かって配置するようにしてもよい。
(4)エフェクトオブジェクトを配置する速度
本実施形態では、特定位置に向かってエフェクトオブジェクトを配置する場合に、予め定義された配置速度(一定期間あたりに進むエフェクトオブジェクトの配置距離)に基づいて、エフェクトオブジェクトをエフェクト発生位置から特定位置に向かって配置するようにしてもよい。
また、自機POBの移動速度(自機POBに追従する仮想カメラCの移動速度)に基づいて算出された特定位置Qに向かってエフェクトオブジェクトを配置する場合には、その配置速度を、自機POBの移動速度又は仮想カメラCの移動速度に基づいて算出するようにしてもよい。
また、エフェクト発生時からエフェクト終了時までのエフェクトイベント期間(3秒間)に、確実に特定位置にエフェクトオブジェクトを到達させるために、エフェクトイベント期間あたりの、エフェクト発生位置EPから特定位置Qまでの距離を、配置速度としてもよい。例えば、エフェクト発生位置EPが東京であり、特定位置Qが大阪であるように、明らかに3秒間にエフェクトオブジェクトを特定位置に向かって配置させることが現実的で無い場合もあるので、物理法則に基づき配置速度を求めるようにしてもよい。
また、配置速度は、ミサイルが敵機に衝突したときのミサイルの移動速度(ミサイルの移動速度ベクトルMIVの大きさ)、敵機の移動速度(敵機の移動速度ベクトルNVの大きさ)に基づいて、求めてもよい。
(5)特定位置をリアルタイムに求める手法
本実施形態では、特定位置に向かってエフェクトオブジェクトを配置する場合には、リアルタイム(フレーム毎)に、特定位置を算出するようにしてもよい。このようにすれば、エフェクトオブジェクトが画面に表示される可能性が高くなるからである。
例えば、図18(A)に示すように、エフェクト発生時に、第Nフレームの自機の移動速度ベクトルPVa(或いは自機の移動に追従する仮想カメラの移動速度ベクトルCMVa)に基づいて、特定位置Qaを算出し、エフェクトオブジェクトを特定位置Qaに向かって配置する。そして、第N+1フレームの自機の移動速度ベクトルPVb(或いは自機の移動に追従する仮想カメラの移動速度ベクトルCMVb)に基づいて、特定位置Qbを算出し、エフェクトオブジェクトを特定位置Qbに向かって配置する。そして、第N+2フレームの自機の移動速度ベクトルPVc(或いは自機の移動に追従する仮想カメラの移動速度ベクトルCMVc)に基づいて、特定位置Qcを算出し、エフェクトオブジェクトを特定位置Qcに向かって配置する。このようにすれば、移動体に追従する仮想カメラの視野範囲CAに、エフェクトオブジェクトが配置される可能性を高くすることができる。例えば、図18(B)に示すように、エフェクトオブジェクトEOBが、エフェクト発生位置EPから、フレーム単位で更新される特定位置に向かって配置されるようになる。
(6)視線方向に基づいて特定位置を求める手法
本実施形態では、特定位置に向かってエフェクトオブジェクトを配置する場合には、仮想カメラの視線方向CVに基づいて、特定位置を算出するようにしてもよい。このようにすれば、エフェクトオブジェクトが画面に表示される可能性が高くなるからである。
例えば、ヘリコプターなどのホバリング(空中で停止可能な状態)や、ホバリング状態から垂直、水平移動が可能な移動体の場合、視線方向CVと移動体の移動速度ベクトルPVの方向が異なる場合がある(視線方向CVと仮想カメラの移動速度ベクトルCMVの方向が異なる場合がある)。かかる場合に、エフェクトオブジェクトが表示されるように視線方向CVに基づいて特定位置を算出することが望ましい。
より具体的に、図19(A)を用いて説明する。例えば、図19(A)に示すように、仮想カメラCの視線方向CVと、仮想カメラCが追従する自機POBの移動速度ベクトルPVの方向が異なる場合、自機POBの移動速度ベクトルPVに基づいて算出された10秒後の推定位置を特定位置Qとすると、エフェクトオブジェクトEOBは、エフェクト発生位置EPから特定位置Qに向かって配置される。しかし、図19(B)に示すように、エフェクトイベント期間が経過するまでに(エフェクト発生時から3秒経過するまで)に、移動体が移動速度ベクトルPVの方向(仮想カメラCの移動速度ベクトルCMVの方向)に上昇したとしてもエフェクトオブジェクトEOBが仮想カメラCの視野範囲に配置されず、エフェクト演出のある画像を生成することができない。
そこで、本実施形態では、特定位置を次のように算出する処理を行う。例えば、図19(C)に示すように、エフェクト発生時の自機の移動速度ベクトルPV(或いは仮想カメラCの移動速度ベクトルCMV)に基づいて、所定期間後(例えば、10秒後)の推定位置Qを算出する。そして、エフェクト発生時の視線方向CVに基づいて、推定位置Qを視点としたときの推定視線方向CV´に基づく位置Iを、特定位置として算出する。例えば、視線方向CV´は、エフェクト発生時の視線方向CVと同じ方向に設定する。例えば、推定位置Qを視点としたときの推定視野範囲CA´内の位置(例えば注視点)を、特定位置として算出してもよい。
このようにすれば、視線方向CVと移動体の移動速度ベクトルPVの方向が異なる場合、或いは、視線方向CVと仮想カメラの移動速度ベクトルCMVの方向が異なる場合においても、よりエフェクトオブジェクトが画面に表示されるような画像を生成することができる。
(7)ネットワークシステム
本実施形態では、複数の端末とネットワークを介して相互にデータの送受信を行い、オンラインフライトシューティングゲームを実現可能としている。
図20及び図21は、本実施形態のネットワークシステムの構成を示す図である。例えば、本実施形態のネットワークシステムでは、複数の端末GT1〜GT3の間で無線通信を行って、各端末GT1〜GT3の所有者が対戦プレイや協力プレイを行うことができる。
無線通信の態様としては、図20に示すように、各端末GT1〜GT3が自律分散的にネットワークを構築し、直接的にゲーム情報等を含むパケットの送受信を行うアドホックモードと、図21に示すように、各端末GT1〜GT3がアクセスポイントACSPを介して間接的にゲーム情報等を含むパケットの送受信を行うインフラストラクチャモードとがある。インフラストラクチャモードでは、アクセスポイントACSPを介してインターネットInet(公衆通信網)にアクセスすることができる。そして、各端末GT1〜GT3は、インターネットInetに接続されたゲームサーバGSとの間でゲーム情報あるいはファームウェアのアップデート情報等を含むパケットをアクセスポイントACSPを介して送受信することができる。
特に、本実施形態では、各端末が相互にエフェクト発生情報を送受信する処理を行う。例えば、端末GT1において、端末GT1の操作対象の移動体POB1(プレーヤ1が操作する移動体)が、敵機NPCにミサイル攻撃を行い敵機NPCを撃墜したと判断されると、敵機NPCのIDと共に、敵機NPCを撃墜したという情報を、エフェクト発生情報として、他の端末GT2、GT3に送信する処理を行う。
例えば、端末GT1は、端末GT1で制御している敵機NPCの撃墜に伴って発生したエフェクト発生位置GT1_EPや、端末GT1で制御している自機POB1の移動速度ベクトルGT1_PV(或いは自機POB1の移動に追従する仮想カメラC1の移動速度ベクトルGT1_CMV)に基づいて、端末GT1のオブジェクト空間における特定位置GT1_Qを算出する処理を行う。そして、端末GT1のオブジェクト空間において、エフェクト発生位置GT1_EPから特定位置GT1_Qに向かって、エフェクトオブジェクトを配置する処理を行う。
また、端末GT2は、端末GT1からエフェクト発生情報を受信すると、エフェクト発生情報を解析し、敵機NPCが撃墜したと判断する。そして、敵機NPCの配置位置をエフェクト発生位置GT2_EPとして、端末GT2のオブジェクト空間において、エフェクトオブジェクトを配置する処理を行う。
例えば、端末GT2は、端末GT2で制御している自機POB2(プレーヤ2が操作する移動体)の移動速度ベクトルGT2_PV(或いは自機POB2の移動に追従する仮想カメラC2の移動速度ベクトルGT2_CMV)に基づいて、端末GT2のオブジェクト空間における特定位置GT2_Qを算出する処理を行う。そして、端末GT2のオブジェクト空間において、エフェクト発生位置GT2_EPから特定位置GT2_Qに向かって、エフェクトオブジェクトを配置する処理を行う。
また、端末GT3においても、端末GT3のオブジェクト空間において、端末GT3で制御している自機POB3(プレーヤ3が操作する移動体)の移動速度ベクトルGT3_PV(或いは自機POB3の移動に追従する仮想カメラC3の移動速度ベクトルGT3_CMV)に基づいて、端末GT3のオブジェクト空間における特定位置GT3_Qを算出する処理を行う。そして、端末GT3のオブジェクト空間において、エフェクト発生位置GT3_EPから特定位置GT3_Qに向かって、エフェクトオブジェクトを配置する処理を行う。
このように、本実施形態のネットワークシステムでは、各端末が、エフェクトの発生情報を互いに送受信し、各端末において特定位置の算出処理、エフェクトの配置処理、描画処理を独立して制御する。つまり、各端末は、エフェクトオブジェクトの配置位置を共有していないので、各端末に応じた自然なエフェクト演出処理を行うことができる。
(8)エフェクトオブジェクトの例
本実施形態では、爆発、炎、煙などのエフェクトオブジェクトを配置する手法について説明したが、例えば、戦闘機が破壊される様子を演出するための破片オブジェクト(パーティクルなど)を、特定位置に向かって移動させるようにしてもよい。つまり、破片オブジェクトを、移動させて配置する手法も、本実施形態のエフェクトオブジェクトの配置に含まれる。また、本実施形態では、戦闘機が撃墜された場合には、撃墜された戦闘機そのものを、エフェクトオブジェクトとしてオブジェクト空間に配置してもよい。つまり、撃墜された戦闘機を、特定位置に向かって移動させて配置する手法も、本実施形態のエフェクトオブジェクトの配置に含まれる。なお、戦闘機が撃墜された場合には、正常時(破壊前)の戦闘機から、破壊用の戦闘機(一部が破壊されているような戦闘機)に切り替えて、破壊用の戦闘機を、特定位置に向かって移動させて配置するようにしてもよい。
また、いわゆる、ビルボード表示を行う場合には、オブジェクト(スプライト、ポリゴン)に、エフェクト(爆発、炎、煙など)を表現するテクスチャをマッピングし、エフェクトテクスチャがマッピングされたオブジェクトを、仮想カメラCの視線方向CVに正対するように(オブジェクトの向きが、視線方向CVと逆方向になるように)、オブジェクト空間に配置する。
(9)フローチャート
仮想カメラが自機POBの移動に追従し、自機POBから発射されたミサイルMIが敵機NPCを撃墜した場合における、エフェクトオブジェクトを配置する処理の流れについて、図22を用いて説明する。
まず、敵機NPCの耐久値が0であるか否かを判断する(ステップS31)。敵機NPCの耐久値が0である場合には(ステップS31のY)、エフェクト発生時の自機POBの移動速度ベクトルPVに基づいて、10秒後の自機POBの位置Qを算出(推定)する(ステップS32)。そして、エフェクトオブジェクトを、エフェクト発生位置EPから位置Qに向かって、配置する処理を行う(ステップS33)。
(10)スケーリング処理との併用
なお、本実施形態のエフェクトオブジェクトは、仮想カメラの位置CPと、エフェクトオブジェクトの位置とに基づいて倍率を算出し、算出された倍率に基づいてスケーリング処理を行い、スケーリングされたエフェクトオブジェクトをオブジェクト空間に配置するようにしてもよい。このようにすれば、より迫力のある画像を生成することができる。
4.ゲーム処理
本実施形態では、フライトシューティングゲームの処理を行う。例えば、本実施形態では、プレーヤの射撃入力情報に基づいて、機関砲が発射されると機関砲の移動ベクトル方向へのレイと、敵機のヒットボリュームとの交差判定がなされ、交差されると判定されると敵機にヒットしたと判定される。
なお、本実施形態では交差判定で用いられる敵機のヒットボリュームについては、スケーリング処理を行っていないが、スケーリング処理で用いられる倍率に基づいて、ヒットボリュームをスケーリングしてもよい。つまり、倍率制御部113から受け取った倍率を、オブジェクトのモデルデータに適用するとともに、対応するヒットモデルに対しても適用してもよい。このようにすれば、簡易に敵機を撃ち落とすことができるので、初心者用などの技量のないプレーヤに適切なゲーム環境を提供することができる。
5.応用例
本実施形態において、スケーリング処理を行う場合には、視線方向と仮想カメラからオブジェクトに向く方向の角度の履歴、または仮想カメラとオブジェクトとの距離の履歴に基づいて、倍率を算出してもよい。例えば、描画フレームから所定期間前までの各フレーム(例えば、描画フレームを第Nフレームとすると、第Nフレームから60フレーム前までの各フレーム)の「視線方向と仮想カメラからオブジェクトに向く方向の角度」を角度履歴情報として記憶部に記憶する。そして、角度履歴情報に基づいて、倍率を算出してもよい。また、描画フレームから所定期間前までの各フレームの「仮想カメラとオブジェクトとの距離」を、距離履歴情報として記憶部に記憶する。そして、距離履歴情報に基づいて、倍率を算出してもよい。
例えば、角度履歴情報を参照し、視線方向と仮想カメラからオブジェクトに向く方向の角度が、所定期間(例えば、描画フレームを第Nフレームとすると、第Nフレームから60フレーム前までの間)、所定範囲内(例えば、当該角度が15度以内)である場合には、当該オブジェクトの倍率が大きくなるように変化させてもよい。このようにすれば、オブジェクトを画面中心に捕らえ続けることによって拡大させ、狙いやすくすることができる。
また、角度履歴情報を参照し、複数フレーム(例えば、描画フレームを第Nフレームとすると、第Nフレームから60フレーム前までの各フレーム)における、視線方向と仮想カメラからオブジェクトに向く方向の角度の平均値に基づいて倍率を算出してもよい。また、距離履歴情報を参照し、複数フレームにおける、仮想カメラとオブジェクトの距離の平均値に基づいて倍率を算出してもよい。このようにすれば、オブジェクトの位置が急激に変化した場合でも、倍率の変化を緩やかにすることができる。
また、角度履歴情報を参照し、所定フレーム前(例えば、描画フレームから30フレーム前)の視線方向と、仮想カメラからオブジェクトに向く方向の角度に基づいて、倍率を算出してもよい。また、距離履歴情報を参照し、所定フレーム前(例えば、描画フレームから30フレーム前)の仮想カメラとオブジェクトとの距離に基づいて、倍率を算出してもよい。また、角度履歴情報又は距離履歴情報を基に所定フレーム後の角度又は距離を予測し、予測した角度又は距離に基づいて倍率を決定してもよい。