以下、添付図面を参照して、本発明の実施の形態について説明する。ここでは、本発明をビデオゲームにおける画像の生成に適用した場合を例として説明する。
図1は、この実施の形態に適用されるビデオゲーム装置の構成を示すブロック図である。図示するように、ビデオゲーム装置100は、装置本体101を中心として構築される。この装置本体101は、その内部バス119に接続された制御部103、RAM(Random Access Memory)105、ハードディスク・ドライブ(HDD)107、サウンド処理部109、グラフィック処理部111、DVD/CD−ROMドライブ113、通信インターフェイス115、及びインターフェイス部117を含む。
この装置本体101のサウンド処理部109は、スピーカーであるサウンド出力装置125に、グラフィック処理部111は、表示画面122を有する表示装置121に接続されている。DVD/CD−ROMドライブ113には、記録媒体(本実施の形態では、DVD−ROMまたはCD−ROM)131を装着し得る。通信インターフェイス115は、ネットワーク151に接続される。インターフェイス部117には、入力部(コントローラ)161とメモリーカード162とが接続されている。
制御部103は、CPU(Central Processing Unit)やROM(Read Only Memory)などを含み、HDD107や記録媒体131上に格納されたプログラムを実行し、装置本体101の制御を行う。制御部103は、内部タイマを備えている。RAM105は、制御部103のワークエリアである。HDD107は、プログラムやデータを保存するための記憶領域である。サウンド処理部109は、制御部103により実行されているプログラムがサウンド出力を行うよう指示している場合に、その指示を解釈して、サウンド出力装置125にサウンド信号を出力する。
グラフィック処理部111は、制御部103から出力される描画命令に従って、フレームバッファ(フレームメモリ)112(図では、グラフィック処理部111の外側に描かれているが、グラフィック処理部111を構成するチップに含まれるRAM内に設けられる)に画像データを展開し、表示装置121の表示画面122上に画像を表示するビデオ信号を出力する。グラフィック処理部111から出力されるビデオ信号に含まれる画像の1フレーム時間は、例えば60分の1秒である。
グラフィック処理部111は、仮想3次元空間に存在する複数のオブジェクト(後述するトゥーンオブジェクト及びノントゥーンオブジェクト)を仮想カメラにより透視変換した2次元画像の画像データを後述する処理バッファ163のうちの1つ(画像データ用処理バッファ163a)に展開する。グラフィック処理部111は、透視変換された画像データに含まれるオブジェクトのうちのトゥーンオブジェクトに対して輪郭線を描画し、この画像データを処理バッファ163のうちの別の1つ(輪郭線データ用処理バッファ163c)に展開する。グラフィック処理部111は、輪郭線を描画する際に、後述する処理バッファ163に書き込まれたデータを画素(ピクセル)単位で処理するだけの処理能力を有している。なお、処理バッファ163の構成については、詳細を後述する。
DVD/CD−ROMドライブ113は、記録媒体131に対しプログラム及びデータの読み出しを行う。通信インターフェイス115は、ネットワーク151に接続され、他のコンピュータとの通信を行う。入力部161は、方向キー及び複数の操作ボタンを備え、方向キーの操作により後述するプレイヤキャラクタを移動させ、操作ボタンの操作により所定の処理を行わせるものである。操作ボタンは、所定の指示を入力するために用いられる。
インターフェイス部117は、入力部161からの入力データをRAM105に出力し、制御部103がそれを解釈して演算処理を実施する。インターフェイス部117は、また、制御部103からの指示に基づいて、RAM105に記憶されているゲームの進行状況を示すデータをメモリーカード162に保存させ、メモリーカード162に保存されている中断時のゲームのデータを読み出して、RAM105に転送する。
ビデオゲーム装置100でゲームを行うためのプログラム及びデータは、最初例えば記録媒体131に記憶されている。記録媒体131に記憶されているデータとしては、ゲーム空間(仮想3次元空間)に存在するオブジェクトを構成するためのグラフィックデータを含んでいる。記録媒体131に記憶されたプログラム及びデータは、実行時にDVD/CD−ROMドライブ113により読み出されて、RAM105にロードされる。制御部103は、RAM105にロードされたプログラム及びデータを処理し、描画命令をグラフィック処理部111に出力し、サウンド出力の指示をサウンド処理部109に出力する。制御部103が処理を行っている間の中間的なデータは、RAM105に記憶される。
この実施の形態にかかるビデオゲームでは、ゲーム空間となる仮想3次元空間に複数の3次元オブジェクトが存在し、これらのオブジェクトを仮想カメラにより透視変換した画像がゲームの画像として表示装置121の表示画面122に表示される。仮想3次元空間に存在するオブジェクトには、プレイヤの操作に従って動作するプレイヤキャラクタ及びプレイヤキャラクタ以外のノンプレイヤキャラクタを含む複数のキャラクタと、例えば、地形、建物、草木などの固定物のようなキャラクタ以外のオブジェクトとが含まれる。各オブジェクトは、1以上のポリゴンによって構成される。
これらのオブジェクトのうちで、キャラクタには、ゲームの進行状況に応じて変化されるパラメータや、ゲームの進行状況に応じて変化する状態(ステータス)が設定されているものがある。プレイヤキャラクタは、複数存在するが、何れもパラメータやステータスが設定されているキャラクタとなっており、パラメータとしては体力値を示すHP(これが0になると行動不能となる)が、ステータスには、正常/異常の状態があり、ステータス異常の状態にはプレイヤキャラクタが通常有する攻撃力や防御力を有しなくなっているような通常のステータス異常と、一時的に行動不能となっているような特殊なステータス異常とがある。
また、これらのオブジェクトのうちで、各キャラクタは、その輪郭に輪郭線が施されるトゥーンオブジェクトであり、キャラクタ以外のオブジェクトは、その輪郭に輪郭線が施されないノントゥーンオブジェクトである。なお、この実施の形態にかかるビデオゲームにおける各キャラクタは、説明を簡単にするため、キャラクタ単位で1つのオブジェクトとして扱われるものとする(一般的にビデオゲームとしては、キャラクタの部位毎に異なるオブジェクトとして扱うことも可能である)。
また、ここでは説明を簡単にするため、トゥーンオブジェクトとなるオブジェクトはキャラクタだけであり、全てのキャラクタがトゥーンオブジェクトであるものとする。従って、以下の説明で“キャラクタ”と言う場合と“トゥーンオブジェクト”と言う場合とがあるが、何れも同じ対象を指すものである。もっとも、ゲームの進行を主体として説明する場合は、主に“キャラクタ”と呼び、画像の生成を主体として説明する場合は、主に“トゥーンオブジェクト”と呼ぶこととする。
まず、仮想3次元空間に存在する各オブジェクトの透視変換の手法について説明する。トゥーンオブジェクトには透視変換の後に輪郭線が施されるものとなることを除いて、透視変換の手法そのものは、トゥーンオブジェクトとノントゥーンオブジェクトとで変わりがない。透視変換は、仮想3次元空間の所定の位置で所定の方向に向けて設定された仮想カメラにより、仮想3次元空間に存在する各オブジェクトを仮想スクリーン上に投影することにより行われる。
図2(a)は、仮想カメラにより、仮想3次元空間を透視変換する様子を模式的に示す。仮想3次元空間内に仮想カメラ301が置かれ、仮想スクリーン(近距離クリップ面)302上に投影された画像が表示装置121の表示画面122に表示される画像となる。この仮想カメラ301の位置が視点303、仮想カメラ301の向きが視軸304、視点303と仮想スクリーン302の頂点の四隅を結んだ4本の直線が作る領域が視界305となる。また、視点303から視軸304の方向の所定距離に後方クリップ面306が定められ、クリッピング範囲、すなわち仮想3次元空間において透視変換により画像が生成される範囲は、視界305の範囲内において前方クリップ面302から後方クリップ面306までの範囲となる。
このように、各オブジェクトが存在する仮想3次元空間における座標系は、ワールド座標系により表されるが、透視変換の処理によって視点座標系の座標に変換され、さらにスクリーン座標系(仮想スクリーン302上における座標系)の座標に変換される。透視変換により仮想スクリーン302上に投影した画像を生成する場合には、前面に他の物体があって隠されてしまう面を消去する隠面消去を行う必要がある。隠面消去を行う場合に、仮想スクリーン302からの深度に応じた深度データが用いられる。
透視変換を行う前提として、仮想カメラ301の視点303の位置、視軸304の方向、視点303から前方クリップ面302までの距離及び後方クリップ面306までの距離が決まっている必要がある(これらが決まると、視界305の広さは必然的に決まる)。もっとも、この実施の形態にかかるビデオゲームでは、視点303から前方クリップ面302及び後方クリップ面306までの距離は、固定化されており、透視変換の処理に先立って決める必要があるのは、視点303の位置及び視軸304の方向だけである。
視点303の位置及び視軸304の方向は、ゲームの進行状況に応じて設定されるが、これらを設定する手法は、従来より3次元ビデオゲームで適用されてきた各種手法を適用すればよい。また、仮想3次元空間に存在するオブジェクトを透視変換するためには、光源の位置も問題となるが、説明を簡単にするため、所定の光量の光源が視点303の位置に置かれているものとし、透視変換をする際に、オブジェクトの陰が映り込むことはないものとする。
なお、各オブジェクトには、そのほぼ重心位置が基準点として設定されており、各オブジェクトを単位として仮想3次元空間における位置を判断するときには、この基準点の位置が用いられる。もっとも、透視変換された後の画像データでは、仮想3次元空間における位置(特に深度)は画素単位で判断される。また、各オブジェクトは、仮想3次元空間において一定の形態を有しており、その表面の法線データも画素単位で判断される。
図2(b)は、透視変換により仮想スクリーン302上に投影された後、輪郭線の施されたトゥーンオブジェクトの例を示す図である。トゥーンオブジェクト200は、トゥーンオブジェクト本体201の輪郭に輪郭線202が施される。トゥーンオブジェクト本体201の色は、トゥーンオブジェクト毎に異なる場合があるが、輪郭線202は、それぞれのトゥーンオブジェクト本体201とは異系色で描画される。
また、輪郭線202の太さ(線幅)は、後述するように、予め定められた基準幅に基づいて、当該トゥーンオブジェクト201の視点303からの距離やゲームの進行状況に応じて定められる係数に応じた演算で算出される。つまり、同じトゥーンオブジェクトでも輪郭線202の線幅が異なることがあり、クリッピング範囲に複数のトゥーンオブジェクトが存在する場合には、トゥーンオブジェクト毎に輪郭線の線幅が異なっている場合がある。なお、トゥーンオブジェクト本体201と輪郭線202では、外枠が同じであり、輪郭線202は、トゥーンオブジェクト本体201の領域をはみ出さないように施され、線幅が広くなると、輪郭線の部分は内側に広がっていく。
次に、この実施の形態にかかるビデオゲームにおいて、このような透視変換の処理を経て、表示装置121に表示画面122として表示されるゲーム画面の例について説明する。図3(a)は、ビデオゲームのゲーム画面の例を示す図であり、図3(b)は、(a)の画面での各オブジェクトの仮想空間内における配置を示す図である。図3(a)のゲーム画面では、説明を簡略化するためにトゥーンオブジェクト211〜213を円形や四角形の単純な形状で表しているが、実際には、ゲームに登場する各キャラクタの形態となる。
図3(b)に示すように、仮想3次元空間のクリッピング範囲(図の台形の範囲)において、仮想スクリーン(近距離クリップ面)302に近い方から順に、すなわち、深度が小さい順に、ノントゥーンオブジェクト251、トゥーンオブジェクト212、トゥーンオブジェクト211、トゥーンオブジェクト213が存在している。(オブジェクトの位置関係によっては、全てこのようになるものではないが、ほとんどの場合は、仮想カメラ301の視点303の位置からの距離が短い方から並べても、深度で並べたのと同じ順番となる。また、トゥーンオブジェクト211とトゥーンオブジェクト213の仮想3次元空間における本来の大きさは同程度であるが、トゥーンオブジェクト212の仮想3次元空間における本来の大きさは、半分以下である。
もっとも、図3(a)に示すように、透視変換により生成されるゲーム画面においては、仮想スクリーン302からの遠近の影響で、トゥーンオブジェクト211とトゥーンオブジェクト213の大きさが同程度になり、トゥーンオブジェクト212の大きさは、これよりも大きくなる。また、トゥーンオブジェクト212の一部がトゥーンオブジェクト211の前面側に重なっており、さらに、ノントゥーンオブジェクト251の一部がトゥーンオブジェクト211、212の前面側に重なっている。
ここで、トゥーンオブジェクト211〜213には、何れもその輪郭に輪郭線が施されることとなるが、図3(a)に示すように、その輪郭のうちでもノントゥーンオブジェクト251と重なっている部分には輪郭線が施されないものとなっている。また、トゥーンオブジェクト211〜213には、個別に輪郭線の線幅が設定されるが、図3(a)に示すように、輪郭線の線幅の太いトゥーンオブジェクト211であっても、これより輪郭線の線幅の細いトゥーンオブジェクト212が前面側(仮想スクリーン302に近い側)に重なっている部分では、トゥーンオブジェクト212の輪郭線と同じ線幅で輪郭線が施されるものとなる。
次に、この実施の形態にかかるビデオゲームにおいて、ゲーム画面として表示する画像の画像データを生成するために用いられる処理バッファ163の構成について説明する。図4は、この実施の形態にかかるビデオゲームにおいて用いられる処理バッファ163の構成を示す図である。図示するように、処理バッファ163は、図4(a)に示す画像データ用処理バッファ163aと、図4(b)に示す法線データ用処理バッファ163bと、図4(c)に示す輪郭線データ用処理バッファ163cとを含む。
グラフィック処理部111は、あるフレーム期間においては前のフレーム期間で描画した画像データに応じて画像を表示装置121の表示画面122として表示させるとともに、新たな画像データを描画する必要があるので、処理バッファ163としては、画像データ用処理バッファ163a、法線データ用処理バッファ163b及び輪郭線データ用処理バッファ163cをセットとしたものが用意され、これらの処理バッファ163に描画された画像を表示画面122に表示させるための最終的な表示状態に合成して描画するフレームバッファ112が用意されている。
画像データ用処理バッファ163aは、仮想3次元空間に存在する各トゥーンオブジェクト及び各ノントゥーンオブジェクトを仮想スクリーン302に透視変換した2次元画像の画像データを、画素毎に書き込むための処理バッファである。画像データ用処理バッファ163aには、画素毎にRGBそれぞれの色成分の画像データと、書き込まれた画像データの各画素における仮想3次元空間の深度を示す深度データとが書き込まれる。ここに書き込まれた深度データは、トゥーンオブジェクトの輪郭線を検出するためと、オブジェクト同士が重なり合っているかどうかを判定するために用いられる。
法線データ用処理バッファ163bは、仮想3次元空間に存在する各トゥーンオブジェクト及び各ノントゥーンオブジェクトを仮想スクリーン302に透視変換した2次元画像の画像データの各画素におけるオブジェクトの法線方向を示す法線データが書き込まれる処理バッファである。法線データは、ワールド座標系のx成分、y成分、z成分のそれぞれについて書き込まれる。また、法線データ用処理バッファ163bには、後述する演算によって求められた輪郭線の線幅に関するデータ(線幅データ)が書き込まれる。線幅に関するデータとしては、後述する基準幅を書き込んでおいて、最終的な線幅については、新たな処理バッファを設けてそこで演算を行うようにしてもよい。
輪郭線データ用処理バッファ163cは、仮想3次元空間に存在するトゥーンオブジェクトを透視変換した2次元画像の画像データに従って検出された各トゥーンオブジェクトの輪郭線に施すべき輪郭線の画像データ(輪郭線データ)と、書き込まれた輪郭線データの各画素における仮想3次元空間の深度を示す深度データとが書き込まれる処理バッファである。トゥーンオブジェクト毎に輪郭線の色が異なるため、RGBそれぞれの色成分の輪郭線データが書き込まれる。
なお、輪郭線の深度データは、対応するトゥーンオブジェクトの深度データ(画像データ用処理バッファ163aに書き込まれた深度データ)と基本的に同じものとなるが、ノントゥーンオブジェクトが前面側で重なると画像データ用処理バッファ163aに書き込まれる深度データが前面側のノントゥーンオブジェクトのものに書き換えられるため、トゥーンオブジェクトの輪郭のうちで前面側にノントゥーンオブジェクトが重なっている部分を判断することができるものとなっている。
次に、各トゥーンオブジェクトに施すべき輪郭線の線幅の設定と、輪郭線の色について説明する。図5は、各トゥーンオブジェクトの輪郭線を描画する際に参照される輪郭線テーブルを示す図である。輪郭線テーブルは、ゲームに用いられる固定的なデータとして記録媒体131に記録されており、ゲーム開始時にRAM105に転送されて制御部103により参照されるものである。
図示するように、輪郭線データテーブル400には、オブジェクトID401と、基準幅402と、線色403とが対応づけて登録されている。オブジェクトID401は、各トゥーンオブジェクトを一意に識別するための識別情報である。なお、各ノントゥーンオブジェクトにも、トゥーンオブジェクトと同様に、各々を一意に識別するためのオブジェクトIDが付されている。
基準幅402は、各トゥーンオブジェクトに施される輪郭線の線幅を算出する際に基準とされる幅である。基準幅402は、仮想カメラ301の視点303からの距離(または仮想スクリーン302からの距離)が所定の基準距離(Db)であると仮定した場合に仮想スクリーン302上に投影される各トゥーンオブジェクトの基準サイズに応じて予め定められている。基準サイズが同じトゥーンオブジェクト同士では、基準幅402も同じになる。また、基準サイズが大きいトゥーンオブジェクトほど、基準幅402も大きくなるように設定されている。
各トゥーンオブジェクトの輪郭線の線幅(W)は、それぞれに予め設定された基準幅402Eb)と、仮想カメラ301の視点303の位置から各トゥーンオブジェクトの基準点までの距離(D)と、ゲームの進行状況に応じて定められる係数(a)とに従って、数式1に示す演算式の演算で算出される。
(数1)
W=RNDUP(a×Eb×Db÷D)
ここで、係数aの値は、HPが0になることや特殊なステータス異常により行動不能となっているキャラクタを示すトゥーンオブジェクトについては“0”に、通常のステータス異常が生じているキャラクタを示すトゥーンオブジェクトについては“0.7”に、それ以外のトゥーンオブジェクト(当初からHPやステータスの設定がないキャラクタを含む)については“1”に設定される。また、RNDUP、小数点以下を切り上げて整数化することを示す関数である。
各トゥーンオブジェクトの輪郭線の線幅は、上記のように算出されるため、同じトゥーンオブジェクトであっても、仮想カメラ301の視点303からの距離(D)が基準距離(Db)よりも大きく(すなわち、透視変換により生成される画像でのサイズが基準サイズより小さく)なれば基準幅402より小さくなることがあり、仮想カメラ301の視点303からの距離(D)が基準距離(Db)よりも小さく(すなわち、透視変換により生成される画像でのサイズが基準サイズより大きく)なれば基準幅402より大きくなることがある。
また、線色403は、各トゥーンオブジェクトに施される輪郭線の色を示すもので、図では色そのものを示しているが、実際には当該色のRGB成分のデータで記憶されている。線色403は、対応するトゥーンオブジェクト本体の色とは異系色の色に設定され、例えば、本体色が黄色のトゥーンオブジェクト0001の輪郭線の線色403は黒となるが、本体色が濃いグレーであるトゥーンオブジェクト0002や濃紺であるトゥーンオブジェクト0003の輪郭線の線色は赤となる。
次に、この実施の形態にかかるビデオゲームにおいて、各フレーム期間においてゲーム画面として表示装置121の表示画面122に表示される画像の画像データを生成するための手順を説明する。図6(a)〜(d)は、各フレーム期間においてゲーム画面として表示される画像の画像データを生成するための手順を模式的に示す図である。この手順の処理を行う前提として、仮想カメラ301の視点303の位置及び視軸304の方向が決められ、クリッピング範囲が定まっているものとする。
まず、クリッピング範囲に含まれるオブジェクトのうちでトゥーンオブジェクトだけが透視変換される。これにより、図6(a)に示すように、クリッピング範囲に含まれるトゥーンオブジェクトのRGB成分毎の画像データと深度データとが画素毎に画像データ用処理バッファ163aに書き込まれるとともに、当該トゥーンオブジェクトの法線データが画素毎に法線データ用処理バッファ163bに書き込まれる。また、上記した数式1に従ってトゥーンオブジェクト毎に算出された線幅を示す線幅データが法線データ用処理バッファ163bに書き込まれる。
次に、画像データ用処理バッファ163aに書き込まれた深度データと、法線データ用処理バッファ163bに書き込まれた法線データ及び線幅データとを参照して、クリッピング範囲に含まれるトゥーンオブジェクトの輪郭を抽出する。トゥーンオブジェクトの輪郭は、深度データおよび/または法線データが隣接する画素と大きく変化している部分を見つけ出し、このような部分がトゥーンオブジェクトの輪郭であるとして検出されるものである。複数のトゥーンオブジェクトが重なり合っている部分では、その境界において、各々のトゥーンオブジェクトの輪郭が検出されるものとなる。なお、このトゥーンオブジェクトの輪郭を検出する手法そのものは、従来のビデオゲームにおける手法と変わりがない。
クリッピング範囲に含まれるトゥーンオブジェクトの輪郭が検出されると、図6(b)に示すように、法線データ用処理バッファ163bに記憶された線幅データが示す線幅で輪郭線が描画される。複数のトゥーンオブジェクトが重なり合っている部分では、必ずしも当該オブジェクトに設定された線幅の輪郭線とはならないが、これについての詳細は後述する。ここで、輪郭線のRGB成分毎の画像データと深度データとが画素毎に輪郭線データ用処理バッファ163cに書き込まれる。ここで書き込まれる深度データは、対応する画素について画像データ用処理バッファ163aに書き込まれている深度データと同じものとなる。
次に、クリッピング範囲に含まれるオブジェクトのうちで、図6(a)の段階で透視変換されていなかったノントゥーンオブジェクトが透視変換される。これにより、図6(c)に示すように、クリッピング範囲に含まれるノントゥーンオブジェクトのRGB成分毎の画像データと深度データとが画素毎に画像データ用処理バッファ163aに書き込まれる。ノントゥーンオブジェクトの画素毎の法線データは、法線データ用処理バッファ163bに書き込むものとしても、書き込まないものとしてもよい(これより後から法線データを処理に用いることはないので)。
また、既に透視変換されているトゥーンオブジェクトと新たに透視変換されたノントゥーンオブジェクトが重なり合う部分の各画素では、ノントゥーンオブジェクトの深度がトゥーンオブジェクトよりも大きければ画像データ及び深度データともに更新されないが、ノントゥーンオブジェクトの深度がトゥーンオブジェクトよりも小さければ画像データ及び深度データともに、ノントゥーンオブジェクトのものに更新されて画像データ用処理バッファ163aに書き込まれる。
最後に、図6(d)に示すように、輪郭線データ用処理バッファ163cに書き込まれている輪郭線データを、画像データ用処理バッファ163aに書き込まれているトゥーンオブジェクト及びノントゥーンオブジェクトの画像データに合成し、フレームバッファ112に描画する。但し、深度データの異なっている画素では、輪郭線データ用処理バッファ163cに書き込まれている輪郭線データが合成されることはない。なお、最終的に合成された画像データは、フレームバッファ112に描画せずに、既に不要となっているデータが記憶されている法線データ用処理バッファ163bに書き込むようにしてもよい。
次に、トゥーンオブジェクトの輪郭線を描画する手順について説明する。クリッピング範囲に含まれる各トゥーンオブジェクトについては、上記したように予め設定された基準幅に応じて輪郭線の線幅が算出される。また、トゥーンオブジェクトを透視変換することにより画像データ用処理バッファ163aに書き込まれた深度データと法線データ用処理バッファ163bに書き込まれた法線データ及び線幅データとに従って、透視変換された画像における各トゥーンオブジェクトの輪郭が検出される。ここで、各トゥーンオブジェクトについて算出された輪郭線の線幅に応じて輪郭線を描画するか否かの判断対象となる画素(輪郭の部分から線幅分内側以内に含まれる画素)が決まる。
図7は、トゥーンオブジェクトの輪郭線の線幅を決定する手順、特に複数のトゥーンオブジェクトが重なり合う場合における重なり部分の輪郭線の線幅を決定する手順を模式的に示す図である。この例では、輪郭線の線幅が3に設定されたトゥーンオブジェクトAに対して、輪郭線の線幅が1に設定されたトゥーンオブジェクトBが仮想スクリーン302に近い位置で重なっているものとする。
トゥーンオブジェクトAにおいては、線幅が3に設定されているので、トゥーンオブジェクトAの内部に含まれる各画素が順次輪郭とするか否かの処理対象となる対象ピクセルとされる。各対象ピクセルに対して3つ隣にあるピクセルが、全て輪郭とするか否かの判断に用いられる判定ピクセルとして設定される。判定ピクセルは、対象ピクセルの上下左右の4方向に対してそれぞれ1つずつ設定されるが、以下では、説明を簡単にするために、対象ピクセルの右方向に存在する判定ピクセルとの関係についてのみ言及する。また、輪郭とするかどうかの判断には、実際には深度データの他に法線データ用処理バッファ163bに書き込まれた法線データも用いているが、説明を簡単にするために、深度データについてのみ言及する。
図7(a)に○で示す画素を対象ピクセルとする場合、当該対象ピクセルが含まれるトゥーンオブジェクトに設定された線幅(ここでは、3画素)分だけシフトした画素(図7(b)において□で示す)が判定ピクセルとなる。そして、対象ピクセルと判定ピクセルの深度データ及び線幅データを比較する。ここで、判定ピクセルの深度データの方が小さいと判定する(すなわち、次に示すような処理が続けて行われることとなる)のは、両者の深度データの間に輪郭とする程に大きな差がある場合(すなわち、差分が所定の閾値を越える場合)に限ってもよい。
対象ピクセルと判定ピクセルの深度データ及び線幅データを比較すると、判定ピクセルの方が深度データも線幅データも小さくなっているので、図7(c)に示すように、対象ピクセルの輪郭線の線幅は、判定ピクセルの輪郭線の線幅である“1”に上書きされる。そこで、図7(d)に示すように、今度は対象ピクセルから1画素分だけ離れた画素(図中、☆で示す)を新たな判定ピクセルとして、対象ピクセルと判定ピクセルの深度データを比較する。このとき、対象ピクセルの深度データが判定ピクセルの深度データよりも小さくないため、この対象ピクセルは輪郭線の描画される輪郭ピクセルとしないことが決定される。
同様に、図7(e)に◎で示す各画素を判定ピクセルとする場合、図7(e)に◇で示す画素を判定ピクセルとして、対象ピクセルと判定ピクセルの深度データ及び線幅データを比較する。このとき、判定ピクセルの方が深度データも線幅データも小さくなっているので、図7(f)に示すように、対象ピクセルの線幅データが判定ピクセルの線幅データである“1”に上書きされる。そして、図7(g)に示すように、対象ピクセルから1画素分だけ離れた画素(図中、★で示す)を新たな判定ピクセルとして、対象ピクセルと判定ピクセルの深度データを比較する。このとき、対象ピクセルの深度データが判定ピクセルの深度データよりも大きいため、対象ピクセルとなっている◎で示す画素が輪郭ピクセルである判断され、図7(h)に示すように、トゥーンオブジェクトAに設定された線色で輪郭線が描画されるものとなり、当該色に応じたRGB成分の輪郭線データが輪郭線データ用処理バッファ163cに書き込まれるものとなる。
トゥーンオブジェクトBにおいても同様の処理が行われる。図7(i)に◆で示す画素を対象ピクセルとすると、トゥーンオブジェクトBは線幅が1に設定されているので、1画素分シフトした図7(e)に◎で示した画素が判定ピクセルとなる。トゥーンオブジェクトAの画素は、トゥーンオブジェクトBに含まれる対象ピクセルよりも深度データが大きいので、図7(j)に示すように、判定ピクセルをそのままとして対象ピクセルと判定ピクセルの深度データが比較され、比較の結果から対象ピクセルが輪郭線ピクセルとなって、輪郭線データが輪郭線データ用処理バッファ163cに書き込まれる。
以下、この実施の形態にかかるビデオゲームにおける処理について説明する。この実施の形態にかかるビデオゲームは、プレイヤがプレイヤキャラクタを操作することによりゲームにおいて設定されたイベントを順次クリアすることにより進められる。ゲームのシーンとしては、イベントシーンとバトルシーンとがあり、バトルシーンには、イベントシーンにおいて所定の状況が発生したときに切り替えられ、バトルシーンで行われるバトルにプレイヤキャラクタが勝利すると、元のイベントシーンに切り替えられる。
イベントシーンでは、プレイヤキャラクタが1体だけ登場し、プレイヤは、入力部161の方向キーを操作することで仮想3次元空間に形成されたイベントマップ上でプレイヤキャラクタを移動させながらゲームを進行していく。イベントマップには、この1体のプレイヤキャラクタ以外に複数のノンプレイヤキャラクタが登場し、プレイヤキャラクタをノンプレイヤキャラクタに近づけた状態でプレイヤが入力部161から所定の入力を行うことでプレイヤキャラクタがノンプレイヤキャラクタに話しかけるようにすると、ゲームにおける有用な情報が得られたりする。イベントシーンで登場するノンプレイヤキャラクタには、HPなどのパラメータやステータスは設定されていない。
バトルシーンでは、イベントシーンに登場していたものを含む複数のプレイヤキャラクタが登場するとともに、当該複数のプレイヤキャラクタとバトルを行う敵キャラクタ(ノンプレイヤキャラクタ)が1体以上登場し、仮想3次元空間に形成されたバトルマップ上でバトルを行う。バトルシーンでは、複数のプレイヤキャラクタは所定の順番でアクティブ状態となり、プレイヤは、入力部161から所定の入力を行うことでアクティブとなっているプレイヤキャラクタに敵キャラクタへの攻撃などの動作を行わせることができる。また、敵キャラクタも順次アクティブになり、各プレイヤキャラクタに対して攻撃を行ってくる。
プレイヤキャラクタ及び敵キャラクタの互いの攻撃で、敵キャラクタのHPまたはプレイヤキャラクタのHPが減少させられていき、HPが0となったキャラクタは、行動不能となる。全ての敵キャラクタが行動不能になると、プレイヤキャラクタの勝利でバトルが終了し、プレイヤキャラクタが行動不能になると、ゲームオーバーとなる。バトルシーンで登場するプレイヤキャラクタ及び敵キャラクタには、何れもHPなどのパラメータやステータスが設定されていることとなる。イベントシーンでも登場するプレイヤキャラクタのHPは、イベントシーンに移行しても値が変わらない(すなわち、0となっていることもある)が、イベントシーンでは、HPが0となっていることは無視される。
このようにしてゲームが進行していく様子は、1フレーム期間毎にゲームの進行状況に応じて生成されるゲーム画面としてプレイヤに示される。図8は、この実施の形態にかかるビデオゲームにおいて、ゲーム画面として表示装置121の表示画面122に表示される画像の画像データを生成するために、1フレーム期間毎に行われる画像生成処理を示すフローチャートである。
なお、以下の説明では全てのステップが、グラフィック処理部111が実行する処理として説明されているが、実際には制御部103が実行し、その処理結果がグラフィック処理部111に実行されている場合が含まれるものとする。この実施の形態にかかるビデオゲーム装置100のようにマスター−スレーブ関係のあるマルチプロセッサシステムではなく、シングルプロセッサシステムであれば、図8、及び所定のステップの処理を詳細に記述する図9〜図11のフローチャートに示すような手順で処理が行われるものであるため、全体的な処理の流れを分かり易くするために、このように記述しているものである。
画像生成処理において、グラフィック処理部111は、まず、ゲームの進行状況に応じて、仮想カメラ301の視点303の位置及び視軸304の方向を設定する。視点303の位置及び視軸304の位置が決まると、自ずと近距離クリップ面(仮想スクリーン)302、後方クリップ面306及び視界305の範囲も決まるものとなり、仮想3次元空間のうちで透視変換される範囲であるクリッピング範囲が決まるものとなる(ステップS101)。なお、ここでの仮想カメラ301の設定は、従来のビデオゲームで行っていたように行うものとすればよい。
次に、グラフィック処理部111は、クリッピング範囲に含まれるオブジェクトのうちの各トゥーンオブジェクトを透視変換し、各トゥーンオブジェクトのRGBの各成分の画像データと深度データとを画素毎に画像データ用処理バッファ163aに書き込むとともに、各トゥーンオブジェクトの法線データを画素毎に法線データ用処理バッファ163bに書き込む。ここで、複数のトゥーンオブジェクトが重なり合っている部分の画素については、深度が最も小さい(つまり、仮想スクリーン302に最も近い)トゥーンオブジェクトの画像データ及び深度データ、並びに法線データが書き込まれる(ステップS102)。なお、ゲームの進行上、少なくともプレイヤキャラクタはクリッピング範囲に含まれるので、トゥーンオブジェクトが全く透視変換されないということは生じない。
次に、グラフィック処理部111は、詳細を後述する個別輪郭線幅算出処理を行って、クリッピング範囲に含まれる各トゥーンオブジェクトについての輪郭線の線幅を算出する。ここで算出されたトゥーンオブジェクト毎の輪郭線の線幅は、対応するトゥーンオブジェクト内の画素について画素毎に法線データ用処理バッファ163bに記憶される(ステップS103)。なお、算出されたトゥーンオブジェクト毎の線幅は、画素毎に記憶するのではなく、トゥーンオブジェクトと対応付けてRAM105(またはグラフィック処理部111に含まれるRAM)に記憶されるものであってもよい。この場合、ステップS102とステップS103の実行順は、逆順であってもよい。
次に、グラフィック処理部111は、画像データ用処理バッファ163aに書き込まれているトゥーンオブジェクトの画素毎の深度データと法線データ用処理バッファ163bに書き込まれているトゥーンオブジェクトの画素毎の法線データとに従って、トゥーンオブジェクト毎にその輪郭を検出する。各トゥーンオブジェクトの輪郭の検出は、従来のビデオゲームで行っていたように行うものとすればよい。ここで検出されたトゥーンオブジェクト毎の輪郭の位置に関する情報は、RAM105(またはグラフィック処理部111に含まれるRAM)に一時記憶される(ステップS104)。
次に、グラフィック処理部111は、詳細を後述する輪郭線描画処理を行って、クリッピング範囲に含まれる各トゥーンオブジェクトの輪郭線をトゥーンオブジェクト毎に設定された色及び線幅で描画し、輪郭線のRGBの各成分の画像データ(輪郭線データ)と深度データとを画素毎に輪郭線データ用処理バッファ163cに書き込む。ここで書き込む画素毎の深度データは、画像データ用処理バッファ163aに書き込まれている同じ画素の深度データと同じものとなる(ステップS105)。
次に、グラフィック処理部111は、クリッピング範囲に含まれるオブジェクトのうちステップS102で透視変換されていなかったノントゥーンオブジェクトを透視変換し、各ノントゥーンオブジェクトのRGBの各成分の画像データと深度データとを画素毎に画像データ用処理バッファ163aに書き込む。ここで、既に透視変換されているトゥーンオブジェクトと重なり合う部分の画素については、トゥーンオブジェクトよりも深度が小さい(つまり、仮想スクリーン302に近い)のであればRGBの各成分の画像データ及び深度データが改めて書き込まれるが、トゥーンオブジェクトよりも深度が大きい(つまり、仮想スクリーン302から遠い)のであれば画像データ及び深度データを書き込まない(ステップS106)。なお、クリッピング範囲にノントゥーンオブジェクトが全く存在しないことは生じ得るが、この場合には、ノントゥーンオブジェクトが透視変換されないまま、次のステップS107の処理に進むこととなる。
さらに、グラフィック処理部111は、詳細を後述する画像合成処理を行って、輪郭線データ用処理バッファ163cに書き込まれている輪郭線データと、画像データ用処理バッファ163aに書き込まれている画像データを合成した画像データをフレームバッファに描画する(ステップS107)。そして、今回のフレーム期間での画像生成処理が終了する。この画像生成処理で最終的にフレームバッファ112に書き込まれた画像データは、次のフレーム期間ではグラフィック処理部111により順次読み出され、ビデオ信号として表示装置121に出力されるものとなる。
なお、画像データ用処理バッファ163aに書き込まれている画像データと輪郭線データ用処理バッファ163cに書き込まれている画像データを合成した画像データは、既に不要となっているデータが記憶されている法線データ用処理バッファ163bに一旦記憶した後、フレームバッファ112に送るようにしてもよい。
次に、ステップS103の個別輪郭線幅算出処理について、詳細に説明する。図9は、ステップS103の個別輪郭線幅算出処理を詳細に示すフローチャートである。個別輪郭線幅算出処理では、グラフィック処理部111は、クリッピング範囲に含まれる全てのトゥーンオブジェクトを順次処理対象として、ループ処理1を行う(ステップS201−S201’)。
ループ処理1においては、グラフィック処理部111は、処理対象となっているトゥーンオブジェクトについて、輪郭線データテーブル400に登録されている基準幅(Eb)402を読み出す(ステップS202)。次に、グラフィック処理部111は、処理対象となっているトゥーンオブジェクトの基準点の位置の仮想カメラ301の視点303の位置からの距離(D)を算出する(ステップS203)。
その後、グラフィック処理部111は、処理対象となっているトゥーンオブジェクトに対応したキャラクタに設定されているパラメータとステータスを参照して、パラメータのうちのHPの値が0となっていたり特殊なステータス異常が生じているかどうかにより当該キャラクタが行動不能となっているかどうかを判定する(ステップS204)。当該キャラクタが行動不能となっていれば、グラフィック処理部111は、ゲームの進行状況に応じて定められる係数(a)に“0”をセットする(ステップS205)。そして、ステップS209の処理に進む。
当該キャラクタが行動不能となっていなければ、グラフィック処理部111は、さらに当該キャラクタのステータスを参照して、通常のステータス異常が生じているかどうかを判定する(ステップS206)。当該キャラクタに通常のステータス異常が生じていれば、グラフィック処理部111は、ゲームの進行状況に応じて定められる係数(a)に“0.7”をセットする(ステップS207)。そして、ステップS209の処理に進む。
当該キャラクタに通常のステータス異常も生じていなければ、グラフィック処理部111は、ゲームの進行状況に応じて定められる係数(a)に“1”をセットする。なお、イベントシーンに存在するノンプレイヤキャラクタにはHPなどのパラメータもステータスも設定されていないので、ステップS204とS206の判定結果は何れもNOとなって、これに対応するトゥーンオブジェクトについてのゲームの進行状況に応じて定められる係数(a)には“1”がセットされる。また、イベントシーンにあるときのプレイヤキャラクタも、仮にHPの値が0になっていても無視され、イベントシーンではステータス異常は起こらないのでこれに対応するトゥーンオブジェクトについてのゲームの進行状況に応じて定められる係数(a)には“1”がセットされる(ステップS208)。そして、ステップS209の処理に進む。
ステップS209では、グラフィック処理部111は、数式2の演算を行って、当該トゥーンオブジェクトの施すべき輪郭線の線幅(W)を算出する。算出された線幅(W)は、当該トーンオブジェクトのオブジェクトID401に対応づけてRAM105(またはグラフィック処理部111に含まれるRAM)に記憶される。
(数2)
W=RNDUP(a×Eb×Db÷D)
ここで、RNDUPは、小数点以下を切り上げて整数化することを示す関数である。
その後、グラフィック処理部111は、クリッピング範囲に含まれる全てのトゥーンオブジェクトをループ処理1での処理対象としたかどうかを判定し、全てのトゥーンオブジェクトを処理対象としていればループ処理1を抜ける。ループ処理1を抜けると、そのまま個別輪郭線幅算出処理を終了して、図8の画像生成処理に復帰するものとなる。
次に、ステップS105の輪郭線描画処理について、詳細に説明する。図10は、ステップS105の輪郭線描画処理を詳細に示すフローチャートである。輪郭線描画処理では、グラフィック処理部111は、透視変換された各トゥーンオブジェクトに含まれる画素を1ずつ対象ピクセルとして順次処理対象として、ループ処理2を行う(ステップS301−S301’)。
ループ処理2においては、グラフィック処理部111は、処理対象となっている対象ピクセルの線幅データを法線データ用処理バッファ163bから取り出し、該線幅データが示す線幅分をシフトした位置にある画素を判定ピクセルとして特定する(ステップS302)。グラフィック処理部111は、ここで特定した判定ピクセルの深度データ対象ピクセルの深度データとを画像データ用処理バッファ163aから取り出して、判定ピクセルの深度データが処理対象となっている対象ピクセルの深度データよりも小さいかどうかを判定する(ステップS303)。判定ピクセルの深度データが対象ピクセルの深度データよりも小さくなければ、そのままステップS307の処理に進む。
判定ピクセルの深度データが対象ピクセルの深度データよりも小さければ、グラフィック処理部111は、さらに判定ピクセルの線幅データを法線データ用処理バッファ163bから取り出して、対象ピクセルの線幅データが判定ピクセルの線幅データよりも小さいかどうかを判定する(ステップS304)。対象ピクセルの線幅データが判定ピクセルの線幅データよりも小さくなければ、そのままステップS307の処理に進む。
対象ピクセルの線幅データが判定ピクセルの線幅データよりも小さければ、グラフィック処理部111は、判定ピクセルに設定されている線幅データで対象ピクセルの線幅データを上書きする(ステップS305)。グラフィック処理部111は、新たに設定された線幅データが示す線幅分をシフトした位置にある画素を判定ピクセルとして特定する(ステップS306)。そして、ステップS307の処理に進む。
ステップS307では、グラフィック処理部111は、判定ピクセルの深度データと、処理対象となっている対象ピクセルの深度データとを画像データ用処理バッファ163bから取り出して、両者の深度データを比較する。そして、対象ピクセルの深度データの方が判定ピクセルの深度データよりも小さいかどうかを判定する。
対象ピクセルの深度データが判定ピクセルの深度データよりも小さいと判定された場合には、グラフィック処理部111は、処理対象としているトゥーンオブジェクトに設定された線色403を読み出し、この線色の輪郭線データを対象ピクセルについて輪郭線データ用処理バッファ163cに書き込むとともに、対象ピクセルについての深度データ(画像データ用処理バッファ163aに書き込まれていたものと同じ深度データ)を輪郭線データ用処理バッファ163cに書き込む(ステップS308)。
ステップS308で輪郭線データの書き込みを終了した後、或いは、ステップS307で処理対象としている対象ピクセルとなる画素が処理対象としているトゥーンオブジェクトの輪郭線にならない対象ピクセルの深度データが判定ピクセルの深度データよりも小さくないと判定されると、グラフィック処理部111は、そのまま全ての画素をループ処理2での処理対象としたかどうかを判定し、全ての画素を処理対象としていればループ処理2を抜ける。ループ処理2を抜けると、そのまま輪郭線描画処理を終了して、図8の画像生成処理に復帰するものとなる。
次に、ステップS107の画像合成処理について、詳細に説明する。図11は、ステップS107の画像合成処理を詳細に示すフローチャートである。画像合成処理では、グラフィック処理部111は、全ての画素を順次処理対象として、ループ処理3を行う(ステップS401−S401’)。
ループ処理3では、グラフィック処理部111は、処理対象としている画素について輪郭線データ用処理バッファ163cに輪郭線データが書き込まれているかどうかを判定する(ステップS402)。輪郭線データが書き込まれていれば、グラフィック処理部111は、当該画素について輪郭線データ用処理バッファ163cに書き込まれている深度データが、同じ画素について画像データ用処理バッファ163aに書き込まれている深度データ以下であるかどうかを判定する(ステップS403)。
当該画素について輪郭線データ用処理バッファ163cに書き込まれている深度データが画像データ用処理バッファ163aに書き込まれている深度データ以下でであれば、グラフィック処理部111は、当該画素について輪郭線データ用処理バッファ163cに書き込まれているRGBの各成分の輪郭線データを、フレームバッファ112の同じ画素の画像データとして書き込む(ステップS404)。その後、グラフィック処理部111は、全ての画素をループ処理3での処理対象としたかどうかを判定し、全ての画素を処理対象としていればループ処理3を抜ける。
また、処理対象としている画素について輪郭線データが書き込まれていなかった場合、或いは処理対象としている画素について輪郭線データ用処理バッファ163cに書き込まれている深度データと画像データ用処理バッファ163aに書き込まれている深度データとが同じでなければ、グラフィック処理部111は、当該画素について画像データ用処理バッファ163aに書き込まれているRGB各成分の画像データを、フレームバッファ112の同じ画素の画像データとして書き込む(ステップS405)。その後、グラフィック処理部111は、そのまま全ての画素をループ処理3での処理対象としたかどうかを判定し、全ての画素を処理対象としていればループ処理3を抜ける。
そして、ループ処理3を抜けると、そのまま画像合成処理を終了して、図8の画像生成処理に復帰するものとなる。画像生成処理は、ステップS107の画像合成処理からの復帰によって、そのまま終了するものとなる。
以下、この実施の形態にかかるビデオゲームにおいてゲーム画面として表示されるトゥーンオブジェクト及びノントゥーンオブジェクトの画像について、具体例を示して詳細に説明する。
図12(a)〜(d)は、表示画面上に表示されるトゥーンオブジェクトと輪郭線の線幅の関係の具体例を示す図である。ここでは、図3で説明した3つのトゥーンオブジェクト211〜213の仮想カメラ301の視点303からの距離と、表示画面122上でトゥーンオブジェクト211〜213がそれぞれ表示されるサイズと、トゥーンオブジェクト211〜213に施される輪郭線の太さとの関係について説明する。ここでは、ゲームの進行状況に応じて定められる係数(a)により輪郭線の線幅が変えられる場合は考えないものとする。
図12(a)は、トゥーンオブジェクト211〜213が何れも視点303の位置から基準距離の位置にある場合において表示画面122に表示される状態を示している。トゥーンオブジェクト211と213は、仮想3次元空間における本来のサイズがほぼ同じであるので、仮想スクリーン302上に透視変換されて表示画面122に表示されるサイズもほぼ同じになる。これに対して、トゥーンオブジェクト212は、仮想3次元空間における本来のサイズがトゥーンオブジェクト211、213よりも小さいので、表示画面122に表示されるサイズも小さくなる。
また、この場合には、トゥーンオブジェクト211〜213の輪郭線は、それぞれに対して設定された基準幅402で描画されるが、トゥーンオブジェクト211と213は基準サイズがほぼ同じであるので基準幅402も同じになり、表示画面122に表示される画像における輪郭線の線幅も同じになる。これに対して、トゥーンオブジェクト212は、基準サイズがトゥーンオブジェクト211、213よりも小さいので基準幅402も細くなり、表示画面122に表示される画像における輪郭線の線幅もトゥーンオブジェクト211、213に比べて細くなる。
図12(b)は、図12(a)に比べて、トーンオブジェクト212が視点303に近づいた場合において表示画面122に表示される状態を示している。ここでは、トゥーンオブジェクト212は、視点303に近づいたことにより表示画面122に表示されるサイズが大きくなり、トゥーンオブジェクト211、213とほぼ同じサイズになる。このとき、トゥーンオブジェクト212の輪郭線の線幅は、基準幅よりも太くなってトゥーンオブジェクト211、213の輪郭線の線幅と同等になっている。
図12(c)は、図12(b)に比べて、トゥーンオブジェクト213が視点303から遠ざかった場合において表示画面122に表示される状態を示している。ここでは、トゥーンオブジェクト213は、視点303から遠ざかったことにより表示画面122に表示されるサイズが小さくなり、仮想3次元空間においてほとんど同じサイズのトゥーンオブジェクト211よりも小さくなる。このとき、トゥーンオブジェクト213の輪郭線の線幅は、基準幅よりも細くなって、トゥーンオブジェクト211の輪郭線の線幅よりも細くなる。また、基準幅は細く設定されているトゥーンオブジェクト212の輪郭線の線幅に比べても、細くなっている。
図12(d)は、図12(a)に比べて、トゥーンオブジェクト213が視点303に近づいた場合において表示画面122に表示される状態を示している。ここでは、トゥーンオブジェクト213は、視点303に近づいたことにより表示画面122に表示されるサイズが大きくなり、仮想3次元空間においてほとんど同じサイズのトゥーンオブジェクト211よりも大きくなる。このとき、トゥーンオブジェクト213の輪郭線の線幅は、基準幅よりも太くなって、トゥーンオブジェクト211の輪郭線の線幅よりも太くなる。
図13は、複数のトゥーンオブジェクトが重なり合う場合の具体例を示す図である。図13(a)は、輪郭線の線幅が太いトゥーンオブジェクト221が輪郭線の線幅が細いトゥーンオブジェクト222よりも仮想スクリーン302に近い位置にある場合を示している。図13(b)は、輪郭線の線幅が太いトゥーンオブジェクト221が輪郭線の線幅が細いトゥーンオブジェクト222よりも仮想スクリーン302から遠い位置にある場合を示している。
図13(a)の例では、トゥーンオブジェクト221が仮想スクリーン302に近い方にあるので、トゥーンオブジェクト221の輪郭線は、その全体が本来の線幅で現れる。一方、仮想スクリーン302から遠い方にあるトゥーンオブジェクト222は、輪郭線の線幅がトゥーンオブジェクト221よりも細いものであるため、輪郭線の全体が本来の線幅で現れる。
これに対して、図13(b)の例では、トゥーンオブジェクト222が仮想スクリーン302に近い方にあるので、トゥーンオブジェクト222の輪郭線は、その全体が本来の線幅で現れる。一方、仮想スクリーン302から遠い方にあるトゥーンオブジェクト221は、本来の輪郭線の線幅がトゥーンオブジェクト222よりも太い。トゥーンオブジェクト221の輪郭線は、トゥーンオブジェクト222と重なり合わない部分では本来の線幅で現れるが、トゥーンオブジェクト221と重なり合う部分では、仮想スクリーン302に近い方にあるトゥーンオブジェクト222の輪郭線の線幅と同じ線幅で現れるものとなる。
なお、図13(a)及び図13(b)で右側に拡大図で示すように、トゥーンオブジェクト221、222は、何れが仮想スクリーン302に近い位置で重なり合っているかに関係なく、その輪郭の全体に輪郭線が現れていることが分かる。
図14は、トゥーンオブジェクトとノントゥーンオブジェクトとが重なり合う場合の具体例を示す図である。図示するように、この例では、トゥーンオブジェクト223に対して、これよりも仮想スクリーン302に近い位置でノントゥーンオブジェクト252の一部が重なり、これよりも仮想スクリーン203から遠い位置でノントゥーンオブジェクト253の一部が重なっている。ノントゥーンオブジェクト252がトゥーンオブジェクト223に重なる部分と重ならない部分は複雑に入り組んでいる。
図14から分かるように、トゥーンオブジェクト223の輪郭線は、仮想スクリーン302に近い位置にあるノントゥーンオブジェクト252が重なっている部分では現れないものとなっている。一方、仮想スクリーン302から遠い位置でノントゥーンオブジェクト253が重なっている部分であっても、その部分ではトゥーンオブジェクト223の方が現れるので、トゥーンオブジェクト223の輪郭線も現れるものとなっている。
以上説明したように、この実施の形態にかかるビデオゲームでは、ゲーム空間である仮想3次元空間内に存在するオブジェクトには、ゲーム画面として表示される画像において輪郭線の施されるトゥーンオブジェクトと輪郭線の施されないノントゥーンオブジェクトとが含まれている。トゥーンオブジェクトとされるオブジェクトは、プレイヤキャラクタ及びノンプレイヤキャラクタを含むキャラクタであり、ノントゥーンオブジェクトとされるオブジェクトは、キャラクタ以外のオブジェクトである。
このようにキャラクタかキャラクタ以外のオブジェクトであるかに応じてトゥーンオブジェクトとノントゥーンオブジェクトとを区分することによって、プレイヤは、輪郭線の有無に応じて、ゲーム画面に表示されているオブジェクトの中からキャラクタを容易に判別することができる。特にクリッピング範囲において、全体的な形状だけではキャラクタであるかどうかの見分けが付かないオブジェクトが存在するときには、輪郭線の有無だけでキャラクタであるかどうかを容易に見分けられるので、より高い効果を得ることができる。
また、各トゥーンオブジェクトに施される輪郭線の線色は、その本体の色に応じて該本体の色とは異系色の色に設定され、予め線色403として輪郭線データテーブル400に登録されている。一方、輪郭線の線幅については、仮想カメラ301の視点303からの距離が所定の基準距離(Db)であると仮定した場合に仮想スクリーン302上に投影される各トゥーンオブジェクトの基準サイズに応じて基準幅が設定され、予め基準幅402として輪郭線データテーブル400に登録されている。基準幅402は、仮想3次元空間における各トゥーンオブジェクトの本来のサイズに応じたものとなる。
また、輪郭線の施されるトゥーンオブジェクトを仮想カメラ301により仮想スクリーン302上に透視変換して2次元画像を生成した場合、生成された画像におけるトゥーンオブジェクトのサイズは、仮想スクリーン302から当該トゥーンオブジェクトまでの距離に応じて変化する。厳密にはこのようであるが、透視変換により生成された画像におけるトゥーンオブジェクトのサイズは、ほぼ仮想カメラ301の視点303から当該トゥーンオブジェクトまでの距離(D)に応じて変化すると言ってもよい。
ここで、透視変換により生成されたトゥーンオブジェクトの画像において各トゥーンオブジェクトに施される輪郭線の線幅は、仮想3次元空間における各トゥーンオブジェクトの本来のサイズに応じた基準幅402がそのまま適用されるのではなく、基準幅(Eb)402に対して仮想カメラ301の視点303からの距離(D)に応じた演算を行って算出した線幅(W)が適用される。
また、各トゥーンオブジェクトの輪郭線の線幅(W)を算出する演算では、基準幅(Eb)402を視点303からの距離(D)で除算するものであるため、トゥーンオブジェクトが視点303(仮想スクリーン302)に近づいてゲーム画面におけるサイズが大きくなると輪郭線の線幅が太くなるが、視点303(仮想スクリーン302)から遠ざかってゲーム画面におけるサイズが小さくなると輪郭線の線幅が細くなる。このように各トゥーンオブジェクトの画面上でのサイズに対して、適切な線幅の輪郭線が施されるようになる。また、仮想スクリーン302に近い位置にあるトゥーンオブジェクトを、より目立たせることができるものとなる。
これによって、透視変換により生成された2次元画像において、トゥーンオブジェクトの輪郭線の線幅が当該画像におけるトゥーンオブジェクトのサイズに対して太すぎたり細すぎたりしてしまうことを防ぐことができるので、各トゥーンオブジェクトに対して自然な輪郭線を施すことができる。また、透視変換により生成された画像におけるトゥーンオブジェクトのサイズに応じて輪郭線の色や透明度を変化させている訳でもないので、トゥーンオブジェクトが仮想スクリーン302(或いは視点303)の位置から遠ざかるにつれて輪郭線がぼやけてしまうようなこともない。
また、クリッピング範囲に複数のトゥーンオブジェクトが含まれる場合、各々のトゥーンオブジェクトに対して透視変化により生成された2次元画像におけるサイズに応じた線幅の輪郭線が施されることになる。これにより、仮想3次元空間における本来の大きさに関わらずに、画面表示された大きさに応じて各トゥーンオブジェクトに適切な線幅で輪郭線が施されるので、プレイヤがゲーム画面上で複数のトゥーンオブジェクトを見比べた場合でも、各々のトゥーンオブジェクトに施されている輪郭線の線幅を比べても違和感を覚えることがない。
さらに、透視変換により生成された画像におけるトゥーンオブジェクトのサイズは、正確には仮想スクリーン302からの距離(すなわち、深度)に応じて変化するものではあるが、輪郭線の線幅(W)は、仮想カメラ301の視点303からの距離(D)に応じて変化させるものとしている。視点303から各トゥーンオブジェクトまでの距離は、各トゥーンオブジェクトの深度に比べて比較的容易な計算で算出することができるので、輪郭線の線幅も容易に算出できるものとなる。また、深度に応じた厳密な計算としなくても、実用上は問題のない程度に各トゥーンオブジェクトの輪郭線の線幅が算出されるものとなる。
また、この実施の形態では、ゲーム空間に存在する各キャラクタがトゥーンオブジェクトに定められているが、そのようなキャラクタの中には、ゲームの進行状況に応じて値の変化するHPなどのパラメータや状態の変化するステータスが設定されているプレイヤキャラクタや敵キャラクタが含まれている。ここで、バトルシーンに登場するプレイヤキャラクタや敵キャラクタに対応したトゥーンオブジェクトの輪郭線の線幅は、視点303からの距離(D)に加えて、さらにゲームの進行状況に応じて定められる係数(a)によって変化させられる。
ここで、係数(a)の値は、HPの値が0になったり特殊なステータス異常が生じて対応するキャラクタが行動不能となっていたりする場合には“0”とされ、対応するキャラクタに通常のステータス異常が生じている場合には“0.7”とされている。つまり、対応するキャラクタが行動不能となっているトゥーンオブジェクトには輪郭線が描かれず、対応するキャラクタに通常のステータス異常が生じているトゥーンオブジェクトの輪郭線は、通常のステータス異常が生じていないときよりも細くなる。
これに対して、一般にゲーム画面上において、輪郭線の施されるトゥーンオブジェクトは輪郭線の施されないノントゥーンオブジェクトよりも目立ち、同じサイズで表示されるトゥーンオブジェクト同士であれば施されている輪郭線の太いトゥーンオブジェクトの方が目立つこととなる。このように各トゥーンオブジェクトの輪郭線の線幅(W)を算出する演算において、ゲームの進行状況に応じて値が変化させられる係数(a)を乗算することによって、ゲームの進行上において特定のキャラクタが他のキャラクタに比べて目立ちにくいようにして、プレイヤがゲームを行い易いようにすることができる。
また、対応するキャラクタが行動不能となって係数(a)の値が“0”に設定されたトゥーンオブジェクトでは、それ自体にはゲーム画面上において輪郭線が施されないものとなる。もっとも、そのようなキャラクタが現時点で行動することはないので、プレイヤは、輪郭線の施されているトゥーンオブジェクトが現時点で行動することのできるキャラクタであると容易に判別することができるものとなる。
また、クリッピング範囲に複数のトゥーンオブジェクトが存在していると、透視変換により生成される画像において、異なるトゥーンオブジェクト同士が重なり合うことがある。ここで、仮想スクリーン302から遠い位置にあるトゥーンオブジェクトの方が輪郭線の線幅が太く、仮想スクリーン302から近い位置にあるトゥーンオブジェクトの方が輪郭線の線幅が細い場合、それぞれのトゥーンオブジェクトに本来設定された線幅で輪郭線を描いてしまうと、後側にあるトゥーンオブジェクトが本来の形状とは異なる形状で前面側に浮き上がってしまっているような印象を受ける画像が生成されてしまう場合がある。
これに対して、この実施の形態にかかるビデオゲームでは、仮想スクリーン302から遠い位置にあるトゥーンオブジェクトの方が輪郭線の線幅が太く、仮想スクリーン302から近い位置にあるトゥーンオブジェクトの方が輪郭線の線幅が細い場合には、その重なり部分の輪郭において、仮想スクリーン302から遠い位置にあるトゥーンオブジェクトについても仮想スクリーン302から近い位置にあるトゥーンオブジェクトと同じ線幅で輪郭線を施すものとなっている。これにより、本来は仮想スクリーン302から遠くにあるトゥーンオブジェクトが本来の形状とは異なる形状で太いままの輪郭線が全体に施されて前面側に浮き上がっているような画像が生成されることがなく、自然な画像が生成されるものとなる。
さらに、輪郭線自体は、仮想スクリーン302から近い位置にある他のトゥーンオブジェクトの輪郭線に合わせて線幅が変えられることはあるものの、トゥーンオブジェクト毎に描画されるものとなる。このため、奥側にあるトゥーンオブジェクトの輪郭がぼやけてしまうようなこともなく、ユーザが見て違和感を生じない自然な画像が生成されるものとなる。
しかも、各トゥーンオブジェクトに含まれる画素を順次対象ピクセルとして、それぞれの対象ピクセルから当該トゥーンオブジェクトに設定された輪郭線の線幅分だけ離れた画素を判定ピクセルとし、また、判定ピクセルの方が深度が浅く(仮想スクリーン302に近い位置にある)、線幅が細い場合には対象ピクセルの線幅データを判定ピクセルに設定された線幅データで上書きするものとしている。対象ピクセルからここで上書きされた線幅データの分だけ離れた画素を新たな判定ピクセルとして、両者の深度データに違いが生じていれば、対象ピクセルを輪郭線ピクセルとして輪郭線データを書き込むものとしている。これにより、本来の線幅で輪郭線を描画すると生成される画像に違和感を生じさせてしまう部分を確実に探し出すことができる。
また、各トゥーンオブジェクトの輪郭線の線色403は、それぞれの本体の色に応じて、本体の色とは異系色に設定されているが、複数のトゥーンオブジェクトが重なり合う部分の輪郭では、輪郭線の線幅が本来の線幅よりも細くなることはあるものの、何れのトゥーンオブジェクトに対しても輪郭線が描画される。このため、重なり合うトゥーンオブジェクトの一方の輪郭線の線色403が他方の本体の色に近くても、重なり合う部分に検出された輪郭が分かりにくくなってしまうことがない。
また、プレイヤキャラクタはトゥーンオブジェクトとされているので、少なくとも1のトゥーンオブジェクトがクリッピング範囲に必ず存在することとなるが、このクリッピング範囲にノントゥーンオブジェクトも存在する場合もある。透視変換により生成された画像においてノントゥーンオブジェクトがトゥーンオブジェクトに重なっていなければ、トゥーンオブジェクトの輪郭全体に輪郭線が施されるので、プレイヤは、プレイヤキャラクタを含む各トゥーンオブジェクトの外形形状をハッキリと捉えることができる。
一方、ノントゥーンオブジェクトも存在する場合には、透視変換により生成される画像においてトゥーンオブジェクトとノントゥーンオブジェクトとが重なり合っている場合も生じ得る。トゥーンオブジェクトよりも仮想スクリーン302に近い位置でノントゥーンオブジェクトが重なり合う部分において、トゥーンオブジェクトの輪郭が検出されていたとしても、この部分の画素について輪郭データ用処理バッファ163cに書き込まれた輪郭データは、トゥーンオブジェクト及びノントゥーンオブジェクトを透視変換して画像データ用処理バッファ163aに書き込まれた画像データに合成されない。つまり、ゲーム画面として表示装置121に表示される表示画面122において、この部分の輪郭線は現れない。
このため、本来の外形とは異なる形状でトゥーンオブジェクトに輪郭が施され、本来の外形とは異なるトゥーンオブジェクトが浮き上がっている印象をプレイヤが受けることになるような不自然な画像が表示画面122に表示されることがない。さらに、複雑な形状のノントゥーンオブジェクトがトゥーンオブジェクトに対して仮想スクリーン302に近い位置で重なっていたとしても、その境界が輪郭として検出されて輪郭線が施されることがないので、ゲーム画面として表示画面122に表示された画像がプレイヤに汚らしく感じられてしまうことがない。
また、トゥーンオブジェクトを透視変換する際、画像データ用処理バッファ163aには、画素毎にトゥーンオブジェクトのRGBの各成分の画像データとともに、仮想スクリーン302からの深度を示す深度データが書き込まれる。また、法線データ用処理バッファ163bには、画素毎にトゥーンオブジェクトの法線データとともにトゥーンオブジェクトの輪郭線の基準幅と視点303からの距離に応じて算出された輪郭線の線幅データが書き込まれる。深度データは、隠面消去などの他の処理を行う際にも使用されるデータであるため、このデータをトゥーンオブジェクトの輪郭を検出する際にも有効活用することができる。
また、クリッピング範囲に複数のオブジェクトが含まれる場合は、オブジェクト毎に、特に透視変換により生成された画像で重なり合っているオブジェクトでは深度データが大きく異なることになる場合が多いので、深度データを参照することで、トゥーンオブジェクトの輪郭を検出することができるとともに、1のトゥーンオブジェクトに対して他のトゥーンオブジェクトやノントゥーンオブジェクトが重なっているかどうかが分かるものとなる。
また、画像データ用処理バッファ163aに書き込まれた深度データのみでトゥーンオブジェクトの輪郭を検出することが不可能ではないが、法線データ用処理バッファ163bに書き込まれた法線データもトゥーンオブジェクトの輪郭を検出する際に併用しているため、深度データのみではトゥーンオブジェクトの輪郭を適切に検出できない場合であっても、トゥーンオブジェクトの輪郭を適切に検出することができる。法線データは、隣接する画素同士が異なるオブジェクトのものになっている場合に、一般的に方向が大きく異なるという性質があるので、トゥーンオブジェクトの輪郭を検出するのに適したデータということができる。
また、各フレーム期間におけるゲーム画面の画像を生成するための手順として、まず、クリッピング範囲に含まれるオブジェクトのうちのトゥーンオブジェクトだけを透視変換し、これにより生成されたデータに基づいてトゥーンオブジェクトの輪郭を検出して、トゥーンオブジェクトの輪郭線の輪郭線データを輪郭線データ用処理バッファ163cに画素毎に書き込むものとしている。その後に、クリッピング範囲に含まれるノントゥーンオブジェクトを透視変換し、この時点で画像データ用処理バッファ163aに画素毎に書き込まれているオブジェクトを透視変換した画像データに輪郭線データを合成するものとしている。
このような処理手順で各フレーム期間における画像を生成するものとしていることから、トゥーンオブジェクトに対してノントゥーンオブジェクトが仮想スクリーン302に近い位置で重なっている場合の重なり部分の境界がトゥーンオブジェクトの輪郭として検出されることがない。トゥーンオブジェクトの輪郭として余分な輪郭が検出されることがないので、無駄に処理負荷が大きくならない。
ノントゥーンオブジェクトの透視変換により先に画像データの書き込まれていたトゥーンオブジェクトより仮想スクリーン302に近い位置でノントゥーンオブジェクトが重なっている画素では、画像データ用処理バッファ163aに書き込まれている深度データが更新されるが、深度データが構成されていた画素については、輪郭線データ用処理バッファ163cに輪郭線データが書き込まれていても、画像データ用処理バッファ163aの画像データに合成されることがない。このため、ノントゥーンオブジェクトの領域内でトゥーンオブジェクトの輪郭線が透けているような不自然な画像が生成されてしまうこともない。
本発明は、上記の実施の形態に限られず、種々の変形、応用が可能である。以下、本発明に適用可能な上記の実施の形態の変形態様について説明する。
上記の実施の形態では、トゥーンオブジェクト及びノントゥーンオブジェクトの画像データと輪郭線データとを合成する処理は、透視変換により画像データ用処理バッファ163aに画素毎に書き込まれたRGBの各成分の画像データと輪郭線データ用処理バッファ163cに画素毎に書き込まれたRGBの各成分の輪郭線データとの何れかをフレームバッファ112(または法線データ用処理バッファ163b)を書き込んでいくことにより行っていた。
これに対して、画像データ用処理バッファ163aに画素毎に書き込まれたRGBの各成分の画像データに、深度データに応じて輪郭線データ用処理バッファ163cに画素毎に書き込まれたRGBの各成分の輪郭線データを上書きすることにより行い、その後に画像データ用処理バッファ163aのデータをフレームバッファ112に転送するものとしてもよい。また、トゥーンオブジェクト及びノントゥーンオブジェクトの画像データと輪郭線データとを合成する処理は、画像データ用処理バッファ163aに画素毎に書き込まれたRGBの各成分の画像データを、深度データに応じて輪郭線データの書き込まれた輪郭線データ用処理バッファ163cに上書きして書き込むことにより行い、その後に輪郭線データ用処理バッファ163cのデータをフレームバッファ112に転送するものとしてもよい。
画像データ用処理バッファ163a、法線データ用処理バッファ163bまたは輪郭線データ用処理バッファ163cに合成された画像データが書き込まれるものとなる場合には、これらの処理バッファ163a〜163cをそのままフレームバッファ112として利用してしまってもよい。もっとも、この場合には、画像データ用処理バッファ163a、法線データ用処理バッファ163bまたは輪郭線データ用処理バッファ163cを2セット用意しておき、1フレーム毎にデータの書き込み用のものとデータの読み出し用のものとを切り替える必要がある。
上記の実施の形態では、トゥーンオブジェクト200の輪郭線202の線色403は、トゥーンオブジェクト本体201の色に応じて、該本体201の色とは異系色の色に設定されるものとなっていた。もっとも、輪郭線202の線色は、トゥーンオブジェクト本体201の色に関わらずに全てのトゥーンオブジェクトについて同一の色が設定されるものとしてもよい。また、各トゥーンオブジェクトの輪郭線202の色は、同系色の色とするが、トゥーンオブジェクト本体201の明度に応じて、輪郭線の明度が設定されたものであってもよい。
例えば、トゥーンオブジェクト本体201の明度が比較的高いトゥーンオブジェクト200の輪郭線202は、比較的明度が高い(但し、トゥーンオブジェクト本体201よりは低い)ものとするが、明度の低いトゥーンオブジェクト200の輪郭線202は、明度が低いものとすることができる。この場合、仮想カメラ301の視点303に近い方のトゥーンオブジェクトの方が本体の明度が低く、視点303から遠い方のトゥーンオブジェクトの本体の明度に近くなっていても、複数のトゥーンオブジェクトが重なり合う部分において両方のトゥーンオブジェクトに対して輪郭線が描画されるので、各トゥーンオブジェクトの輪郭が分かりにくくなってしまうことがない。
また、トゥーンオブジェクトの輪郭線が半透明画像で描画される場合、トゥーンオブジェクト本体201の明度に応じて輪郭線の透明度を設定するものとしてもよい。この場合も、トゥーンオブジェクト本体201の明度に応じて輪郭線の明度が設定されている場合と同様の効果を得ることができる。このようにトゥーンオブジェクト本体201の明度に応じて、輪郭線202の明度や透明度が設定されるものでは、特にモノクローム画像を生成する場合などにおいて、複数のトゥーンオブジェクトが重なり合う場合に、各トゥーンオブジェクトの輪郭が分かりにくくなってしまうことがないという効果が顕著に発揮されるものとなる。
なお、トゥーンオブジェクトの輪郭線画像を半透明画像で描画するためには、ステップS404の処理で、グラフィック処理部111は、処理対象としている画素についての画像データ用処理バッファ163aに書き込まれた画像データと輪郭線データ用処理バッファ163cに書き込まれた輪郭線データとを当該輪郭線の半透明度に応じて合成して、フレームバッファ112の対応する画素を書き込むものとすればよい。
上記の実施の形態では、クリッピング範囲に含まれる各トゥーンオブジェクトの輪郭線の線幅(W)は、各トゥーンオブジェクトについて予め設定された基準幅(Eb)402と、仮想カメラ301の視点303から各トゥーンオブジェクトまでの距離(D)に応じて算出されるものとしていた。もっとも、各トゥーンオブジェクトの輪郭線の線幅(W)は、近距離クリップ面(仮想スクリーン)302から各トゥーンオブジェクトまでの深度を距離(D)として、これと基準幅(Eb)402に従って算出されるものとしてもよい。この場合には、透視変換により生成される2次元画像における各トゥーンオブジェクトのサイズに忠実な輪郭線の線幅を算出することができるようになる。
上記の実施の形態では、HPが0になったり特殊なステータス異常を生じて行動不能となったりしているキャラクタに対応したトゥーンオブジェクトでは、ゲームの進行状況に応じて定められる係数(a)の値が0に設定され、これによって線幅(W)が0に算出されることで、ゲーム画面において当該キャラクタのトゥーンオブジェクトには輪郭線が現れないものとなっていた。もっとも、ゲームの進行状況に応じて輪郭線が現れないキャラクタを生じさせる手法はこれに限るものではなく、キャラクタについてはトゥーンオブジェクトとノントゥーンオブジェクトを動的に切り替えられるものとし、例えば、行動不能になっているときにはノントゥーンオブジェクトに切り替えるものとしてもよい。
上記の実施の形態では、輪郭線描画処理において判定ピクセルの深度データが対象ピクセルの深度データよりも小さいときに、法線データ用処理バッファ163bの線幅データを上書きすることにより処理を行っていたが、ローカル変数を用いて処理を行い、法線データ用処理バッファ163bに書き込まれている線幅データが書き換えられることがないようにしてもよい。この場合、ステップS303の処理を行わなくてもよい。
上記の実施の形態では、透視変換された画像データにおける各トゥーンオブジェクトの輪郭は、画像データ用処理バッファ163aにRGBの各成分の画像データとともに書き込まれた画素毎の深度データと、法線データ用処理バッファ163bに書き込まれた画素毎の法線データ及び輪郭線データとを参照して、検出されるものとしていた。もっとも、画像データ用処理バッファ163aに書き込まれた画素毎の深度データ、または法線データ用処理バッファ163bに書き込まれた画素毎の法線データのうちでは何れか一方のみを参照して、各トゥーンオブジェクトの輪郭を検出するものとしてもよい。深度データのみを用いて輪郭を検出する場合には、法線データを書き込む処理バッファが必要ないので、法線データ用処理バッファ163bを設けずに、トゥーンオブジェクト毎の輪郭線の線幅を示す線幅データをグラフィック処理部111内のRAMなどに記憶させるものとしてもよい。
また、トゥーンオブジェクトの輪郭を検出するための情報は、上記した深度データや法線データに限るものではない。例えば、トゥーンオブジェクトを透視変換した画像そのものとは別に輪郭検出用の画像を別の処理バッファに描画し、この別の処理バッファに描画した輪郭検出用の画像を参照して、各トゥーンオブジェクトの輪郭を検出するものとしてもよい。
上記の実施の形態では、輪郭線描画において、透視変換により生成された2次元画像に含まれるトゥーンオブジェクト内の各画素を順次対象ピクセルに設定して、ループ処理3を行うものとしていた。これに対して、ステップS104において各トゥーンオブジェクトの輪郭として検出されなかった画素には何れにしても輪郭線が描画されることはないので、ループ処理2においては、ステップS104で輪郭として検出された画素のみを順次対象ピクセルとしていくものとしてもよい。
上記の実施の形態では、トゥーンオブジェクトに施すべき輪郭線の線幅は、各々のトゥーンオブジェクトに予め設定された基準幅402を基本として、仮想カメラ301の視点303から各トゥーンオブジェクトまでの距離などに従って算出するものとしていた。そして、複数のトゥーンオブジェクトが重なり合う部分について輪郭線の線幅を調整したり、トゥーンオブジェクトとノントゥーンオブジェクトとが重なり合う部分について輪郭線を示す輪郭線データを合成しないものとしたりしていた。
これに対して、各トゥーンオブジェクトの輪郭線の線幅が、仮想カメラ301の設定に応じて変えられるものではなく、トゥーンオブジェクト毎に予め設定されて基準幅402の代わりに輪郭線データテーブル400に登録されているものとしてもよい。この場合、各トゥーンオブジェクトの輪郭線は、透視変換により生成される2次元画像における各トゥーンオブジェクトのサイズに関わらずに、輪郭線データテーブル400に基準幅402の代わりとして登録されている線幅で描画すればよい。
このような場合にも、輪郭線の線幅が小さいトゥーンオブジェクトが仮想スクリーン302に近い位置で輪郭線の線幅が大きいトゥーンオブジェクトと重なり合っている場合に、重なり合う部分の両者のトゥーンオブジェクトの輪郭に施すべき輪郭線の線幅を、仮想スクリーン302に近い方のトゥーンオブジェクトについて設定された輪郭線の線幅にすることができる。また、ノントゥーンオブジェクトが仮想スクリーン302に近い位置でトゥーンオブジェクトと重なり合っている場合に、重なり合う部分ではトゥーンオブジェクトの輪郭線の輪郭線データを、オブジェクトを透視変換した画像データに合成しないものとすることができる。
さらに、各トゥーンオブジェクトの輪郭線の線幅は、何れも予め同じ線幅に設定されているものとしてもよい。この場合、各トゥーンオブジェクトの輪郭線は、透視変換により生成される2次元画像における各トゥーンオブジェクトのサイズに関わらずに、同じ線幅で描画すればよい。このような場合にも、ノントゥーンオブジェクトが仮想スクリーン302に近い位置でトゥーンオブジェクトと重なり合っている場合に、重なり合う部分ではトゥーンオブジェクトの輪郭線の輪郭線データを、オブジェクトを透視変換した画像データに合成しないものとすることができる。
上記の実施の形態では、トゥーンオブジェクトには、予め設定された基準幅に基づいて算出された線幅の輪郭線が施されるものとなっていたが、より輪郭線の線幅が細い他のトゥーンオブジェクトが仮想スクリーン302に近い位置で重なっていると、当該重なっている部分の輪郭線は、他のトゥーンオブジェクトの輪郭線の線幅と同じ線幅で施されるものとなっていた。また、ノントゥーンオブジェクトが仮想スクリーン302に近い位置で重なっていると、当該重なっている部分には輪郭線が施されなかった。
これに対して、トゥーンオブジェクトの中でも特に存在を目立たせたいものを特定トゥーンオブジェクトとして設定しておき、特定トゥーンオブジェクトに対して他のオブジェクト(特定トゥーンオブジェクト以外のトゥーンオブジェクトまたはノントゥーンオブジェクト)が仮想スクリーン302に近い位置で重なっている場合であっても、特定トゥーンオブジェクトの輪郭線は、重なり部分を含めて基準幅に基づいて算出された線幅で描画し、輪郭線データをオブジェクトの画像データに合成させるものとすることができる。
このように特定トゥーンオブジェクトは、全ての輪郭に本来の線幅で輪郭線が施されるため、プレイヤは、ゲーム画面上で特定トゥーンオブジェクトが表示されている領域を容易に識別することができるものとなる。なお、プレイヤキャラクタとノンプレイヤキャラクタとがトゥーンオブジェクトとなる場合には、プレイヤキャラクタを特定トゥーンオブジェクトとすることができる。また、キャラクタの他にもトゥーンオブジェクトがある場合には、キャラクタを特定トゥーンオブジェクトとし、キャラクタ以外のトゥーンオブジェクトを特定トゥーンオブジェクト以外のトゥーンオブジェクトとすることができる。
また、特定トゥーンオブジェクトは、ゲームの進行状況に応じて動的に定めることもできる。例えば、ゲームの進行状況が所定の状況であるときには、全てのトゥーンオブジェクトを特定トゥーンオブジェクトとして扱って、他のオブジェクトが仮想スクリーン302に近い位置で重なっていても、各トゥーンオブジェクトの輪郭線は、重なり部分を含めて各トゥーンオブジェクトに対して基準幅に基づいて算出された線幅で描画し、輪郭線データをオブジェクトの画像データに合成させるものとすることができる。
これにより、プレイヤは、ゲームの進行状況が所定の状況であるときに、ゲーム画面上で各トゥーンオブジェクトが表示されている領域を容易に識別することができるものとなる。なお、このような処理を行うゲームの進行状況は、プレイヤが各トゥーンオブジェクトの画面上に占める領域を区別したいようなシーンを適用することができるが、このようなシーンとして、例えば、画面上に表示される標的(動くものでも可)に対して、プレイヤが画面上の所望の位置をポインティングしてシューティングを行うようなシーンを挙げることができる。
上記の実施の形態では、HPが0になることや特殊なステータス異常により行動不能となっているキャラクタを示すトゥーンオブジェクトについては係数aの値が“0”となるので、トゥーンオブジェクトであっても輪郭線の線幅が“0”に設定されてしまうことがあり得る。そして、輪郭線の線幅が“0”に設定されたトゥーンオブジェクトが他のトゥーンオブジェクト(線幅が“0”でないもの)に仮想スクリーン302に近い位置で重なることもあり得るものとなる。この場合には、当該他のトゥーンオブジェクトには重なり部分でも輪郭線(線幅を“1”としてもよい)が施されるものとしてもよい。これにより、当該他のオブジェクトのノントゥーンオブジェクトが重なっているものと見間違えられることがなくなる。
上記の実施の形態では、トゥーンオブジェクトの輪郭線は、線幅(W)が0と算出される場合を除いて、仮想スクリーン302に近い位置でノントゥーンオブジェクトが重なっている部分の画素以外では必ず輪郭線データがオブジェクトの画像データに合成され、ゲーム画面として表示画面122に表示される画像に現れるものとなっていた。仮想スクリーン302に近い位置にあるノントゥーンオブジェクトが複雑な形状を有しているような場合、極めて短くしか連続していない輪郭線も現れるものとなっていた。しかし、極めて短い長さで輪郭線が断続していると、特に線幅の太い輪郭線の場合には、極めて短い輪郭線が現れている部分が汚らしく感じられてしまう場合も生じてしまうことがある。
そこで、トゥーンオブジェクトの輪郭線であって仮想スクリーン302に近い位置でノントゥーンオブジェクトの重なっていない部分であっても、その部分が所定の長さ以上に連続していなければ、輪郭線データをオブジェクトの画像データに合成しないものとしてもよい。輪郭線データをオブジェクトの画像データに合成するかどうかの分かれ目となる所定の長さは、輪郭線の線幅に応じて定めるものとしてもよい。
例えば、トゥーンオブジェクトの輪郭線のうちで仮想スクリーン302に近い位置でノントゥーンオブジェクトの重なっていない部分が所定の長さ(例えば、3画素分)以上連続するかどうかを判断するために、まず、1画素分の線幅で輪郭線が描画されているものと考える。ここで、輪郭線データの何れか1画素を参照ピクセルとして周囲の8つの画素を調べ、輪郭線データがあるかどうかを判断する。周囲の8つの画素のうちに1つも輪郭線データがなければ、輪郭線が3画素分連続していないと判断できることとなる。周囲の8つの画素のうちの1つだけに輪郭線データがある場合には、その輪郭線データのある画素を新たな参照ピクセルとして、周囲の8つの画素を調べ、輪郭線データがあるかどうかを判断する。ここでも周囲の8つの画素のうち1つだけにしか輪郭線データがなければ、輪郭線が3画素分連続していないと判断できることとなる。所定の長さが3画素分よりも長いときは、上記のような処理を繰り返せばよい。
図15は、トゥーンオブジェクトとノントゥーンオブジェクトとが重なり合う場合において、トゥーンオブジェクトの輪郭線のうちで仮想スクリーン302に近い位置でノントゥーンオブジェクトの重なっていない部分が所定の長さ以上連続しない部分の輪郭線データを画像データに合成しない場合の例を示す図である。図示するように、仮想スクリーン302に近い位置にあるノントゥーンオブジェクト252に生じている隙間の中でも隙間の間隔が小さい部分ではトゥーンオブジェクト223の輪郭線が現れないものとなっている。
このように、透視変換により生成された2次元画像におけるノントゥーンオブジェクトの形状が複雑であって、トゥーンオブジェクトの輪郭付近にノントゥーンオブジェクトの複雑な形状の部分が重なっている場合であっても、最終的に生成される画像においてトゥーンオブジェクトの輪郭のうちに極短い輪郭線が断続して現れることがない。このため、極短く断続する輪郭線によって、ゲーム画面が汚らしく感じられてしまうことを防ぐことができる。特にトゥーンオブジェクトに施される輪郭線の線幅が太いとき程、これによる効果が顕著に現れるものとなる。
上記の実施の形態では、仮想3次元空間内に存在する複数のオブジェクトは、互いに離れた状態で存在することを前提として説明した。もっとも、仮想3次元空間内に存在する複数のオブジェクトのうちで、1のオブジェクトの一部が他のオブジェクトにめり込んだ状態を許容するようにすることもできる。この場合、1のトゥーンオブジェクトの一部が他のトゥーンオブジェクトにめり込んだ状態にすることもできる。この場合、1のトゥーンオブジェクトが他のトゥーンオブジェクトにめり込んでいる境界の部分も、各々のトゥーンオブジェクトの輪郭として検出されるものとなる。
1のトゥーンオブジェクトが他のトゥーンオブジェクトにめり込んでいる境界の部分に検出される輪郭には、輪郭線を描画するものとしても描画しない(或いは、輪郭線データの書き込みは行うが、各オブジェクトを透視変換した画像データとは合成しない)ものとしてもよい。特に双方のトゥーンオブジェクトの本体の色が異系色である場合には、この境界の部分に検出される輪郭に輪郭線を描画しないものとしてもよい。
1のトゥーンオブジェクトが他のトゥーンオブジェクトにめり込んでいる境界の部分に検出される輪郭に輪郭線を描画する場合には、当該部分の輪郭線の線幅は、双方のトゥーンオブジェクトについて仮想カメラ301の視点303からの距離(D)に応じて算出された線幅(W)に関わらずに、最小単位である1画素分の幅としてもよい。当該部分の輪郭で、めり込まれている他のトゥーンオブジェクトについて検出された輪郭にのみ、1画素分の幅の輪郭線を描画するものとしてもよい。
図16は、1のトゥーンオブジェクトの一部が他のトゥーンオブジェクトにめり込んでいる場合に、表示画面122として表示される両トゥーンオブジェクトの画像の例を示す図である。ここでは、トゥーンオブジェクト232の一部が他のトゥーンオブジェクト231にめり込んでいるものとする。図示するように、表示画面122上で表示されるサイズの大きいトゥーンオブジェクト231には非常に線幅の太い輪郭線が、これよりもサイズの小さいトゥーンオブジェクト232でもトゥーンオブジェクト231の輪郭線よりは細いが比較的線幅の太い輪郭線が施されているが、トゥーンオブジェクト232がトゥーンオブジェクト231にめり込む部分の輪郭では、非常に線幅の細い輪郭線しか現れないものとなっている。
この場合、1のトゥーンオブジェクトの一部が他の1のトゥーンオブジェクトにめり込んでいる場合には、双方のトゥーンオブジェクトについて算出されている輪郭線の線幅に関わらずに、めり込んでいる部分に検出される輪郭に最小幅で輪郭線が施されるものとなる。従って、めり込んでいる部分に検出される輪郭で輪郭線が目立ちすぎることがなく、両者が全く別々に存在して何れかが浮き上がってしまっている印象を生じるような画像が生成されることがない。一方、線幅が1画素分の最小幅になるとは言っても、1のトゥーンオブジェクトの一部が他の1のトゥーンオブジェクトにめり込んでいる部分に検出される輪郭線が施されるので、両者が完全に一体化した1つのオブジェクトであるような印象をプレイヤに感じさせてしまうのが防がれる。
なお、1のトゥーンオブジェクトが他のトゥーンオブジェクトにめり込んでいる場合には、めり込んでいる部分においては深度データに変化は生じないものの法線データに大きな変化が生じていることとなる。従って、上記したトゥーンオブジェクトの輪郭を検出する処理において深度データに変化がないものの法線データに変化が生じている部分を探しだし、ここを1のトゥーンオブジェクトが他のトゥーンオブジェクトにめり込んでいる部分として抽出すればよい。
上記の実施の形態では、各フレーム期間において、クリッピング範囲に存在するオブジェクトのうちでトゥーンオブジェクトだけを最初に透視変換し、ここで各トゥーンオブジェクトの輪郭を検出して輪郭線を描画し、その後にクリッピング範囲に存在するノントゥーンオブジェクトを透視変換するものとしていた。そして、ノントゥーンオブジェクトまでを透視変換した時点で画像データ用処理バッファ163aに画素毎に書き込まれている画像データに、輪郭線データ用処理バッファ163cに画素毎に書き込まれている輪郭線データを合成するものとしていた。
これに対して、各フレーム期間において、トゥーンオブジェクトであるかノントゥーンオブジェクトであるかに関わらずにクリッピング範囲に存在するオブジェクトの透視変換を先に行い、ここで各オブジェクトの輪郭を検出してトゥーンオブジェクトの輪郭には輪郭線を描画し、その後、画像データ用処理バッファ163aに画素毎に書き込まれている画像データに、輪郭線データ用処理バッファ163cに画素毎に書き込まれている輪郭線データを合成するものとしてもよい。
図17(a)〜(d)は、この変形例で、各フレーム期間においてゲーム画面として表示される画像の画像データを生成するための手順を模式的に示す図である。この変形例の手順の処理を行う場合も、その前提として、仮想カメラ301の視点303の位置及び視軸304の方向が決められ、クリッピング範囲が定まっているものとする。
まず、トゥーンオブジェクトであるかノントゥーンオブジェクトであるかに関わらず、クリッピング範囲に含まれる全てのオブジェクトが透視変換される。これにより、図17(a)に示すように、クリッピング範囲に含まれる各オブジェクトのRGB成分毎の画像データと深度データとが画素毎に画像データ用処理バッファ163aに書き込まれるとともに、各オブジェクトの法線データが画素毎に法線データ用処理バッファ163bに書き込まれる。ここで、複数のオブジェクトが重なり合う部分の画素では、深度データが最も小さい(つまり、仮想スクリーン302に最も近い)オブジェクトの画像データ及び法線データが書き込まれるものとなる。また、トゥーンオブジェクトについて輪郭線の線幅が算出され、線幅データが法線データ用処理バッファ163bに書き込まれる。
次に、図17(b)に示すように、画像データ用処理バッファ163aに書き込まれた深度データと、法線データ用処理バッファ163bに書き込まれた法線データ及び線幅データとを参照して、クリッピング範囲に含まれるトゥーンオブジェクトの輪郭を検出する。輪郭を検出する手法は、上記の実施の形態でトゥーンオブジェクトの輪郭を検出する場合の手法と同じであるが、ここでは、トゥーンオブジェクトとノントゥーンオブジェクトが重なり合っている部分にも輪郭が検出される。そして、ここで検出されたトゥーンオブジェクトの輪郭線の輪郭線データが、深度データとともに一旦輪郭線データ用処理バッファ163cに書き込まれる。
次に、輪郭線データ用処理バッファ163cに書き込まれている輪郭線データを画素毎に処理対象とし、処理対象となる画素から輪郭線の線幅分だけシフトした画素において画像データ用処理バッファ163aに書き込まれた画像データが輪郭線データよりも深度データの小さいノントゥーンオブジェクトの画像データとなっているかを調べる。輪郭線の線幅分だけシフトした画素における画像データが輪郭線データよりも深度データの小さいノントゥーンオブジェクトの画像データとなっていれば、当該画素の輪郭線データを輪郭線データ用処理バッファ163cから削除する。これにより、図17(c)に示すように、輪郭線データ用処理バッファ163cには、トゥーンオブジェクトの輪郭線のうちのノントゥーンオブジェクトと重なり合わない部分だけの輪郭線データだけが書き込まれた状態となる。
最後に、輪郭線データ用処理バッファ163cに書き込まれている輪郭線データを、画像データ用処理バッファ163aに書き込まれているトゥーンオブジェクト及びノントゥーンオブジェクトの画像データに合成した画像データをフレームバッファ122に書き込む。これにより、図17(d)に示すように、フレームバッファ122には、トゥーンオブジェクト及びノントゥーンオブジェクトの画像に対して、ノントゥーンオブジェクトが仮想スクリーン302に近い側で重なっていない部分以外に輪郭線の施された画像が生成されるものとなる。
以上説明したように、この変形例では、クリッピング範囲に含まれるオブジェクトであれば、トゥーンオブジェクトとノントゥーンオブジェクトであるかに関わらずに先に透視変換を行っており、透視変換により生成された画像におけるトゥーンオブジェクトとノントゥーンオブジェクトとの境界部分は、ノントゥーンオブジェクトの方が仮想スクリーン302に近い位置にあったとしても、トゥーンオブジェクトの輪郭として検出されてしまう。
もっとも、この境界部分の輪郭線データは、ノントゥーンオブジェクトの方が仮想スクリーン302に近い方にあれば、輪郭線データ用処理バッファ163cから削除されることとなり、この部分の削除された輪郭線データだけがトゥーンオブジェクト及びノントゥーンオブジェクトの画像データと合成される。このため、トゥーンオブジェクト及びノントゥーンオブジェクトを含むクリッピング範囲に含まれる各オブジェクトを透視変換して得られた画像データに対して輪郭線データを合成しても、最終的に生成される画像において当該部分に輪郭線が現れることがなく、上記の実施の形態の場合と同じ効果を得ることができる。
なお、図17に示した例では、図17(b)に示すようにトゥーンオブジェクト及びノントゥーンオブジェクトを透視変換した画像から検出された輪郭の全体に対して輪郭線データを書き込んだ後、図17(c)に示すようにノントゥーンオブジェクトが仮想スクリーン302に近い位置で重なり合う部分の輪郭線データを削除するものとしていた。これに対して、トゥーンオブジェクト及びノントゥーンオブジェクトを透視変換した画像において輪郭として検出された各画素についてノントゥーンオブジェクトが仮想スクリーン302に近い位置で重なり合うかどうかを判断しながら、ノントゥーンオブジェクトが仮想スクリーン302に近い位置で重なり合うと判断された画素について輪郭線データを書き込むものとしてもよい。
本発明において、ゲーム画面として最終的に生成される画像においてトゥーンオブジェクトに輪郭線が現れないようにするための処理としては、上記の実施の形態のように輪郭線データ用処理バッファ163cに書き込まれた輪郭線データを画像データ用処理バッファ163aに書き込まれた画像データに合成しないこと、輪郭線データ用処理バッファ163cに一旦書き込まれた輪郭線データを削除してしまうこと、輪郭線の線幅を0に設定して輪郭線データが輪郭線データ用処理バッファ163cに書き込まれないようにすること、輪郭線の線幅を0に設定して処理を行う訳ではないが輪郭線が現れないようにする部分の画素では輪郭線データを輪郭線データ用処理バッファ163cに書き込まないようにすること、本来はトゥーンオブジェクトであっても動的にノントゥーンオブジェクトと見なすようにすること、の何れによっても実現することができる。
上記の実施の形態では、HPが0であったり特殊なステータス異常が生じていることによって行動不能になったりしているキャラクタに対応したトゥーンオブジェクトについては、ゲームの進行状況に応じた係数(a)として“0”が設定されることで、ゲーム画面上で輪郭線が現れないようになっていた。もっとも、本来は輪郭線が施されるトゥーンオブジェクトに輪郭線を施さないものとするゲームの状況はこれに限るものではなく、トゥーンオブジェクトを目立たせない方が臨場感の高まるようなシーン(例えば、プレイヤキャラクタが暗闇の中を探求しているシーン)にある状況などを適用することができる。
また、輪郭線の線幅を算出する際に乗算される係数(a)として、“0”を設定する場合に限らず“1”以外の値を設定するゲームの進行状況としては、HP以外のパラメータでもキャラクタに設定されたパラメータ(例えば、経験値、レベルなど)が所定の値になっていることを適用することができる。また、プレイヤキャラクタが存在するゲーム空間の地形などの周囲の環境の違い(例えば、岩の上に存在する、水の中に存在する、宇宙空間に存在する等)を適用することもできる。
また、バトルシーンにおいては、複数のプレイヤキャラクタが登場し、各プレイヤキャラクタが順次アクティブ状態となっていくが、各プレイヤキャラクタのアクティブ/非アクティブの状態の違いとしてもよい。さらに、ゲームにおいてパーティを構成するプレイヤキャラクタの数の違いとしてもよい(例えば、パーティを構成するプレイヤキャラクタの数が多いほど、各プレイヤキャラクタに対応したトゥーンオブジェクトの輪郭線を細くする)。また、ゲームにおけるシーンの違い(イベントシーンとバトルシーンの違い、昼間のシーンと夜のシーンの違い)としてもよい。
バトルシーンにおいては、プレイヤキャラクタまたは敵キャラクタが、相手方のキャラクタに対して優勢/劣勢な状況にあるかの違いとしてもよい。イベントシーンにおいては、当該シーンに設定したイベントをプレイヤキャラクタがクリアしたかどうかの違いとしてもよい。プレイヤキャラクタがゲームにおいて使用可能なアイテムをトゥーンオブジェクトとする場合には、当該アイテムが未使用であるか使用済みであるかの違いとしてもよい。ゲーム空間に存在する宝箱(プレイヤキャラクタが使用可能なアイテムを入れておく箱)をトゥーンオブジェクトとする場合には、当該宝箱が未開封であるか開封済みであるかの違いとしてもよい。
また、上記の実施の形態では、光源は、仮想カメラの位置に設定されるものとしていたが、仮想カメラの位置とは異なる位置に光源が設定される場合には、トゥーンオブジェクトの輪郭線の線幅を算出する演算において、光源から各トゥーンオブジェクトまでの距離に応じて定められる所定の係数を乗算するものとしてもよい。
また、トゥーンオブジェクトの種類の違い(例えば、プレイヤキャラクタであるかノンプレイヤキャラクタであるか)に応じて、輪郭線の線幅を変えるものとしてもよい。もっとも、プレイヤキャラクタとノンプレイヤキャラクタのように、トゥーンオブジェクトの種類の区分がゲームの進行状況に応じて変化しない場合には、その種類に応じて基準幅402を予め設定しておくものとすればよい。例えば、基準サイズがほぼ同じであっても、プレイヤキャラクタであれば基準幅402を大きめに設定するが、ノンプレイヤキャラクタであれば基準幅402を小さめに設定しておけばよい。
上記の実施の形態では、キャラクタをトゥーンオブジェクトとしていた。つまり、トゥーンオブジェクトは、プレイヤに一体性のあるオブジェクトとして認識されるものであって、一体性のあるオブジェクトとして認識される範囲の輪郭に輪郭線を施すものとなっていた。これに対して、例えば、同じキャラクタの中でも輪郭線を施したい部位と施したくない部位とが存在する場合もある。この場合には、プレイヤには一体性のあるオブジェクトとして認識されるが、その中にトゥーンオブジェクトにより構成される部位とノントゥーンオブジェクトにより構成される部位とが存在するものとなっていてもよい。例えば、馬車のようなオブジェクトの場合、馬の部分はノントゥーンオブジェクトとするが、車の部分はトゥーンオブジェクトとするなどである。
上記の実施の形態では、本発明にかかる画像生成の手法をスタンドアローン型のビデオゲームでの画像を生成する場合に適用していたが、複数のビデオゲーム装置100をネットワーク151を介してサーバ装置に接続してゲームを進めるネットワークゲームでの画像を生成する場合に適用してもよい。ネットワークゲームで各々のビデオゲーム装置100のプレイヤの操作に従ってゲーム空間で動作するプレイヤ毎のプレイヤキャラクタは、何れもトゥーンオブジェクトとすることができる。
また、ネットワークゲームでは、他のプレイヤのプレイヤキャラクタでも、プレイヤ自身のプレイヤキャラクタの仲間となっている(ゲームを進行する際に、協力関係が構築されている)プレイヤキャラクタと、仲間となっていないプレイヤキャラクタとが存在する。さらに、ネットワークゲームにおいても、何れのプレイヤの操作によって動作するものでもないノンプレイヤキャラクタがゲーム空間内に存在するが、これらのノンプレイヤキャラクタも、トゥーンオブジェクトとすることができる。
この場合、各トゥーンオブジェクトの輪郭線の線幅を各々に設定された基準幅に応じて算出する場合に、自身のプレイヤキャラクタ、仲間となっている他のプレイヤのプレイヤキャラクタ、仲間となっていない他のプレイヤのプレイヤキャラクタ、ノンプレイヤキャラクタの区分に応じて値が異なる係数を掛け合わせるものとしてもよい。これにより、例えば、ゲーム空間に存在する複数のキャラクタのうちで、自身のプレイヤキャラクタと仲間となっている他のプレイヤのプレイヤキャラクタの輪郭線を表示画面122に表示されているサイズに対して相対的に太くして、これらのキャラクタが目立ちやすいものとすることもできる。
また、ビデオゲームの画像を生成する場合以外でも、3次元コンピュータグラフィックスの処理で仮想3次元空間に存在するオブジェクトを透視変換して画像を生成するものであって、仮想3次元空間に存在するオブジェクトの中に輪郭線の施されるトゥーンオブジェクトと輪郭線の施されないノントゥーンオブジェクトが含まれているのであれば、本発明における画像生成の処理を適用することができる。
上記の実施の形態では、本発明にかかる画像生成の手法をビデオゲームでの画像を生成する場合に適用し、各プレイヤがゲームを進めるために用いる端末装置としてゲーム専用機であるビデオゲーム装置100を適用していた。これに対して、ビデオゲーム装置100と同様の構成要素を備え、画像を描画する機能を有するものであれば、汎用のパーソナルコンピュータなどを適用してもよい。3次元コンピュータグラフィックスを処理でき、処理バッファ163に書き込まれたデータを画素単位で処理する能力があれば、表示装置121及びサウンド出力装置125を装置本体101と同一の筐体内に納めた構成を有する携帯ゲーム機(アプリケーションの実行機能を有する携帯電話機を含む)を適用するものとしてもよい。
記録媒体131としては、DVD−ROMやCD−ROMの代わりに半導体メモリーカードを適用することができる。このメモリーカードを挿入するためのカードスロットをDVD/CD−ROMドライブ113の代わりに設けることができる。汎用のパーソナルコンピュータの場合には、本発明に係るプログラム及びデータを記録媒体131に格納して提供するのではなく、HDD107に予め格納して提供してもよい。本発明にかかるプログラム及びデータを格納して提供するための記録媒体は、ハードウェアの物理的形態及び流通形態に応じて任意のものを適用することができる。
上記の実施の形態では、ビデオゲーム装置100のプログラム及びデータは、記録媒体131に格納されて配布されるものとしていた。これに対して、これらのプログラム及びデータをネットワーク151上に存在するサーバ装置が有する固定ディスク装置に格納しておき、装置本体101にネットワーク151を介して配信するものとしてもよい。ビデオゲーム装置100において、通信インターフェイス115がサーバ装置から受信したプログラム及びデータは、HDD107に保存し、実行時にRAM105にロードすることができる。