(57)【要約】【課題】例外的な処理を必要とせず、常に一定の簡単な処理でシャドウボリュームを作成すること。【解決手段】仮想空間に配置された光源を視点として、影を落とすオブジェクト２だけがレンダリングされ、その結果、Ｚバッファには、光源方向からオブジェクトをとらえた２次元画像の各ピクセルに対応したＺ値が書き込まれる。レンダリングが完了すると、平面状オブジェクト３からメッシュモデル４が生成される。つまり、平面状オブジェクト３の各頂点に対応するピクセルのＺ値がＺバッファより読み出され、このＺ値から各頂点のＹ座標が決定される。こうして生成されたメッシュモデル４を利用して、シャドウボリューム技法による影描画処理が実行される。【選択図】        図８
2004280596.tif 000002
【特許請求の範囲】
【請求項１】
３次元の仮想空間に配置されたオブジェクトが落とす影を描画するために利用されるシャドウボリュームをコンピュータに生成させるためのシャドウボリューム生成プログラムであって、前記コンピュータに、
仮想空間に設置された光源を視点として、少なくとも前記影を落とすオブジェクトを含む所定領域内の各ピクセルに対応するＺ値をＺバッファに書き込むステップと、
前記シャドウボリュームの元となる平面状オブジェクトを構成する複数のポリゴンの各頂点の厚み方向に関する位置を、前記Ｚバッファに書き込まれた各ピクセルのＺ値に応じて決定することによって、該平面状オブジェクトから前記シャドウボリュームを生成するステップとを実行させる、シャドウボリューム生成プログラム。
【請求項２】
前記平面状オブジェクトの形状は、Ｘ座標およびＺ座標の組み合わせが異なる複数の頂点によって規定されており、
前記シャドウボリューム生成ステップでは、前記平面状オブジェクトの各頂点のＹ座標が、前記Ｚバッファに書き込まれた各ピクセルのＺ値に応じて決定されることを特徴とする、請求項１に記載のシャドウボリューム生成プログラム。
【請求項３】
前記光源が点光源であり、
前記シャドウボリューム生成ステップは、前記平面状オブジェクトの各頂点の面方向に関する位置を、前記Ｚバッファに書き込まれた各ピクセルのＺ値に応じて決定するステップを含むことを特徴とする、請求項１に記載のシャドウボリューム生成プログラム。
【請求項４】
前記平面状オブジェクトの形状は、Ｘ座標およびＺ座標の組み合わせが異なる複数の頂点によって規定されており、
前記シャドウボリューム生成ステップでは、前記平面状オブジェクトの各頂点のＸ座標およびＺ座標が、前記Ｚバッファに書き込まれた各ピクセルのＺ値に応じて決定されることを特徴とする、請求項３に記載のシャドウボリューム生成プログラム。
【請求項５】
前記シャドウボリューム生成ステップで生成されたシャドウボリュームを、該シャドウボリュームの厚み方向が前記光源の光線方向と一致するように前記仮想空間に仮想的に配置するステップと、
仮想的に配置したシャドウボリュームを用いて前記影を落とすオブジェクトの影を描画するステップとをさらに前記コンピュータに実行させることを特徴とする、請求項１に記載のシャドウボリューム生成プログラム。
【請求項６】
３次元の仮想空間に配置されたオブジェクトが落とす影を描画するために利用されるシャドウボリュームを生成するゲーム装置であって、
Ｚバッファと、
仮想空間に設置された光源を視点として、少なくとも前記影を落とすオブジェクトを含む所定領域内の各ピクセルのＺ値を前記Ｚバッファに書き込むＺ値書込手段と、
前記シャドウボリュームの元となる複数のポリゴンからなる平面状オブジェクトの各頂点の厚み方向に関する位置を、前記Ｚ値書込手段によって前記Ｚバッファに書き込まれた各ピクセルのＺ値に応じて決定することによって、該平面状オブジェクトから前記シャドウボリュームを生成するシャドウボリューム生成手段とを備えるゲーム装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はシャドウボリューム生成プログラムに関し、より特定的には、シャドウボリューム技法において利用されるシャドウボリュームを生成するためのシャドウボリューム生成プログラムに関する。
【０００２】
【従来の技術】
シャドウボリューム技法とは、主に影の表現に使われる技法のことであって、影を落とすモデルによって光が遮られる空間（一般にシャドウボリュームと呼ばれる。）に対応した空間モデル（この空間モデル自体がシャドウボリュームと呼ばれることもある。）を用意し、この空間モデルを特殊な方法でレンダリングすることによって（この空間モデル自身は描かれない）、影が落ちるモデルの、空間モデルの内部に位置する部分の色だけを暗くする方法である（例えば、特許文献１参照。）。例えば影を落とす物体が球体であれば、その物体によって光が遮られる空間は円柱状となる。
【０００３】
以下の説明では、影を落とすモデルを「影オブジェクト」と呼び、影の形を決定する空間モデルを「シャドウボリューム」と呼ぶことにする。
【０００４】
このシャドウボリューム技法で問題となるのが、シャドウボリュームの形をどのように決めるかである。シャドウボリュームの形は、影オブジェクトの形状アニメーションや、光源方向の変化によって様々に変化する。
【０００５】
シャドウボリュームの形を決定する従来の方法の一例として、影オブジェクトを光源方向から見たときに表を向いているポリゴンと裏を向いているポリゴンに共有されているエッジを輪郭線としてシャドウボリュームの形を決定するものがある。
【０００６】
例えば、図１５（ａ）に示すように斜めに傾いた直方体（影オブジェクト）に光源からの光が当たっている場合、影オブジェクトを光源から見ると図１５（ｂ）のようになっている。従来の方法では、この影オブジェクトにおいて、光源に対して表向きのポリゴン（図１５（ｃ））と、光源に対して裏向きのポリゴン（図１５（ｄ））をそれぞれ検出し、光源に対して表向きのポリゴンと、光源に対して裏向きのポリゴンによって共有されるエッジを抽出する（図１５（ｅ）の実線）。このエッジがシャドウボリュームの断面の輪郭線となる。つまり、図１５（ｅ）の実線で示した形を断面に持つ筒状のモデルがシャドウボリュームとして使用される。
【０００７】
【特許文献１】
特開２００２−２４８５４号公報
【０００８】
【発明が解決しようとする課題】
上記のような従来の方法では、まず、各エッジを共有する面を示すデータと、全ての面の法線情報が必要となる。これらは通常のグラフィックデータには含まれず、特別なデータコンバータを作成した上で、メモリ上に置いておくことになる。
【０００９】
そして、実際の処理では様々な例外処理を必要とするので、専用のプロセッサを実現できず、ＣＰＵによる時間をかけた処理が必要となる。
【００１０】
具体的には、全てのエッジについて、そのエッジに接している面の法線とライト方向との内積を計算し、ライト方向に対して表を向いた面と裏を向きた面に共有されるエッジが選び出される。そして、選び出されたエッジのうち、同一の頂点でつながっているものが順次選出され、最終的に輪となる１つながりの線状のデータが作成される。これがシャドウボリュームの断面のデータとなる。そして、この断面をライト方向に伸ばして筒状にしたものがシャドウボリュームの形状データとなる。
【００１１】
しかしながら、このようにしてシャドウボリュームが難なく作成されるのはまれである。例えば、図１６（ａ）に示すように、直方体に真上から光が当たる場合のように影オブジェクトが光源方向に対して平行な面を有する場合には、図１６（ｂ）に示すように、輪郭線として複数のエッジが選択可能となり、エッジの選択が困難となる。また、図１６（ｃ）に示すように、雪ダルマのような凹みのある物体に斜めから光が当たる場合には、図１６（ｄ）に示すように、輪郭線が途切れてしまうため、特別な処理が必要となる。また、図１６（ｅ）に示すように、雪ダルマのような凹みのある物体に真上から光が当たる場合には、複数の輪郭線が検出され、その結果、シャドウボリュームが複数発生して処理の手続きが倍になる。
【００１２】
一般に、上記のような異常な状態は頻繁に発生し、これに対処するためにはたくさんの例外処理プログラムを用意したり、元々のデータに様々な細工をしたりする必要がある。しかしながら、このような作業はとても困難であり、処理負担も大きい。特にゲーム機においてゲーム画像を生成する場合には、１フレーム（１／３０秒または１／６０秒）内にゲーム画像を生成する必要があり、このように負担の大きい処理を採用することはできない。そこで普通は、そのような異常な状態が絶対に起こり得ないような単純な形状データをシャドウボリューム作成用に用意し、これを利用してシャドウボリュームが作成される。しかしながらこのような方法で影を描画した場合、本来の影とは異なり、かなり省略された影しか表現できない。
【００１３】
それゆえに本発明は、例外的な処理を必要とせず、常に一定の簡単な処理でシャドウボリュームを作成することができるシャドウボリューム生成プログラムを提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記の課題を解決するために本発明は以下の構成を採用した。ただし、括弧内の参照符号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【００１５】
本発明のシャドウボリューム生成プログラムは、３次元の仮想空間に配置されたオブジェクト（２）が落とす影を描画するために利用されるシャドウボリューム（４）をコンピュータ（１０、１１）に生成させるためのプログラムである。このプログラムは、コンピュータ（１０、１１）に、まず、仮想空間に設置された光源を視点として、少なくとも影を落とすオブジェクト（２）を含む所定領域内の各ピクセルに対応するＺ値をＺバッファ（１５）に書き込むステップ（Ｓ２０１）を実行させ、続いて、シャドウボリュームの元となる平面状オブジェクト（３）を構成する複数のポリゴンの各頂点の厚み方向（Ｙ軸方向）に関する位置（ｐｙ）を、Ｚバッファ（１５）に書き込まれた各ピクセルのＺ値（Ｚｖａｌｕｅ）に応じて決定する（Ｓ２０６）ことによって、この平面状オブジェクト（３）からシャドウボリューム（４）を生成するステップを実行させる。
【００１６】
本発明のゲーム装置は、３次元の仮想空間に配置されたオブジェクト（２）が落とす影を描画するために利用されるシャドウボリューム（４）を生成するものであって、Ｚバッファ（１５）と、Ｚ値書込手段（ステップＳ２０１を実行するＣＰＵ１０ないしＧＰＵ１１）と、シャドウボリューム生成手段（ステップＳ２０４を実行するＣＰＵ１０ないしＧＰＵ１１）とを備える。Ｚ値書込手段は、仮想空間に設置された光源を視点として、少なくとも影を落とすオブジェクト（２）を含む所定領域内の各ピクセルのＺ値をＺバッファ（１５）に書き込む。シャドウボリューム生成手段は、シャドウボリュームの元となる平面状オブジェクト（３）を構成する複数のポリゴンの各頂点の厚み方向（Ｙ軸方向）に関する位置（ｐｙ）を、Ｚ値書込手段によってＺバッファ（１５）に書き込まれた各ピクセルのＺ値（Ｚｖａｌｕｅ）に応じて決定することによって、この平面状オブジェクト（３）からシャドウボリューム（４）を生成する。
【００１７】
【発明の実施の形態】
以下、本発明の一実施形態について説明する。ただし、実施形態について詳細に説明する前に、まず、本発明の原理について簡単に説明する。
【００１８】
本発明は、あたかも非常に柔らかい１枚の布を影オブジェクトに対して光源方向から被せたときの布の形状を、シャドウボリュームの形状として利用するという発想に基づいている。
【００１９】
例えば、図１（ａ）に示すように、ひょうたん形の影オブジェクトに対して上方から光が当たっているときに、この影オブジェクトに対して光源の方向から柔らかな布を被せると（図１（ｂ）、図１（ｃ））、最終的に図１（ｄ）の状態になる。図１（ｄ）において布によって囲まれた空間は、ひょうたん形の影オブジェクトのシャドウボリュームと一致するため、この布の形状をシャドウボリュームの形状として利用することによって、正確な形状のシャドウボリュームが得られることになる。他の例として、ドーナツ型の影オブジェクトに対して光が当たっているときの様子を図１（ｅ）〜図１（ｈ）に示す。このようにして生成されたシャドウボリュームを用いてシャドウボリューム技法による影の描画を行うと、図２（ａ）および図２（ｂ）に実線で示すような影を表示することができる。
【００２０】
以下、本実施形態の一実施形態に係るゲームシステムについて説明する。
図３は、ゲームシステムの構成を示す外観図であり、図４はそのブロック図である。図３、図４に示すように、ゲームシステムは、ゲーム機本体１００、ＤＶＤ−ＲＯＭ３００、外部メモリカード４００、コントローラ２００、スピーカ６００およびＴＶモニタ５００を備える。ＤＶＤ−ＲＯＭ３００および外部メモリカード４００は、ゲーム機本体１００に着脱自在に装着される。コントローラ２００は、通信ケーブルを介して、ゲーム機本体１００に設けられた複数（図３では４つ）のコントローラポート用コネクタのいずれかに接続される。ＴＶモニタ５００およびスピーカ６００は、ＡＶケーブル等によって接続される。なお、ゲーム機本体１００とコントローラ２００との通信は無線通信であってもよい。以下、図４を参照しながら、ゲームシステムの各部についてより詳細に説明する。
【００２１】
ＤＶＤ−ＲＯＭ３００は、ゲームプログラムや後述するシャドウボリューム生成プログラムやオブジェクトデータ等を固定的に記憶している。プレイヤがゲームをプレイするとき、ＤＶＤ−ＲＯＭ３００はゲーム機本体１００に装着される。なお、プログラム等を記憶する手段として、ＤＶＤ−ＲＯＭ３００の代わりに例えばＣＤ−ＲＯＭ、ＭＯ、メモリカード、ＲＯＭカートリッジ等の外部記憶媒体を用いてもよい。
【００２２】
外部メモリカード４００は、例えばフラッシュメモリ等の書き換え可能な記憶媒体によって構成され、例えばゲームのセーブデータ等のデータを記録する。
【００２３】
ゲーム機本体１００は、ＤＶＤ−ＲＯＭ３００に記録されているプログラムを読み出し、読み出したプログラムに応じた処理を行う。
【００２４】
コントローラ２００は、プレイヤがゲーム操作に関する入力を行うための入力装置であり、複数の操作スイッチを有する。コントローラ２００は、プレイヤによる操作スイッチの押圧等に応じて操作データをゲーム機本体１００に出力する。
【００２５】
ＴＶモニタ５００は、ゲーム機本体１００から出力された画像データを画面に表示する。なお、スピーカ６００は、典型的にはＴＶモニタ５００に内蔵されており、ゲーム機本体１００から出力されたゲーム中の音声を出力する。
【００２６】
次に、ゲーム機本体１００の構成について説明する。図４において、ゲーム機本体１００には、ＣＰＵ１０およびそれに接続されるメモリコントローラ２０が設けられる。さらにゲーム機本体１００において、メモリコントローラ２０は、ＧＰＵ（グラフィックスプロセッシングユニット）１１と、メインメモリ１７と、ＤＳＰ１８と、各種インターフェース（Ｉ／Ｆ）２１〜２４，２６とに接続される。メモリコントローラ２０は、これら各構成要素間のデータ転送を制御する。
【００２７】
ゲーム開始の際、まず、ＤＶＤドライブ２５は、ゲーム機本体１００に装着されたＤＶＤ−ＲＯＭ３００を駆動する。ＤＶＤ−ＲＯＭ３００に記憶されているゲームプログラムは、ＤＶＤディスクＩ／Ｆ２６およびメモリコントローラ２０を介して、メインメモリ１７に読み込まれる。このメインメモリ１７上のプログラムをＣＰＵ１０が実行することによってゲームが開始される。ゲーム開始後、プレイヤは、操作スイッチを用いてコントローラ２００に対してゲーム操作等の入力を行う。プレイヤによる入力に従い、コントローラ２００は、操作データをゲーム機本体１００に出力する。コントローラ２００から出力される操作データは、コントローラＩ／Ｆ２１およびメモリコントローラ２０を介してＣＰＵ１０に入力される。ＣＰＵ１０は、入力された操作データに応じてゲーム処理を行う。ゲーム処理における画像データ生成等に際して、ＧＰＵ１１やＤＳＰ１８が用いられる。また、サブメモリ１９は、ＤＳＰ１８が所定の処理を行う際に用いられる。
【００２８】
ＧＰＵ１１は、ジオメトリユニット１２およびレンダリングユニット１３を含み、画像処理専用のメモリに接続されている。この画像処理専用メモリは、例えばカラーバッファ１４やＺバッファ１５やステンシルバッファ１６として利用される。ジオメトリユニット１２は、仮想三次元空間であるゲーム空間に置かれた物体や図形に関する立体モデル（例えばポリゴンで構成されるオブジェクト）の座標についての演算処理を行うものであり、例えば立体モデルの回転・拡大縮小・変形や、ワールド座標系の座標から視点座標系やスクリーン座標系の座標への変換を行うものである。レンダリングユニット１３は、所定のテクスチャに基づいて、スクリーン座標に投影された立体モデルについて各ピクセルごとのカラーデータ（ＲＧＢデータ）をカラーバッファ１４に書き込むことによって、ゲーム画像を生成するためのものである。また、カラーバッファ１４は、レンダリングユニット１３によって生成されたゲーム画像データ（ＲＧＢデータ）を保持するために確保されたメモリ領域である。Ｚバッファ１５は、３次元の視点座標から２次元のスクリーン座標に変換する際に失われる視点からの奥行情報を保持するために確保されたメモリ領域である。ステンシルバッファ１６は、シャドウボリューム技法によって影領域を判定するときに利用されるメモリ領域である。ＧＰＵ１１は、これらバッファを用いてＴＶモニタ５００に表示すべき画像データを生成し、メモリコントローラ２０およびビデオＩ／Ｆ２２を介して画像データをＴＶモニタ５００に適宜出力する。なお、ゲームプログラム実行時にＣＰＵ１０において生成される音声データは、メモリコントローラ２０からオーディオＩ／Ｆ２４を介してスピーカ６００に出力される。なお本実施形態では、画像処理専用のメモリを別途設けたハードウェア構成としたが、これに限らず例えばメインメモリ１７の一部を画像処理用のメモリとして利用する方式（ＵＭＡ：Ｕｎｉｆｉｅｄ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ）を使うようにしてもよい。
【００２９】
図５に、ＤＶＤ−ＲＯＭ３００のメモリマップを示す。ＤＶＤ−ＲＯＭ３００には、ゲームプログラムや、シャドウボリューム生成プログラムや、オブジェクトデータなどが格納されている。なお、シャドウボリューム生成プログラムは、ゲームプログラムに含まれていても構わない。オブジェクトデータには、影を落とすオブジェクトやその他のオブジェクトのデータが含まれる。
【００３０】
以下、図６および図７のフローチャートを参照して本ゲームシステムの影描画に関する動作について説明する。
【００３１】
図６において、影描画処理が開始すると、ＣＰＵ１０は、まずカラーバッファ１４およびＺバッファ１５をクリアする（Ｓ１０）。そして前述のシャドウボリューム生成プログラムに基づいて、シャドウボリューム生成処理を実行する（Ｓ２０）。以下、このシャドウボリューム生成処理の詳細について図７を参照して説明する。
【００３２】
図７において、シャドウボリューム生成処理が開始すると、ＧＰＵ１１は、仮想空間に配置された光源を視点として、影を落とすオブジェクトだけをレンダリングする（Ｓ２０１）。つまり、図８（ａ）に示すように、板１の上に浮かんでいる影を落とすオブジェクト２に対して真上から光があたっている場合、この影を落とすオブジェクト２を真上から見たときのシーンをレンダリングする。その結果、カラーバッファ１４には図８（ｂ）に示すような２次元の画像データが書き込まれ、一方、Ｚバッファ１５には、その２次元の画像データの各ピクセルに対応したＺ値（視点からオブジェクトまでの距離に応じた値）が書き込まれる。なお、ここでは説明を容易にするためにカラーバッファ１４に２次元の画像データが書き込まれるとしたが、実際にはＺバッファ１５にＺ値が書き込まれさえすればよく、カラーバッファ１４に画像データを書き込む必要はない。
【００３３】
ステップＳ２０１のレンダリングが完了すると、ＣＰＵ１０は、つづくステップＳ２０２〜Ｓ２１４の処理によって、図８（ｃ）に示す平面状オブジェクト３（図１（ｂ）に示した柔らかな布に相当）から図８（ｄ）に示すメッシュモデル４を生成する処理を実行する。本実施形態ではこのメッシュモデル４がシャドウボリュームとして用いられる。
【００３４】
平面状オブジェクト３は複数のポリゴンによって構成され、これらのポリゴンの頂点でもある複数の頂点を有している。そして各頂点の位置は、Ｘ座標とＺ座標の組み合わせにより規定されている。本実施形態では、平面状オブジェクト３の各頂点の座標がそれぞれ下記のように規定されているものとする。
2004280596.tif 000003
なお以下の説明では、メッシュモデル４のある頂点Ｐについて、その元となった平面状オブジェクト３の頂点の座標（ｘ，ｚ）を、メッシュモデル４の頂点Ｐの基本座標と称する。そして、特に基本座標のうちのＸ座標およびＺ座標を、それぞれ基本Ｘ座標および基本Ｚ座標と称する。
【００３５】
以下、ステップＳ２０２以降の処理について具体的に説明する。
なお、図７に示すフローチャートにおいて、
・ｘおよびｚは、それぞれ基本Ｘ座標および基本Ｚ座標を示す変数であり、
・ｘｍおよびｚｍは、それぞれ基本Ｘ座標の上限値および基本Ｚ座標の上限値を示す変数であり、
・Ｚａｄｒｓは、Ｚバッファ１５のアドレスを示す変数であり、
・Ｚｖａｌｕｅは、Ｚバッファ１５の値を示す変数であり、
・Ｐａｄｒｓは、メッシュモデル４の頂点座標を格納するメインメモリ１７のアドレスを示す変数であり、
・ｐｘ、ｐｙおよびｐｚは、メッシュモデル４のＸ座標、Ｙ座標およびＺ座標をそれぞれ示す変数である。
【００３６】
また、図７に示すフローチャートにおいて、
・ｃａｌ＿Ｚａｄｒｓ（）は、基本座標から、対応するＺバッファ１５のアドレスを求める関数であり、
・ｃａｌ＿Ｐａｄｒｓ（）は、基本座標から、対応するメッシュモデル４の頂点データ格納アドレスを求める関数であり、
・ｒｅａｄ＿Ｚｂｕｆ（）は、Ｚバッファアドレスから、そこのＺ値を読み込む関数であり、
・ｃａｌ＿ｈｅｉｇｈｔ（）は、Ｚ値から適切な高さの値を計算する関数であり、
・ｓｃａｌｅ＿ｍｅｓｈ（）は、メッシュモデル４の各頂点がＺ値に応じて（つまりＺ値に対して比例的に変化するように、またはＺ値に応じてべき乗的に変化するように、または予め用意された変換テーブルに基づいてＺ値に応じて所定の増加率で変化するように）放射状に移動するように（つまり光源から遠い頂点ほど大きく移動するように）、基本Ｘ座標または基本Ｚ座標を修正する関数であり、
・ｓｔｏｒｅ＿ｐｏｓ（）は、Ｘ座標、Ｙ座標およびＺ座標をメッシュモデル４の頂点データ格納領域に格納する関数である。
【００３７】
ステップＳ２０２において、ＣＰＵ１０は、基本Ｚ座標を初期化し、続くステップＳ２０３においてさらに基本Ｘ座標を初期化する。つまり、メッシュモデル４の形状を規定する複数の頂点のうち、基本座標が（０，０）である頂点が最初の処理対象頂点として選ばれることになる。
【００３８】
ステップＳ２０４で、ＣＰＵ１０は、処理対象頂点の基本座標（ｘ，ｙ）から、この基本座標に対応するＺバッファ１５のアドレスおよび頂点データの格納アドレスを求める。そして、このＺバッファ１５のアドレスのＺ値を読み込む（Ｓ２０５）。つまり、カラーバッファ１４に格納されている図８（ｂ）に示す２次元画像を構成するピクセルのうち、処理対象頂点に対応するピクセルのＺ値が、Ｚバッファ１５より読み出されることになる。ＣＰＵ１０は、こうして読み出したＺ値から、処理対象頂点のＹ座標（つまり平面状オブジェクト３の厚み方向に関する位置）を決定する（Ｓ２０６）。Ｚ値から処理対象頂点のＹ座標（ｐｙ）を求めるには、例えば図９に示すように、視点（光源）から遠い側のクリッピングプレーンに位置するＺ値（例えば図９では１）と、レンダリングされたＺ値（Ｚｖａｌｕｅ）の差を求め、それをＹ座標軸の単位系にスケーリングすればよい。
【００３９】
ステップＳ２０６で処理対象頂点のＹ座標が決定されると、次にＣＰＵ１０は、光源が平行光源であるか点光源であるかを判断する（Ｓ２０７）。そして、光源が平行光源であった場合にはステップＳ２０８に進み、光源が点光源であった場合にはステップＳ２０９に進む。なお、光源として平行光源のみもしくは点光源のみしか用意されていないシステムにおいては、ステップＳ２０７が不要であることは言うまでもない。
【００４０】
光源が平行光源だった場合には、図８（ｄ）に示すように、処理対象頂点のＸ座標（ｐｘ）およびＺ座標（ｐｚ）として、それぞれ基本Ｘ座標（ｘ）および基本Ｚ座標（ｚ）をそのまま利用する（Ｓ２０８）。一方、光源が点光源だった場合には、ステップＳ２０５において読み出されたＺ値（Ｚｖａｌｕｅ）に応じて基本Ｚ座標（ｘ）および基本Ｚ座標（ｚ）を修正したものを、処理対象頂点のＸ座標（ｐｘ）およびＺ座標（ｐｚ）として設定する（Ｓ２０９）。このように光源の種類によって処理が変わる理由について図１０を参照して説明する。
【００４１】
図１０（ａ）に示すように、影を落とすオブジェクトが平行光源によって照らされている場合には、ステップＳ２０１のレンダリング処理において、奥行きが変わっても見える大きさが同じである正射影によって影を落とすオブジェクトが描画され、図１０（ｅ）に示すように、点光源によって照らされている場合には、ステップＳ２０１のレンダリング処理において、奥に位置するほど小さく見える透視射影によって影を落とすオブジェクトが描画される。その結果、平行光源の場合と点光源の場合とで、カラーバッファ１４に格納される２次元画像データの内容が、それぞれ図１０（ｂ）および図１０（ｆ）に示すように異なることになる。これは、Ｚバッファ１５に格納されるＺ値の内容についても同様である。そして、そのようなＺ値に基づいてステップＳ２０６が実行された結果、平面状オブジェクトの厚み方向に関する位置が、平行光源の場合には図１０（ｃ）に示すように決定され、点光源の場合には図１０（ｇ）に示すように決定される。ここで、平行光源の場合には、図１０（ｃ）のメッシュモデルをそのまま図１０（ｄ）に示すようにシャドウボリュームとして利用することが可能であるが、点光源の場合には、図１０（ｇ）のメッシュモデルをそのままシャドウボリュームとして利用することができない。つまり点光源の場合には、図１０（ｈ）に示すように、メッシュモデルの各頂点が、平面状オブジェクト３の面方向に関してＺ値に応じて放射状に移動するように（つまり光源から遠い頂点ほど大きく移動するように）、基本Ｘ座標または基本Ｚ座標を修正する。なお、放射状に移動するときの中心軸は、ステップＳ２０１において光源を視点として影を落とすオブジェクトをレンダリングしたときに生成された２次元画像の中心点に対応する。このようにして生成されたメッシュモデルは、図１０（ｉ）に示すようにシャドウボリュームとして利用可能となる。
【００４２】
ステップＳ２０８またはステップＳ２０９において処理対象頂点のＸ座標およびＺ座標が決定されると、ＣＰＵ１０は、処理対象頂点の座標をステップＳ２０４で求められたアドレスに格納する（Ｓ２１０）。その後、基本Ｘ座標（ｘ）をインクリメントし（Ｓ２１１）、基本Ｘ座標が最大値（ｘｍ）を超えるまで処理対象頂点を順次変更しながらステップＳ２０４〜Ｓ２１２の処理を繰り返す（ステップＳ２１２でＮｏ）。そして、基本Ｘ座標が最大値を超えた場合には（ステップＳ２１２でＹｅｓ）、基本Ｚ座標（ｚ）をインクリメントし（Ｓ２１３）、続いて基本Ｚ座標が最大値（ｚｍ）を超えたかどうかを判断する（Ｓ２１４）。判断の結果、Ｚ座標値が最大値を超えていなかった場合には（ステップＳ２１４でＮｏ）ステップＳ２０３に戻り、Ｚ座標値が最大値を超えていた場合には（これはメッシュモデル４の全頂点の頂点データがメインメモリ１７に格納されたことを意味する）、シャドウボリューム生成処理を終了し、図６のフローチャートに処理が戻る。
【００４３】
図６において、シャドウボリューム生成処理が完了すると、ＧＰＵ１１は、Ｚバッファ１５と、必要に応じてカラーバッファ１４をクリアしてから（Ｓ３０）、シーンをレンダリングする（Ｓ４０）。ここでは通常のレンダリング処理が行われ、例えば図８（ａ）に示す板１および影を落とすオブジェクト２がレンダリングされる。
【００４４】
シーンのレンダリングが完了後、ＧＰＵ１１は、ステップＳ２０で生成したメッシュモデル４をシャドウボリュームとして利用して、シャドウボリューム技法による影描画処理を実行する。具体的には、図１１（ａ）に示す仮想空間において、図１１（ｂ）に示すメッシュモデル４が図１１（ｃ）のように仮想的に配置され、ステンシルバッファ１６を用いたシャドウボリューム技法によって図１１（ｄ）に示す影の領域が抽出される。
【００４５】
なお、本実施形態では、影を落とすオブジェクト２が上方から光に照らされている場合について説明したが、影を落とすオブジェクト２が斜め上方から光に照らされている場合についても同様に本発明を適用することができる。例えば、図１２（ａ）のように、球状の影を落とすオブジェクト２に対して斜め上方から光があたっている場合、この影を落とすオブジェクト２を光源を視点としてレンダリングして得られる２次元画像は図１２（ｂ）のようになる。そして、レンダリングの結果としてＺバッファ１５に書き込まれているＺ値に基づいて、平面状オブジェクト３の各頂点の厚み方向に関する位置が決定され、最終的に図１２（ｃ）に示すメッシュモデル４が得られる。このメッシュモデル４をシャドウボリュームとして利用して影描画を行うときには、まず図１３（ａ）に示す仮想空間において、図１３（ｂ）に示すメッシュモデル４が図１３（ｃ）のように仮想的に配置される。つまり、光線方向と、メッシュモデル４の厚み方向（つまりＹ軸方向）とが平行になるようにメッシュモデル４を配置する。その後、ステンシルバッファ１６を用いたシャドウボリューム技法によって図１３（ｄ）に示す影の領域が抽出される。
【００４６】
また、本実施形態では、平面状オブジェクト３に基づいてシャドウボリュームを生成するとしたが、この平面状オブジェクト３が、例えば図１４（ａ）に示すように立体オブジェクト５の一面を構成するものであっても構わない。この場合にも、本実施形態と同様に、Ｚバッファ１５に書き込まれているＺ値に基づいて平面状オブジェクト３の各頂点の厚み方向に関する位置を決定することによって、図１４（ｂ）に示すようなシャドウボリュームが得られ、このシャドウボリュームを利用して影描画を行うことができる。
【００４７】
以上のように、本実施形態によれば、影を落とすオブジェクトの形状の複雑さに関係なく、常に同じ処理によってどんな形状のオブジェクトのシャドウボリュームも生成することができる。したがって、例外処理が発生せず、プログラムが少量化されると同時に安定した処理が可能となる。さらに、本実施形態で行われる処理は、グラフィックプロセッサの機能を利用して実行することが可能であるため、グラフィックプロセッサに処理を任せることによって処理速度が大幅に向上する。
【００４８】
なお本実施形態ではゲームプログラムはＤＶＤ−ＲＯＭ３００を介してゲーム機本体１００に供給されるとしたが、これに限らず、ＤＶＤ−ＲＯＭ３００以外の他のコンピュータ読み取り可能な記録媒体（例えばＣＤ−ＲＯＭ、ＭＯ、メモリカード、ＲＯＭカートリッジ等）に格納されてゲーム機本体１００に供給されても構わない。また、予めゲーム機本体１００に組み込まれていても構わない。また、インターネットなどの通信回線を通じてゲーム機本体１００に供給されても構わない。
【００４９】
【発明の効果】
以上のように、本発明によれば、例外的な処理を必要とせず、常に一定の簡単な処理でシャドウボリュームを作成することができる。
【図面の簡単な説明】
【図１】本発明の原理を説明するための図である。
【図２】シャドウボリュームと影の関係を示す図である。
【図３】本発明の一実施形態に係るゲームシステムの外観図である。
【図４】ゲーム機本体１００の構成を示すブロック図である。
【図５】ＤＶＤ−ＲＯＭ３００のメモリマップである。
【図６】影描画処理の流れを示すフローチャートである。
【図７】シャドウボリューム生成処理の流れを示すフローチャートである。
【図８】シャドウボリューム生成処理の具体例を示す図である。
【図９】Ｚ値からメッシュモデルの各頂点のＹ座標を決定する具体例を示す図である。
【図１０】光源が平行光源である場合と点光源である場合との処理の相違点を説明するための図である。
【図１１】シャドウボリュームを用いた影描画処理の具体例を示す図である。
【図１２】影を落とすオブジェクトの斜め上方から光があたっている場合のシャドウボリューム生成処理の具体例を示す図である。
【図１３】影を落とすオブジェクトの斜め上方から光があたっている場合のシャドウボリュームの配置方法を説明するための図である。
【図１４】平面状オブジェクトが立体オブジェクトの一部である場合のシャドウボリューム生成処理の具体例を示す図である。
【図１５】従来のシャドウボリューム技法における輪郭線の抽出処理を示す図である。
【図１６】従来のシャドウボリューム技法において抽出される輪郭線の形を示す図である。
【符号の説明】
１  板
２  影を落とすオブジェクト
３  平面状オブジェクト
４  メッシュモデル
５  立体オブジェクト
１０  ＣＰＵ
１１  ＧＰＵ
１２  ジオメトリユニット
１３  レンダリングユニット
１４  カラーバッファ
１５  Ｚバッファ
１６  ステンシルバッファ
１７  メインメモリ
１８  ＤＳＰ
１９  サブメモリ
２０  メモリコントローラ
２１  コントローラＩ／Ｆ
２２  ビデオＩ／Ｆ
２３  外部メモリＩ／Ｆ
２４  オーディオＩ／Ｆ
２５  ＤＶＤドライブ
２６  ＤＶＤディスクＩ／Ｆ
１００  ゲーム機本体
２００  コントローラ
３００  ＤＶＤ−ＲＯＭ
４００  外部メモリカード
５００  ＴＶモニタ
６００  スピーカ
【図１】
2004280596.tif 000004
【図２】
2004280596.tif 000005
【図３】
2004280596.tif 000006
【図４】
2004280596.tif 000007
【図５】
2004280596.tif 000008
【図６】
2004280596.tif 000009
【図７】
2004280596.tif 000010
【図８】
2004280596.tif 000011
【図９】
2004280596.tif 000012
【図１０】
2004280596.tif 000013
【図１１】
2004280596.tif 000014
【図１２】
2004280596.tif 000015
【図１３】
2004280596.tif 000016
【図１４】
2004280596.tif 000017
【図１５】
2004280596.tif 000018
【図１６】
2004280596.tif 000019