図1を参照して、この発明の一実施例であるゲームシステム10は、ゲーム装置12およびコントローラ14を含む。図示は省略するが、この実施例のゲーム装置12は、最大4つのコントローラ14と通信可能に設計されている。また、ゲーム装置12と各コントローラ14とは、無線によって接続される。たとえば、無線通信は、MP(Multilink Protocol)またはBluetooth(登録商標)規格に従って実行されるが、赤外線や無線LANなど他の規格に従って実行されてもよい。さらには、有線で接続されてもよい。
ゲーム装置12は、略直方体のハウジング16を含み、ハウジング16の前面にはディスクスロット18が設けられる。ディスクスロット18から、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク24が挿入されて、ハウジング16内のディスクドライブ54(図2参照)に装着される。図示は省略するが、ディスクスロット18の周囲には、LEDと導光板とが配置され、様々な処理に応答させて、ディスクスロット18を点灯または点滅させることが可能である。
また、ゲーム装置12のハウジング16の前面の上部には、電源ボタン20aおよびリセットボタン20bが設けられ、その下部には、イジェクトボタン20cが設けられる。さらに、リセットボタン20bとイジェクトボタン20cとの間であり、ディスクスロット18の近傍には、外部メモリカード用コネクタカバー22が設けられる。この外部メモリカード用コネクタカバー22の内側には、外部メモリカード用コネクタ62(図2参照)が設けられ、外部メモリカード38(以下、単に「メモリカード38」という。)が挿入される。メモリカード38は、光ディスク24から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイしたゲームのゲームデータ(ゲームの結果データまたは途中データ、あるいは後述するリプレイデータ)を保存(セーブ)しておいたりするために利用される。ただし、上記のゲームデータの保存は、メモリカード38に対して行うことに代えて、たとえばゲーム装置12の内部に設けられるフラッシュメモリ44(図2参照)のような内部メモリに対して行うようにしてもよい。また、メモリカード38は、内部メモリのバックアップメモリとして用いるようにしてもよい。さらに、ゲーム装置12では、ゲーム以外の他のアプリケーションを実行することも可能であり、かかる場合には、メモリカード38には当該他のアプリケーションのデータを保存することができる。
なお、メモリカード38としては、汎用のSDカードを用いることができるが、メモリスティックやマルチメディアカード(登録商標)のような他の汎用のメモリカードを用いることもできる。メモリカード38は、ゲーム装置12と同様の構成を有する他のゲーム装置でも利用することができるので、ゲームデータをメモリカード38を介して他のプレイヤに提供することもできる。
図1では省略するが、ゲーム装置12のハウジング16の後面には、AVコネクタ58(図2参照)が設けられ、そのAVコネクタ58を用いて、AVケーブル26を通してゲーム装置12にモニタ28およびスピーカ30を接続する。このモニタ28およびスピーカ30は典型的にはカラーテレビジョン受像機であり、AVケーブル26によって、ゲーム装置12からの映像信号がカラーテレビのビデオ入力端子に入力され、ゲーム装置12からの音声信号が音声入力端子に入力される。したがって、カラーテレビ(モニタ)28の画面上にたとえば3次元(3D)ビデオゲームの仮想3次元ゲーム画像が表示され、左右のスピーカ30からゲーム音楽や効果音などのステレオゲーム音声が出力される。また、モニタ28の周辺(この実施例では、モニタ28の上側)には、2つの赤外LED(マーカ)32Aおよび32Bを備えるマーカ部32が設けられる。このマーカ部32は、電源線32cを通してゲーム装置12に接続される。したがって、マーカ部32には、ゲーム装置12から電源が供給される。これによって、マーカ32Aおよび32Bは発光し、それぞれモニタ28の前方に向けて赤外光を出力する。
なお、ゲーム装置12の電源は、一般的なACアダプタ(図示せず)によって与えられる。ACアダプタは家庭用の標準的な壁ソケットに差し込まれ、ゲーム装置12は、家庭用電源(商用電源)を、駆動に適した低いDC電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
コントローラ14は、詳細は後述されるが、第1の操作ユニットおよび第2の操作ユニットとして、それぞれが片手で把持可能な第1コントローラ34および第2コントローラ36を含む。第2コントローラ36の後端から延びるケーブル36aの先端にはコネクタ36bが設けられており、当該コネクタ36bは、第1コントローラ34の後端面に設けられるコネクタ34a(図3、図5)に接続される。第2コントローラ36において取得される入力データは、ケーブル36aを介して第1コントローラ34に与えられる。第1コントローラ34は、第1コントローラ34自身の入力データと第2コントローラ36の入力データとを含むコントローラデータをゲーム装置12に送信する。
このゲームシステム10において、ユーザまたはプレイヤがゲーム(またはゲームに限らず、他のアプリケーション)をプレイするために、ユーザは電源スイッチ20aによってまずゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)のプログラムを記録している適宜の光ディスク24を選択し、その光ディスク24をゲーム装置12のディスクドライブ54にローディングする。応じて、ゲーム装置12がその光ディスク24に記録されているプログラムに基づいてビデオゲームもしくは他のアプリケーションを実行し始める。ユーザはゲーム装置12に入力を与えるためにコントローラ14を操作する。たとえば操作部82のどれかの操作ボタンを操作することによって、ゲームもしくは他のアプリケーションをスタートさせる。また、操作部82に対する操作以外にも、コントローラ14自体を動かすことによって、動画オブジェクト(プレイヤオブジェクト)を異なる方向に移動させ、または3Dのゲーム世界におけるユーザの視点(仮想カメラの位置)を変化させることができる。
ただし、ビデオゲームや他のアプリケーションのプログラムは、ゲーム装置12の内部メモリ(フラッシュメモリ44(図2参照))に記憶(インストール)しておき、当該内部メモリから実行するようにしてもよい。かかる場合には,光ディスク24のような記憶媒体に記憶されたプログラムを内部メモリにインストールしてもよいし、ダウンロードされたプログラムを内部メモリにインストールしてもよい。
図2は図1実施例のゲームシステム10の電気的な構成を示すブロック図である。図示は省略するが、ハウジング16内の各コンポーネントは、プリント基板に実装される。図2に示すように、ゲーム装置12には、CPU40が設けられ、ゲームプロセッサとして機能する。また、CPU40には、システムLSI42が接続される。このシステムLSI42には、外部メインメモリ46、ROM/RTC48、ディスクドライブ54およびAV IC56が接続される。
外部メインメモリ46は、ゲームプログラム等のプログラムを記憶したり、各種データを記憶したりして、CPU40のワーク領域やバッファ領域として用いられる。ROM/RTC48は、いわゆるブートROMであり、ゲーム装置12の起動用のプログラムが組み込まれるとともに、時間をカウントする時計回路が設けられる。ディスクドライブ54は、光ディスク24からプログラムやテクスチャデータ等を読み出し、CPU40の制御の下で、後述する内部メインメモリ42eまたは外部メインメモリ46に書き込む。
システムLSI42には、入出力プロセッサ42a、GPU(Graphics Processor Unit)42b,DSP(Digital Signal Processor)42c,VRAM42dおよび内部メインメモリ42eが設けられ、図示は省略するが、これらは内部バスによって互いに接続される。入出力プロセッサ(I/Oプロセッサ)42aは、データの送受信を実行したり、データのダウンロードを実行したりする。GPU42bは、描画手段の一部を形成し、CPU40からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従ってゲーム画像データを生成する。ただし、CPU40は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU42bに与える。
図示は省略するが、上述したように、GPU42bにはVRAM42dが接続される。GPU42bが作画命令を実行するにあたって必要なデータ(画像データ:ポリゴンデータやテクスチャデータなどのデータ)は、GPU42bがVRAM42dにアクセスして取得する。ただし、CPU40は、描画に必要な画像データを、GPU42bを介してVRAM42dに書き込む。GPU42bは、VRAM42dにアクセスして描画のためのゲーム画像データを作成する。
なお、この実施例では、GPU42bがゲーム画像データを生成する場合について説明するが、ゲームアプリケーション以外の任意のアプリケーションを実行する場合には、GPU42bは当該任意のアプリケーションについての画像データを生成する。
また、DSP42cは、オーディオプロセッサとして機能し、内部メインメモリ42eや外部メインメモリ46に記憶されるサウンドデータや音波形(音色)データを用いて、スピーカ30から出力する音、音声或いは音楽に対応するオーディオデータを生成する。
上述のように生成されたゲーム画像データおよびオーディオデータは、AV IC56によって読み出され、AVコネクタ58を介してモニタ28およびスピーカ30に出力される。したがって、ゲーム画面がモニタ28に表示され、ゲームに必要な音(音楽)がスピーカ30から出力される。
また、入出力プロセッサ42aには、フラッシュメモリ44、無線通信モジュール50および無線コントローラモジュール52が接続されるとともに、拡張コネクタ60およびメモリカード用コネクタ62が接続される。また、無線通信モジュール50にはアンテナ50aが接続され、無線コントローラモジュール52にはアンテナ52aが接続される。
入出力プロセッサ42aは、無線通信モジュール50を介して、ネットワークに接続された他のゲーム装置やサーバ(いずれも図示せず)と通信することができる。入出力プロセッサ42aは、定期的にフラッシュメモリ44にアクセスし、ネットワークへ送信する必要があるデータ(「送信データ」とする)の有無を検出し、当該送信データが有る場合には、無線通信モジュール50およびアンテナ50aを介してネットワークに送信する。また、入出力プロセッサ42aは、他のゲーム装置から送信されるデータ(「受信データ」とする)を、アンテナ50aおよび無線通信モジュール50を介して受信し、当該受信データをフラッシュメモリ44に記憶する。ただし、受信データが一定の条件を満たさない場合には、当該受信データはそのまま破棄される。さらに、入出力プロセッサ42aは、ネットワークに接続されたサーバからダウンロードしたデータ(ダウンロードデータとする)をネットワーク、アンテナ50aおよび無線通信モジュール50を介して受信し、そのダウンロードデータをフラッシュメモリ44に記憶することもできる。
また、入出力プロセッサ42aは、コントローラ14から送信される入力データをアンテナ52aおよび無線コントローラモジュール52を介して受信し、内部メインメモリ42eまたは外部メインメモリ46のバッファ領域に記憶(一時記憶)する。入力データは、CPU40の処理(たとえば、ゲーム処理)によって利用された後、バッファ領域から消去される。
ただし、入出力プロセッサ42aは、無線通信モジュール50を介して、ネットワークを通すことなく直接的に、他のゲーム装置と通信することも可能である。
さらに、入出力プロセッサ42aには、拡張コネクタ60およびメモリカード用コネクタ62が接続される。拡張コネクタ60は、USBやSCSIのようなインタフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、コントローラ14とは異なる他のコントローラのような周辺機器を接続したりすることができる。また、拡張コネクタ60に有線LANアダプタを接続し、無線通信モジュール50に代えて当該有線LANを利用することもできる。メモリカード用コネクタ62には、メモリカード38のような外部記憶媒体を接続することができる。したがって、たとえば、入出力プロセッサ42aは、拡張コネクタ60やメモリカード用コネクタ62を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
詳細な説明は省略するが、図1にも示したように、ゲーム装置12(ハウジング16)には、電源ボタン20a,リセットボタン20bおよびイジェクトボタン20cが設けられる。電源ボタン20aは、システムLSI42に接続される。この電源ボタン20aがオンされると、システムLSI42には、ゲーム装置12の各コンポーネントに図示しないACアダプタを経て電源が供給され、通常の通電状態となるモード(「通常モード」と呼ぶこととする)が設定される。一方、電源ボタン20aがオフされると、システムLSI42には、ゲーム装置12の一部のコンポーネントのみに電源が供給され、消費電力を必要最低限に抑えるモード(以下、「スタンバイモード」という)が設定される。
この実施例では、スタンバイモードが設定された場合には、システムLSI42は、入出力プロセッサ42a、フラッシュメモリ44、外部メインメモリ46、ROM/RTC48および無線通信モジュール50、無線コントローラモジュール52以外のコンポーネントに対して、電源供給を停止する指示を行う。したがって、この実施例では、スタンバイモードにおいて、CPU40がアプリケーションを実行することはない。
リセットボタン20bもまた、システムLSI42に接続される。リセットボタン20bが押されると、システムLSI42は、ゲーム装置12の起動プログラムを再起動する。イジェクトボタン20cは、ディスクドライブ54に接続される。イジェクトボタン20cが押されると、ディスクドライブ54から光ディスク24が排出される。
図3には第1コントローラ34の外観の一例が示される。図3(A)は、第1コントローラ34を上面後方から見た斜視図であり、図3(B)は、第1コントローラ34を下面前方から見た斜視図である。第1コントローラ34は、たとえばプラスチック成型によって形成されたハウジング80を有している。ハウジング80は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。一例として、ハウジング80は人間の掌とほぼ同じ長さまたは幅を持つ大きさをしている。プレイヤは、第1コントローラ34を用いて、それに設けられたボタンを押下することと、第1コントローラ34自体を動かしてその位置や向きを変えることとによって、ゲーム操作を行うことができる。
ハウジング80には、複数の操作ボタン(操作キー)が設けられる。すなわち、ハウジング80の上面には、十字キー82a、1ボタン82b、2ボタン82c、Aボタン82d、−ボタン82e、メニューボタン82f、および+ボタン82gが設けられる。一方、ハウジング80の下面には凹部が形成されており、当該凹部の後方側傾斜面にはBボタン82hが設けられる。これら各ボタン(スイッチ)82a〜82hには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。また、ハウジング80の上面には、遠隔からゲーム装置12本体の電源をオン/オフするための電源スイッチ82iが設けられる。第1コントローラ34に設けられる各ボタン(スイッチ)は、包括的に参照符号82を用いて示されることもある。
また、ハウジング80の後面には、上述のコネクタ34aが設けられている。コネクタ34aは、たとえば32ピンのエッジコネクタであり、第1コントローラ34に他の機器を接続するために利用される。この実施例では、コネクタ34aには第2コントローラ36のコネクタ36bが接続される。また、ハウジング80上面の後端側には複数のLED84が設けられ、この複数のLED84によって当該コントローラ14のコントローラ番号(コントローラの識別番号)が示される。ゲーム装置12には、たとえば最大4つのコントローラ14が接続可能であり、ゲーム装置12に複数のコントローラ14が接続される場合には、各コントローラ14には、たとえば接続順にコントローラ番号が付与される。各LED84はコントローラ番号と対応付けられており、当該コントローラ番号に対応するLED84が点灯される。
また、第1コントローラ34のハウジング80内には加速度センサ86(図5)が設けられている。加速度センサ86としては、典型的には静電容量式の加速度センサが用いられ得る。加速度センサ86は、当該加速度センサの検出部に加わっている加速度のうち、センシング軸ごとの直線成分の加速度や重力加速度を検出する。具体的には、この実施例では、3軸加速度センサが適用され、第1コントローラ34の上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向のそれぞれで加速度を検知する。
なお、加速度センサ86としては、ハウジング80の形状または第1コントローラ34の持たせ方の限定等に応じて、上下方向、左右方向および前後方向のうちいずれか2方向の加速度を検出する2軸加速度センサが用いられてもよい。場合によっては1軸加速度センサが用いられてもよい。
さらに、コントローラ22は、撮像情報演算部88(図5参照)を有している。図3(B)に示すように、ハウジング80の先端面には撮像情報演算部88の光入射口90が設けられ、光入射口90からはセンサバー44のマーカ44m、44nの発する赤外線が取り込まれる。
図4には第2コントローラ36の外観の一例が示される。図4(A)は、第2コントローラ36を上面後方から見た斜視図であり、図4(B)は、第2コントローラ36を下面前方から見た斜視図である。なお、図4では、第2コントローラ36のケーブル36aは省略されている。
第2コントローラ36は、たとえばプラスチック成型によって形成されたハウジング92を有している。ハウジング92は、平面視では、前後方向(図4のZ軸方向)に略細長い楕円形状を有し、後端側の左右方向(図4のX軸方向)の幅が先端側のそれよりも狭くされている。また、ハウジング92は、側面視では、全体として湾曲した形状を有しており、先端側の水平部分から後端側に向かって下がるように湾曲している。ハウジング92は、第1コントローラ34と同様に、全体として大人や子供の片手で把持可能な大きさであるが、長手方向(Z軸方向)の長さは、第1コントローラ34のハウジング80よりもやや短くされている。この第2コントローラ36でも、プレイヤは、ボタンやスティックを操作することと、コントローラ自体を動かしてその位置や向きを変えることとによって、ゲーム操作を行うことができる。
ハウジング92の上面の先端側には、アナログジョイスティック94aが設けられる。ハウジング92の先端には、後方にやや傾斜する先端面が設けられており、この先端面には、上下方向(図4に示すY軸方向)に並べて、Cボタン94bおよびZボタン94cが設けられる。アナログジョイスティック94aおよび各ボタン94b,94cには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。第2コントローラ36に設けられるアナログジョイスティック94aおよび各ボタン94b,94cは、包括的に参照符号94を用いて示されることもある。
また、第2コントローラ36のハウジング92内には加速度センサ96(図5)が設けられている。この加速度センサ96としては、第1コントローラ34の加速度センサ86と同様の加速度センサが適用される。具体的には、この実施例では3軸加速度センサが適用され、第2コントローラ36の上下方向(図4に示すY軸方向)、左右方向(図4に示すX軸方向)および前後方向(図4に示すZ軸方向)の3軸方向のそれぞれで加速度を検知する。
なお、図3に示した第1コントローラ34および図4に示した第2コントローラ36の形状や、ボタン(スイッチまたはスティック等)の形状、数および設置位置等は一例であり、他の形状、数および設置位置等に適宜変更され得る。
また、コントローラ14の電源は、第1コントローラ34内に取替可能に収容されるバッテリ(図示せず)によって与えられる。第2コントローラ36には、コネクタ34a、コネクタ36bおよびケーブル36aを介してこの電源が供給される。
図5には、第1コントローラ34と第2コントローラ36とが接続されたときのコントローラ14の電気的構成の一例が示される。第1コントローラ34は、その内部に通信部98を備え、通信部98には、操作部82、加速度センサ86、撮像情報演算部88およびコネクタ34aが接続される。操作部82は、上述の操作ボタンないし操作スイッチ82a‐82iを示す。操作部82が操作されると、その操作信号(キー情報)が通信部98に与えられる。加速度センサ86が検出した加速度を示すデータは、通信部98へ出力される。加速度センサ86は、たとえば最大200フレーム/秒程度のサンプリング周期を有する。
撮像情報演算部88が取得したデータもまた通信部98に出力される。撮像情報演算部88は、赤外線フィルタ100、レンズ102、撮像素子104および画像処理回路106によって構成される。赤外線フィルタ100は、第1コントローラ34の前方の光入射口90から入射する光から赤外線のみを通過させる。上述したように、モニタ30の表示面近傍(周辺)に配置されるセンサバー44のマーカ44mおよび44nは、モニタ30の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ100を設けることによってマーカ44mおよび44nの画像をより正確に撮像することができる。レンズ102は、赤外線フィルタ100を透過した赤外線を集光して撮像素子104へ出射する。撮像素子104は、たとえばCMOSセンサあるいはCCDのような固体撮像素子であり、レンズ102によって集光された赤外線を撮像する。したがって、撮像素子104は、赤外線フィルタ100を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子104によって撮像された画像を撮像画像と呼ぶ。撮像素子104によって生成された画像データは、画像処理回路106で処理される。画像処理回路106は、撮像画像内における撮像対象(マーカ44mおよび44n)の位置を算出し、所定時間(たとえば1フレーム)毎に、当該位置を示す各座標値を含むマーカ座標データを通信部98に出力する。なお、画像処理回路106における処理については後述する。
コネクタ34aには、第2コントローラ36から延びるケーブル36aのコネクタ36bが接続される。コネクタ36bには、第2コントローラ36の操作部94および加速度センサ96が接続される。操作部94は、上述のアナログジョイスティック94aおよび操作ボタン94b、94cを示す。操作部94が操作されると、その操作信号がケーブル36a、コネクタ36bおよびコネクタ34a等を介して通信部98に与えられる。また、加速度センサ96も、加速度センサ86と同様のサンプリング周期を有しており、検出された加速度を示すデータを通信部98に与える。
通信部98は、マイクロコンピュータ(マイコン)108、メモリ110、無線モジュール78およびアンテナ112を含む。マイコン108は、処理の際にメモリ110を記憶領域(作業領域やバッファ領域)として用いながら、無線モジュール78を制御して、取得したデータをゲーム装置12に送信したりゲーム装置12からのデータを受信したりする。
第1コントローラ34の操作部82、加速度センサ86および撮像情報演算部88ならびに第2コントローラ36の操作部94および加速度センサ96からマイコン108へ出力されたデータは、一時的にメモリ110に格納される。通信部98からゲーム装置12のBluetooth通信ユニット76への無線送信は所定の周期毎に行われる。なお、ゲームの処理は1/60秒を単位として行われることが一般的であるので、第1コントローラ34からの送信はそれと同等かそれより短い周期で行うことが必要となる。マイコン108は、ゲーム装置12への送信タイミングが到来すると、メモリ110に格納されている操作部82および94の操作データ、加速度センサ86および96の加速度データならびに撮像情報演算部88のマーカ座標データを含むデータを、コントローラデータとして無線モジュール78へ出力する。無線モジュール78は、Bluetoothのような近距離無線通信技術を用いて、所定周波数の搬送波をコントローラデータで変調し、その微弱電波信号をアンテナ112から放射する。つまり、コントローラデータは、無線モジュール78で微弱電波信号に変調されて第1コントローラ34から送信される。微弱電波信号はゲーム装置12側のBluetooth通信ユニット76で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置12はコントローラデータを取得することができる。ゲーム装置12のCPU46は、コントローラ14から取得したコントローラデータに基づいてゲーム処理を行う。
なお、加速度センサ86および96から出力される加速度の信号に基づいて、ゲーム装置12のプロセッサ(例えばCPU46)またはコントローラ14のプロセッサ(例えばマイコン108)などのコンピュータが処理を行うことによって、コントローラ14に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ86および96を搭載する第1コントローラ34および第2コントローラ36が静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサ86および96によって検出される加速度が重力加速度のみであるとして処理する場合)、第1コントローラ34および第2コントローラ36が現実に静的な状態であれば、検出された加速度に基づいて第1コントローラ34および第2コントローラ36の姿勢が重力方向に対して傾いているか否か又はどの程度傾いているかをそれぞれ知ることができる。具体的には、加速度センサ86および96の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで、第1コントローラ34および第2コントローラ36がそれぞれ傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸加速度センサが適用される場合には、さらに各軸の加速度の信号に対して処理を施すことによって、第1コントローラ34および第2コントローラ36がそれぞれ重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ86および96からの出力に基づいて、コンピュータが第1コントローラ34および第2コントローラ36の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ86および96からの出力に基づいて、おおよその傾き具合を推定するような処理としてもよい。このように、加速度センサ86および96をコンピュータと組み合わせて用いることによって、第1コントローラ34および第2コントローラ36の傾き、姿勢または位置を判定することができる。
一方、加速度センサ86および96が動的な状態であることを前提とする場合には、重力加速度成分に加えて加速度センサ86および96の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動き方向などを知ることができる。具体的には、加速度センサ86および96を備える第1コントローラ34および第2コントローラ36がユーザの手で動的に加速されて動かされる場合に、加速度センサ86および96によって生成される加速度信号を上記コンピュータによって処理することによって、第1コントローラ34および第2コントローラ36のさまざまな動きおよび/または位置を算出することができる。なお、加速度センサ86および96が動的な状態であることを前提とする場合であっても、加速度センサ86および96の動きに応じた加速度を所定の処理により除去すれば、重力方向に対する傾きを知ることが可能である。他の実施例では、加速度センサ86および96は、信号をマイコン108に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ86および96が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
このゲームシステム10では、ユーザがコントローラ14を動かすことによってゲームに対する操作または入力を行うことができる。ゲームをプレイする際には、たとえば図6に示すように、ユーザは、その右手で第1コントローラ34を持ち、その左手で第2コントローラ36を持つ。上述のように、この実施例では、第1コントローラ34には3軸方向の加速度を検出する加速度センサ86が内蔵され、第2コントローラ36にも同様の加速度センサ96が内蔵されている。第1コントローラ34および第2コントローラ36がそれぞれユーザによって動かされると、加速度センサ86および加速度センサ96によって、それぞれのコントローラ自身の動きを示す加速度値が検出される。ゲーム装置12では、当該検出された加速度値に応じてゲーム処理が実行され得る。
また、第1コントローラ34には撮像情報演算部88が設けられるので、ユーザは第1コントローラ34をポインティングデバイスとして使用して操作を行うことができる。この場合、ユーザは、第1コントローラ34の先端面(光入射口90)がマーカ44mおよび44nの方を向く状態で第1コントローラ34を把持する。ただし、図1から分かるように、マーカ44mおよび44nは、モニタ30の画面の所定の1辺(上辺または下辺)の近傍に、当該所定の1辺に対して平行に配置されている。この状態で、ユーザは、第1コントローラ34自体を動かして、第1コントローラ34が指示する画面上の位置を変更したり、第1コントローラ34と各マーカ44mおよび44nとの距離を変更したりすることによって、ゲーム操作を行うことができる。
図7は、マーカ44mおよび44nと第1コントローラ34の視野角を説明するための図である。図7に示すように、マーカ44mおよび44nは、それぞれ、視野角αの範囲で赤外光を放射する。また、撮像情報演算部88の撮像素子104は、第1コントローラ34の視線方向(図3に示すZ軸方向)を中心とした視野角βの範囲で入射する光を受光することができる。たとえば、マーカ44mおよび44nの視野角αは、共に34°(半値角)であり、一方、撮像素子104の視野角βは42°である。ユーザは、撮像素子104が2つのマーカ44mおよび44nからの赤外光を受光することが可能な位置および向きとなるように、第1コントローラ34を把持する。具体的には、撮像素子104の視野角βの中に少なくとも一方のマーカ44mまたは44nが存在し、かつ、マーカ44mおよび44nの少なくとも一方の視野角αの中に第1コントローラ34が存在する状態となるように、ユーザは第1コントローラ34を把持する。この状態にあるとき、第1コントローラ34は、マーカ44mおよび44nの少なくとも一方を検知することができる。ユーザは、この状態を満たす範囲で第1コントローラ34の位置および向きを変化させることによってゲーム操作を行うことができる。なお、マーカ44mおよび44nのいずれか一方のみが検出される場合には、たとえば、直前の2つのマーカ44mおよび44nを検出したデータを利用して、検出されない他方のマーカの代わりに仮のマーカ座標を設定することによって、第1コントローラ34の指示位置を算出することができる。
なお、第1コントローラ34の位置および向きがこの範囲外となった場合、第1コントローラ34の位置および向きに基づいたゲーム操作を行うことができなくなる。したがって、上記範囲は「操作可能範囲」と呼ばれる。
操作可能範囲内で第1コントローラ34が把持される場合、撮像情報演算部88によってマーカ44mおよび44nの画像が撮像される。すなわち、撮像素子104によって得られる撮像画像には、撮像対象であるマーカ44mおよび44nの画像(対象画像)が含まれる。図8は、対象画像を含む撮像画像の一例を示す図である。対象画像44m’および44n’を含む撮像画像の画像データを用いて、画像処理回路106は、各マーカ44mおよび44nの撮像画像における位置を表す座標(マーカ座標)を算出する。
撮像画像の画像データにおいて対象画像44m’および44n’は高輝度部分として現れるため、画像処理回路106は、まず、この高輝度部分を対象画像の候補として検出する。次に、画像処理回路106は、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、2つの対象画像(マーカ画像)44m’および44n’だけではなく、窓からの太陽光や部屋の蛍光灯の光等のような他の画像が含まれていることがある。高輝度部分が対象画像であるか否かの判定処理は、マーカ44mおよび44nの画像44m’および44n’と、それ以外の画像とを区別し、対象画像を正確に検出するために実行される。撮像画像における対象画像44m’および44n’と他の画像との区別のために、撮像対象44mおよび44nは既知のものである必要があり、この実施例ではその大きさが予め決められるので、マーカ画像44m’および44n’の大きさを予測することができる。したがって、高輝度部分の大きさに基づいて、マーカ画像44m’および44n’の判定を行うことができる。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合には、当該高輝度部分は対象画像を表すと判定される。逆に、高輝度部分が所定範囲内の大きさでない場合には、当該高輝度部分は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について、画像処理回路106は当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。ここでは、当該重心位置の座標をマーカ座標と呼ぶ。また、重心位置は撮像素子104の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子104によって撮像された撮像画像の解像度が126×96であるとし、重心位置は1024×768のスケールで算出されるものとする。つまり、マーカ座標は、(0,0)から(1024,768)までの整数値で表現される。
なお、図8に示すように、撮像画像における位置は、撮像画像の左上を原点Oとし、下向きをY軸正方向とし、右向きをX軸正方向とする座標系(撮像画像のXY座標系)で表現されるものとする。
また、対象画像44m’および44n’が正しく検出される場合には、判定処理によって2つの高輝度部分が対象画像として判定されるので、2箇所のマーカ座標が算出される。画像処理回路106は、算出された2箇所のマーカ座標を示すデータ、つまり、撮像対象の位置を示す撮像対象データを通信部98に出力する。出力された撮像対象データ(マーカ座標データ)は、上述したように、マイコン108によってコントローラデータに含められて、ゲーム装置12に送信される。
ゲーム装置12(CPU46)は、受信したコントローラデータからマーカ座標データを取得すると、このマーカ座標データに基づいて、モニタ30の画面上における第1コントローラ34の指示位置(指示座標)と、第1コントローラ34からマーカ44mおよび44nまでの各距離とを算出することができる。なお、たとえば、第1コントローラ34がモニタ30の画面の左端を指示するとき、対象画像44m’および44n’は撮像画像の右側に検出され、第1コントローラ34が画面の下端を指示するとき、対象画像44m’および44n’は撮像画像の上側に検出され、つまり、画面上の第1コントローラ34の指示位置と逆側に撮像画像上のマーカ座標が検出される。したがって、第1コントローラ34の指示位置の座標をマーカ座標から算出する際には、座標系が図8の撮像画像の座標系から画面上の位置を表すための座標系に適宜に変換される。
なお、この実施例では、第1コントローラ34で撮像データに所定の演算処理を行ってマーカ座標を検出して、そのマーカ座標データをゲーム装置12に送信するようにしている。しかし、他の実施例では、撮像データをコントローラデータとして第1コントローラ34からゲーム装置12に送信し、ゲーム装置12のCPU46が撮像データに所定の演算処理を行って、マーカ座標および指示位置の座標を検出するようにしてもよい。
また、撮像画像における対象画像間の距離は、第1コントローラ34と、マーカ44mおよび44nとの距離に応じて変化する。マーカ44mおよび44n間の距離、撮像画像の幅、撮像素子104の視野角βが予め決まっているので、2つのマーカ座標間の距離を算出することによって、ゲーム装置12は第1コントローラ34とマーカ44mおよび44nとの間の現在の距離を算出することができる。
なお、ゲームの操作の仕方は他の態様であってもよく、第1コントローラ34のみを使ってゲームをするようにしてもよい。例えば、第1コントローラ34を横向きに両手で持って操作するようなゲームであってもよい。
以上のように構成されたゲームシステム10で、この実施例の「毛糸のキャラクタ」ゲームをプレイするとき、モニタ28には、たとえば図9に示すようなゲーム画面が表示される。このゲーム画面では、最も奥手(Z奥)に、パッチワークでできた城壁,植え込みなどが背景Bgとして描画され、そして、この背景Bgの手前(Z手前)に、キャラクタCrたとえばプレイヤキャラクタPCrおよび敵キャラクタOCrなどが描画される。なお、プレイヤキャラクタPCrと敵キャラクタOCrとでは、前者が後者よりも手前に描画される(図26参照:詳細は後述)。
プレイヤキャラクタPCrは、たとえばピンク色の毛糸の輪を有する体Bdと、たとえば赤色の毛糸の輪をそれぞれ有する足Ft1およびFt2と、体Bdの内部(つまり体Bdを構成する毛糸の輪の内側)に配置される目,頬および口など(単に「目Ey」と記す)とで構成される。なお、図示は省略するが、目Eyは背景Bgに紛れて見えにくくなる場合があるので、目Eyの後方に半透明の「霞」が配置されている。
プレイヤキャラクタPCrで特に注意すべきは、図9からわかるように、体Bdの内部が透明であって、体Bdを通して背景Bgが見えている一方で、奥の足Ft2は見えていない点である。手前の足Tf1も同様に、内部が透明なので、通常であれば足Tf1を通して体Bdが見えるはずであるが、ここでは体Bdは見えずに背景Bgだけが見えている。
敵キャラクタOCrもまた、たとえば黄色の毛糸でできており、敵キャラクタOCrを通して背景Bgが見える。
このような特徴的なゲーム画面を実現するための描画処理について、以下に詳しく説明する。最初、毛糸の線モデルを作成する処理について説明する。
キャラクタCrを構成する毛糸の画像は、図10〜図15に示す要領で作成される。最初、図10(A)に示されるような、キャラクタCrの輪郭(エッジ)Edを形成するための各制御点CPを定義する。具体的には、基準点RPを原点(0,0)として、各制御点CPの座標(x,y)を設定し、設定結果を示す制御点データを記憶する(制御点領域76a:図19参照)。制御点データにはまた、変位しやすさ(柔らかさ)、言い換えると移動状態に応じたオフセットの度合いを示すパラメータ(k)が制御点CP毎に記述される。
次に、こうして定義された制御点CPから、図10(B)に示すような線モデルLMを生成する。線モデルLMは、図12(A)に示すような単位テクスチャUTxに対応する幅(d1)を有し、たとえば図11(A)〜図11(C)に示す手順で生成される。
最初、図11(A)に示すように、各制御点CP1,CP2,CP3…について、接線ベクトルさらに法線ベクトルを求める。たとえば、制御点CP3については、その両隣の制御点CP2およびCP4を通る直線L1の傾きを接線ベクトルとしてまず求め、この接線ベクトルに垂直なベクトル(直線L1に垂直な直線L2の傾き)を法線ベクトルとして求めればよい。
次に、図11(B)に示すように、各制御点CP1,CP2,CP3…を中心に、その法線ベクトルに並行で長さがd1の線分をオフセット(Ofs)として割り付け、各オフセットOfs1,Ofs2,Ofs3…の両端の座標を計算する。この計算結果に基づいて、一連の制御点CP1,CP2,CP3…に対し、左右一対のオフセット点(OP1a,OP1b),(OP2a,OP2b),(OP3a,OP3b)…が配置される。
次に、図11(C)に示すように、隣り合う3個のオフセット点を互いに連結してポリゴン化していく。具体的には、1組目のオフセット点(OP1a,OP2a,OP2b)からポリゴンPg1aが生成され、2組目のオフセット点(OP1a,OP2a,OP2b)からポリゴンPg1bが生成される。3組目のオフセット点(OP2a,OP2b,OP3b)からポリゴンPg2aが生成され、4組目のオフセット点(OP2a,OP3a,OP3b)からポリゴンPg2bが生成される。5組目のオフセット点(OP3a,OP3b,OP4b)からポリゴンPg3aが生成され、そして6組目のオフセット点(OP3a,OP4a,OP4b)からポリゴンPg3bが生成される。
こうして生成されたポリゴンPg1a,Pg1b,Pg2a…は、互いに一辺(一対の頂点)を共有することで、線ポリゴンモデルを構成している。この線ポリゴンモデルを、互いに1辺(一対の頂点)を共有する2個一組のポリゴン(Pg1a,Pg1b),(Pg2a,Pg2b),(Pg3a,Pg3b)…に区分すると、幅d1を有する一連の四角形(台形)Sq1,Sq2,Sq3…が得られる。これらの四角形Sq1,Sq2,Sq3…に、図12(A)に示すような毛糸模様の単位テクスチャUTxをそれぞれ貼り付けていく。このような処理をキャラクタCrの各部について行うことで、各部の輪郭Edを構成する線モデルLMが得られる。
ここで、単位テクスチャUTxは、幅d1,長さd2の長方形状を有し、長さ方向の端部(先端部および後端部)が半透明(中央部よりも透過率が高い設定)になっている。ここで長さd2は、複数の単位テクスチャUTxを半透明部分が互いに重なるように連結したとき、図12(B)に示すような連続した糸模様が得られる長さである。
ただし、輪郭Edに曲率が大きい箇所が含まれていると、たとえば図13に示すようにオフセットOfs1およびOfs2が交差する結果、単位テクスチャUTxの重ね書きが発生して、たとえば図14(A)に示すように、線モデルLMの形状や色が当該箇所で乱れてしまう。このような場合、たとえば図13(B)に示すように頂点を繋ぎ変える補正を行う。この補正処理により、単位テクスチャUTxの重ね書きは回避され、たとえば図14(B)に示すように、曲率の大きい箇所でも乱れの少ない線モデルLMが得られる。なお、単位テクスチャUTxを四角形Sq1,Sq2,Sq3…に貼り付ける際に、当該四角形の形状に合わせて変形させる処理を施しても、乱れの少ない線モデルLMが得られる。
また、輪郭Edに端点が生じた場合には、そこにキャップ状のテクスチャを貼り付ける処理を行うことで、端部の丸い線モデルLMが得られる。
次に、このような線モデルLMでできたキャラクタCrを動かす処理(アニメーション処理)について説明する。たとえばプレイヤキャラクタPCrは、初期画面では、図16(A)のように描画される。すなわち、プレイヤキャラクタPCrは、当初、手前を向いており、足Ft1およびFt2は共に体Bdの奥手にある。コントローラ14から右移動を示す入力があると、プレイヤキャラクタPCrは、足Ft1およびFt2を動かしながら右向きに移動する“歩き”を開始する。歩行中、一方の足Ft2は体Bdの奥手にあり、他方の足Ft1は体Bdの手前にある。
このようなプレイヤキャラクタPCrの“歩き”アニメーション、つまり全体の平行移動および足の動きは、前述したような、各制御点CPの座標を記述した制御点データ(76)に対して、次のような処理を施すことで実現される。最初、プレイヤキャラクタPCrの基準点RPを、入力装置14からの入力データ(76k:図19参照)に基づいて、右方向に移動させる。すると、各制御点CPは、基準点RPの動きに追従して移動する。この移動を制御点データに反映させることで、プレイヤキャラクタPCrの全体が右方向に平行移動する。
次に、足Ft1およびFt2に対応する各制御点CPを、予め準備された“歩き”アニメーションデータ(76c:図19参照)に基づいて変位させる。この変位を制御点データに反映させることで、足Ft1およびFt2に“歩く”モーションが与えられる。
なお、アニメーションデータには、好ましくは各制御点CPの1フレーム毎の変位が記述されるが、所定数フレームたとえば5フレーム毎の変位を記述してもよい。この場合、たとえば第1フレームおよび第5フレームの間の第2〜第4フレームの変位は、第1フレームおよび第5フレームに基づく補間(たとえば線形補間)によって算出される。
また、あるアニメーションから別のアニメーションへの切り替えの際には、切り替え前後の2つのモーションの変位をブレンド(たとえば線形補間)するモーションブレンドが行われる。モーションブレンドは、制御点CP毎の処理なので、切り替え前後で制御点CPの数が異なる場合には、それを一致させるための処理(たとえば制御点CPの再計算)が行われる。
このように、入力データおよび/またはアニメーションデータに基づいて制御点CPを変位させることで、キャラクタCrを任意に移動(平行移動および/または回転移動)させたり、キャラクタCrの各部に各種のモーションを与えたりすることができる。
さらには、キャラクタCrの移動状態に応じて、キャラクタCrを変形させることも可能である。たとえば、図17(A)に示すように、プレイヤキャラクタPCrを“ジャンプ”アニメーションに従って速度ベクトルMVに従う方向および速さで移動させる場合、プレイヤキャラクタPCrには、仮想的な空気抵抗などによって、速度ベクトルMVとは逆の向きで、かつ速度ベクトルMVに応じた大きさの力が作用する。この結果、プレイヤキャラクタPCrは、たとえば図17(B)に示すように変形する。その変形の度合いは、位置によって異なる。
このような、キャラクタCrの移動状態に応じた変形は、たとえば次のようにして実現される。まず、図17(A)に示すように、現時点の基準点RPに対して、所定数フレーム(たとえば5フレーム)前の時点での基準点PRの位置を、オフセット点OPとして設定する。この場合、基準点RPとオフセット点OPとを結ぶ線分Lは、速度ベクトルMVと平行であり、速度ベクトルMVに比例した長さを有する。キャラクタCrの各制御点CP1,CP2,CP3…は、変位しやすさを示すパラメータk1,k2,k3…と、オフセット点OPからの距離D1,D2,D3…との積に比例した長さだけ、速度ベクトルMVとは逆向きに変位する。
したがって、変位しやすさが略一定(k1≒k2≒k3)であれば、図17(B)に示されるように、オフセット点OPに近い頭頂部の制御点CP2が大きく変位する一方、オフセット点OPから遠い頬や背中の制御点CP1,CP3は小さく変異する結果、プレイヤキャラクタPCrは、あたかも空気抵抗を受けて変形したように見える。
次に、プレイヤキャラクタPCrを描画する処理について説明する。先述したように、プレイヤキャラクタPCrは、初期状態では図16(A)のように描画され、歩行中は図16(B)のように描画される。すなわち、図16(A)に示すように、体Bdを通して奥の足Ft1,Ft2が見えることはなく、また、図16(B)に示すように、足Ft1を通して奥の体Bdや足Ft2が見えることもない。なお、図16〜図18では背景Bgを省略しているが、体Bdおよび/または足Ft1,Ft2を通して奥の背景Bgが見えている。
このような透視性を有するプレイヤキャラクタPCrは、たとえば次のようにして描画される。まず、図16(A)のようなプレイヤキャラクタPCrを描画する場合、図18(A)に示すように、体Bdに沿った輪郭を有する透明なマスク(ポリゴンモデル)BMsを生成して、奥から順に、足Ft1およびFt2、体のマスクBMs、体Bd、目Eyを配置する。言い換えると、図18(A)に示すような各要素(ポリゴンモデル)について、奥行き方向(Z方向)の配置を示す描画用Zデータ(図20(A)参照)を生成する。
次に、図18(A)に示すような各要素についてZソートを行う。つまり、上記の描画用Zデータとは別に、図18(A)に示すような各要素の描画順序を示すソート用Zデータ(図20(B)参照)を生成する。そして各要素を、ソート用Zデータに従う順序で、描画用ZデータによりZ比較しながら、背景Bgの上に描画していく。
したがって、基本的には、図20(B)のソート用Zデータに従って、“体のマスクBMs→足Ft1およびFt2→体Bd→目Ey”の順序で描画していくことになるが、各描画を実行するにあたって、描画用ZデータによるZ比較を行い、Z不合格(先に描画されたものより奥にある)と判定されたポリゴンは描画せず、Z合格(先に描画されたものよりも手前にある)と判定されたポリゴンだけを描画する。
具体的には、ソート用Zデータによれば、奥から1番目の要素は「体のマスク」なので、最初、体のマスクBMsが描画される。なお、最初の描画では、Z比較の対象がないため、Z合格とみなされる。次に、ソート用Zデータによれば、奥から2番目の要素は「足の線」なので、足Ft1およびFt2を描画することになるが、その前に「足の線」と「体のマスク」とを描画用Zデータにより比較する。描画用Zデータによれば、「足の線」は「体のマスク」よりも奥なので、足Ft1およびFt2は、体のマスクBMsと重なる部分は描画されず、体のマスクBMsと重ならない部分だけが描画される。
次に、ソート用Zデータによれば、奥から3番目の要素は「体の線」であり、描画用Zデータによれば、「体の線」は「足の線」および「体のマスク」の各々よりも奥なので、体Bdの全部が描画される。次に、ソート用Zデータによれば、奥から4番目(つまり最も手前)の要素は「目」であり、描画用Zデータによれば、「目」は「体の線」,「足の線」および「体のマスク」の各々よりも手前なので、目Eyの全部が描画される。
こうして、体Bdおよび/または足Ft1,Ft2を通して背景Bgが見えるのに、足Ft1,Ft2は体Bdを通しては見えない、図16(A)に示すようなプレイヤキャラクタPCrを描画することができる。
一方、図16(B)のようなプレイヤキャラクタPCrを描画する場合には、図18(B)に示すように、上記と同様の体のマスクBMsに加えて、手前の足Ft1に沿った輪郭を有する透明なマスク(ポリゴンモデル)FMsをさらに生成される。そして、奥から順に、奥の足Ft2、体のマスクBMs、体Bd、目Ey、手前の足のマスクFMsおよび手前の足Ft1を配置することで、図18(B)に示すような各要素についての描画用Zデータ(図21(A)参照)が生成される。
次に、図18(B)に示すような各要素についてZソートを行い、ソート用Zデータ(図21(B)参照)を生成する。そして各要素を、ソート用Zデータに従う順序で、描画用ZデータによりZ比較しながら、背景Bgの上に描画していく。
この場合、図21(B)のソート用Zデータに従って、“体のマスクBMs→手前の足のマスクFMs→奥の足Ft2→体Bd→目Ey→手前の足Ft1”の順序で描画していくことになるが、各描画を実行するにあたって、描画用ZデータによるZ比較を行い、Z不合格と判定されたポリゴンは描画せず、Z合格と判定されたポリゴンだけを描画する。
具体的には、ソート用Zデータによれば、奥から1番目の要素は「体のマスク」なので、最初、体のマスクBMsが描画される。次に、ソート用Zデータによれば、奥から2番目の要素は「手前の足のマスク」であり、描画用Zデータによれば、「手前の足のマスク」は「体のマスク」よりも手前なので、手前の足のマスクFMsが描画される。次に、ソート用Zデータによれば、奥から3番目の要素は「奥の足の線」であり、描画用Zデータによれば、「奥の足の線」は「手前の足のマスク」および「体のマスク」の各々よりも奥なので、奥の足Ft1は、体のマスクBMsおよび/または手前の足のマスクFMsと重なる部分は描画されず、どちらのマスクとも重ならない部分だけが描画される。
次に、ソート用Zデータによれば、奥から4番目の要素は「体の線」であり、描画用Zデータによれば、「体の線」は、「奥の足の線」および「体のマスク」の各々よりも手前であるが、「手前の足のマスク」よりは奥なので、体Bdは、「手前の足のマスク」と重なる部分は描画されず、「手前の足のマスク」と重ならない部分だけが描画される。次に、ソート用Zデータによれば、奥から5番目の要素は「目」であり、描画用Zデータによれば、「目」は、「体の線」,「体のマスク」および「奥の足の線」の各々よりも手前であるが、「手前の足のマスク」よりは奥なので、目Eyは、「手前の足のマスク」と重なる部分は描画されず、「手前の足のマスク」と重ならない部分だけが描画される。次に、ソート用Zデータによれば、奥から6番目(つまり最も手前)の要素は「手前の足の線」であり、描画用Zデータによれば、「手前の足の線」は、「手前の足のマスク」,「目」,「体の線」,「体のマスク」および「奥の足の線」の各々よりも手前なので、手前の足Ft1の全部が描画される。
こうして、体Bdおよび/または足Ft1,Ft2を通して背景Bgが見えるのに、奥の足Ft2は体Bdを通しては見えず、体Bdは手前の足Ft1を通しては見えない、図16(B)に示すようなプレイヤキャラクタPCrを描画することができる。
なお、プレイヤキャラクタPCrが敵キャラクタOCrと重なることもあるが、この実施例では、図26(A)に示すように、敵キャラクタOCrは常にプレイヤキャラクタPCrの奥に表示される。このようなキャラクタ画像は、図26(B)に示すような描画用Zデータおよび図26(C)に示すようなソート用Zデータに基づいて、上記と同様の手順で描画することができる。敵キャラクタOCrは、体のマスクBMsによるマスクを受けないように、体のマスクBMsよりも先に描画される。
以上のような画像処理は、CPU40がシステムLSI42と協働して、メインメモリ42eおよび/または46に記憶された図19〜図21などに示すようなプログラムおよびデータに基づいて、図22〜図25に示すようなフローを実行することにより実現される。
メインメモリ42eおよび/または46には、図19に示すように、プログラム記憶領域70およびデータ記憶領域76が形成され、プログラム記憶領域70にはゲームプログラム72および入出力制御プログラム74などが格納される。ゲームプログラム72は、CPU40を介してゲーム装置12のハードウェア全体(図2参照)を制御することにより「毛糸のキャラクタ」ゲームを実現するソフトウェアであり、図22〜図25のフローチャートに対応するキャラクタ生成描画制御プログラム72aを含む。キャラクタ生成描画制御プログラム72aは、上述したようなキャラクタCrの生成および描画を制御する。入出力制御プログラム74は、主として入出力プロセッサ42aを介して、VRAM42dに描画された画像のモニタ28への出力や、コントローラ14からの入力を制御する。
データ記憶領域76は、制御点領域76a、オフセット点領域76b、アニメーション領域76c、線モデル領域76d、マスク領域76e、描画用Z領域76f、ソート用Z領域76g、テクスチャ領域76h、目モデル領域76iおよび背景画像領域76jなどを含む。制御点領域76aには、キャラクタCrの輪郭Edを形成するための各制御点CP(図10(A)参照)について座標(x,y)およびパラメータkを記述した制御点データが記憶される。ここで座標(x,y)は、基準点RPを原点(0,0)とする座標であり、パラメータkは、変位しやすさ(柔らかさ)、言い換えると移動状態に応じて各制御点に付与されるオフセットの度合いを示すパラメータである。
オフセット点領域76bには、所定数フレーム前の基準点RPであるオフセット点OP(図17(B)参照)の座標を示すオフセット点データが記憶される。アニメーション領域76cには、プレイヤキャラクタPCrに与えられる“歩き”,“ジャンプ”といったモーション(図16,図17参照)を示すアニメーションデータが記憶される。アニメーションデータには、各制御点CPの1フレーム毎の変位(または所定数フレーム毎の変位)が記述されている。
線モデル領域76dには、制御点CPに基づいて生成された線モデルLM(図10(B)参照)が記憶される。線モデルLMは、たとえば図11(C)に示すような半透明の線ポリゴンモデル(Pg1a,Pg1b,Pg2a…)で構成される。マスク領域76eには、たとえば図18(A),図18(B)に示すような体のマスクBMs,手前の足のマスクFMsが記憶される。各マスクは、透明ポリゴンモデルで構成される。
描画用Z領域76fには、たとえば図20(A),図21(A)に示すような描画用Zデータが記憶される。ソート用Z領域76gには、たとえば図20(B),図21(B)に示すようなソート用Zデータが記憶される。テクスチャ領域76hには、たとえば図12(A)に示すような幅d1,長さd2の長方形状を有する単位テクスチャUTxが記憶される。図15に示すようなキャップ形状のテクスチャや、その他のテクスチャも、このテクスチャ領域76hに記憶される。
目モデル領域76iには、たとえば図16(A),図18(A)等に示すような目モデルEyが記憶される。目モデルEyは、たとえば半透明ポリゴンモデルで構成される。背景画像領域76jには、たとえば図9に示すような背景Bgの画像データが記憶される。
なお、データ記憶領域76にはさらに、コントローラ14からの入力データ(コントローラデータ)を記憶する入力領域76kも含まれている。
「毛糸のキャラクタ」ゲームをプレイするとき、CPU40は、図22〜図25に示すようなキャラクタ生成描画制御処理を実行する。なお、図示は省略するが、この制御処理と同時並列に、入出力プロセッサ42aによる入出力処理(コントローラ14から入力領域76kへの入力処理、およびVRAM42dからモニタ28への出力処理を含む)が行われている。
CPU40は、最初、ステップS1で初期処理を実行する。初期処理には、各種の初期データのメモリカード38等からメインメモリ42e,46への読み込み、およびVRAM42dの初期化などが行われる。なお、ここで読み込まれる初期制御点データは、たとえば、3次元CADの1つであるMAYA(登録商標)上で、NURBS(Non-Uniform Rational B-Spline)曲線の編集機能を利用して作成されたものである。CPU40は、この初期制御点データに基づいて、各時点の制御点データを生成していくことになる。
初期処理が完了すると、CPU40の処理は、ステップS3〜S21で構成されたループに入る。このループ処理は、1フレーム毎に実行される。ステップS3では、入力領域76kに記憶された入力データに基づいて基準点RP(図10(A)参照)を移動させる。なお、基準点RPは、入力がない場合でも、所定のアルゴリズムに従って移動されてよい。ステップS5では、プレイヤキャラクタPCrの全体を構成する各制御点CPを基準点RPの動きに追従して平行移動させ、その結果に基づいて、制御点領域76aに記憶された制御点データを更新する。ステップS7では、アニメーション領域76cに記憶されたアニメーションデータに基づいて、プレイヤキャラクタPCrの全体または一部を構成する各制御点CPを個別に移動させ、その結果に基づいて、さらに制御点データを更新する。
なお、アニメーションデータに現フレームのデータが含まれていない場合には、前後のフレームのデータに基づく補間によって現フレームのデータを生成したうえで、ステップS7の移動を実行する。また、アニメーションを切り替える際には、モーションブレンドを実行し、ブレンド後のデータに基づいて、ステップS7の移動を実行する。
ステップS9では、ステップS5およびS7による移動状態に応じて各制御点CPをオフセットさせ、その結果に基づいて制御点データをさらに更新する。具体的には、たとえば図17(A)に示すように、プレイヤキャラクタPCrが“ジャンプ”して、速度ベクトルMVに従って移動している場合、まず、現時点の基準点RPに対して、所定数フレーム前の時点での基準点PRの位置をオフセット点OPとして設定する。次に、図17(B)に示すように、キャラクタCrの各制御点CP1,CP2,CP3…を、変位しやすさを示すパラメータk1,k2,k3…と、オフセット点OPからの距離D1,D2,D3…との積に比例する距離だけ、速度ベクトルMVとは逆向きに変位させる。これによって、頭頂部の制御点CP2が大きく変位し、頬や背中の制御点CP1,CP3は小さく変異する結果、プレイヤキャラクタPCrは、あたかも空気抵抗を受けて変形したように見える。
ステップS11では、上記のような一連の更新を経た後の制御点データに基づいて、プレイヤキャラクタPCrの体および両足にそれぞれ対応する線モデルLMを図11に示す要領で生成し、その結果で線モデル領域76dのモデルを更新する(図24参照:後述)。詳しくは、ステップS11aで体の線モデルBdが生成され、ステップS11bで一方の足の線モデルFt1が生成され、そしてステップS11cで他方の足の線モデルFt2が生成される。なお、図示は省略しているが、敵キャラクタOCrの線モデルも、ステップS11で生成されてよい。
ステップS13では、同じく制御点データに基づいて、体のマスクBMsさらには足のマスクFMsを生成する。詳しくは、まずステップS13aで、たとえば図16(A)に示すような体のマスクBMsを生成し、その結果でマスク領域76eのマスクを更新する。次に、ステップS13bで、体より手前に足があるか否かをアニメーションデータに基づいて判別する。どちらの足も体より奥であれば、ステップS13bでNOと判別してステップS14に進む。少なくとも一方の足が体より手前であれば、ステップS13bでYESと判別してステップS13cに進み、当該足のマスクFMsを生成した後、ステップS14に進む。
したがって、図16(A)のように、どちらの足Ft1,Ft2も体Bdより奥であれば、図18(A)のように体のマスクBMsだけが生成される。また、図16(B)のように、一方の足Ft1だけが体Bdより手前であれば、図18(B)のように、体のマスクBMsおよび手前の足のマスクFMsが生成される。なお、図17(A)のように、どちらの足Ft1,Ft2も体Bdより手前の場合には、手前の足のマスクFMsは2つ生成されることになる(図示は省略)。
ステップS14では、アニメーションデータに基づいて、現時点でのプレイヤキャラクタPCrの各要素(Ey,Bd,BMs,Ft1,(FMs,)Ft2:図18(A),図18(B)参照)さらには敵キャラクタOCr(図26(A)参照)について、Z方向の配列を示す描画用Zデータ(図20(A),図21(A),図26(B)参照)を生成し、その結果で描画用Z領域76fのデータを更新する。
図23を参照して、ステップS15では、アニメーションデータに基づいて、プレイヤキャラクタPCrの各要素さらには敵キャラクタOCrについて、描画順序を示すソート用Zデータ(図20(B),図21(B),図26(C)参照)を生成し、その結果でソート用Z領域76gのデータを更新する。
ステップS17では、背景画像領域76jに記憶されている背景画像データに基づいて、GPU42bを介してVRAM42dに背景Bgを描画する。ステップS19では、プレイヤキャラクタPCrの各要素さらには敵キャラクタOCrを、ソート用Z領域76gに記憶されたソート用Zデータ(図20(B),図21(B),図26(C)参照)に従う順序で、描画用Z領域76fに記憶された描画用Zデータ(図20(A),図21(A),図26(B)参照)に基づいてZ比較しながら、VRAM42dに描画する(S25参照:後述)。こうして一連の描画が行われた後のVRAM42dの画像データが入出力プロセッサ42aによってモニタ28に出力される結果、図9に示すようなゲーム画面がモニタ28に表示される。
そして、ステップS21で、ゲーム終了か否かを判別し、NOであればステップS3に戻って、1フレーム毎に上記と同様の処理を繰り返す。コントローラ14から終了を示すデータが入力されると、ステップS21でYESと判別し、処理を終了する。
上記ステップS11a〜S11cの各線モデル生成処理は、たとえば図24のサブルーチンに従って実行される。なお、敵キャラクタOCrの線モデルも同様に生成されてよい。CPU40は、最初、ステップS31で、各制御点CPでの法線ベクトルを算出する。なお、この法線ベクトル算出方法については、図11(A)を用いて既に説明した。次に、ステップS33で、各制御点CPから法線方向に所定幅(d1)オフセットした位置に1対のオフセット点OPaおよびOPb(頂点)を設定する。なお、このオフセット方法については、図11(B)を用いて既に説明した。次に、ステップS35で、各頂点を順番に結んで、体の線に沿う一連のポリゴン(線モデルLM)を生成する。なお、線モデルLMの生成方法については、図11(C)を用いて既に説明した。次に、ステップS37で、この線モデルLMに、たとえば図14(A)に示すような重ね書きがあるか否かを判別し、NOであればメインルーチン(図22)に復帰する。頂点を結ぶ線(オフセットOfs1,Ofs2)が図13(A)に示すように交差していれば、ステップS37でYESと判別して、ステップS39に進む。ステップS39では、頂点をたとえば図13(B)に示す要領で繋ぎ変える。これによって、図14(B)に示すような、重ね書きのない線モデルLMが得られる。その後、メインルーチン(図22)に復帰する。
上記ステップS19の、各要素をZ比較しながら描画する処理は、図25のサブルーチンに従って実行される。CPU40は、最初、ステップS61で、ソート用Zデータに基づいて奥の要素から順に1つを選択する。次に、ステップS63で、今回選択された当該要素を描画済みの要素と描画用Zデータに基づいて比較し、当該要素はどの描画済み要素よりも手前か否かを次のステップS65で判別する。なお、初回は、未だ描画済み要素がない(ただし背景Bgは先行するステップS17で既に描画されている)ので、YESと判別される。ステップS63でYESであれば、ステップS67で、当該要素の全部をVRAM42dに描画する。一方、ステップS63でNOであれば、ステップS69で、当該要素の一部、具体的には、どの描画済み要素とも重なっていない部分だけを、VRAM42dに描画する。描画にあたっては、2個1組のポリゴンからなる各四角形Sq1,Sq2…(図11(C)参照)に、図12(A)に示すような単位テクスチャUTxを繰り返し貼り付けていく。これによって、図12(B)に示すような、周期d2の毛糸模様を有する線モデルLMが得られる。描画の後、ステップS71に進んで、全ての要素を選択し終えたか否かを判別し、NOであればステップS61に戻って同様の処理を繰り返す一方、YESであればメインルーチン(図20)に復帰する。
したがって、たとえば、図18(A)に示された各要素に関し、ソート用Zデータに図20(B)のような順序が記述され、描画用Zデータには図20(A)のような順序が記述されている場合、初回は、ステップS61で「体のマスク」が選択され、ステップS63のZ比較を経てステップS65でYESと判別され、そしてステップS67で体のマスクBMsの全部が描画される。2回目は、ステップS61で「足の線」が選択されるが、ステップS63のZ比較で「足の線」は「体のマスク」よりも奥にあるため、ステップS65の判別結果はNOとなり、したがってステップS69で、足Ft1およびFt2は、体のマスクBMsと重なる部分は描画されず、重なっていない部分だけが描画されることになる。
同様に、3回目に選択される「体の線」は、「足の線」および「体のマスク」のどちらよりも手前にあるので、体Bdの全部が描画される。4回目に選択される「目」は、「体の線」,「足の線」および「体のマスク」のいずれよりも手前にあるので、目Eyの全部が描画される。こうして、先行するステップS17でVRAM42dに描画された背景Bgの上に、図16(A)に示すようなプレイヤキャラクタPCrがさらに描画される結果となる。この場合、体のマスクBMsは透明であるため、体Bdを通して背景Bgが見える。
また、図18(B)に示された各要素に関し、ソート用Zデータに図21(B)のような順序が記述され、描画用Zデータには図21(A)のような順序が記述されている場合、初回は、ステップS61で「体のマスク」が選択され、ステップS63のZ比較を経てステップS65でYESと判別され、そしてステップS67で体のマスクBMsの全部が描画される。2回目は、ステップS61で「手前の足のマスク」が選択され、ステップS63のZ比較で「手前の足のマスク」は「体のマスク」よりも手前にあるため、ステップS65の判別結果はYESとなり、したがってステップS69で、手前の足のマスクFMsの全部が描画される。3回目は、ステップS61で「奥の足の線」が選択されるが、ステップS63のZ比較で「奥の足の線」は「体のマスク」および「手前の足のマスク」のいずれよりも奥にあるため、ステップS65の判別結果はNOとなり、したがってステップS69で、奥の足Ft2は、体のマスクBMsおよび/または奥の足のマスクFMsと重なる部分は描画されず、体のマスクBMsおよび奥の足のマスクFMsのいずれとも重なっていない部分だけが描画されることになる。4回目は、ステップS61で「体の線」が選択されるが、ステップS63のZ比較で「体の線」は「奥の足の線」および「体のマスク」のいずれより手前にあるが、「手前の足のマスク」よりは奥にあるため、ステップS65の判別結果はNOとなり、したがってステップS69で、体Bdは、手前の足のマスクFMsと重なる部分は描画されず、これと重なっていない部分だけが描画されることになる。
同様に、5回目に選択される「目」は、「奥の足の線」,「体のマスク」および「体の線」のいずれよりも手前にあるが、「手前の足のマスク」よりは奥にあるため、ステップS65の判別結果はNOとなり、したがってステップS69で、目Eyは、手前の足のマスクFMsと重なる部分は描画されず、これと重なっていない部分だけが描画されることになる。6回目に選択される「手前の足の線」は、「手前の足のマスク」,「目」,「体の線」,「体のマスク」および「奥の足の線」のいずれよりも手前にあるので、ステップS65の判別結果はYESとなり、したがってステップS67で、手前の足Ft1の全部が描画される。
こうして、先行するステップS17でVRAM42dに描画された背景Bgの上に、図16(B)に示すようなプレイヤキャラクタPCrがさらに描画される結果となる。この場合、体のマスクBMsおよび手前の足のマスクFMsはいずれも透明であるため、体Bdおよび手前の足Ft1を通して背景Bgが見える(図9参照)。
以上から明らかなように、この実施例では、ゲーム装置12のCPU40は、プレイヤキャラクタPCrの各部分の輪郭(Ed)を形成するための制御点CPに関する制御点データ(76a)を生成し(S3〜S9)、制御点データに基づいて、プレイヤキャラクタPCrの体の輪郭に沿う線ポリゴンモデルである体の線モデルBdを生成し(S11a)、プレイヤキャラクタPCrの一方の足の輪郭に沿う線ポリゴンモデルであって、体の線モデBdよりもZ奥に配置される足の線モデルFt2を生成し(S11b)、そして、体の線モデルBdよりZ奥かつ足の線モデルFt2よりZ手前に配置される透明ポリゴンモデルであって、体の線に沿った輪郭を有する体のマスクBMsを生成する(S13a)。そして、背景Bgを描画した後(S17)、各モデルをZ比較を行いながら描画していく(S19)際に、最初に体のマスクBMsを描画し、体のマスクBMsの後に足の線モデルFt2を描画し、そして足の線モデルFt2の後に体の線モデルBdを描画する(図21(B)参照)。
こうして、制御点データを生成し、これに基づいて、プレイヤキャラクタPCrの各部分の輪郭に沿う線ポリゴンモデルを生成するので、制御点データを通して、複雑な線形状を有し、かつ多様な動きをするプレイヤキャラクタPCrを生成することができる。
また、このようなプレイヤキャラクタPCrを描画する際には、背景描画の後、最初に体のマスクBMsを描画したことで、体の線モデルBdおよび足の線モデルFt2はいずれも、体のマスクBMsとのZ比較を受ける。体の線モデルBdは、体のマスクBMsよりもZ手前なので、体のマスクBMsによるマスクを受けることなく描画される。一方、足の線モデルFt2は、体のマスクBdよりもZ奥なので、体のマスクBMsと重なる部分はマスクされ、体のマスクBMsと重ならない部分だけが描画される。また、体のマスクBMsは透明なので、背景Bgの見通しには影響しない。したがって、体の線モデルBdの内部(体の線モデルBdで囲まれた部分)を通して、背景Bgは見えているのに、足の線モデルFt2は見えないようにできる。こうして、背景の透視性という線画の特徴を損なうことなく、しかも違和感なしに、プレイヤキャラクタPCrを描画することができる。
なお、プレイヤキャラクタPCrに加えて、これよりもZ奥に配置される他のオブジェクト、たとえば敵キャラクタオブジェクトOCrをさらに描画する場合、体のマスクBMsの前に敵キャラクタOCrを描画することで、体の線モデルBdの内部を通して敵キャラクタOCrが見えるようにできる(図26(A)参照)。
また、CPU40は、制御点データに基づいてさらに、プレイヤキャラクタPCrの他方の足の輪郭に沿う線ポリゴンモデルであって、体の線モデルBdよりもZ手前に配置される足の線モデルFt1を生成し(S11c)、体の線モデルBdよりZ手前かつ足の線モデルFt1よりZ奥に配置される透明ポリゴンモデルであって、手前の足に沿った輪郭を有する足のマスクFMsを生成する(S13c)。そして、モデル描画を行う際には、さらに、体のマスクBMsの後であって足の線モデルFt2よりも先に足のマスクFMsを描画し、そして体の線モデルBdの後に足の線モデルFt1を描画する(図21(B)参照)。
こうして、背景描画の後、最初に体のマスクBMsを描画し、次いで足のマスクFMsを描画したことで、体の線モデルBd,足の線モデルFt2および足の線モデルFt1はいずれも、体のマスクBMsさらには足のマスクFMsとのZ比較を受ける。なお、体のマスクBMsよりも先に足のマスクFMsを描画すると、Z比較によって体のマスクBMsに欠損が生じる場合があり、好ましくない。
体の線モデルBdは、体のマスクBMsよりZ手前なので、体のマスクBMsによるマスクを受けることはないが、足のマスクFMsよりはZ奥なので、足のマスクFMsと重なる部分はマスクされ、足のマスクFMsと重ならない部分だけが描画される。足の線モデルFt2は、体のマスクBMsおよび足のマスクFMsのいずれよりもZ奥なので、体のマスクBMsおよび/または足のマスクFMsと重なる部分はマスクされ、体のマスクBMsおよび足のマスクFMsのいずれとも重ならない部分だけが描画される。足の線モデルFt1は、体のマスクBMsおよび足のマスクFMsのいずれよりもZ手前なので、体のマスクBMsおよび足のマスクFMsのいずれによるマスクも受けることなく描画される。また、足のマスクFMsも、体のマスクBMsと同様に透明なので、背景の見通しには影響しない。
したがって、体の線モデルBdおよび/または足の線モデルFt1の内部(体の線モデルBdおよび/または足の線モデルFt1で囲まれた部分)を通して、背景Bgは見えているのに、足の線モデルFt2は見えないようにできる。
一般には、CPU40は、各線モデルのZ方向の配列を示す描画用Zデータ(76f)を生成し(S14)、さらに各線モデルの描画順序を示すZソートデータ(76g)を生成して(S15)、Z配列情報およびZソート情報を参照しつつ各線モデルの描画を行う。すなわち、背景描画の後、各線モデル(Bd,Ft1,Ft2,…)のうちマスクしたい線モデルよりも先に各マスク(BMs,FMs1,…)を描画することで、マスクしたい線モデルはどれも、各マスク(BMs,FMs1,…)とのZ比較を受ける。マスク(BMs,FMs1,…)間の描画順序はZ配列情報(76f)に従うので、どのマスク(BMs,FMs1,…)にも欠損が生じることはない。各マスクよりもZ手前の線モデルは、いずれのマスクによるマスクを受けることなく描画される。一方、各マスクよりもZ奥の線モデルは、少なくとも1つのマスクと重なる部分はマスクされ、どのマスクとも重ならない部分だけが描画される。
そして、各マスクはどれも透明なので、背景Bgの見通しには影響しない。したがって、各線モデルの内部(各線モデルで囲まれた部分)を通して、背景Bgは見えているのに、当該線モデルよりもZ奥の各線モデルは見えないようにできる。こうして、背景の透視性という線画の特徴を損なうことなく、しかも違和感なしに、プレイヤキャラクタPCrや敵キャラクタOCrといったキャラクタ、あるいはキャラクタ以外のオブジェクトを描画することができる。
以上では、ゲームシステム10について説明したが、この発明は、3次元仮想空間内のキャラクタオブジェクトを表示するゲーム装置ないしゲームシステムに適用できる。ゲーム装置によって実行される各処理は、ゲームシステムでは、複数のコンピュータ等によって分散処理されてよい。