以下、本実施形態について図面を用いて説明する。
なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
1.構成
図1に、本実施形態の画像生成システム(ゲームシステム)の機能ブロック図の一例を示す。なお同図において本実施形態は、少なくとも処理部100を含めばよく(或いは処理部100と記憶部170を含めばよく)、それ以外の各部(機能ブロック)については任意の構成要素とすることができる。
操作部160は、プレーヤが操作データを入力するためのものであり、その機能は、レバー、ボタン、ステアリング、シフトレバー、アクセルペダル、ブレーキペダル、マイク、センサー、或いは筺体などのハードウェアにより実現できる。
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAMなどのハードウェアにより実現できる。
情報記憶媒体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が行う処理としては、コイン(代価)の受け付け処理、各種モードの設定処理、ゲームの進行処理、選択画面の設定処理、オブジェクト(1又は複数のプリミティブ)の位置や回転角度(X、Y又はZ軸回り回転角度)を求める処理、オブジェクトを動作させる処理(モーション処理)、視点の位置(仮想カメラの位置)や視線角度(仮想カメラの回転角度)を求める処理、マップオブジェクトなどのオブジェクトをオブジェクト空間へ配置する処理、ヒットチェック処理、ゲーム結果(成果、成績)を演算する処理、複数のプレーヤが共通のゲーム空間でプレイするための処理、或いはゲームオーバー処理などを考えることができる。
処理部100は、移動・動作処理部110、オブジェクト空間設定部112、ヒットチェック部114、光源設定部116、基底光源選択部118、光源合成部119、画像生成部120、音生成部130を含む。なお、処理部100は、これらの各部(機能ブロック)を全て含む必要はなく、その一部を省略してもよい。
移動・動作処理部110は、オブジェクト(移動体)の移動情報(位置、回転角度)や動作情報(オブジェクトの各パーツの位置、回転角度)を求める処理を行う。即ち、操作部160によりプレーヤが入力した操作データやゲームプログラムなどに基づいて、オブジェクトを移動させたり動作(モーション、アニメーション)させたりする処理を行う。
より具体的には、移動・動作処理部110は、オブジェクト(移動体)の位置や回転角度を例えば1フレーム(1/60秒、1/30秒等)毎に変化させる。例えば(k−1)フレームでのオブジェクトの位置、回転角度をPk-1、θk-1とし、オブジェクトの1フレームでの位置変化量(速度)、回転変化量(回転速度)を△P、△θとする。するとkフレームでのオブジェクトの位置Pk、回転角度θkは例えば下式(1)、(2)のように求められる。
Pk=Pk-1+△P (1)
θk=θk-1+△θ (2)
オブジェクト空間設定部112は、移動体(キャラクタ、車、戦車、ロボット)、柱、壁、建物、マップ(地形)などの各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブ面で構成されるオブジェクト)をオブジェクト空間内に配置設定するための処理を行う。より具体的には、ワールド座標系でのオブジェクトの位置や回転角度(方向)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転)でオブジェクトを配置する。
ヒットチェック部114は、オブジェクト(キャラクタ)に対して、攻撃(キック、パンチ又はショット等)がヒットしたか否かをチェックする処理を行う。具体的には、一方のオブジェクトの部位(手、足)や武器(剣、ショット)が、他方のオブジェクト(体、武器)にヒットしたか否かをチェックする。そして、他方のオブジェクトに攻撃がヒットした場合には、攻撃がヒットしたことをプレーヤに視覚的に伝えられるためのヒットエフェクト光(ヒットエフェクト画像)が生成される。また、他方のオブジェクトは、攻撃を受けたことを示すモーション(やられモーション、被ヒットモーション)を行うようになる。
なお、オブジェクト(キャラクタ)の形状を簡略化して擬似的に表したヒットボリューム(ヒットボックス、ヒットエリア、簡易オブジェクト)や、オブジェクトの部位(手、足)や武器などが描く軌道を簡略化して擬似的に表したヒットボリュームを用いて、ヒットチェックを行うことが望ましい。
光源設定部116は、複数の光源を設定(配置)する処理を行う。具体的には、オブジェクト(照明位置又はオブジェクトの代表位置)を照明するための複数の光源(論理的な光源)を用意し、複数の光源の各光源に対して、照明方向ベクトル、色、明度又は光源位置などの光源情報(属性情報)を設定する。
なお、光源設定部116は、オブジェクトに対するヒットイベントが発生した場合に、ヒットチェック部114により検出されたヒット位置に、ヒットエフェクト光を表すための光源を設定(配置)する処理も行う。
基底光源選択部118は、光源の明度(光源情報)に基づいて、複数の光源の中から基底光源(メイン光源、基準光源)を選択する処理(光源のソート処理)を行う。
光源合成部119は、複数の光源を合成する処理(照明方向ベクトルの合成処理、色の合成処理等)を行い、合成光源(合成ベクトルや合成色などを、光源情報として有する光源)を求める処理を行う。より具体的には、光源設定部116により設定された複数の光源の照明方向ベクトルを合成し、合成光源の照明方向ベクトル(合成ベクトル)を求める。或いは、複数の光源に設定された色を合成することで、合成光源の色(合成色)を求める。
この場合、光源合成部119は、例えば、照明方向ベクトルの内積(内積と数学的に均等なものを含む)や、明度の割合(明度を関数により変換したものの割合を含む)などに基づいて。光源の合成率(照明方向ベクトルの合成率、色の合成率又は光源位置の合成率等)を得る。
また、光源合成部119は、基底光源選択部118により選択された基底光源(基底ベクトル)に対して、他の光源(照明方向ベクトル)を合成する処理を行う。そして、前のフレームで選択された光源とは異なる光源が基底光源選択部118により基底光源として選択された場合には、前のフレームで選択された光源の影響度(合成率)が、その後のフレーム経過に伴い徐々に減少するように、光源の合成を行う。これにより、光源の切り替わりが目立ってしまう事態を防止できる。
画像生成部120は、処理部100で行われる種々の処理の結果に基づいて画像処理を行い、ゲーム画像を生成し、表示部190に出力する。例えば、いわゆる3次元のゲーム画像を生成する場合には、まず、座標変換、クリッピング処理、透視変換或いは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、描画データ(プリミティブ面の頂点(構成点)に付与される位置座標、テクスチャ座標、色(輝度)データ、法線ベクトル或いはα値等)が作成される。そして、この描画データ(プリミティブ面データ)に基づいて、ジオメトリ処理後のオブジェクト(1又は複数プリミティブ面)の画像が、描画バッファ174(フレームバッファ、ワークバッファ等のピクセル単位で画像情報を記憶できるバッファ)に描画される。これにより、オブジェクト空間内において仮想カメラ(所与の視点)から見える画像が生成されるようになる。
音生成部130は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
画像生成部120が含むシェーディング部122は、オブジェクトに陰影をつけるための処理を行う。より具体的には、光源情報(照明方向ベクトル、色又は光源位置等)、照明モデル、オブジェクトの法線ベクトル(頂点又は面の法線ベクトル)などに基づいてシェーディング処理を行う。
ここで、シェーディング処理は、例えばオブジェクトの各点(ピクセル、ドット)での光の色(RGB、YCrCb、YUV、YIQ)を決定する処理と定義できる。そして、このシェーディング処理は、実世界での照明現象を模擬した数学的なモデルである照明モデルを用いて行われる。この照明モデルとしては、実世界現象のモデル化の態様に応じて、ランバード(Lambert)、フォン(Phong)、ブリン(Blinn)などの種々のモデルがある。また、プリミティブ面(ポリゴン、曲面等)の陰影づけを滑らかにして、プリミティブ面の境界を目立たなくする手法として、グーロー(Gouraud)シェーディング、フォン(Phong)シェーディングなどの種々のスムースシェーディング手法がある。
なお、本実施形態の画像生成システムは、1人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、このようなシングルプレーヤモードのみならず、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。
また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、1つの端末を用いて生成してもよいし、ネットワーク(伝送ライン、通信回線)などで接続された複数の端末(ゲーム機、携帯電話)を用いて生成してもよい。
2.本実施形態の手法
次に本実施形態の手法について図面を用いて説明する。なお、以下では、格闘ゲームに本実施形態を適用した場合を主に例にとり説明するが、本実施形態は、格闘ゲーム以外の種々のゲームに広く適用できる。
2.1 光源の合成
さて、よりリアルで高品質なゲーム画像を生成するためには、より多くの数の光源を用いてシェーディングを行うことが望ましい。
しかしながら、光源の数が多くなると、その分だけシェーディングの処理負荷が重くなってしまうという問題がある。
例えばグーローシェーディングでは、オブジェクトの頂点に設定された法線ベクトルと光源の照明方向ベクトルとの内積を求めることで、オブジェクトの各頂点色を求める。従って、オブジェクトの頂点数がI個であり、光源の数が1個の場合には、頂点色を求める処理がI回分だけ必要になる。従って、光源の数がJ個になると、頂点色を求める処理が(I×J)回分だけ必要になってしまう。
通常、オブジェクトの頂点数Iは非常に多いため、このように光源数を増やすことによる処理負荷の増加は過大なものとなる。
このような課題を解決するために本実施形態では以下のような手法を採用している。
即ち、本実施形態では図2(A)に示すように、複数の光源LS1、LS2を用意する(3個以上用意してもよい)。
例えば、光源LS1は、その照明方向ベクトルがV11であり、その色がC1であり、その明度がBR1(例えば色C1をグレースケールで表した時の明るさ)である。ここで、照明方向ベクトルV11は、光源LS1とオブジェクトOB1(照明位置又はOB1の代表位置LP1)とを結ぶ方向に沿ったベクトル(単位ベクトル)である。
また、光源LS2は、その照明方向ベクトルがV21であり、その色がC2であり、その明度がBR2である。ここで、照明方向ベクトルV21は、光源LS2とオブジェクトOB1(照明位置又は代表位置LP1)とを結ぶ方向に沿ったベクトル(単位ベクトル)である。
本実施形態では図2(A)に示すように、これらの光源LS1、LS2(論理的な光源)を合成することで、オブジェクトOB1に対する合成光源LSS1(シェーディング用の光源)を求める。
より具体的には、オブジェクトOB1に対する光源LS1、LS2の照明方向ベクトルV11、V21を合成し、合成光源LSS1の照明方向ベクトルVS1(単位ベクトル)を求める。また、光源LS1、LS2の色C1、C2を合成し、合成光源LSS1の色CS1を求める。
そして、この求められた合成光源LSS1を用いて、オブジェクトOB1に対するシェーディングを行う。即ち、光源LS1、LS2の代わりに、照明方向ベクトルがVS1で色がCS1である合成光源LSS1(平行光源)が仮想的に存在すると考え、この合成光源LSS1だけを用いてシェーディングを行う。
一方、オブジェクトOB2については、図2(B)に示すような合成処理を行う。即ち、光源LS1、LS2を合成することで、オブジェクトOB2(照明位置又はOB2の代表位置LP2)に対する合成光源LSS2を求める。
より具体的には、オブジェクトOB2に対する光源LS1、LS2の照明方向ベクトルV12、V22を合成し、合成光源LSS2の照明方向ベクトルVS2を求める。また、光源LS1、LS2の色C1、C2を合成し、合成光源LSS2の色CS2を求める。
そして、この求められた合成光源LSS2を用いて、オブジェクトOB2に対するシェーディングを行う。
このようにすれば、論理的な光源(LS1、LS2)は複数個存在するにも拘わらず、シェーディング用の物理的な光源は例えば1個で済むため、シェーディングの処理負荷を軽減できる。例えば、オブジェクトの頂点数がI個である場合には、頂点色を求める処理は、各オブジェクトについてI回分だけ行えば済むようになる。
そして、本実施形態では、論理的な光源(LS1、LS2)が複数個存在するため、光源が1個しか存在しない場合に比べてリアルな画像表現が可能になる。例えば、光源LS1、LS2の位置関係や色の関係に応じて、合成光源の照明方向ベクトルや色が様々に変化するようになる。また、図2(A)、(B)から明らかなように、オブジェクト毎に、或いはオブジェクトと光源との位置関係に応じて、シェーディングに使用される合成光源は異なったものになり、異なったシェーディングが施されるようになる。
例えば本実施形態と異なる手法として、複数の光源を用意し、オブジェクトとの位置関係に基づいて、その複数の光源の中から適当な1つの光源を選択し、選択された光源を用いてオブジェクトのシェーディングを行う手法が考えられる。
しかしながら、この手法では、例えば図2(A)において光源LS1が選択された場合には、光源LS2の影響が全く無視されてしまう。逆に、光源LS2が選択された場合には、光源LS1の影響が全く無視されてしまう。
即ち、光源LS1が選択された場合には照明方向はV11の方向になり、LS2が選択された場合にはV21の方向になるというように、照明方向が択一的になってしまう。同様に、光源LS1の色が白でLS2の色が赤であったとすると、LS1が選択された場合には白の陰影づけだけがオブジェクトに施され、LS2が選択された場合には赤の陰影づけだけが施されるようになり、陰影づけされる色も択一的になってしまう。従って、今ひとつリアルな画像を生成できない。
これに対して本実施形態では、合成光源LSS1の照明方向、色は、光源LS1の照明方向、色のみならず、光源LS2の照明方向、色の影響も受けるようになる。従って、上記の手法に比べて、得られる画像のリアル度を格段に高めることができる。
なお、以下では、説明を簡単にするために、2個又は3個の数の光源を合成する場合を主に例にとり説明する。しかしながら、この明細書で説明する本実施形態の手法は、3個以上又は4個以上の数の光源を使用する場合にも当然に拡張できる。
2.2 光源の合成率
さて、本実施形態では光源の合成率(照明方向ベクトルの合成率、色の合成率)を、以下に説明する手法で求めている。
例えば、図3(A)において、光源LS1、LS2の明度をBR1、BR2とした場合に、明度の割合BRP(例えばBRP=BR2/BR1)を求める。
また、光源LS1、LS2の照明方向ベクトルV1、V2の内積VIP=V1・V2を求める。
次に、これらの明度割合BRPと内積VIPに基づいて、合成率γ=F(BRP、VIP)を求める。ここで、F(BRP、VIP)は、BRP、VIPを引数とする関数である。
そして、この合成率γを用いて、光源LS1、LS2の照明方向ベクトルV1、V2を合成し、合成光源LSSの照明方向ベクトルVSを求める。或いは、LS1、LS2の色C1、C2を合成し、LSSの色CSを求める。
VS=V1+γ×V2 (3)
CS=C1+γ×C2 (4)
なお、上式(3)のベクトル合成処理は、ベクトルVS、V1、V2のX、Y、Z座標の各々について行う。また、上式(4)の色合成処理は、色CS、C1、C2のR、G、B成分(広義には第1〜第3の成分)の各々について行う。
また、上式(3)、(4)は、加算ブレンディング方式を採用しているが、下式のような狭義のブレンディング方式を採用してもよい。
VS=(1−γ)×V1+γ×V2 (5)
CS=(1−γ)×C1+γ×C2 (6)
また、合成率γを求める際に使用する明度割合(明度比率)BRPは、BR1、BR2そのものの割合(比率)であってもよいし、BR1、BR2を関数等で変換することで得られるBR1’、BR2’の割合であってもよい。
また、合成率γを求める関数Fとしては、例えばF(BRP、VIP)=K×BRP×VIP(Kは定数)を考えることができる。また、関数G、Hを用いて、F(BRP、VIP)=K×G(BRP)×H(VIP)とすることもできる。ここで、関数G、Hとしては、引数を非線形変換する関数(正弦関数、余弦関数、n次式)などを採用できる。
また、合成率γを、内積VIPのみに基づいて求めたり、明度割合BRPにのみに基づいて求めてもよい。
以上のように本実施形態では、光源LS1、LS2の照明方向ベクトルV1、V2の内積VIPを用いて合成率γを求めている。従って、図3(A)、(B)に示すように、照明方向ベクトルV1、V2間のなす角度に応じて、合成率γも変化するようになり、多様な画像表現を実現できる。
より具体的には、内積VIPを用いて合成率γを求めるようにすれば、図3(B)のようにV1とV2のなす角度が大きくなって90度に近づいたとしても、合成光源LSSの照明方向ベクトルVSの向きを、V2の方向よりもV1の方向に常に近づけるようにすることができる。これにより、例えば照明ベクトルV1(基底ベクトル)を、常に支配的な光源に設定できるようになる。
また本実施形態では、光源LS1、LS2の明度BR1、BR2の割合BRPを用いて合成率γを求めている。従って、明度(RGBをグレースケール変換した時の明るさ等)の高い方の光源を支配的な光源に設定することが可能になる。例えば、図3(A)、(B)において、光源LS1の明度BR1の方が明るい場合には、合成光源LSSの照明方向ベクトルVSの向きが、V2の方向よりもV1の方向に近づくようになる。
2.3 疑似点光源
本実施形態では平行光源を用いて点光源を擬似的に表現している。
即ち図4(A)において、光源LS1は通常の平行光源(例えば日光)に設定され、光源LS2は疑似点光源(例えば松明)に設定されている。そして、この場合には、オブジェクトOB(照明位置又はOBの代表位置LP)と疑似点光源LS2との距離DIS(広義には位置関係)を求める。そして、疑似点光源LS2の明度BR2を、この距離DISに応じて変化(減衰)させる。具体的には、例えば、BR2=BR2/DISn(例えばn=3)という変換を行う。また、点光源LS2の照明方向ベクトルV2を、LS2からOB(LP)へと向かう方向のベクトルに設定する。
このようにすることで、平行光源を用いながら、擬似的に点光源を表現できるようになる。
即ち、図4(B)に示すように、オブジェクトOBと疑似点光源LS2との位置関係(距離関係、方向関係)が変化すると、OBに対するLS2の明度BR2が変化(増減)したり、照明方向ベクトルV2の方向が変化するようになる。
なお、平行光源(例えば日光)として設定された光源LS1については、その明度BR1や照明方向ベクトルV1の方向は、オブジェクトOBが移動しても一定になる。但し、BR1やV1の方向を、時間経過やゲームイベントの発生に伴い変化させるようにしてもよい。
図5、図6に、本実施形態により生成される画像の例を示す。
図5は、ゲームフィールド(オブジェクト空間)の全体を示す画像の例である。このゲームフィールドには、日光を表現する光源LS1や、松明を表現する疑似点光源LS2などが設定されており、これらの光源LS1、LS2を用いてオブジェクト(キャラクタ)OB1、OB2のシェーディングが行われる。
図6は、図2(A)、(B)の手法で光源LS1、LS2を合成し、求められた合成光源を用いてオブジェクトOB1をシェーディングした場合の画像の例である。
図6に示すように、本実施形態によれば、オブジェクトOB1の体全体が、光源LS1、LS2の合成光源により自然にシェーディングされるようになる。また、合成光源の色は、日光(LS1)の白と松明(LS2)の赤が合成された色になる。従って、あたかも2つの光源でシェーディングしたかのように見えるリアルな画像を提供できる。また、オブジェクトOB1が、松明(LS2)から離れた位置から松明の方に近づいて行った場合に、日光により支配的にシェーディングされる状態から、松明により支配的にシェーディングされる状態に徐々に移行するようになり、より自然な画像表現が可能になる。
なお、図7に、日光(LS1)だけを用いてオブジェクトOB1をシェーディングした場合の画像の例を示し、図8に、松明(LS2)だけを用いてOB1をシェーディングした場合の画像の例を示す。
図7では、松明(LS2)からの光の影響が、オブジェクトOB1のシェーディングの際に考慮されず、日光(LS1)の白の光だけでシェーディングされてしまうため、図6に比べて今ひとつリアルな画像を表現できない。また、図8では、松明(LS2)からの赤の色の光だけでオブジェクトOB1がシェーディングされてしまうため、不自然な画像になってしまう。
この場合、例えば、オブジェクトOB1が松明(LS2)に近づいた時に、所与のタイミングで、日光(LS1)だけを用いるシェーディングから、松明(LS2)だけを用いるシェーディングに切り替える手法を考えることもできる。
しかしながら、この手法によると、プレーヤの見る画像が、図7の画像から図8の画像に突然切り替わる事態が生じてしまい、プレーヤが不自然さを感じる。
図2(A)、(B)の本実施形態によれば、光源LS1、LS2の合成光源でオブジェクトOB1がシェーディングされるため、上記のような事態を防止でき、より自然でリアルな画像を生成できる。
2.4 基底光源
本実施形態では、光源を合成する前に、複数の光源の中から基底光源(メイン光源、基準光源)を、まず選択する。そして、この選択された基底光源に対して、他の光源を合成するようにしている。
より具体的には、例えば図9(A)では、光源LS1が基底光源として選択されている。この基底光源の選択は、例えば光源の明度(広義には光源情報)に基づいて行う。そして、明度が最も高い光源を基底光源として選択する。図9(A)では、光源LS1〜LS3のうち、LS1の明度BR1がLS2、LS3の明度BR2、BR3よりも高いため、LS1が基底光源として選択される。
本実施形態では、このようにして選択された基底光源LS1に対して、他の光源LS2、LS3を合成する。
即ち、図2(A)〜図4(B)で説明した手法を用いて、基底光源LS1の照明方向ベクトルV1に対して、光源LS2、LS3の照明方向ベクトルV2、V3を合成する。また、LS1の色C1に対して、LS2、LS3の色C2、C3を合成する。そして、得られた合成光源LSS(合成ベクトルVS、合成色CS)でオブジェクトOB(LP)をシェーディングする。
この場合に本実施形態では、基底光源よりも他の光源の合成率が低くなるように、基底光源に対して他の光源を合成している。
従って、図9(B)に示すように、LS1の明度BR1の方がLS2のBR2より高く、LS1が基底光源として選択された場合には、合成光源LSSの照明方向ベクトルVSの方向が、V2の方向よりもV1の方向に近づくようになる。また、図9(C)に示すように、LS2の明度BR2の方がLS1のBR1より高く、LS2が基底光源として選択された場合には、VSの方向が、V1の方向よりもV2の方向に近づくようになる。即ち、合成光源の照明方向ベクトルの方向を、明度が高い基底光源の照明ベクトルの方向の方に自動的に近づけることができる。これにより、明度が高い基底光源を支配的な光源に設定して、オブジェクトOBをシェーディングすることが可能になる。
例えば図5に示すゲームフィールドにおいて、オブジェクトOB1と疑似点光源LS2(松明)との距離が遠い場合には、図4(A)、(B)で説明したようにOB1に対する疑似点光源LS2の明度は低くなる。従って、この場合には、LS2に比べて明度が高い光源LS1(日光)が基底光源として選択され、LS1の照明方向にほぼ一致する照明方向で、オブジェクトOB1がシェーディングされるようになる。
一方、オブジェクトOB1が疑似点光源LS2(松明)に近づくと、OB1、LS2間の距離が短くなり、OB1に対する疑似点光源LS2の明度は高くなる。そして、OB1、LS2間が所与の距離になると、LS2(松明)の明度の方がLS1(日光)の明度よりも高くなり、LS2が基底光源として選択される。これにより、LS2の照明方向に近い照明方向で、オブジェクトOB1がシェーディングされるようになる。
従って、OB1、LS2間の距離が遠い場合には、LS1(日光)が支配的な光源になるシェーディングが行われ、OB1、LS2間の距離が近い場合には、LS2(松明)が支配的な光源になるシェーディングが行われるようになる。
さて、図9(A)に示す手法を採用すると、例えば基底光源がLS1からLS2に切り替わった際に、合成光源LSSの照明方向ベクトルVSの方向が、図9(B)、図9(C)に示すように急激に切り替わってしまう可能性がある。また、合成光源LSSの色CSが、例えば白(日光)から赤(松明)に急激に切り替わってしまう可能性がある。
そこで本実施形態では、基底光源が、例えばLS1(第Nのフレームの第Kの光源)からLS2(第N+1のフレームの第Lの光源)に切り替わった場合に、合成処理に対するLS1の影響度(合成率)が、フレーム経過に伴い徐々に減少するように、光源の合成処理を行っている。
即ち図10(A)に示すように、合成光源LSSのVSの方向が、LS1のV1の方向から、LS2のV2の方向の方に徐々に変化するように、光源の合成処理を行っている。また、合成光源LSSの色CSが、LS1の色C1から、LS2の色C2の方に徐々に変化するように、光源の合成処理を行っている。
より具体的には、このような合成処理は例えば以下のような手法で実現できる。
即ち、図10(B)に示すように、前回のフレーム(第Nのフレーム)で得られた合成光源LSS’の情報(VS’、CS’)を破棄せずに取っておく。そして、この前回(過去)のフレームの合成光源LSS’と、現在のフレーム(第N+1のフレーム)の合成光源LSSを合成し、最終的な合成光源LSSLを求める。そして、このLSSLを用いてオブジェクトOBをシェーディングする。
例えば、前回のフレームの合成光源LSS’の照明方向ベクトルVS’、色CS’と、現在のフレームの合成光源LSSの照明方向ベクトルVS、色CSとを、合成率GRを用いて下式のように合成し、最終的な合成光源LSSLの照明方向ベクトルVSL、色CSLを求める。
VSL=(1.0−GR)×VS’+GR×VS (7)
CSL=(1.0−GR)×CS’+GR×CS (8)
なお、上式(7)、(8)に示すような狭義のブレンディング方式ではなく、前述した式(3)、(4)のような加算ブレンディング方式で合成処理を行ってもよい。
また、上式の合成率GRを、可変に制御するようにしてもよい。
例えば、基底光源の切り替わりの際に、図9(B)の状態から図9(C)の状態に素早く移行させたい場合には、合成率GRを1.0(最大値)に設定したり、1.0に近い値に設定する。
このようにすれば、上式(7)、(8)から明らかなように、前回(過去)のフレームの合成光源LSS’のVS’、CS’が、最終的な合成光源LSSLのVSL、CSLに対して与える影響が少なくなる。これにより、光源の素早い切替が可能になる。
一方、基底光源の切り替わりの際に、図10(A)に示すように、LSSのVSやCSを徐々に変化させたい場合には、GRを小さな値(0.0に近い値)に設定する。或いは、小さな値から大きな値にフレーム経過に伴い変化するように、GRを設定する。
このようにすれば、上式(7)、(8)から明らかなように、前回(過去)のフレームの合成光源LSS’のVS’、CS’の影響が強く残るようになる。これにより、最終的な合成光源LSSLのVSL、CSLがゆっくりと変化するようになり、より自然で滑らかな光源の切替が可能になる。
2.5 アンビエント光への付加
本実施形態では、複数の光源のうち、合成処理の対象とならなかった光源の色を、アンビエント光の色に付加するようにしている。
例えば図11(A)では、光源LS1、LS2、LS3を合成することで、合成光源LSSが求められ、LSSに基づいてオブジェクトOBのシェーディングが行われている。
一方、図11(B)では、オブジェクトOBが移動しており、OBとLS1、LS2、LS3の位置関係が変化している。そして図11(B)では、基底光源となるLS1の照明方向ベクトルV1と、光源LS2の照明方向ベクトルV2とのなす角度が90度(直角)以上になっている。
このような場合に、光源LS2の影響がLSSの合成処理に及んだままになると、不自然な事態が生じるおそれがある。特に、光源の合成率γを、図3(A)、(B)に示すように内積値VIPに基づいて求めている場合には、V1とV2のなす角度が90度よりも広がると、VIPが負の値になってしまい、合成率γを適切に求めることができなくなるおそれがある。
そこで本実施形態では、図11(B)のようにV1とV2のなす角度が90度以上になった場合には、光源LS2を合成処理の対象から除外している。そして、この除外された光源LS2の色C2を、アンビエント光の色(RGB)に付加する。
このようにすれば、光源LS2は、合成処理の対象からは除外されるものの、その影響は、アンビエント光の色として残るようになる。
例えば図5において、オブジェクトOB1と松明(LS2)の位置関係が変化し、松明が光源の合成処理の対象から除外された場合を考える。このような場合に、松明(LS2)による照明の影響が全く無くなってしまうと、今ひとつリアルな画像を生成できない。
本実施形態では、このような場合にも、松明(LS2)の色(赤)がアンビエント光の色に付加される。従って、松明による赤の照明の影響が少なからず残るようになり、少ない処理でリアルな画像の生成が可能になる。
なお、図11(B)において光源LS2を合成処理の対象から除外するか否かは、V1とV2の内積VIPが負になったか否かで判断することが望ましいが、これとは異なる基準で判断するようにしてもよい。
また、LS2の色C2そのものをアンビエント光の色に付加する代わりに、C2に変換処理を施し、変換処理後のC2をアンビエント光の色に付加するようにしてもよい。
2.6 ヒットイベント時のエフェクト光
格闘ゲームなどにおいては、一方のオブジェクト(キャラクタ)の攻撃(武器、キック、パンチ)が他方のオブジェクトにヒットするヒットイベントの発生時に、ヒットイベントが発生したことをプレーヤに視覚的に伝えるヒットエフェクト光を表示することが望ましい。
本実施形態では、このヒットエフェクト光の表示を、図2(A)、(B)で説明した光源合成処理で実現している。
例えば図12(A)では、オブジェクトOB2(キャラクタ)の攻撃(武器)がオブジェクトOB1にヒットしている。そして、ヒットチェック処理により、ヒット位置としてHP1、HP2、HP3、HP4が検出されている。
この場合に本実施形態では図12(B)に示すように、これらの複数のヒット位置HP1、HP2、HP3、HP4に、ヒットエフェクト光を表現するための光源LS1、LS2、LS3、LS4を設定(配置)する。
そして、これらの光源LS1〜LS4を図2(A)、(B)で説明した手法により合成することで、図13(A)に示すように、合成光源LSS1を求める。そして、求められた合成光源LSS1に基づいてオブジェクトOB1のシェーディングを行う。
より具体的には、光源LS1〜LS4からオブジェクトOB1の代表位置LP1に向かう方向の照明方向ベクトルを求める。そして、これらの照明方向ベクトルを合成し、合成光源LSS1の照明方向ベクトルVS1を求める。また、光源LS1〜LS4の色を合成し、合成光源LSS1の色CS1を求める。
そして、求められた照明方向ベクトルLSS1、色CS1を用いて、オブジェクトOB1の各頂点の色などを求め、OB1のシェーディングを行う。
一方、オブジェクトOB2については、図13(B)に示すような合成光源LSS2を求める。そして、求められた合成光源LSS2に基づいてオブジェクトOB2のシェーディングを行う。
より具体的には、光源LS1〜LS4からオブジェクトOB2の代表位置LP2に向かう方向の照明方向ベクトルを求める。そして、これらの照明方向ベクトルを合成し、合成光源LSS2の照明方向ベクトルを求める。また、光源LS1〜LS4の色を合成し、合成光源LSS2の色CS2を求める。そして、求められた照明方向ベクトルLSS2、色CS2を用いて、オブジェクトOB2の各頂点の色などを求め、OB2のシェーディングを行う。
図14に、図12(A)〜図13(B)の本実施形態の手法により生成される画像の例を示す。
このように本実施形態によれば、あたかも複数個の光源で構成されているかのように見えるヒットエフェクト光を、簡素な処理で生成できる。
しかも、ヒットチェックにより検出されたヒット位置に複数の光源を配置するだけで、その後の光源合成処理は自動的に行われる。従って、ヒット位置に応じて処理内容を変えるなどの煩雑な処理を必要とすることなく、ヒット位置を反映した適正な合成光源で、オブジェクトをシェーディングすることが可能になる。
また、本実施形態によれば、図13(A)、(B)に示すように、同じヒット位置に基づいて、オブジェクトOB1用の合成光源LSS1と、オブジェクトOB2用の合成光源LSS2の両方を自動的に生成できる。そして、これらのLSS1、LSS2を用いることで、オブジェクトOB1、OB2に対して、異なったシェーディングを施すことが可能になり、よりリアルなシェーディングを実現できる。
なお、ヒットイベントが発生する前においては、合成光源LSS1やLSS2に使用されるシェーディング用の物理的な光源を、他の用途に使用することが望ましい。ここで、他の用途としては、例えば、オブジェクトの逆光部分を照明する逆光補正用の光源などの用途が考えられる。そして、ヒットイベントが発生したことを条件に、このシェーディング用の物理的な光源を、図13(A)、(B)に示すようなヒットエフェクト光の光源に使用するようにすればよい。
また、ヒットエフェクト光の生成時には、図10(A)、(B)や上式(7)、(8)で説明した合成率GR(移行速度)を、なるべく大きな値に設定することが望ましい。例えば、ヒットエフェクト光の生成時には、上式(7)、(8)においてGR=1.0に設定する。このようにすることで、例えば他の用途の光源(逆光補正用の光源)からヒットエフェクト用の光源への切替を素早く行うことが可能になる。
3.本実施形態の処理
次に、本実施形態の処理の詳細例について、図15、図16、図17のフローチャートを用いて説明する。
まず、各光源について、オブジェクト(照明位置)に対する照明方向ベクトルと明度(減衰度)を決定する(ステップS1)。ここで、減衰率は、図4(A)、(B)で説明した疑似点光源の明度の減衰率である。そして、全ての光源について処理が終了するまで処理を繰り返す(ステップS2)。
次に、ステップS1で決定した明度(減衰後の明度)に基づき、オブジェクトを照明する光源を、明るい順になるようにソートする(ステップS3)。即ち、明度が最も高い光源が先頭になるようにソートする。そして、全ての光源のソートが終了するまで処理を繰り返す(ステップS4)。
次に、処理対象となる光源が、ソートされた光源のうちの先頭の光源か否かを判断する(図16のステップS5)。そして、先頭の光源である場合には、その光源が、前回のフレームで基底光源として使用した光源と同じか否かを判断する(ステップS6)。そして、同じ光源である場合にはステップS10に移行する。
一方、違う光源である場合(基底光源が切り替わった場合)には、合成率GRの移行速度SSを早くするか否かを判定する(ステップS7)。そして、速くする場合(図12(A)〜図14のヒットエフェクト光の場合)には、SSを1.0(最大値)に設定する(ステップS8)。一方、速くしない場合(図5の日光と松明の場合)には、SSを0.0(最小値)に設定する(ステップS9)。
次に、処理対象光源を基底光源に設定する(ステップS10)。より具体的には、基底光源(図9(A)〜(C)参照)の照明方向ベクトルを基底ベクトルVBに設定すると共に合成ベクトルVSの初期値に設定する。また、基底光源の明度を基底明度BRBに設定し、基底光源の色を合成色CSの初期値に設定する。そして、追従度Tを1.0に設定し(ステップS11)、ステップS19に移行する。
ステップS5で、処理対象光源が先頭の光源ではないと判断された場合には、基底明度BRBに対する、処理対象光源の明度BRの割合BRPを求め、求められたBRPを0.0〜1.0の範囲にリミットする(ステップS12)。また、基底ベクトルVBと処理対象光源の照明方向ベクトルVとの内積VIPを求める(ステップS13)。
次に、内積VIPが負の値か否かを判断し(ステップS14)、VIP<0の場合には、処理対象光源の色CとVIPに基づき、アンビエント光の色に付加すべき色CAを求める(ステップS15。図11(A)、(B)参照)。
一方、VIP≧0の場合には、明度割合BRPと内積VIPに基づいて、合成率γ=F(BRP,VIP)を求める(ステップS16。図3(A)、(B)参照)。
次に、基底光源と処理対象光源の明度が近いほど小さな値になる追従度T={T+(1−BRP)}×0.5を設定する(ステップS17)。
次に、求まった合成率γと、処理対象光源の照明方向ベクトルV及び色Cに基づいて、合成ベクトルVS=VS+γ×V、合成色CS=CS+γ×Cを求める。(ステップS18。図2(A)、(B)、図9(A)、(B)、(C)参照)。そして、全ての処理対象光源を処理したか否かを判断し(ステップS19)、処理していない場合にはステップS5に戻る。
次に、合成ベクトルVSを正規化する(図17のステップS20)。そして、過去の合成ベクトルとの合成率GRをコントロールするか否かを判断する(ステップS21)。
そして、GRをコントロールする場合には、GR=T3に設定し、得られたGRを0.1〜1.0の範囲にリミットする(ステップS22)。このようにすることで、GRは、T=1.0付近で急峻に0.0から1.0に変化するようになる。一方、GRをコントロールしない場合には、GR=1.0に設定する(ステップS23)。
次に、GR=GR×SSに設定し、得られたGRを0.05〜1.0の範囲にリミットする(ステップS24)。GR≧0.05となるようにGRをリミットすることで、移行速度SS=0.0の場合にも、GRが0.05よりも小さくならないことが保証されるようになる。
次に、移行速度SS=SS+1/M(例えばM=24)に設定し、得られたSSを0.0〜1.0の範囲にリミットする(ステップS25)。このようにすることで、移行速度SSが、フレーム経過に伴い徐々に増加するようになる。
次に、前回のフレームの合成ベクトルVS’と、今回のフレームの合成ベクトルVSと、合成率GRに基づき、最終合成ベクトルVSL=(1.0−GR)×VS’+GR×VSを求める(ステップS26。図10(B)参照)。
また、前回のフレームの合成色CS’と、今回のフレームの合成色CSと、合成率GRに基づき、最終合成色CSL=(1.0−GR)×CS’+GR×CSを求める(ステップS27)。
そして、求められた最終合成ベクトルVSLと、最終合成色CSLと、移行速度SSを、次のフレームの処理に使用するために主記憶部に保存する(ステップS28)。
最後に、最終合成ベクトルVSL、最終合成色CSLに基づき、オブジェクトのシェーディングを行う(ステップS29)。
以上のようにすることで、当該フレームでの光源の合成処理が完了し、オブジェクトをシェーディングすることができる。
4.ハードウェア構成
次に、本実施形態を実現できるハードウェアの構成の一例について図18を用いて説明する。
メインプロセッサ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等は、その指示と渡されたデータとに基づいて、本発明の各部を実現することになる。
図19(A)に、本実施形態を業務用ゲームシステム(画像生成システム)に適用した場合の例を示す。プレーヤは、ディスプレイ1100上に映し出されたゲーム画像を見ながら、操作部1102(レバー、ボタン)を操作してゲームを楽しむ。内蔵されるシステムボード(サーキットボード)1106には、各種プロセッサ、各種メモリなどが実装される。そして、本実施形態の各部を実現するためのプログラム(データ)は、システムボード1106上の情報記憶媒体であるメモリ1108に格納される。以下、このプログラムを格納プログラム(格納情報)と呼ぶ。
図19(B)に、本実施形態を家庭用のゲームシステム(画像生成システム)に適用した場合の例を示す。プレーヤはディスプレイ1200に映し出されたゲーム画像を見ながら、コントローラ1202、1204などを操作してゲームを楽しむ。この場合、上記格納プログラム(格納情報)は、本体システムに着脱自在な情報記憶媒体であるCD1206、或いはメモリカード1208、1209などに格納されている。
図19(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に伝送し端末において出力することになる。
なお、図19(C)の構成の場合に、本実施形態の各部を、ホスト装置(サーバー)と端末とで分散して実現するようにしてもよい。また、本実施形態の各部を実現するための上記格納プログラム(格納情報)を、ホスト装置(サーバー)の情報記憶媒体と端末の情報記憶媒体に分散して格納するようにしてもよい。
またネットワークに接続する端末は、家庭用ゲームシステムであってもよいし業務用ゲームシステムであってもよい。
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。
例えば、明細書中の記載において広義な用語(光源情報、光源の合成、光源等)として引用された用語(照明方向ベクトル・色・光源位置・明度、照明方向ベクトル・色の合成、疑似点光源等)は、明細書中の他の記載においても広義な用語に置き換えることができる。
また、本発明の光源の合成処理手法は、図2(A)〜図17で詳細に説明した手法に限定されず、種々の変形実施が可能である。
例えば、合成率を、内積や明度割合以外のパラメータで求めるようにしてもよい。また、光源を合成する方式も、加算ブレンディング方式や狭義のブレンディング方式に限定されない。
特に、合成処理の対象とならなかった光源の色をアンビエント光の色に付加する発明や、複数のヒット位置に複数の光源を設定して合成光源を求める発明においては、光源の合成処理を、本実施形態で説明したものとは異なる処理で実現してもよい。
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の1の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
また、本発明は種々のゲーム(格闘ゲーム、競争ゲーム、シューティングゲーム、ロボット対戦ゲーム、スポーツゲーム、ロールプレイングゲーム等)に適用できる。
また本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、マルチメディア端末、ゲーム画像を生成するシステムボード等の種々の画像生成システム(ゲームシステム)に適用できる。