以下、本発明の好ましい実施の形態として、本発明に係るプログラムをゲームソフトに適用した場合について、添付図面を参照して具体的に説明する。以下の説明では、家庭用ゲーム装置(以下、「ゲーム装置」とする。)において、アクションゲームを進行している場合を例として説明する。
本実施形態に係るアクションゲームは、三次元仮想ゲーム空間上でプレイヤキャラクタを敵キャラクタと戦わせ、プレイヤキャラクタが敵キャラクタを倒すことにより進行する。また、このアクションゲームには、プレイヤキャラクタを編集する機能が設けられている。プレイヤは、編集機能を用いてプレイヤキャラクタを好みの形状に変更することができる。
編集機能では、プレイヤキャラクタの基準となるキャラクタ(以下では、「基準キャラクタ」とする。)の腕や脚、胴体などの各パーツの形状(長さ、太さなど)を変更したり、基準キャラクタの顔を構成する目や鼻などの各パーツの形状および配置位置を変更したりすることができ、編集後の基準キャラクタを自分のプレイヤキャラクタとしてゲームで使用することができる。例えば、脚のパーツでは、股関節から膝までの大腿と膝から足首までの下腿とを、それぞれ個別に長くしたり短くしたり、太くしたり細くしたりすることができる。本実施形態においては、左右の大腿で同じ変更がなされ、左右の下腿で同じ変更がなされるようにしている。なお、左右それぞれ個別に形状を変更できるようにしても構わない。なお、編集機能の詳細については後述する。
図1は、編集機能を用いて脚の長さを変更されたプレイヤキャラクタを説明するための図である。
左側に示されているのが、編集前の基準となる基準キャラクタSである。中央のプレイヤキャラクタP1は基準キャラクタSの脚(大腿および下腿とも)の長さを長くしたものであり、右側のプレイヤキャラクタP2は基準キャラクタSの脚(大腿および下腿とも)の長さを短くしたものである。
プレイヤは、編集後のプレイヤキャラクタを自分のプレイヤキャラクタとしてゲームを行う。プレイヤキャラクタの動作には、予め設定されている基準キャラクタSの動作のためのモーションデータが用いられる。ただし、脚の長さが基準キャラクタSとは異なるプレイヤキャラクタに対して、例えば走るモーションデータをそのまま用いると不自然な映像となるので、プレイヤキャラクタの脚の長さに応じた所定の処理を行っている。
具体的には、まず、基準キャラクタSの左大腿の長さ(左股関節から左膝までの長さ)と左下腿の長さ(左膝から左足首までの長さ)とを加算した長さ(以下では、「脚部長」とする。)に対するプレイヤキャラクタの脚部長の比率(以下では、「脚部長比率」とする。)を算出しておく。例えばプレイヤキャラクタが走る動作を行う場合、プレイヤキャラクタの移動距離が基準キャラクタSの移動距離に脚部長比率を乗算した距離となるように、基準キャラクタSの位置を設定する。すなわち、プレイヤキャラクタの移動距離を、脚部長比率に応じて、長くしたり短くしたりする。これにより、プレイヤキャラクタの脚の長さに合わせた自然な動作となる。なお、モーションデータを用いた具体的な動作の再生方法については後述する。
例えば、図1に示す基準キャラクタSの脚部長(同図では実線矢印の長さで示している。)はLであり、プレイヤキャラクタP1の脚部長はL’(=1.3L)なので、プレイヤキャラクタP1の脚部長比率は1.3である。したがって、プレイヤキャラクタP1の移動距離は、基準キャラクタSの移動距離の1.3倍となる。また、プレイヤキャラクタP2の脚部長はL”(=0.7L)なので、プレイヤキャラクタP2の脚部長比率は0.7である。したがって、プレイヤキャラクタP2の移動距離は、基準キャラクタSの移動距離の0.7倍となる。
図2は、基準キャラクタSおよびプレイヤキャラクタP1、P2がそれぞれ走っている状態を説明するための図である。各キャラクタの動作には共通のモーションデータが使用されており、当該モーションデータの所定間隔の3つのフレームにおける各キャラクタの画像を、(a)基準キャラクタSの場合、(b)プレイヤキャラクタP1の場合、(c)プレイヤキャラクタP2の場合として示している。それぞれの一番左に記載しているものと一番右に記載されているものとの間のフレーム数(所要時間)は同一なので、同じ時間での各キャラクタの移動距離が示されている。
プレイヤキャラクタP1の移動距離(同図では実線矢印の長さで示している。)D’が基準キャラクタSの移動距離Dの1.3倍となり、プレイヤキャラクタP1は基準キャラクタSの場合より長い距離を移動している。また、プレイヤキャラクタP2の移動距離D”が基準キャラクタSの移動距離Dの0.7倍となり、プレイヤキャラクタP2は基準キャラクタSの場合より短い距離を移動している。同図に示すように、プレイヤキャラクタP1およびP2の走る動作は、それぞれの脚の長さに合った自然な動作となっている。なお、脚部長や移動距離は三次元仮想ゲーム空間上での距離を用いている。
また、本実施形態では、編集機能を用いてプレイヤキャラクタの脚の長さを変更した場合、プレイヤキャラクタの左右の脚の付け根の間隔(後述する図4および図5における右股関節lと左股関節oとの間隔であり、以下「股関節の間隔」とする。)も、脚の長さの変化割合と同じ割合で変更するようにしている。現実の世界で人が移動する動作(走ったり、歩いたりする動作)を行う場合、人は脚のみを動かしているのではなく、腰関節を回転させて骨盤を回転させることで左右の股関節の位置をそれぞれ交互に前後させている。したがって、股関節の間隔も歩幅に関与してくる。本実施形態では、プレイヤキャラクタの動作にも腰関節の回転に伴う股関節の位置の移動を反映させている。したがって、プレイヤキャラクタの脚の長さに応じて移動距離を変化させた場合に左右の股関節の間隔を変化させることで、プレイヤキャラクタの歩幅と移動距離とが合うようにして、より自然な映像になるようにしている。
例えば、基準キャラクタSより脚が長いプレイヤキャラクタP1の左右の股関節の間隔を基準キャラクタSの左右の股関節の間隔と同じままとした場合、脚の長さが長くなったことにより歩幅が広くなるが、左右の股関節の間隔に応じた歩幅の変化分はゼロなので反映されない。にもかかわらず、プレイヤキャラクタP1の移動距離は脚部長比率に応じて長くなっているので、プレイヤキャラクタP1の歩幅が移動距離より短く(狭く)なる。
これを改善するために、本実施形態では、プレイヤキャラクタの左右の股関節の間隔を、基準キャラクタSの左右の股関節の間隔に脚部長比率を乗算したものとしている。例えば、図1に示すプレイヤキャラクタP1の左右の股関節の間隔の広さW’を、基準キャラクタSの左右の股関節の間隔の広さWに脚部長比率1.3を乗算したもの(W’=1.3W)としている。また、プレイヤキャラクタP2の左右の股関節の間隔の広さW”を、基準キャラクタSの左右の股関節の間隔の広さWに脚部長比率0.7を乗算したもの(W”=0.7W)としている。なお、プレイヤキャラクタの左右の股関節の間隔の広さの算出方法は、これに限られない。例えば、脚部長比率に所定の調整値を乗算した値を算出しておき、当該算出値を基準キャラクタSの左右の股関節の間隔の広さWに乗算するようにしてもよい。
プレイヤキャラクタの左右の股関節の間隔の広さの調整は、プレイヤキャラクタの編集時に自動的に行われる。なお、当該調整の詳細については、後述する編集機能の説明の中で説明する。
以下に、本実施形態のハード構成について説明する。
図3は、本実施形態に係るゲーム装置を示す構成図である。ゲーム装置1は、本体11および操作コントローラ12を備えている。操作コントローラ12は短距離無線通信によって本体11に接続されている。本体11には、モニタ13が専用のケーブルによって接続される。また、本体11には、ゲームプログラムやゲームデータが記録されているディスク14が装着され、また、必要に応じてゲームデータを保存するためのメモリカード15も装着される。
本体11は、制御部111、描画処理部112、音声処理部113、ディスクドライブユニット114、メモリカード接続ユニット115、I/Oインターフェース部116、通信処理部117、および信号送受信部118を備えている。制御部111には、描画処理部112、音声処理部113、I/Oインターフェース部116、および通信処理部117が接続されている。また、I/Oインターフェース部116には、ディスクドライブユニット114、メモリカード接続ユニット115、信号送受信部118、およびモニタ13が接続されている。
ゲーム装置1では、上記アクションゲームのソフトウェアが記録されたディスク14がディスクドライブユニット114に装着され、このディスクドライブユニット114からディスク14内のゲームプログラムおよびゲームデータが制御部111内のRAM111c(後述)に読み込まれる。読み込まれたゲームプログラムがCPU111a(後述)によって実行されることにより、プレイヤはゲーム内容を楽しむことができる。プレイヤは、操作コントローラ12(後述)を操作することによりプレイヤキャラクタを操作し、ゲームを進行させることができる。また、プレイヤは、編集画面で、操作コントローラ12を操作することにより、プレイヤキャラクタの編集を行うことができる。なお、プレイヤキャラクタの編集機能の詳細については後述する。
ディスク14内のゲームデータには、基準キャラクタSや敵キャラクタなどのキャラクタデータ(画像データ含む)、武器などのアイテムデータ(画像データ含む)、モーションデータ、背景などの画像データ、効果音などの音声データ、および、ゲーム進行や描画の際に参照される各種テーブルなどが含まれる。
制御部111は、本体11の全体動作を制御するマイクロコンピュータを有している。マイクロコンピュータは、CPU111a、ROM111b、およびRAM111cなどからなり、各部は、それぞれバスラインで接続されている。
CPU111aは、ディスクドライブユニット114によってディスク14からRAM111cに読み込まれるゲームプログラムを実行することより、ゲーム進行を統括的に制御する。より具体的には、操作コントローラ12からプレイヤが操作することによる操作信号が信号送受信部118を介して入力されると、CPU111aは、ゲームプログラムにしたがってその操作信号に対する所定のゲーム進行処理を行う。CPU111aは、その処理結果をモニタ13に例えば三次元空間を表現する二次元画像(以下、「ゲーム画像」という)によって表示するとともに、モニタ13のスピーカ13a(後述)から効果音などを出力する。
ROM111bには、ディスクローディング機能などのゲーム装置1の基本的な機能やディスク14に記録されたゲームプログラムおよびゲームデータを読み出す手順などを示す基本プログラムが記憶されている。CPU111aは、ディスクドライブユニット114にディスク14が装着されると、ROM111bの基本プログラムにしたがってディスクドライブユニット114を動作させ、ディスク14からゲームプログラムおよびゲームデータをRAM111cに読み込み、ゲーム開始状態に設定する。
RAM111cは、ディスクドライブユニット114によってディスク14から読み込まれたゲームプログラムやゲームデータが格納されるエリアと、CPU111aがゲームプログラムを実行するためのワークエリアとを提供するものである。
上記ゲームプログラムは、複数のプログラムが組み合わされて構成されており、例えばモニタ13に表示されているプレイヤキャラクタの動作を操作コントローラ12からのプレイヤの操作信号に基づいて制御するゲーム進行プログラムやモニタ13に表示すべきゲーム画像を制御するグラフィック制御プログラムなどによって構成されている。また、本実施形態において、RAM111cは、ディスク14から読み込んだ基準キャラクタデータ、基準キャラクタモーションデータ(図6および図9参照)などを記憶し、これらのデータから作成されたプレイヤキャラクタデータ、およびスケルトンデータ(図8および図11参照)などを記憶する。
CPU111aは、操作コントローラ12からのプレイヤの操作信号に基づき、必要に応じてディスク14からゲームプログラムや画像データなどをRAM111cに読み込み、これらのデータを処理したりゲームプログラムを実行したりすることにより、モニタ13に表示すべきゲーム画像の内容を決定する。
描画処理部112は、描画処理に必要な各種の演算処理を行うものである。CPU111aは、例えば、1/60秒毎に、描画処理部112に描画指令を出力する。このとき、CPU111aは、モニタ13に表示すべき画像を決定し、その画像の描画に必要なキャラクタデータ、アイテムデータ、背景などの画像データ、モーションデータおよび光源データなどをRAM111cから読み出して描画処理部112に供給する。
描画処理部112は、CPU111aからの描画命令に基づいて画像データなどを用いて、描画に必要なデータ(各オブジェクトおよび背景の位置関係、モニタ13の画面上における各オブジェクトを構成するポリゴンの座標、各ポリゴンに対応するテクスチャ、並びに各ポリゴンの反射特性などのデータ)の演算などを行い、その演算結果に基づいて描画処理部112内のVRAM(図示せず)に1コマ(1フレーム)のゲーム画像のデータを作成する。作成されたゲーム画像のデータは、例えば1/60秒毎に映像信号としてモニタ13に出力され、モニタ13に映像として表示される。
音声処理部113は、効果音などの音声を発生させる処理に必要な各種の演算処理を行うものである。CPU111aは、モニタ13のスピーカ13aから出力すべき効果音若しくはBGMの音響内容を決定すると、音声処理部113に音声指令を出力する。音声処理部113は、CPU111aからの音声指令に基づき、RAM111cから効果音もしくはBGMの音声データを読み出し、所定の加工処理とD/A変換処理とを施した後、スピーカ13aに出力する。
ディスクドライブユニット114は、CPU111aからのローディング指令(ローディングすべきゲームプログラムとゲームデータを指定した読出指令)に基づき、ディスク14に記録されたゲームプログラムやゲームデータを読み出すものである。
メモリカード接続ユニット115は、ゲーム進行に関する情報をメモリカード15に書き込んだり、読み出したりするためのユニットである。CPU111aは、ゲーム進行中やゲーム終了時にプレイヤから「データのセーブ」が指令されると、メモリカード接続ユニット115を介してメモリカード15に、ゲーム進行に関する情報(この情報には、例えば、編集機能で作成されたプレイヤキャラクタデータ(図8参照)や、獲得したポイントやアイテムなどの各種の特典などの情報が含まれる。)を記憶する。また、メモリカード15に記憶されたゲーム進行に関する情報は、ゲーム開始前にRAM111cに読み出される。
I/Oインターフェース部116は、ディスクドライブユニット114やメモリカード接続ユニット115によって読み出されたゲームプログラムやゲームデータ、および信号送受信部118が受信した操作コントローラ12からの操作信号を制御部111に伝送したり、制御部111、描画処理部112や音声処理部113からの映像信号や音声信号などをモニタ13やスピーカ13aに伝送したりするものである。
通信処理部117は、ネットワーク回線2を介して他のゲーム装置1と通信を行う場合に、データの送信および受信を行うための制御を行うものである。通信処理部117は、操作コントローラ12から入力される操作信号やCPU111aから出力される信号をネットワーク回線2を介して他のゲーム装置1に送信し、ネットワーク回線2を介して他のゲーム装置1から送信される信号を受信してCPU111aに入力する。
信号送受信部118は、操作コントローラ12から短距離無線通信により送信される信号を受信する。操作コントローラ12からの信号には、操作コントローラ12に設けられた操作ボタンの操作情報の他に、操作コントローラ12に設けられた各種センサ(図示しない)による検出データが含まれる。CPU111aはこの操作コントローラ12から送信される信号によりゲームを進行させることができる。また、信号送受信部118は、操作コントローラ12に各種信号(例えば、操作コントローラ12の振動部(図示しない)を振動させたり、発光部(図示しない)を発光させたり、音声出力部から音声を出力させたりするための信号など)を送信する。
操作コントローラ12は、プレイヤキャラクタを動作させたり、ゲームに関する各種の設定を行ったりするために、プレイヤによって操作されるものである。プレイヤによって操作コントローラ12が操作されると、その操作信号が制御部111に伝送され、モニタ13に表示されたプレイヤキャラクタが所定の動作を行う。所定の動作としては、例えば、走る、しゃがむ、ジャンプするなどの移動動作や武器を使用して相手を攻撃する攻撃動作がある。操作コントローラ12は、自身の電源のオン状態とオフ状態とを切り替えるための電源ボタン、ゲームを開始させたりポーズメニューを開いたりするためのスタートボタン、デモをスキップしたりメニューを選択するためのセレクトボタン、および、プレイヤキャラクタの各動作やカメラ視点の移動操作のための操作ボタンなど(押圧して操作される操作ボタンと傾けることで操作される操作スティックとが含まれる。)を備えている。
モニタ13は、本体11から送られてきた映像信号に応じてゲーム進行状態を示す表示画面を映し出したり、本体11から送られてきた音声信号に応じてスピーカ13aから効果音などの音声を出力させたりするための装置である。モニタ13は、映像信号や音声信号を入力するための外部入力端子を備えた、例えばテレビジョン受像機によって構成されている。
ディスク14は、例えばDVD−ROMまたはCD−ROMなどの光ディスクである。ディスク14には、ゲームプログラムやそのゲームプログラムの実行に必要な種々のデータや画像データが記録されている。メモリカード15は、例えばフラッシュメモリなどのデータの書き換えが可能な不揮発性の記録媒体である。RAM111cのワークエリアの記録は、本体11の電源を切ると消滅してしまうことから、メモリカード15は、RAM111cのワークエリアの記録のうち消滅させずに残しておくべきゲーム進行に関する情報(例えば、プレイヤキャラクタデータなど)を記録する。
ゲーム装置1は、ネットワークアダプタ16を介して、インターネット回線などのネットワーク回線2に接続することができる。この場合、ネットワーク回線2を介して、複数のゲーム装置1間でゲームを行うこともできる(いわゆる「オンラインゲーム」)。本実施形態では、ゲーム装置1単独で行うゲームについて説明しているが、このようなオンラインゲームでも本発明を適用することができる。
次に、キャラクタの編集処理について、図4〜図8を参照して説明する。
上述したように、本実施形態に係るアクションゲームには、プレイヤキャラクタを編集する機能が設けられている。編集機能には、プレイヤキャラクタの体のパーツ(腕や脚、胴体など)の形状を変更する機能や、プレイヤキャラクタの顔のパーツ(目や鼻など)の形状や配置を変更する機能などがある。以下では、プレイヤキャラクタの体のパーツの編集処理について説明する。なお、顔のパーツの編集処理については、説明を省略する。
図4および図5は、キャラクタのスケルトンモデルを説明するための図である。図4は、キャラクタが両手を広げて直立した姿勢(以下では、「標準姿勢」とする。)を取っているときの各関節のリンク構造を示す図である。図5は、各関節の親子関係の階層構造を示す図である。本実施形態ではプレイヤキャラクタが人のキャラクタなのでスケルトンモデルは人のスケルトンモデルであり、図4および図5はそれぞれ一般的な人のスケルトンモデルのリンク構造および階層構造を示している。
図4において、a〜qが記載されている丸は各関節を示している。なお、各関節a〜qの名称は図5と共通しており、図4においては各名称の記載を省略している。なお、以下の記載でも、各関節a〜qの名称を省略して、例えば、「関節a」とのみ記載する場合がある。各関節間の接続は実線で示されており、例えば、右肩eと右肘fとが接続されていることを示している。腰関節aはスケルトンモデルの基点(連結構造の基準となる部位)となるものである。なお、各関節とリンク構造はこれに限定されるものではない。関節を省略してより単純な構造としてもよいし、関節を増やしてより複雑な構造としてもよい。また、基点は腰関節aに限定されるわけではなく、胴関節b、首cや左肩iとしてもよいし、各関節とは別の点を設定してもよい。ただし、基点は、体幹などのキャラクタの左右に偏らない点、例えば、中心軸(首c、胴関節b、腰関節aを結ぶ直線)に位置する点が望ましい。
図5において、上位にある関節が下位にある関節の親であり、下位にある関節は上位にある関節の子である。例えば、右鎖骨dは、右肩eの親であり、胴関節bの子である。各関節の位置は、親である関節の位置を基準に設定される。腰関節a(基点)は1番上位の関節であり、腰関節aの位置はローカル座標系の原点を基準に設定される。なお、ローカル座標系は、キャラクタ(例えば、プレイヤキャラクタや敵キャラクタなどの、CPU111aによって動きが制御されているキャラクタ)毎に設定されている座標系であって、キャラクタの動きや姿勢を管理するために設けられている。
プレイヤキャラクタの体のパーツの編集処理は、基準キャラクタのキャラクタデータからプレイヤが使用するプレイヤキャラクタのキャラクタデータを新たに生成したり、生成されたプレイヤキャラクタのキャラクタデータを変更したりすることで行われる。なお、以下では、新たにプレイヤキャラクタのキャラクタデータを生成する場合について説明する。
図6は基準キャラクタデータの一例を説明するための図である。
基準キャラクタデータは基準キャラクタのキャラクタデータであり、プレイヤが編集機能を用いてプレイヤキャラクタを編集するための元のキャラクタデータである。基準キャラクタデータは、ディスク14にゲームデータとして記録されており、ディスクドライブユニット114によって読み出されて、RAM111cに格納される。
図6に示すように、基準キャラクタデータはモデルデータと画像データなどを含んでいる。モデルデータは関節データと脚部長を含んでいる。関節データは関節a〜q毎のポジションデータとリンクデータとを含んでいる。ポジションデータはキャラクタが標準姿勢を取っているときの各関節の位置データであり、リンクデータは親である関節を特定するためのデータである。例えば、同図においては、関節bのポジションデータは(Xb,Yb,Zb)となっており、リンクデータは親関節である関節aを示す「a」となっている。
関節aは基点であって親である関節がないので、リンクデータを有しない。関節aのポジションデータは、ローカル座標系における位置座標で示されている。本実施形態では、標準姿勢における関節aがローカル座標系の原点の真上(Y軸上)に設定されているので、Xa=Za=0である(図7参照)。関節b〜qのポジションデータは、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータである。
図7は、ポジションデータを説明するための図であり、ローカル座標系上の関節a、関節b、および関節hの位置座標を示すものである。
関節hのポジションデータ(Xh,Yh,Zh)は、親の関節である関節b(図5参照)の位置座標B(XB,YB,ZB)を基準とした相対位置を示している。したがって、関節hの位置座標Hは、H(XB+Xh,YB+Yh,ZB+Zh)となる。なお、関節bの親の関節である関節a(基点)の位置座標Aは関節aのポジションデータなのでA(Xa,Ya,Za)であり、関節bのポジションデータが(Xb,Yb,Zb)なので、位置座標B(XB,YB,ZB)は(Xa+Xb,Ya+Yb,Za+Zb)となる。したがって、位置座標Hは、H(Xa+Xb+Xh,Ya+Yb+Yh,Za+Zb+Zh)となる。
なお、各関節のポジションデータは、親である関節の位置を基準とした相対位置で表す場合に限られない。例えば、ローカル座標系の位置座標としてもよいし、親関節との距離情報であってもよい。
脚部長は、基準キャラクタの脚の長さを示すデータである。脚部長は、関節o(左股関節)から関節p(左膝)までの距離と関節p(左膝)から関節q(左足首)までの距離とを加算した値としており、関節p,qの各ポジションデータから算出されて、予め設定されている。関節pのポジションデータは親関節である関節oを基準とした相対位置であり、関節qのポジションデータは親関節である関節pを基準とした相対位置なので、関節p,qの各ポジションデータをそれぞれ(Xp,Yp,Zp),(Xq,Yq,Zq)とすると、脚部長は下記(1)式で算出することができる。なお、脚部長は、関節のポジションデータと下記(1)式とから算出できるので、基準キャラクタデータに含めていなくてもよく、必要の都度算出するようにしてもよい。
L=√(Xp2+Yp2+Zp2)+√(Xq2+Yq2+Zq2)
・・・・・ (1)
画像データは、キャラクタを構成する各パーツのポリゴンデータおよびテクスチャデータなどを含んでいる。
図8は、プレイヤキャラクタデータの一例を説明するための図である。
プレイヤキャラクタデータは、プレイヤキャラクタのキャラクタデータであり、プレイヤが編集機能を用いて基準キャラクタデータを編集することで作成される。作成されたプレイヤキャラクタデータは、例えばメモリカード15などに記録される。プレイヤが同じプレイヤキャラクタを使用してゲームを行う場合(新たに編集機能を用いてプレイヤキャラクタを作成しない場合)は、メモリカード15に記録されているプレイヤキャラクタデータをRAM111cに読み込んで使用する。
プレイヤキャラクタデータは、モデルデータおよび画像データなどを含んでいる。プレイヤキャラクタデータのモデルデータは、基準キャラクタデータのモデルデータをコピーしたものが最初に記録され、プレイヤによるプレイヤキャラクタの編集に応じて変更される。
モデルデータの各関節のポジションデータはプレイヤによる編集作業によって変更される。例えば、同図においては、関節aのポジションデータは編集によって(Xa’,Ya’,Za’)に変更されている。また、脚部長は、編集後の関節p,qの各ポジションデータから算出されて設定される。編集後の関節p,qの各ポジションデータをそれぞれ(Xp’,Yp’,Zp’),(Xq’,Yq’,Zq’)とすると、脚部長は下記(2)式で算出することができる。なお、基準キャラクタの脚部長と区別するために、プレイヤキャラクタの脚部長はL’で表している。また、脚部長は、関節のポジションデータと下記(2)式とから算出できるので、プレイヤキャラクタデータに含めていなくてもよく、必要の都度算出するようにしてもよい。
L’=√(Xp’2+Yp’2+Zp’2)+√(Xq’2+Yq’2+Zq’2)
・・・・・ (2)
プレイヤは、初めてゲームを行うときなどに自分のプレイヤキャラクタを作成するために、編集画面でプレイヤキャラクタの編集を行う。編集画面は、メインメニューで「プレイヤキャラクタの編集」を選択することで開始される。編集画面において、プレイヤは編集するパーツを選択する。選択できるパーツは、例えば、左上腕、左前腕、右上腕、右前腕、左大腿、左下腿、右大腿、右下腿、腹、胸などがある。なお、選択できるパーツはこれらに限られない。本実施形態では、編集画面上に表示されている基準キャラクタの各パーツにカーソルを合わせて所定のボタンを押圧することで、プレイヤはパーツを選択することができる。選択されたパーツは、選択されたことが判るように点滅表示され、編集のためのマーカが表示される。なお、パーツの選択方法はこれに限られず、番号や文字列でパーツを指定して選択するようにしてもよい。
次に、プレイヤは、選択したパーツの長さ(長くするか短くするか)およびその太さ(太くするか細くするか)などを調整する。本実施形態では、選択したパーツに表示されているマーカを移動させることで、当該パーツの長さおよび太さを調整する。なお、選択したパーツの調整方法はこれに限られず、直接数字を入力することで調整するようにしてもよい。また、本実施形態では、プレイヤキャラクタが左右対称となるように、編集したパーツに対応するパーツ(例えば、右大腿を編集した場合は左大腿)にも同じ編集が自動的に行われる。なお、これに限られず、左右別々に編集できるようにしてもよい。
プレイヤによってプレイヤキャラクタのパーツの長さの編集が行われた場合、プレイヤキャラクタデータの所定の関節のポジションデータが変更される。例えば、右大腿の長さを変更した場合、プレイヤキャラクタの右膝の位置が変化するので、関節m(右膝)のポジションデータが変更される。なお、右膝に対する右足首の相対位置は変化しないので、関節n(右足首)のポジションデータは変更されない。また、プレイヤキャラクタを左右対称とするために、左大腿の長さも自動的に変更されて左膝の位置も変化するので、関節p(左膝)のポジションデータも変更される。関節pのポジションデータが変化するので、脚部長L’も変更される。また、先述したように、プレイヤキャラクタの脚の長さを変更した場合、プレイヤキャラクタの左右の股関節の間隔も同じ割合で変更される。したがって、関節l(右股関節)および関節o(左股関節)のポジションデータも脚部長比率に応じて変更される。
左右の股関節の間隔の広さの調整(以下では、「股関節調整」とする。)を行う前の関節l,oの各ポジションデータをそれぞれ(Xl,Yl,Zl),(Xo,Yo,Zo)とし、脚部長比率をT=L’/L(L:基準キャラクタの脚部長、L':編集後のプレイヤキャラクタの脚部長)とすると、股関節調整後の関節l,oの各ポジションデータはそれぞれ(Xl・T,Yl・T,Zl・T),(Xo・T,Yo・T,Zo・T)となる。下記(3)式に示すように、股関節調整後の股関節間の距離W’は、股関節調整前の股関節間の距離Wに脚部長比率Tを乗じたものとなる。
W’=√{(Xl・T−Xo・T)2+(Yl・T−Yo・T)2
+(Zl・T−Zo・T)2}
=T・√{(Xl−Xo)2+(Yl−Yo)2+(Zl−Zo)2}
=T・W ・・・・・ (3)
なお、股関節調整の方法はこれに限られない。例えば、左右の股関節の間隔のみを変更するようにしてもよい。すなわち、標準姿勢におけるキャラクタの横方向を示すX座標のみを変更し、Y座標およびZ座標を変更しないようにしてもよい。上記の例で説明すると、股関節調整後の関節l,oの各ポジションデータをそれぞれ(Xl・T,Yl,Zl),(Xo・T,Yo,Zo)としてもよい。
なお、プレイヤキャラクタのパーツの太さの編集が行われた場合、プレイヤキャラクタデータの各関節のポジションデータおよび脚部長は変更されず、股関節調整も行われない。
画像データは、基準キャラクタの画像データをコピーしたものが最初に記録され、プレイヤによるプレイヤキャラクタの編集に応じて変更される。例えば、編集されたパーツを構成するポリゴンの各頂点の座標は、当該パーツの編集内容に応じて変更される。なお、編集時には画像データを変更せず、編集内容の情報をプレイヤキャラクタデータとして記録しておき、画像生成時に当該編集内容の情報に基づいて画像データを変更して用いるようにしてもよい。
次に、モーションデータを用いたプレイヤキャラクタの動作の再生方法について、図9〜図11を参照して説明する。
プレイヤキャラクタの動作の再生は、プレイヤキャラクタデータ(図8参照)と基準キャラクタのモーションデータ(図9参照)とを用いて行われる。すなわち、プレイヤキャラクタデータと基準キャラクタのモーションデータに基づいて、プレイヤキャラクタの各関節の位置データを算出したスケルトンデータをフレーム毎に生成する。スケルトンデータに応じてプレイヤキャラクタデータの各パーツを三次元仮想ゲーム空間上に配置する。これをフレーム毎に行うことでプレイヤキャラクタに所定の動作を行わせる。
図9は、基準キャラクタモーションデータの一例を説明するための図である。
基準キャラクタモーションデータは、基準キャラクタのモーションデータであり、基準キャラクタの各動作を再生するためのデータである。基準キャラクタモーションデータは、プレイヤキャラクタのモーションデータとしても用いられる。基準キャラクタモーションデータは、動作(モーション)毎に設定されており、フレーム毎の各関節の位置データまたは各関節の回転角度を示すデータを含んでいる。関節a(基点)のデータには、ローカル座標系における位置座標であるポジションデータと、ローカル座標系における関節aの回転角度を示すローテーションデータとが含まれている。また、関節b〜qのデータには、ローカル座標系における各関節の回転角度を示すローテーションデータが含まれている。基準キャラクタモーションデータの各関節のローテーションデータと、プレイヤキャラクタデータ(図8参照)の各関節のポジションデータとから、各関節のローカル座標系における位置座標を算出することができる。このようにして関節の位置と回転角度から順に子の関節の位置を算出していく方法は、フォワードキネマティクス技術として周知なので、詳細な説明を省略する。
なお、基準キャラクタモーションデータがすべてのフレームのデータを備えていなくてもよく、キーフレームのデータのみを備えておいて、線形補間やスプライン補間などで間のフレームのデータを補間するようにしてもよい。また、基準キャラクタモーションデータのうちの各関節のローテーションデータが本発明の「基準モーションデータ」に対応するものであり、基準キャラクタモーションデータのうちの関節a(基点)のポジションデータが本発明の「基準位置データ」に対応するものである。
図10は、ゲーム装置1の例えば制御部111で行われる、プレイヤキャラクタのモーション再生のためのスケルトンデータを生成するための処理(以下では、「スケルトンデータ生成処理」とする。)を説明するためのフローチャートである。
スケルトンデータ生成処理は、フレーム毎に実施される。まず、実行される動作に対応するモーションデータの該当するフレームのデータ(例えば、図9に示すモーション1のフレーム1の処理の場合、ポジションデータα1、ローテーションデータa1、およびローテーションデータb1〜q1)と、プレイヤキャラクタデータ(図8参照)とが、CPU111aによってRAM111cから読み出されて、描画処理部112に入力される(S1)。次に、入力されたデータからスケルトンデータが生成される(S2)。
図11は、スケルトンデータの一例を説明するための図である。
スケルトンデータは、各関節の位置データおよび回転角度を示すデータを含んでいる。関節a(基点)のデータには、ポジションデータが含まれている。関節aのポジションデータは、ローカル座標系における関節aの位置座標であり、基準キャラクタモーションデータの関節aのポジションデータと脚部長比率Tとから算出される。具体的には、基準キャラクタモーションデータの関節aのポジションデータの各座標成分に脚部長比率Tを乗算したものが、スケルトンデータの関節aのポジションデータの各座標成分となる。
例えば、図9に示すモーション1のフレーム1の処理の場合、スケルトンデータの関節aのポジションデータは、ポジションデータα1が(Xα1,Yα1,Zα1)の場合、(Xα1・T,Yα1・T,Zα1・T)となる。
ローカル座標系の鉛直方向を示すY座標の値が基準キャラクタモーションデータにおける値に脚部長比率Tを乗じた値となっているので、関節aの高さ位置がプレイヤキャラクタの脚の長さに応じた位置となっている。これにより、プレイヤキャラクタの足が適切に地面に接するようになる。
図12は、プレイヤキャラクタの足が適切に地面に接することを説明するための図であり、プレイヤキャラクタの関節aの位置座標を示している。
基準キャラクタモーションデータは基準キャラクタSを基準に設定されたものなので、基準キャラクタSの足が適切に接地するように、基準キャラクタモーションデータの関節aの高さ位置(ローカル座標系におけるY座標)が設定されている。したがって、同図に示すように、基準キャラクタSの関節aのY座標Yα1は、基準キャラクタSの脚の長さに対応した値となっている。また、脚の長いプレイヤキャラクタP1の関節aのY座標は、基準キャラクタモーションデータの関節aのポジションデータのY座標Yα1に脚部長比率Tを乗算したYα1・Tとなり、関節aの高さ位置はプレイヤキャラクタP1の脚の長さに対応した位置となっている。したがって、プレイヤキャラクタP1の足が適切に地面に接するようになる。
また、ローカル座標系の水平面を示すXZ平面上の座標(X座標およびZ座標)も基準キャラクタモーションデータにおける値に脚部長比率Tを乗じた値となるので、関節aの移動距離も脚部長比率Tに比例した距離となる。
図13は、プレイヤキャラクタの移動距離を説明するための図であり、プレイヤキャラクタの関節aの位置座標を示している。同図においては、プレイヤキャラクタがX軸に沿って走っているモーションについて説明している。なお、同図はZ座標の正の方向から見た場合を示しており、以下の説明ではZ座標成分の記載を省略して説明する。
同図(a)は、基準キャラクタSの場合を示しており、フレームK1における基準キャラクタS(K1)とフレームK2における基準キャラクタS(K2)とを表示している。フレームK1における関節aのポジションデータを(Xk1,Yk1)、フレームK2における関節aのポジションデータを(Xk2,Yk2)とすると、フレームK1からフレームK2までの関節aのX軸上の移動距離はD=Xk2−Xk1となる。
同図(b)は、脚の長いプレイヤキャラクタP1の場合を示しており、フレームK1におけるプレイヤキャラクタP1(K1)とフレームK2におけるプレイヤキャラクタP1(K2)とを表示している。フレームK1およびK2における関節aのポジションデータは、同図(a)の説明と共通しており、(Xk1,Yk1)および(Xk2,Yk2)となる。このとき、プレイヤキャラクタP1(K1)の関節aの位置座標(スケルトンデータとして算出された関節aのポジションデータ)は(Xk1・T,Yk1・T)となり、プレイヤキャラクタP1(K2)の関節aの位置座標は(Xk2・T,Yk2・T)となる。したがって、フレームK1からフレームK2までの関節aのX軸上の移動距離はD’=Xk2・T−Xk1・T=(Xk2−Xk1)・T=D・Tとなる。
なお、基準キャラクタモーションデータの関節aのポジションデータの各座標成分に脚部長比率Tを乗算したものをスケルトンデータの関節aのポジションデータの各座標成分としているので、関節aがXZ平面上を移動する場合に限らず、Y軸上を移動する場合(例えば、プレイヤキャラクタがジャンプした場合など)でも同様に、移動距離が脚部長比率Tに比例した距離となる。
図11に戻って、関節b〜qのデータには、ポジションデータおよびリンクデータが含まれている。関節b〜qのポジションデータは、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータであり、プレイヤキャラクタデータの関節b〜qのポジションデータと基準キャラクタモーションデータの関節b〜qのローテーションデータとからフォワードキネマティクス技術を用いて算出される。スケルトンデータの関節b〜qのリンクデータは、プレイヤキャラクタデータの関節b〜qのリンクデータを用いる。
図10に戻って、ステップS2で生成されたスケルトンデータの座標変換が行われ(S3)、スケルトンデータ生成処理は終了される。当該座標変換は、ローカル座標系の位置データをワールド座標系の位置データに変換するものである。これにより、ローカル座標系におけるデータであるスケルトンデータが、ワールド座標系のデータに変換される。なお、ワールド座標系は、三次元仮想ゲーム空間上に設定された固定の座標系であり、三次元仮想ゲーム空間上での位置や向きを表すために用いられる。ステップS3の座標変換では、プレイヤキャラクタの「現在位置データ」および「現在向きデータ」が用いられる。
「現在位置データ」および「現在向きデータ」は、それぞれ、ワールド座標系におけるプレイヤキャラクタの位置および向き(正確には、プレイヤキャラクタに設定されているローカル座標系の原点の位置およびローカル座標系の向き)を示すデータであり、RAM111cに記録されている。「現在位置データ」および「現在向きデータ」は、プレイヤキャラクタが三次元仮想ゲーム空間上を移動することで更新される。例えば、プレイヤキャラクタが走って移動する場合、「現在位置データ」および「現在向きデータ」に基づくローカル座標系を基準として走るモーションが実行される。当該走るモーションが終了したとき(最後のフレームが処理されたとき)のプレイヤキャラクタのワールド座標系における位置および向きに基づいて、「現在位置データ」および「現在向きデータ」が更新される。プレイヤキャラクタが走って移動している間、走るモーションの実行と「現在位置データ」および「現在向きデータ」の更新とが繰り返される。
描画処理部112は、最終的に、ワールド座標系のデータに変換されたスケルトンデータと、同様にワールド座標系のデータに変換された画像データなどを用いて、ゲーム画像のデータを作成する。フレーム毎に作成されたゲーム画像のデータが、映像信号としてモニタ13に出力されて、プレイヤキャラクタの動作の映像がモニタ13に表示される。
本実施形態によると、基準キャラクタモーションデータの関節aのポジションデータをプレイヤキャラクタの脚部長比率に応じて変化させたものが、スケルトンデータの関節aのポジションデータに用いられる。したがって、関節aの移動距離が脚部長比率に応じた距離となる。これにより、プレイヤキャラクタの移動距離が脚の長さに応じた距離となるので、基準キャラクタとは脚の長さの異なるプレイヤキャラクタに共通の基準キャラクタモーションデータを用いた場合でも、プレイヤキャラクタの移動動作が不自然な映像となることを抑制することができる。
また、本実施形態によると、プレイヤキャラクタの左右の股関節の間隔を脚部長比率に応じて変化させる。したがって、プレイヤキャラクタの歩幅を移動距離に近付けることができるので、プレイヤキャラクタの移動動作がより自然な映像となる。
なお、上記実施形態では、プレイヤキャラクタの大腿と下腿とを同じ割合で変化させた場合について説明したが、それぞれ個別に変化させた場合(例えば、大腿を2倍にして、下腿を半分にするなど)にも、本発明を適用することができる。
上記実施形態では、プレイヤキャラクタの左右の股関節の間隔を脚部長比率に応じて自動的に変更する場合について説明したが、これに限られない。自動的に変更しないようにして、プレイヤが編集処理で変更できるようにしてもよい。この場合、脚部長に腰関節から股関節までの長さも加えるようにしてもよい。
上記実施形態では、脚部長を左大腿の長さ(左股関節から左膝までの長さ)と左下腿の長さ(左膝から左足首までの長さ)とを加算した長さとしているが、これに限られない。例えば、右大腿の長さと右下腿の長さとを加算した長さとしてもよい。また、キャラクタが標準姿勢を取ったときの股関節から足首までの長さとしたり、腰関節から足首までの長さとしてもよいし、大腿のみの長さとしたり下腿のみの長さとしてもよい。また、関節間の距離に限定されず、例えば、キャラクタが標準姿勢を取ったときのおしりから足の裏までの距離としてもよい。
上記実施形態では、基点(関節a)の位置座標の各要素に脚部長比率を乗算することでプレイヤキャラクタの位置を変化させて移動距離を変化させるようにしているが、これに限られない。例えば、基準となる移動距離や移動量、移動速度などをあらかじめ設定しておいてキャラクタの移動動作のモーションデータを当該設定された移動距離などに基づいて再生するように設定しておき、脚の長さが異なるキャラクタにこのモーションデータを用いる場合に、設定された移動距離などに脚部長比率を乗算して算出された値に基づいてキャラクタの移動動作を再生するようにしてもよい。この場合、あらかじめ設定された「基準となる移動距離や移動量、移動速度など」が、本発明の「基準位置データ」に対応するものである。
例えば、基準キャラクタモーションデータ(図9参照)のポジションデータα1〜αMに、基点(関節a)の位置座標に代えて移動量が記録されている場合、このモーションデータを用いて脚の長さが異なるプレイヤキャラクタの移動動作を再生するときは、記録されている移動量に脚部長比率を乗算して算出された値を移動量として用いて、当該プレイヤキャラクタの移動動作を再生するようにすればよい。また、基点(関節a)の位置座標を用いずに、基準キャラクタモーションデータとは別に設定された基準キャラクタの一歩当たりの移動距離を用いる場合は、設定されている移動距離に脚部長比率を乗算して算出された値をプレイヤキャラクタの一歩当たりの移動距離として用いるようにすればよい。具体的には、脚部長比率を乗算して算出された一歩当たりの移動距離から1フレーム当たりの移動距離を算出した値を用いる。また、基点(関節a)の位置座標を用いずに、基準キャラクタモーションデータとは別に設定された基準キャラクタの移動速度を用いる場合は、脚部長比率を乗算して算出された移動速度から1フレーム当たりの移動距離を算出した値を用いる。
上記実施形態では、編集されたプレイヤキャラクタに基準キャラクタのモーションデータを用いる場合について説明したが、これに限られない。例えば、脚の長さの異なるキャラクタ(プレイヤキャラクタ、敵キャラクタ、その他のキャラクタを含む。)に共通のモーションデータを用いる場合にも、本発明を適用することができる。
上記実施形態では、プレイヤキャラクタが走って移動する場合について説明したが、これに限られず、歩いて移動する場合や、ジャンプして移動する場合にも本発明を適用することができる。また、水平方向の移動に限定されず、鉛直方向への移動を含む移動、例えば、坂道や階段を上ったり下ったりする場合や、はしごや綱を上ったり下ったりする場合、ジャンプをする場合などにも、本発明を適用することができる。
上記実施形態では、アクションゲームを例に説明したが、これに限られない。例えば、スポーツゲーム、RPG(ロールプレイングゲーム)、シューティングゲーム、格闘ゲーム、アドベンチャーゲームなどの様々なジャンルのゲームにおいても、本発明を適用することができる。また、本発明は、複数のプレイヤの操作するキャラクタ若しくはCPUの制御するキャラクタがチームを組んで協同して敵キャラクタと対戦するようなゲームや、敵キャラクタとしての他のプレイヤの操作するキャラクタと対戦するようなゲームにも適用することができる。
上記実施形態では、家庭用ゲーム装置でゲームを実施する場合について説明したが、これに限られない。本発明は、例えば、アーケードゲーム装置、携帯型ゲーム装置、および、ゲームソフトが搭載されているパーソナルコンピュータなどでゲームを実施する場合にも適用することができる。
上記実施形態では、本発明をゲームプログラムに適用した場合について説明したが、ゲーム以外のプログラムに適用してもよい。本発明は、モーションデータに基づいてキャラクタなどの動作を表示するあらゆるプログラムに適用することができる。
本発明に係るプログラム、当該プログラムを記録した記録媒体、および、当該プログラムを実行する画像処理装置は、上述した実施形態に限定されるものではない。本発明に係るプログラム、当該プログラムを記録した記録媒体、および、当該プログラムを実行する画像処理装置の具体的な構成は、種々に設計変更自在である。