(57)【特許請求の範囲】
【請求項１】
ゲーム処理において仮想三次元のゲーム空間における第１オブジェクトおよび第２オブジェクトを表示するときに、光源からの光に基づいて前記第２オブジェクト上に落ちる前記第１オブジェクトの影を表示するゲーム装置であって、
前記第１オブジェクトの輪郭および前記光源からの光線方向に基づき、かつ光線方向に前記第２オブジェクトの起伏に基づく所定の厚みを有する部分シャドウボリュームを記憶する部分シャドウボリューム記憶手段と、
前記部分シャドウボリュームをシャドウボリューム配置座標に配置する部分シャドウボリューム配置手段と、
前記部分シャドウボリューム配置手段によって配置された部分シャドウボリュームに基づいて、前記第２オブジェクト上に落ちる前記第１オブジェクトの影を描画する影描画手段とを備えるゲーム装置。
【請求項２】
前記部分シャドウボリューム配置手段は、前記第１オブジェクト上の所定座標から光線方向に延びる直線と前記第２オブジェクトとの交点を前記シャドウボリューム配置座標として算出するシャドウボリューム配置座標算出手段を含む、請求項１記載のゲーム装置。
【請求項３】
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも当該影領域全体が常に前記部分シャドウボリュームの内部に含まれるように、前記部分シャドウボリュームの厚みが決定されることを特徴とする、請求項１記載のゲーム装置。
【請求項４】
前記部分シャドウボリュームの厚みは、前記シャドウボリューム配置座標を基準として光源の方向への厚みである光源方向厚みと、前記シャドウボリューム配置座標を基準として光源とは逆の方向への厚みである光源逆方向厚みとにより規定され、
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも当該影領域全体が常に前記部分シャドウボリュームの内部に含まれるような大きさであってかつ最小限の大きさとなるように、前記光源方向厚みおよび前記光源逆方向厚みがそれぞれ決定されることを特徴とする、請求項１記載のゲーム装置。
【請求項５】
前記光源方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる、前記シャドウボリューム配置座標を基準として光源の方向への当該影領域の最大起伏に基づいて決定され、
前記光源逆方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる、前記シャドウボリューム配置座標を基準として光源とは逆の方向への当該影領域の最大起伏に基づいて決定されることを特徴とする、請求項４記載のゲーム装置。
【請求項６】
前記光源方向厚みおよび前記光源逆方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる前記影領域の最大起伏に基づいて共通に決定されることを特徴とする、請求項４記載のゲーム装置。
【請求項７】
前記部分シャドウボリューム記憶手段は、前記第２オブジェクトの起伏に基づいて前記ゲーム処理以前に予め形成された部分シャドウボリュームを記憶することを特徴とする、請求項１記載のゲーム装置。
【請求項８】
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域の最大起伏を算出する最大起伏算出手段と、
前記最大起伏算出手段によって算出された前記最大起伏に相当する厚みを有する部分シャドウボリュームを生成して前記部分シャドウボリューム記憶手段に記憶させる部分シャドウボリューム生成手段とをさらに備える、請求項１記載のゲーム装置。
【請求項９】
前記最大起伏算出手段は、前記影領域において前記シャドウボリューム配置座標を基準として光源の方向へ最も離れた最大座標と、前記影領域において前記シャドウボリューム配置座標を基準として光源とは逆の方向へ最も離れた最小座標とを検出し、当該検出結果に基づいて前記部分シャドウボリュームの厚みを決定することを特徴とする、請求項８記載のゲーム装置。
【請求項１０】
前記光線方向に投影される前記第１オブジェクトの輪郭に相当する輪郭ポリゴンを記憶する輪郭ポリゴン記憶手段をさらに備え、
前記最大起伏算出手段は、前記輪郭ポリゴンを前記シャドウボリューム配置座標に配置した後、当該輪郭ポリゴンを光線方向および光線方向とは逆の方向にずらすことにより前記最大座標および前記最小座標とを検出し、当該検出結果に基づいて前記部分シャドウボリュームの厚みを決定することを特徴とする、請求項９記載のゲーム装置。
【請求項１１】
前記第１オブジェクトの輪郭および前記光源からの光線に基づいて前記輪郭ポリゴンを生成して前記輪郭ポリゴン記憶手段に記憶させる輪郭ポリゴン生成手段をさらに備える、請求項１０記載のゲーム装置。
【請求項１２】
ゲーム処理において仮想三次元のゲーム空間における第１オブジェクトおよび第２オブジェクトを表示するときに、光源からの光に基づいて前記第２オブジェクト上に落ちる前記第１オブジェクトの影を表示するためにゲーム装置のコンピュータにより実行されるゲームプログラムであって、当該コンピュータに、
前記第１オブジェクトの輪郭および前記光源からの光線方向に基づき、かつ光線方向に前記第２オブジェクトの起伏に基づく所定の厚みを有する部分シャドウボリュームを読み出す部分シャドウボリューム読み出しステップと、
読み出した部分シャドウボリュームをシャドウボリューム配置座標に配置する部分シャドウボリューム配置ステップと、
前記部分シャドウボリューム配置ステップによって配置された部分シャドウボリュームに基づいて、前記第２オブジェクト上に落ちる前記第１オブジェクトの影を描画する影描画ステップとを実行させるゲームプログラム。
【請求項１３】
前記部分シャドウボリューム配置ステップは、前記第１オブジェクト上の所定座標から光線方向に延びる直線と前記第２オブジェクトとの交点を前記シャドウボリューム配置座標として算出するシャドウボリューム配置座標算出ステップを含む、請求項１２記載のゲームプログラム。
【請求項１４】
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも当該影領域全体が常に前記部分シャドウボリュームの内部に含まれるように、前記部分シャドウボリュームの厚みが決定されることを特徴とする、請求項１２記載のゲームプログラム。
【請求項１５】
前記部分シャドウボリュームの厚みは、前記シャドウボリューム配置座標を基準として光源の方向への厚みである光源方向厚みと、前記シャドウボリューム配置座標を基準として光源とは逆の方向への厚みである光源逆方向厚みとにより規定され、
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも当該影領域全体が常に前記部分シャドウボリュームの内部に含まれるような大きさであってかつ最小限の大きさとなるように、前記光源方向厚みおよび前記光源逆方向厚みがそれぞれ決定されることを特徴とする、請求項１２記載のゲームプログラム。
【請求項１６】
前記光源方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる、前記シャドウボリューム配置座標を基準として光源の方向への当該影領域の最大起伏に基づいて決定され、
前記光源逆方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる、前記シャドウボリューム配置座標を基準として光源とは逆の方向への当該影領域の最大起伏に基づいて決定されることを特徴とする、請求項１５記載のゲームプログラム。
【請求項１７】
前記光源方向厚みおよび前記光源逆方向厚みは、前記影領域がゲームの進行に応じて任意に変化するときにとりうる前記影領域の最大起伏に基づいて共通に決定されることを特徴とする、請求項１５記載のゲームプログラム。
【請求項１８】
前記部分シャドウボリューム読み出しステップは、前記第２オブジェクトの起伏に基づいて前記ゲーム処理以前に予め形成された部分シャドウボリュームを読み出すことを特徴とする、請求項１２記載のゲームプログラム。
【請求項１９】
前記第１オブジェクトの影が落ちる前記第２オブジェクトの影領域の最大起伏を算出する最大起伏算出ステップと、
前記最大起伏算出ステップで算出された前記最大起伏に相当する厚みを有する部分シャドウボリュームを生成して一時的に記憶し、当該部分シャドウボリュームを前記部分シャドウボリューム読み出しステップで読み出させる部分シャドウボリューム生成ステップとを前記コンピュータにさらに実行させる、請求項１２記載のゲームプログラム。
【請求項２０】
前記最大起伏算出ステップは、前記影領域において前記シャドウボリューム配置座標を基準として光源の方向へ最も離れた最大座標と、前記影領域において前記シャドウボリューム配置座標を基準として光源とは逆の方向へ最も離れた最小座標とを検出し、当該検出結果に基づいて前記部分シャドウボリュームの厚みを決定することを特徴とする、請求項１９記載のゲームプログラム。
【請求項２１】
前記光線方向に投影される前記第１オブジェクトの輪郭に相当する輪郭ポリゴンを読み出す輪郭ポリゴン読み出しステップを前記コンピュータにさらに実行させ、
前記最大起伏算出ステップは、前記輪郭ポリゴンを前記シャドウボリューム配置座標に配置した後、当該輪郭ポリゴンを光線方向および光線方向とは逆の方向にずらすことにより前記最大座標および前記最小座標とを検出し、当該検出結果に基づいて前記部分シャドウボリュームの厚みを決定することを特徴とする、請求項２０記載のゲームプログラム。
【請求項２２】
前記第１オブジェクトの輪郭および前記光源からの光線に基づいて前記輪郭ポリゴンを生成して一時的に記憶し、当該輪郭ポリゴンを前記輪郭ポリゴン読み出しステップで読み出させる輪郭ポリゴン生成ステップを前記コンピュータにさらに実行させる、請求項２１記載のゲームプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ゲーム装置及びゲームプログラムに関し、より特定的には、ゲーム処理において仮想三次元のゲーム空間における第１オブジェクトおよび第２オブジェクトを表示するときに、光源からの光に基づいて前記第２オブジェクト上に落ちる前記第１オブジェクトの影を表示するゲーム装置及びゲームプログラムに関する。
【０００２】
【従来の技術】
従来よりコンピュータグラフィクスを実現するコンピュータにおける陰影処理では、いわゆるレイトレーシングやラディオシティなどを採用することによって、リアルな陰影を付けたコンピュータグラフィクスが実現されている。
【０００３】
一方、ゲーム機による３次元ゲーム処理では、１フレーム（１／３０秒または１／６０秒）内にゲーム画像を生成する必要があり、上記コンピュータグラフィクスのような処理時間のかかる処理を採用できない。そこで従来のゲーム機では、予め影画像（または影ポリゴン）を用意しておき、適宜その影画像をキャラクタの下に置くことによって、３次元ゲーム空間におけるキャラクタ等の影を表示しているものが多かった。このような陰影処理で表示される影はリアルさにかけるという問題があった。
【０００４】
そこで、近年のゲーム機の高性能化に伴い、いわゆるシャドウマッピングやシャドウボリュームという陰影処理方法が可能になってきており、従来に比べて比較的リアルな影を表示させることも可能になってきている。
【０００５】
【発明が解決しようとする課題】
ここで、シャドウマッピングでは下記のステップ１〜５の処理により影を描画する。
（１）ゲーム空間における光源を視点とし、この視点から見たオブジェクトの奥行き情報をテーブルに格納する。
（２）本来描画しようとする視点から見たオブジェクトを描画し、奥行き情報をＺバッファに格納する。
（３）スクリーン上のある点について、そのスクリーン上の位置情報から、ステップ１で作成したテーブルの、対応する奥行き情報と比較できるように変換する変換式を作成する。
（４）ステップ３で作成した式を用いて、その点の奥行き情報と対応するステップ１のテーブルの奥行き情報とを比較し、値が等しくなければ、その点は光源との間に光を遮るオブジェクトが存在するということなので、輝度を落とす処理を行う。
（５）ステップ４の処理をスクリーン上の全ての点に対して行う。
【０００６】
このようなシャドウマッピングの場合には、光源に基づく奥行き情報の作成やコピー処理が発生し、メモリ転送帯域の少ないハードウェアでは、そのバスを占領され、その結果処理負担が大きくなるという問題がある。また、奥行き情報を格納しておくメモリが必要となる。
【０００７】
また、シャドウボリュームでは以下のような処理により影を描画する。まず、ゲーム空間における光源からの光線方向にオブジェクトの輪郭を延ばすことによって、影が落ちる影空間（シャドウボリューム）を求める。そして、例えばステンシルバッファにその影空間の表面・裏面を描画することで、影が落ちる部分だけを求める。そして、その部分に対応するゲーム画像の部分に影を描画する。
【０００８】
このようなシャドウボリュームの場合には、オブジェクトの輪郭を抽出し、その輪郭を光線方向に延ばした影空間を生成することに大きな処理負担がかかり、また、ステンシルバッファに全影空間を描画することに大きな処理負担がかかるという問題がある。
【０００９】
つまり、ゲーム機が高性能化しても、よりリアルなゲーム画像を生成するために、負担の大きな上述の処理を行わせることは、ゲーム性を損なわせる原因にもなっており、リアルでかつ負担の少ない処理を実現することが求められている。
【００１０】
それゆえに本発明の目的は、処理負担が少なくかつリアルな影を描画することのできるゲーム装置及びゲームプログラムを提供することである。
【００１１】
【課題を解決するための手段および発明の効果】
この発明は、上記の目的を達成するために、次のように構成される。
すなわち、請求項１に係る発明によれば、ゲーム装置は、ゲーム処理において仮想三次元のゲーム空間における第１オブジェクト（実施例との対応関係を示せば、例えばキャラクタオブジェクト）および第２オブジェクト（地形オブジェクト）を表示するときに、光源からの光に基づいて第２オブジェクト上に落ちる第１オブジェクトの影を表示するものであって、部分シャドウボリューム記憶手段（ＤＶＤ−ＲＯＭ３００または本体ＲＡＭ）と、部分シャドウボリューム配置手段（ステップＳ１１０６を実行するＣＰＵ１０；以下、単にステップ番号のみを示す）と、影描画手段（Ｓ１３０２）とを備える。部分シャドウボリューム記憶手段は、第１オブジェクトの輪郭および光源からの光線方向に基づく部分シャドウボリュームを記憶する。この部分シャドウボリュームの光線方向の厚みは第２オブジェクトの起伏に基づく。部分シャドウボリューム配置手段は、部分シャドウボリュームをシャドウボリューム配置座標に配置する。影描画手段は、部分シャドウボリューム配置手段によって配置された部分シャドウボリュームに基づいて、第２オブジェクト上に落ちる第１オブジェクトの影を描画する。
【００１２】
上記第１の発明によれば、所定の厚みを有する部分シャドウボリュームを用いて影描画処理を行うので、影描画処理に係る処理負担を低減しつつリアルな影を描画することができる。
【００１３】
また、請求項２に係る発明によれば、部分シャドウボリューム配置手段は、シャドウボリューム配置座標算出手段（Ｓ１２０１〜Ｓ１２０５）を含む。シャドウボリューム配置座標算出手段は、第１オブジェクト上の所定座標から光線方向に延びる直線と第２オブジェクトとの交点をシャドウボリューム配置座標として算出する。
【００１４】
また、請求項３に係る発明によれば、第１オブジェクトの影が落ちる第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも影領域全体が常に部分シャドウボリュームの内部に含まれるように、部分シャドウボリュームの厚みが決定されることを特徴とする。
【００１５】
上記第３の発明によれば、ゲームの進行に応じて影領域の位置や大きさや形状等が変化する場合であっても常に正確な影を描画することができる。
【００１６】
また、請求項４に係る発明によれば、部分シャドウボリュームの厚みは、シャドウボリューム配置座標を基準として光源の方向への厚みである光源方向厚み（ｈａ）と、シャドウボリューム配置座標を基準として光源とは逆の方向への厚みである光源逆方向厚み（ｈｂ）とにより規定され、第１オブジェクトの影が落ちる第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも影領域全体が常に部分シャドウボリュームの内部に含まれるような大きさであってかつ最小限の大きさとなるように、光源方向厚みおよび光源逆方向厚みがそれぞれ決定されることを特徴とする。
【００１７】
上記第４の発明によれば、シャドウボリューム配置座標を基準として光源方向および光源逆方向にそれぞれ必要最小限の厚みを有する部分シャドウボリュームを用意するので、影描画処理にかかる処理負荷を最適に低減することができる。
【００１８】
また、請求項５に係る発明によれば、光源方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる、シャドウボリューム配置座標を基準として光源の方向への影領域の最大起伏（ｈａ１，ｈａ２，ｈａ３，・・・，ｈａＮのうちの最大値）に基づいて決定され、光源逆方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる、シャドウボリューム配置座標を基準として光源とは逆の方向への影領域の最大起伏（ｈｂ１，ｈｂ２，ｈｂ３，・・・，ｈｂＮのうちの最大値）に基づいて決定されることを特徴とする。
【００１９】
上記第５の発明によれば、部分シャドウボリュームの必要最小限の光源方向厚みおよび光源逆方向厚みを決定することができる。
【００２０】
また、請求項６に係る発明によれば、光源方向厚みおよび光源逆方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる影領域の最大起伏（Ｈ１，Ｈ２，Ｈ３，・・・，ＨＮのうちの最大値）に基づいて共通に決定されることを特徴とする。
【００２１】
上記第６の発明によれば、部分シャドウボリュームに必要な厚みを簡略的に決定することができる。
【００２２】
また、請求項７に係る発明によれば、部分シャドウボリューム記憶手段は、第２オブジェクトの起伏に基づいてゲーム処理以前に予め形成された部分シャドウボリュームを記憶することを特徴とする。
【００２３】
上記第７の発明によれば、ゲーム処理において部分シャドウボリュームを生成する必要がないため、ゲーム処理にかかる処理負担が低減される。
【００２４】
また、請求項８に係る発明によれば、ゲーム装置は、最大起伏算出手段（Ｓ１８０２、Ｓ２００２、Ｓ２００３））および部分シャドウボリューム生成手段（Ｓ１８０３、Ｓ２００４）をさらに備える。最大起伏算出手段は、第１オブジェクトの影が落ちる第２オブジェクトの影領域の最大起伏を算出する。部分シャドウボリューム生成手段は、最大起伏算出手段によって算出された最大起伏に相当する厚みを有する部分シャドウボリュームを生成して部分シャドウボリューム記憶手段に記憶させる。
【００２５】
上記第８の発明によれば、影領域の最大起伏に基づいて必要最小限の厚みを有する部分シャドウボリュームを適宜生成することができる。
【００２６】
また、請求項９に係る発明によれば、最大起伏算出手段は、影領域においてシャドウボリューム配置座標を基準として光源の方向へ最も離れた最大座標（Ｐｍａｘ）と、影領域においてシャドウボリューム配置座標を基準として光源とは逆の方向へ最も離れた最小座標（Ｐｍｉｎ）とを検出し、これら検出結果に基づいて部分シャドウボリュームの厚みを決定することを特徴とする。
【００２７】
また、請求項１０に係る発明によれば、ゲーム装置は輪郭ポリゴン記憶手段（ＤＶＤ−ＲＯＭ３００又は本体ＲＡＭ）をさらに備える。輪郭ポリゴン記憶手段は、光線方向に投影される第１オブジェクトの輪郭に相当する輪郭ポリゴンを記憶する。最大起伏算出手段は、輪郭ポリゴンをシャドウボリューム配置座標に配置した後、この輪郭ポリゴンを光線方向および光線方向とは逆の方向にずらすことにより最大座標および最小座標とを検出し、これら検出結果に基づいて部分シャドウボリュームの厚みを決定することを特徴とする。
【００２８】
上記第１０の発明によれば、第２オブジェクトにおける第１オブジェクトの輪郭領域（影領域）を算出することなく影領域の最大起伏を算出することができるので、部分シャドウボリュームの生成処理にかかる処理負担が低減される。
【００２９】
また、請求項１１に係る発明によれば、ゲーム装置は、輪郭ポリゴン生成手段をさらに備える。輪郭ポリゴン生成手段は、第１オブジェクトの輪郭および光源からの光線に基づいて輪郭ポリゴンを生成して輪郭ポリゴン記憶手段に記憶させる。
【００３０】
上記第１１の発明によれば、状況に応じて適宜に輪郭ポリゴンを生成して利用することができる。
【００３１】
また、請求項１２に係る発明によれば、ゲームプログラムは、ゲーム処理において仮想三次元のゲーム空間における第１オブジェクトおよび第２オブジェクトを表示するときに、光源からの光に基づいて第２オブジェクト上に落ちる第１オブジェクトの影を表示するためにゲーム装置のコンピュータにより実行されるものであって、このコンピュータに、部分シャドウボリューム読み出しステップ（Ｓ１２０６）と、部分シャドウボリューム配置ステップと、影描画ステップとを実行させる。部分シャドウボリューム読み出しステップは、第１オブジェクトの輪郭および光源からの光線方向に基づくと部分シャドウボリュームを読み出す。この部分シャドウボリュームの光線方向の厚みは第２オブジェクトの起伏に基づく。部分シャドウボリューム配置ステップは、部分シャドウボリュームを第２オブジェクト上のシャドウボリューム配置座標に配置する。影描画ステップは、部分シャドウボリューム配置ステップによって配置された部分シャドウボリュームに基づいて、第２オブジェクト上に落ちる第１オブジェクトの影を描画する。
【００３２】
上記第１２の発明によれば、所定の厚みを有する部分シャドウボリュームを用いて影描画処理を行うので、影描画処理に係る処理負担を低減しつつリアルな影を描画することができる。
【００３３】
また、請求項１３に係る発明によれば、部分シャドウボリューム配置ステップは、シャドウボリューム配置座標算出ステップを含む。シャドウボリューム配置座標算出ステップは、第１オブジェクト上の所定座標から光線方向に延びる直線と第２オブジェクトとの交点をシャドウボリューム配置座標として算出する。
【００３４】
また、請求項１４に係る発明によれば、第１オブジェクトの影が落ちる第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも影領域全体が常に部分シャドウボリュームの内部に含まれるように、部分シャドウボリュームの厚みが決定されることを特徴とする。
【００３５】
また、請求項１５に係る発明によれば、部分シャドウボリュームの厚みは、シャドウボリューム配置座標を基準として光源の方向への厚みである光源方向厚みと、シャドウボリューム配置座標を基準として光源とは逆の方向への厚みである光源逆方向厚みとにより規定され、第１オブジェクトの影が落ちる第２オブジェクトの影領域がゲームの進行に応じて任意に変化する場合にも影領域全体が常に部分シャドウボリュームの内部に含まれるような大きさであってかつ最小限の大きさとなるように、光源方向厚みおよび光源逆方向厚みがそれぞれ決定されることを特徴とする。
【００３６】
また、請求項１６に係る発明によれば、光源方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる、シャドウボリューム配置座標を基準として光源の方向への影領域の最大起伏に基づいて決定され、光源逆方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる、シャドウボリューム配置座標を基準として光源とは逆の方向への影領域の最大起伏に基づいて決定されることを特徴とする。
【００３７】
また、請求項１７に係る発明によれば、光源方向厚みおよび光源逆方向厚みは、影領域がゲームの進行に応じて任意に変化するときにとりうる影領域の最大起伏に基づいて共通に決定されることを特徴とする。
【００３８】
また、請求項１８に係る発明によれば、部分シャドウボリューム読み出しステップは、第２オブジェクトの起伏に基づいてゲーム処理以前に予め形成された部分シャドウボリュームを読み出すことを特徴とする。
【００３９】
また、請求項１９に係る発明によれば、ゲームプログラムは、最大起伏算出ステップと、部分シャドウボリューム生成ステップとをコンピュータにさらに実行させる。最大起伏算出ステップは、第１オブジェクトの影が落ちる第２オブジェクトの影領域の最大起伏を算出する。部分シャドウボリューム生成ステップは、最大起伏算出ステップで算出された最大起伏に相当する厚みを有する部分シャドウボリュームを生成して一時的に記憶し、この部分シャドウボリュームを部分シャドウボリューム読み出しステップで読み出させる。
【００４０】
また、請求項２０に係る発明によれば、最大起伏算出ステップは、影領域においてシャドウボリューム配置座標を基準として光源の方向へ最も離れた最大座標と、影領域においてシャドウボリューム配置座標を基準として光源とは逆の方向へ最も離れた最小座標とを検出し、これら検出結果に基づいて部分シャドウボリュームの厚みを決定することを特徴とする。
【００４１】
また、請求項２１に係る発明によれば、ゲームプログラムは、輪郭ポリゴン読み出しステップ（Ｓ２００１）をコンピュータにさらに実行させる。輪郭ポリゴン読み出しステップは、光線方向に投影される第１オブジェクトの輪郭に相当する輪郭ポリゴンを読み出す。そして最大起伏算出ステップは、輪郭ポリゴンをシャドウボリューム配置座標に配置した後、この輪郭ポリゴンを光線方向および光線方向とは逆の方向にずらすことにより最大座標および最小座標とを検出し、これら検出結果に基づいて部分シャドウボリュームの厚みを決定することを特徴とする。
【００４２】
また、請求項２２に係る発明によれば、ゲームプログラムは、輪郭ポリゴン生成ステップをコンピュータにさらに実行させる。輪郭ポリゴン生成ステップは、第１オブジェクトの輪郭および光源からの光線に基づいて輪郭ポリゴンを生成して一時的に記憶し、この輪郭ポリゴンを輪郭ポリゴン読み出しステップで読み出させる。
【００４３】
【発明の実施の形態】
図１は、本発明の一実施形態に係るゲームシステムの構成を示す外観図であり、図２はそのブロック図である。図１、図２に示すように、ゲームシステムは、ゲーム機本体１００、ＤＶＤ−ＲＯＭ３００、外部メモリカード４００、コントローラ２００、スピーカ６００およびＴＶモニタ５００を備える。ＤＶＤ−ＲＯＭ３００および外部メモリカード４００は、ゲーム機本体１００に着脱自在に装着される。コントローラ２００は、通信ケーブルを介して、ゲーム機本体１００に設けられた複数（図１では４つ）のコントローラポート用コネクタのいずれかに接続される。ＴＶモニタ５００およびスピーカ６００は、ＡＶケーブル等によって接続される。なお、ゲーム機本体１００とコントローラ２００との通信は無線通信であってもよい。以下、図２を参照しながら、ゲームシステムの各部についてより詳細に説明する。
【００４４】
ＤＶＤ−ＲＯＭ３００は、ゲームプログラムやキャラクタデータ等のゲームに関するデータを固定的に記憶している。プレイヤがゲームを行う場合、ＤＶＤ−ＲＯＭ３００はゲーム機本体１００に装着される。なお、ゲームプログラム等を記憶する手段として、ＤＶＤ−ＲＯＭ３００の代わりに例えばＣＤ−ＲＯＭ、ＭＯ、メモリカード、ＲＯＭカートリッジ等の外部記憶媒体を用いてもよい。
【００４５】
外部メモリカード４００は、例えばフラッシュメモリ等の書き換え可能な記憶媒体によって構成され、例えばゲームにおけるセーブデータ等のデータを記録する。
【００４６】
ゲーム機本体１００は、ＤＶＤ−ＲＯＭ３００に記録されているゲームプログラムを読み出し、ゲーム処理を行う。
【００４７】
コントローラ２００は、プレイヤがゲーム操作に関する入力を行うための入力装置であり、複数の操作スイッチを有する。コントローラ２００は、プレイヤによる操作スイッチの押圧等に応じて操作データをゲーム機本体１００に出力する。
【００４８】
ＴＶモニタ５００は、ゲーム機本体１００から出力された画像データを画面に表示する。なお、スピーカ６００は、典型的にはＴＶモニタ５００に内蔵されており、ゲーム機本体１００から出力されたゲーム中の音声を出力する。
【００４９】
次に、ゲーム機本体１００の構成について説明する。図２において、ゲーム機本体１００には、ＣＰＵ１０およびそれに接続されるメモリコントローラ２０が設けられる。さらにゲーム機本体１００において、メモリコントローラ２０は、グラフィックスプロセッシングユニット（ＧＰＵ）１１と、メインメモリ１７と、ＤＳＰ１８と、各種インターフェース（Ｉ／Ｆ）２１〜２４，２６とに接続される。メモリコントローラ２０は、これら各構成要素間のデータ転送を制御する。
【００５０】
ゲーム開始の際、まず、ＤＶＤドライブ２５は、ゲーム機本体１００に装着されたＤＶＤ−ＲＯＭ３００を駆動する。ＤＶＤ−ＲＯＭ３００に記憶されているゲームプログラムは、ＤＶＤディスクＩ／Ｆ２６およびメモリコントローラ２０を介して、メインメモリ１７に読み込まれる。メインメモリ１７上のプログラムをＣＰＵ１０が実行することによってゲームが開始される。ゲーム開始後、プレイヤは、操作スイッチを用いてコントローラ２００に対してゲーム操作等の入力を行う。プレイヤによる入力に従い、コントローラ２００は、操作データをゲーム機本体１００に出力する。コントローラ２００から出力される操作データは、コントローラＩ／Ｆ２１およびメモリコントローラ２０を介してＣＰＵ１０に入力される。ＣＰＵ１０は、入力された操作データに応じてゲーム処理を行う。ゲーム処理における画像データ生成等に際して、ＧＰＵ１１やＤＳＰ１８が用いられる。また、サブメモリ１９は、ＤＳＰ１８が所定の処理を行う際に用いられる。
【００５１】
ＧＰＵ１１は、ジオメトリユニット１２およびレンダリングユニット１３を含み、画像処理専用のメモリに接続されている。この画像処理専用メモリは、例えばカラーバッファ１４やＺバッファ１５やステンシルバッファ１６として利用される。ジオメトリユニット１２は、仮想三次元空間であるゲーム空間に置かれた物体や図形に関する立体モデル（例えばポリゴンで構成されるオブジェクト）の座標についての演算処理を行うものであり、例えば立体モデルの回転・拡大縮小・変形や、ワールド座標系の座標から視点座標系やスクリーン座標系の座標への変換を行うものである。レンダリングユニット１３は、所定のテクスチャに基づいて、スクリーン座標に投影された立体モデルについて各ピクセルごとのカラーデータ（ＲＧＢデータ）をカラーバッファ１４に書き込むことによって、ゲーム画像を生成するためのものである。また、カラーバッファ１４は、レンダリングユニット１３によって生成されたゲーム画像データ（ＲＧＢデータ）を保持するために確保されたメモリ領域である。Ｚバッファ１５は、３次元の視点座標から２次元のスクリーン座標に変換する際に失われる視点からの奥行情報を保持するために確保されたメモリ領域である。ステンシルバッファ１６は、後述するシャドウボリュームを用いた影領域の判定を行うために確保されたメモリ領域である。ＧＰＵ１１は、これらバッファを用いてＴＶモニタ５００に表示すべき画像データを生成し、メモリコントローラ２０およびビデオＩ／Ｆ２２を介して画像データをＴＶモニタ５００に適宜出力する。なお、ゲームプログラム実行時にＣＰＵ１０において生成される音声データは、メモリコントローラ２０からオーディオＩ／Ｆ２４を介してスピーカ６００に出力される。なお本実施形態では、画像処理専用のメモリを別途設けたハードウェア構成としたが、これに限らず例えばメインメモリ１７の一部を画像処理用のメモリとして利用する方式（ＵＭＡ：Ｕｎｉｆｉｅｄ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ）を使うようにしてもよい。
【００５２】
図３に、ＤＶＤ−ＲＯＭ３００のメモリマップを示す。ＤＶＤ−ＲＯＭ３００には、ゲームプログラムや、オブジェクトデータや、テクスチャデータや、ボリュームデータなどが格納されている。ここでは一例としてゲームプログラムがカートゲーム用のプログラムである場合について説明する。オブジェクトデータには、コースオブジェクトやキャラクタオブジェクトやカートオブジェクトなどのデータが含まれる。テクスチャデータには、コーステクスチャやキャラクタテクスチャやカートテクスチャなどのデータが含まれる。ボリュームデータには、カートシャドウボリュームのデータが含まれる。カートシャドウボリュームの詳細については後述する。
【００５３】
以下、本実施形態の動作について具体的に説明する。
ゲーム機本体１００のＣＰＵ１０は、ＤＶＤ−ＲＯＭ３００に格納されたカートゲーム用のプログラムに基づいてゲーム処理を実行する。このカートゲームでは、仮想三次元のゲーム空間に設置されたコース上を複数のキャラクタがカートに乗って走行する。ゲーム空間には地面・建物等の地形オブジェクトと、プレイヤキャラクタ・敵キャラクタ等のキャラクタオブジェクトが配置され、キャラクタオブジェクトの位置はゲームの進行に応じて適宜変更される。
【００５４】
図４に、地形オブジェクトおよびキャラクタオブジェクトが配置された仮想三次元のゲーム空間を示す。ゲーム空間における各オブジェクトの位置はワールド座標系で表される。このゲーム空間をＴＶモニタ５００に表示するために、ゲーム空間において視点（例えばプレイヤキャラクタをその背後から捉えるような視点）が設定される。ワールド座標系で表された各オブジェクトの座標は、この視点を中心とした座標（カメラ座標系）に変換され、その後、各オブジェクトは二次元の投影平面座標系に投影される。この投影平面座標系に投影された各オブジェクトにはテクスチャに基づいて色情報が与えられる。このとき、後述する影描画処理によってコース上に落ちるカートの影も描画される。こうして生成されたゲーム画像が例えば１／６０秒毎に生成され、ＴＶモニタ５００に表示される。
【００５５】
図５に、ＴＶモニタ５００に表示されるゲーム画像の一例を示す。コース上には各カートの影が表示される。以下、この影描画処理について説明する。
【００５６】
本実施形態では、カートに対して予めシャドウボリュームが用意されている（図３に示すカートシャドウボリューム）。シャドウボリュームとは、あるオブジェクトが影を落とす空間、言い換えると、あるオブジェクトによって光源からの光が遮られるような空間を規定するものである。このシャドウボリュームを用いることにより、複雑な地形に落ちる影を正確に表示することができる。本来、シャドウボリュームは、影を落とすオブジェクト（ここではカート）の各頂点を光線方向に延ばすことによって得られる半無限の空間となる。しかしながら本実施形態では、光線方向に地形の起伏に基づいた所定の厚み（この厚みの決定方法については後述する。）を有するようなシャドウボリュームを用いる。以下、このシャドウボリュームを用いた影描画処理について図面を参照して簡単に説明する。
【００５７】
図６に示すように、地形オブジェクトにおいて、影を落とすオブジェクトのシャドウボリュームと交わる領域が影ができる領域（以下、影領域と称す）となる。なお図６では天空光の場合を示しているが、点光源の場合も同様である。影領域は、ステンシルバッファを用いることにより簡単に判定することができる。ステンシルバッファを用いて影領域を判定する一般的な手法としては、図７に示すように、まず（ａ）シャドウボリュームの表面をステンシルバッファに描画（ステンシルバッファをインクリメント）し、それから（ｂ）シャドウボリュームの裏面をステンシルバッファに描画（ステンシルバッファをデクリメント）する。その結果、ステンシルバッファの値は、影領域の部分は“１”になり、それ以外の部分は“０”となる。しかしながらこの一般的な手法では、シャドウボリュームの内部に視点が設定されたときに影領域の部分がインクリメントされず、その結果、影領域を正確に判定できないという問題があった。そこで本実施形態では、図７に示すように、まず（ｃ）シャドウボリュームの裏面であってかつ他のオブジェクトに隠れている部分をステンシルバッファに描画（ステンシルバッファをインクリメント）し、それから（ｄ）シャドウボリュームの表面であってかつ他のオブジェクトに隠れている部分をステンシルバッファに描画（ステンシルバッファをデクリメント）する。これにより、シャドウボリュームの内部に視点が設定されたときにも影領域を正確に判定することができる。
【００５８】
次に、予め用意しておくシャドウボリュームの厚みについて説明する。本実施形態では、予め所定の厚さ（好ましくは必要最小限の厚さ）のシャドウボリュームを用意しておき、これを地形オブジェクト上に配置することを特徴としている。本実施形態では、図８に示すように、影を落とすオブジェクト（ここではカート）の配置座標を光線方向に下ろしていき、影が落ちるオブジェクト（ここでは地形オブジェクト）と交差した点にシャドウボリュームを配置する。この点をシャドウボリューム配置座標と称す。図９にシャドウボリュームの上面および側面を示す。シャドウボリュームの厚みはシャドウボリューム配置座標を基準に規定され、具体的には図９に示すように、シャドウボリューム配置座標から光源方向への厚みである光源方向厚みｈａと、シャドウボリューム配置座標から光源とは逆の方向への厚みである光源逆方向厚みｈｂとにより規定される。以下、この光源方向厚みｈａおよび光源逆方向厚みｈｂの決定方法について図１０を参照して説明する。ただし、図１０では便宜上、シャドウボリュームおよび地形オブジェクトを二次元で図示している。
【００５９】
まず、シャドウボリューム配置座標がＰ１のときに最小限必要となるシャドウボリュームの光源方向への厚みおよび光源とは逆の方向への厚みをそれぞれ求める。求めた結果をそれぞれｈａ１、ｈｂ１とする。次に、シャドウボリュームの配置座標がＰ２のときに最小限必要となるシャドウボリュームの光源方向への厚みおよび光源とは逆の方向への厚みをそれぞれ求める。求めた結果をそれぞれｈａ２、ｈｂ２とする。以下同様に、シャドウボリューム配置座標を順次変更し、その都度、最小限必要となるシャドウボリュームの光源方向の厚みおよび光源とは逆の方向への厚みをそれぞれ求める。このような調査を、地形オブジェクト上の、シャドウボリューム配置座標として設定され得る全ての点（ここでは仮にＮ箇所とする）において行う。なお例えばコースの両側が高い崖となっていてカートがコース外に出る可能性がないような場合には、コース外の点についてはこのような調査を行なわない。このような調査の結果、光源方向への厚みについてＮ個の値（ｈａ１，ｈａ２，ｈａ３，・・・，ｈａＮ）が得られ、光源とは逆の方向への厚みについてＮ個の値（ｈｂ１，ｈｂ２，ｈｂ３，・・・，ｈｂＮ）が得られる。そして光源方向への厚みおよび光源とは逆の方向への厚みのそれぞれについて、得られたＮ個の値の中から最大値を選出する。こうして選出されたそれぞれの最大値が、予め用意しておくべきシャドウボリュームの光源方向厚みｈａおよび光源逆方向厚みｈｂの値となる。なお、上記の決定方法は一例にすぎず、結果的に同じ値が得られるならば他の方法を用いて光源方向厚みｈａおよび光源逆方向厚みｈｂを決定してもよい。
【００６０】
なお、光源方向厚みｈａおよび光源逆方向厚みｈｂを決定するためのより簡略な方法として、シャドウボリューム配置座標Ｐ１〜ＰＮのそれぞれにおいて最小限必要となるシャドウボリュームの厚みＨ１〜ＨＮを求め（ここでＨ１＝ｈａ１＋ｈｂ１，Ｈ２＝ｈａ２＋ｈｂ２，Ｈ３＝ｈａ３＋ｈｂ３，・・・，ＨＮ＝ｈａＮ＋ｈｂＮ）、それらＮ個の値（Ｈ１〜ＨＮ）の最大値を、光源方向厚みｈａおよび光源逆方向厚みｈｂの両方に共通に用いてもよい。この方法によれば、各シャドウボリューム配置座標Ｐ１〜ＰＮについて、光源方向への厚みおよび光源とは逆方向への厚みを求める必要はなく、カートの影が落ちる領域における最大起伏（光線方向について）を算出するだけでよいため、シャドウボリュームの厚みをより簡単に決定することができる。ただしこの場合、シャドウボリュームの厚みとして必ずしも必要最小限の厚みが設定されるとは限らない。例えば光源が点光源である場合や、シャドウボリューム配置座標として設定され得る領域のすぐ外側に大きな起伏がある場合といった特殊な状況において、必要最小限の厚みよりも大きな厚みが設定される可能性がある。
【００６１】
次に、本実施形態におけるＣＰＵ１０またはＧＰＵ１１の動作について、図１１〜図１６のフローチャートを参照して説明する。
【００６２】
ゲーム処理が開始すると、ＣＰＵ１０は、地面（コースを含む）や建物等を形成するための地形オブジェクトをワールド座標系の初期座標に配置する（ステップＳ１１０１）。続いてプレイヤキャラクタや敵キャラクタを含むキャラクタオブジェクトおよび仮想カメラをワールド座標系の初期座標に配置する（ステップＳ１１０２）。なお図３ではキャラクタオブジェクトとカートオブジェクトとを別々に記載したが、ここでは両者を区別することなく単にキャラクタオブジェクトと称する。続いてＣＰＵ１０は、コントローラ２００からの入力があったかどうかを判断し（ステップＳ１１０３）、入力があった場合には、その内容に応じてプレイヤキャラクタ（プレイヤキャラクタが乗車しているカートを含む）および仮想カメラの位置座標を更新し（ステップＳ１１０４）、ステップＳ１１０４に進む。一方、ステップＳ１１０３においてコントローラ２００からの入力がなかった場合にはそのままステップＳ１１０４に進む。ステップＳ１１０４で、ＣＰＵ１１０５は、ワールド座標系における敵キャラクタの位置座標を更新する。こうして各キャラクタおよび仮想カメラの位置座標の更新が完了すると、シャドウボリューム処理が開始され（ステップＳ１１０６）、ワールド座標系の所定の位置座標にシャドウボリュームが配置される。このシャドウボリューム処理の詳細については後述する。
【００６３】
ワールド座標系におけるシャドウボリュームの配置が完了すると、ＧＰＵ１１は、キャラクタオブジェクト、地形オブジェクトおよびシャドウボリュームの位置座標をワールド座標系から仮想カメラの位置を基準とするカメラ座標系に変換し（ステップＳ１１０７）、さらにカメラ座標系から二次元の投影平面座標系に変換する（ステップＳ１１０８）。このとき、クリッピング処理やテクスチャの指定処理もあわせて行われる。
【００６４】
位置座標の変換が完了すると、ゲーム画像生成処理が開始され（ステップＳ１１０９）、ＴＶモニタ５００に表示すべきゲーム画像が生成される。このゲーム画像生成処理の詳細については後述する。ステップＳ１１０９で生成されたゲーム画像はＴＶモニタ５００に表示される（ステップＳ１１１０）。その後、ＣＰＵ１０は、ゲームが終了したかどうかを判断し（ステップＳ１１１１）、ゲームが続行する場合にはステップＳ１１０３に戻り、ゲームが終了した場合にはゲーム処理を終了する。
【００６５】
次に、図１２を参照して、図１１に示すステップＳ１１０６のシャドウボリューム処理の詳細について説明する。
シャドウボリューム処理が開始すると、ＣＰＵ１０は、ワールド座標系における影を落とすオブジェクト（キャラクタオブジェクト等）の配置座標を取得する（ステップＳ１２０１）。そして、ステップＳ１２０１で取得したキャラクタオブジェクト等の配置座標を、シャドウボリューム配置座標を求めるための調査座標にセットする（ステップＳ１２０２）。そして、調査座標を光線方向にシフトするように更新し（ステップＳ１２０３）、調査座標の更新の結果、調査座標が影の落ちるオブジェクト（地形オブジェクト）に含まれたかどうかを判断する（ステップＳ１２０４）。調査座標が地形オブジェクトに含まれていない場合にはステップＳ１２０３に戻り、さらに調査座標を光線方向にシフトさせ、調査座標が地形オブジェクトに含まれるまでステップＳ１２０３およびステップＳ１２０４を繰り返す。
【００６６】
ステップＳ１２０４で調査座標が地形オブジェクトに含まれたと判断すると、ＣＰＵ１０は、現在の調査座標をシャドウボリューム配置座標として設定する（ステップＳ１２０５）。そして、予め用意された、影を落とすオブジェクトに対応するシャドウボリュームを、ステップＳ１２０５で設定したシャドウボリューム配置座標に配置する（ステップＳ１２０６）。こうしてシャドウボリューム処理は終了する。
【００６７】
次に、図１３を参照して、図１１に示すステップＳ１１０９のゲーム画像生成処理の詳細について説明する。
ゲーム画像生成処理が開始すると、ＧＰＵ１１は、まず地形オブジェクトの描画処理を行う（ステップＳ１３０１）。この地形オブジェクトの描画処理の詳細については後述する。地形オブジェクトの描画が完了すると、地形オブジェクトに落ちる影を描画するための影描画処理を行う（ステップＳ１３０２）。この影描画処理の詳細については後述する。影の描画が完了すると、ＧＰＵ１１は、プレイヤキャラクタの描画処理を行い（ステップＳ１３０３）、続いて敵キャラクタやアイテム等の描画処理を行う（ステップＳ１３０４）。これらキャラクタ等の描画処理の詳細については後述する。こうしてゲーム画像生成処理は終了する。以下、ゲーム画像生成処理における各ステップの処理の詳細について説明する。
【００６８】
まず、図１４を参照して、図１３に示すステップＳ１３０１の地形オブジェクトの描画処理の詳細について説明する。
地形オブジェクトの描画処理が開始すると、ＧＰＵ１１は、地面や建物などの地形オブジェクト等に対応するテクスチャの読み出しを行う（ステップＳ１４０１）。次に、投影平面座標系に投影された地形オブジェクトの書き込もうとしている部分に対応する各ピクセルのＺバッファ１５を参照し（ステップＳ１４０２）、その書き込もうとしている地形オブジェクトの部分の奥行き情報が、対応するＺバッファ値よりも小さいかどうかを判断する（ステップＳ１４０３）。奥行き情報がＺバッファ値よりも小さい場合は、そのピクセルのＺバッファ値を更新し（ステップＳ１４０４）、カラーバッファ１４のこのピクセルに該当する領域にテクスチャの色情報を書き込んで（ステップＳ１４０５）からステップＳ１４０６へ進む。一方、ステップＳ１４０３で。奥行き情報がＺバッファ値よりも小さくない場合はそのままステップＳ１４０６へ進む。ステップＳ１４０６でＧＰＵ１１は、地形の描画が終了したかどうか判断し、終了していなければステップＳ１４０２に戻り、終了していれば影描画処理に進む。
【００６９】
図１５を参照して、図１３に示すステップＳ１３０２の影描画処理の詳細について説明する。
影描画処理が開始すると、ＧＰＵ１１は、まずステンシルバッファ（非表示バッファ）１６をクリアする（ステップＳ１５０１）。そして、Ｚバッファ１５を参照しながらシャドウボリュームの裏面であってかつ地形オブジェクトに隠れている部分をステンシルバッファ１６に描画する（ステップＳ１５０２）。ただしここでは色情報は書き込まれず、ステンシルバッファ１６の各ピクセルのカウント値がインクリメントされる。そしてシャドウボリュームの裏面処理が終了したかどうかを判断し（ステップＳ１５０３）、終了してればステップＳ１５０４に進み、終了していなければステップＳ１５０２に戻る。次にＧＰＵ１１は、ステップＳ１５０４で、Ｚバッファ値を参照しながらシャドウボリュームの表面であってかつ地形オブジェクトに隠れている部分をステンシルバッファ１６に描画する。ただしここでは色情報は書き込まれず、ステンシルバッファ１６の各ピクセルのカウント値がデクリメントされる。そしてシャドウボリュームの表面処理が終了したかどうかを判断し（ステップＳ１５０５）、終了していればステップＳ１５０６に進み、終了していなければステップＳ１５０４に戻る。ステップＳ１５０６では全てのシャドウボリュームについてステンシルバッファ１６への描画処理が終了したかどうかを判断し、終了していればステップＳ１５０７に進み、終了していなければステップＳ１５０２に戻る。次にＧＰＵ１１は、ステンシルバッファ１６の各ピクセルのカウント値を参照して、カラーバッファ１４の各ピクセルの色情報（ＲＧＢ）を更新する。例えばステンシルバッファ１６のカウント値が１以上である部分（つまり影の部分）については色が暗くなるようにカラーバッファ１４の色情報を変化させることにより影の描画を行う。そして影の描画が終了したかどうか判断し（ステップＳ１５０８）、終了していなければステップＳ１５０７に戻り、終了していればプレイヤキャラクタの描画処理に進む。
【００７０】
図１６を参照して、図１３に示すステップＳ１３０３のプレイヤキャラクタの描画処理の詳細について説明する。
プレイヤキャラクタの描画処理が開始すると、ＧＰＵ１１は、プレイヤキャラクタに対応するテクスチャの読み出しを行う（ステップＳ１６０１）。次に、投影平面座標系に投影されたプレイヤキャラクタオブジェクトの書き込もうとしている部分に対応する各ピクセルのＺバッファ１５を参照し（ステップＳ１６０２）、その書き込もうとしているキャラクタオブジェクトの部分の奥行き情報が、対応するＺバッファ値よりも小さいかどうかを判断する（ステップＳ１６０３）。奥行き情報がＺバッファ値よりも小さい場合は、そのピクセルのＺバッファ値を更新し（ステップＳ１６０４）、カラーバッファ１４のこのピクセルに該当する領域にテクスチャの色情報を書き込んで（ステップＳ１６０５）からステップＳ１６０６へ進む。一方、ステップＳ１６０３で。奥行き情報がＺバッファ値よりも小さくない場合はそのままステップＳ１６０６へ進む。ステップＳ１６０６でＧＰＵ１１は、プレイヤキャラクタの描画が終了したかどうか判断し、終了していなければステップＳ１６０２に戻り、終了していれば敵キャラクタ等の描画処理に進む。
【００７１】
図１３に示すステップＳ１３０４の敵キャラクタ等の描画処理の詳細については、前述のプレイヤキャラクタの描画処理と基本的に同様であるので説明を省略する。
【００７２】
以上のように本実施形態では、地形オブジェクトの起伏に応じた所定の厚さを有するシャドウボリュームを予め用意しておき、このシャドウボリュームに基づいて影描画処理を行う。よって、影領域の判定のためにステンシルバッファ１６に描画すべきシャドウボリュームの大きさが従来よりも小さくなり、その結果、影描画処理（図１５のステップＳ１５０２およびステップＳ１５０４）にかかる処理負担を低減することができる。したがってゲーム装置においてゲーム性を損ねることなくリアルな影を描画することが可能となる。
【００７３】
なお本実施形態ではゲームプログラムはＤＶＤ−ＲＯＭ３００を介してゲーム機本体１００に供給されるとしたが、これに限らず、ＤＶＤ−ＲＯＭ３００以外の他のコンピュータ読み取り可能な記録媒体（例えばＣＤ−ＲＯＭ、ＭＯ、メモリカード、ＲＯＭカートリッジ等）に格納されてゲーム機本体１００に供給されても構わないし、予めゲーム機本体１００に組み込まれていても構わないし、通信回線を通じてゲーム機本体１００に供給されても構わない。
【００７４】
また本実施形態では描画処理等をＧＰＵ１１が行うとしたが、ＣＰＵ１０が行ってもよい。
【００７５】
また本実施形態では平行光によってできる影を描画する場合について説明したが、これに限らず、例えば点光源からの光によってできる影を描画する場合についても本発明を適用することができる。点光源の場合、光源と影を落とす物体（例えばカート）と影の落ちる物体（例えば地形オブジェクト）との位置関係によってシャドウボリュームの大きさを変える必要があるが、本実施形態と同様に予め所定の厚み（好ましくは必要最小限の厚み）を設定しておくことにより、従来に比べて影描画処理にかかる処理負担を低減することができる。
【００７６】
なお本実施形態ではシャドウボリュームの厚みを予め決定しておくとしたが、変形例として、シャドウボリューム配置座標が決定してからシャドウボリュームの厚みを動的に決定することも考えられる。以下、図面を参照して２つの変形例について説明する。
【００７７】
まず図１７および図１８を参照して第１の変形例について説明する。ただし、シャドウボリュームの配置に係る処理以外は前述の実施形態と同一であるため説明を省略する。本変形例では図１８に示すように、図１２のステップＳ１２０５においてシャドウボリューム配置座標が決定された後、ＣＰＵ１０は、影を落とすオブジェクトと光線方向とに基づいて、オブジェクトの輪郭に対応する地形オブジェクト上の輪郭領域を算出する（ステップＳ１８０１）。そして、輪郭領域内の座標をスキャンして、輪郭領域内の最大座標Ｐｍａｘおよび最小座標Ｐｍｉｎを検出する（ステップＳ１８０２）。次に、輪郭領域を最大起伏の幅（最大座標Ｐｍａｘから最小座標Ｐｍｉｎの幅）に引き延ばしたシャドウボリュームを生成する（ステップＳ１８０３）。そしてこのシャドウボリュームをシャドウボリューム配置座標に配置する（ステップＳ１８０４）。
【００７８】
次に図１９および図２０を参照して第２の変形例について説明する。ただし、シャドウボリュームの配置に係る処理以外は前述の実施形態と同一であるため説明を省略する。本変形例では図２０に示すように、図１２のステップＳ１２０５においてシャドウボリューム配置座標が決定された後、ＣＰＵ１０は、影を落とすオブジェクトに対応して予め用意されている輪郭ポリゴンをシャドウボリューム配置座標に配置する（ステップＳ２００１）。なお輪郭ポリゴンは、ＤＶＤ−ＲＯＭ３００や本体ＲＡＭ等に予め用意されていても構わないし、適宜作成されてＤＶＤ−ＲＯＭ３００や本体ＲＡＭ等に記憶されても構わない。この輪郭ポリゴンを、地形オブジェクトが含まれる限界点まで（つまり輪郭ポリゴンに前述の最大座標Ｐｍａｘが含まれるまで）光源方向に移動させる（ステップＳ２００２）。また、この輪郭ポリゴンを、地形オブジェクトが含まれる限界点まで（つまり輪郭ポリゴンに前述の最小座標Ｐｍｉｎが含まれるまで）光源逆方向に移動させる（ステップＳ２００３）。その後、輪郭ポリゴンを最大起伏の幅（最大座標Ｐｍａｘから最小座標Ｐｍｉｎの幅）に引き延ばしたシャドウボリュームを生成する（ステップＳ２００４）。そしてこのシャドウボリュームをシャドウボリューム配置座標に配置する（ステップＳ２００５）。
【００７９】
以上のように、第１および第２の変形例ではシャドウボリュームを動的に生成して配置するため、その場その場で必要最小限の厚みを有するシャドウボリュームを適宜生成することができる。よって、影描画処理（図１５のステップＳ１５０２およびステップＳ１５０４）にかかる処理負担をより低減することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るゲームシステムの外観を示す図である。
【図２】ゲームシステムの構成を示すブロック図である。
【図３】ＤＶＤ−ＲＯＭ３００のメモリマップを示す図である。
【図４】地形オブジェクトおよびキャラクタオブジェクトが配置された仮想三次元のゲーム空間を示す図である。
【図５】ＴＶモニタ５００に表示されるゲーム画像の一例を示す図である。
【図６】シャドウボリュームと影の関係を説明するための図である。
【図７】ステンシルバッファを用いた影描画処理について説明するための図である。
【図８】シャドウボリューム配置座標の決定方法を説明するための図である。
【図９】シャドウボリュームの厚みの規定方法を説明するための図である。
【図１０】シャドウボリュームの厚みの決定方法を説明するための図である。
【図１１】ゲーム処理全体の流れを示すフローチャートである。
【図１２】シャドウボリューム処理の流れを示すフローチャートである。
【図１３】ゲーム画像生成処理の流れを示すフローチャートである。
【図１４】地形オブジェクトの描画処理の流れを示すフローチャートである。
【図１５】影描画処理の流れを示すフローチャートである。
【図１６】プレイヤキャラクタの描画処理の流れを示すフローチャートである。
【図１７】第１の変形例のシャドウボリューム生成方法を説明するための図である。
【図１８】第１の変形例のシャドウボリューム処理の流れを示すフローチャートである。
【図１９】第２の変形例のシャドウボリューム生成方法を説明するための図である。
【図２０】第２の変形例のシャドウボリューム処理の流れを示すフローチャートである。
【符号の説明】
１０  ＣＰＵ
１１  ＧＰＵ
１２  ジオメトリユニット
１３  レンダリングユニット
１４  カラーバッファ
１５  Ｚバッファ
１６  ステンシルバッファ
１７  メインメモリ
１８  ＤＳＰ
１９  サブメモリ
２０  メモリコントローラ
２１  コントローラＩ／Ｆ
２２  ビデオＩ／Ｆ
２３  外部メモリＩ／Ｆ
２４  オーディオＩ／Ｆ
２５  ＤＶＤドライブ
２６  ＤＶＤディスクＩ／Ｆ
１００  ゲーム機本体
２００  コントローラ
３００  ＤＶＤ−ＲＯＭ
４００  外部メモリカード
５００  ＴＶモニタ
６００  スピーカ
【図１】
0004001227.tif 000002
【図２】
0004001227.tif 000003
【図３】
0004001227.tif 000004
【図４】
0004001227.tif 000005
【図５】
0004001227.tif 000006
【図６】
0004001227.tif 000007
【図７】
0004001227.tif 000008
【図８】
0004001227.tif 000009
【図９】
0004001227.tif 000010
【図１０】
0004001227.tif 000011
【図１１】
0004001227.tif 000012
【図１２】
0004001227.tif 000013
【図１３】
0004001227.tif 000014
【図１４】
0004001227.tif 000015
【図１５】
0004001227.tif 000016
【図１６】
0004001227.tif 000017
【図１７】
0004001227.tif 000018
【図１８】
0004001227.tif 000019
【図１９】
0004001227.tif 000020
【図２０】
0004001227.tif 000021