以下、本発明の実施形態を図面に基づいて説明する。以下では、画像処理システムの一例であるゲームシステムに本発明を適用した例について説明する。
[1.ゲームシステムの構成]図1は、本発明の実施形態に係るゲームシステムの構成を示す。図1に示すように、本実施形態に係るゲームシステム1はゲーム端末10とサーバ30とを含む。ゲーム端末10とサーバ30とはネットワークNに接続されている。このため、ゲーム端末10とサーバ30との間で相互にデータ通信が可能である。
ゲーム端末10は、ユーザが操作するコンピュータである。具体的には、ゲーム端末10は、ユーザがゲームをプレイするために使用するコンピュータである。例えば、ゲーム端末10は、家庭用ゲーム機(据置型ゲーム機)、携帯用ゲーム機、遊戯施設等に設置される業務用ゲーム機、携帯電話機(スマートフォンを含む)、携帯情報端末(タブレット型コンピュータを含む)、デスクトップ型コンピュータ、又はラップトップ型コンピュータである。
図1に示すように、ゲーム端末10は制御部11、記憶部12、光ディスクドライブ部13、通信部14、操作部15、表示部16、及び音声出力部17を含む。制御部11は少なくとも一つのマイクロプロセッサ(CPU)を含み、記憶部12に記憶されたオペレーティングシステムやその他のプログラムに従って情報処理を実行する。記憶部12は、主記憶部(例えばRAM)及び補助記憶部(例えば、不揮発性の半導体メモリ、ハードディスクドライブ、又はソリッドステートドライブ)を含む。記憶部12はプログラムやデータを記憶するためのものである。光ディスクドライブ部13は光ディスク(情報記憶媒体)に記憶されたプログラムやデータを読み取る。通信部14は、ネットワークNを介して他の装置とデータ通信するためのものである。
操作部15は、ユーザが各種操作を行うためのものである。操作部15は、例えばボタン(キー)、レバー(スティック)、タッチパネル、又はマウス等を含む。操作部15は、ユーザが音声又はジェスチャによって操作を行うためのものであってもよい。なお、操作部15は、ゲーム端末10に接続された外部装置として設けられてもよいし、ゲーム端末10自体に設けられていてもよい。また、ボタンやレバーは、タッチパネルに表示された仮想的なボタン又はレバーであってもよい。
表示部16は、例えば液晶ディスプレイ又は有機ELディスプレイ等であり、画像を表示する。音声出力部17は、例えばスピーカ又はヘッドホン等であり、音声を出力する。なお、表示部16や音声出力部17は、ゲーム端末10に接続された外部装置として設けられてもよいし、ゲーム端末10自体に設けられていてもよい。
サーバ30は例えばサーバコンピュータである。図1に示すように、サーバ30は制御部31、記憶部32、光ディスクドライブ部33、及び通信部34を含む。制御部31、記憶部32、光ディスクドライブ部33、及び通信部34は、ゲーム端末10の制御部11、記憶部12、光ディスクドライブ部13、及び通信部14と同様である。サーバ30はデータベース35にアクセス可能である。データベース35はサーバ30内に構築されていてもよいし、サーバ30とは別のサーバ内に構築されていてもよい。
プログラムやデータは光ディスクを介してゲーム端末10又はサーバ30に供給される。すなわち、光ディスクに記憶されたプログラムやデータが光ディスクドライブ部13又は33によって読み出されて、記憶部12又は32に記憶される。光ディスク以外の情報記憶媒体(例えばメモリカード)に記憶されたプログラムやデータを読み取るための構成要素(例えばメモリーカードスロット)がゲーム端末10又はサーバ30に備えられてもよい。そして、プログラムやデータが光ディスク以外の情報記憶媒体を介してゲーム端末10又はサーバ30に供給されてもよい。または、プログラムやデータはネットワークNを介して遠隔地からゲーム端末10又はサーバ30に供給されてもよい。
[2.ゲームの概要]ゲームシステム1では、ゲーム端末10でプログラムを実行することによって各種ゲームを実行可能である。例えば、スポーツゲーム(サッカー、野球、テニス、アメリカンフットボール、バスケットボール、バレーボール等を題材としたゲーム)、アクションゲーム、格闘ゲーム、又はロールプレイングゲームのように、ゲーム形式・ジャンルを問わず様々なゲームを実行可能である。これらのゲームは、ゲーム端末10単体(スタンドアロン)で実行されてもよいし、ゲーム端末10がサーバ30又は他のゲーム端末10との間でデータ通信を行うことによって実行されてもよい。なお、ゲーム端末10単体でゲームを実行する場合、サーバ30を設けなくてもよい。
ゲームシステム1では、複数のモーションデータのうちから選択されたモーションデータに基づいてキャラクタに動作を実行させるゲームが実行される。
なお、「キャラクタ」とは、仮想空間内に配置されるオブジェクトであって、仮想空間内で動作を行うオブジェクトである。「仮想空間」とは、表示部16に表示される仮想的な空間である。言い換えれば、「仮想空間」とは、主記憶(又はVRAM)に構築される仮想的な空間である。「仮想空間」は、3次元空間であってもよいし、2次元空間であってもよい。
例えば、「キャラクタ」とは、人を表すオブジェクトである。「人」は実在の人物であってもよいし、架空の人物であってもよい。また例えば、「キャラクタ」とは、人以外の生物を表すオブジェクトであってもよい。「生物」は実在の生物であってもよいし、架空の生物であってもよい。また例えば、「キャラクタ」とは、生物以外を表すオブジェクトであってもよい。例えば、「キャラクタ」とは、ロボットを表すオブジェクトであってもよい。「キャラクタ」は複数の部位を有し、複数の部位にそれぞれ対応する複数の部位オブジェクトを含んで構成される。
「モーションデータ」とは、キャラクタに動作を実行させる場合の各フレームにおけるキャラクタの姿勢を特定するためのデータである。言い換えれば、「モーションデータ」とは、キャラクタに動作を実行させる場合のフレームごとのキャラクタの姿勢の変化を特定するためのデータである。なお、「フレーム」とは、コンピュータにおける処理単位である。例えば、フレームレートが60fpsであれば、1フレームの長さは1/60秒となる。
例えば、「モーションデータ」とは、キャラクタに動作を実行させる場合の全フレームのうちの複数の特定フレーム(キーフレーム)におけるキャラクタの姿勢を定めたデータである。この場合、特定フレームと他の特定フレームとの間のフレームにおけるキャラクタの姿勢は、それら特定フレームにおけるキャラクタの姿勢に基づいて補間を行うことによって特定される。また例えば、「モーションデータ」とは、キャラクタに動作を実行させる場合の全フレームにおけるキャラクタの姿勢を定めたデータであってもよい。「キャラクタの姿勢を定めたデータ」とは、例えば、キャラクタ内に設定されたボーンの位置及び回転角度を定めたデータである。
「モーションデータに基づいて、キャラクタに動作を実行させる」とは、キャラクタを対象としてモーションデータを再生することによって、キャラクタに動作を実行させることである。「モーションデータを再生する」とは、モーションデータに従ってキャラクタの姿勢を変化させることである。すなわち、「モーションデータを再生する」とは、フレームごとに、当該フレームにおける姿勢をモーションデータに基づいて特定し、キャラクタの姿勢を当該特定した姿勢に設定することである。
なお、「モーションデータ(第2モーションデータ)に基づいて、キャラクタに動作を実行させる」には、キャラクタの動作を、他のモーションデータ(第1モーションデータ)に基づく動作(第1動作)から、モーションデータ(第2モーションデータ)に基づく動作(第2動作)に切り替える場合に、所定数フレームの期間において、キャラクタの動作を、第1動作と第2動作とをブレンドしてなる動作とし、第1動作のブレンド比率を徐々に下げ、第2動作のブレンド比率を徐々に上げることによって、キャラクタの動作を第1動作から第2動作へと徐々に切り替えることも含まれる。言い換えれば、「モーションデータ(第2モーションデータ)に基づいて、キャラクタに動作を実行させる」には、キャラクタの動作を、他のモーションデータ(第1モーションデータ)に基づく動作から、モーションデータ(第2モーションデータ)に基づく動作に切り替える場合に、所定数フレームの期間において、キャラクタの姿勢を、第1モーションデータの示す姿勢と第2モーションデータの示す姿勢とをブレンドしてなる姿勢とし、第1モーションデータの示す姿勢のブレンド比率を徐々に下げ、第2モーションデータの示す姿勢のブレンド比率を徐々に上げることによって、キャラクタの姿勢を、第1モーションデータの示す姿勢から、第2モーションデータの示す姿勢へと徐々に切り替えることも含まれる。
以下では、複数のモーションデータのうちから選択されたモーションデータに基づいてキャラクタに動作を実行させるゲームの一例として、サッカーゲームについて主に説明する。例えば、サッカーゲームでは、ユーザのサッカーチーム(第1チーム)と、対戦相手のサッカーチーム(第2チーム)との間のサッカーの試合が行われる。なお、対戦相手はコンピュータであってもよいし、他のユーザであってもよいが、以下では、説明の簡便のため、対戦相手がコンピュータである場合を想定する。
[2−1]図2は、サッカーゲームを実行する際に設定される仮想空間(ゲーム空間)の一例を示す。図2に示す仮想空間50は、互いに直交する三つの座標軸であるXw軸、Yw軸、及びZw軸が設定された仮想的な3次元空間である。下記に説明するように、仮想空間50にはオブジェクトが配置される。各オブジェクトの位置はXwYwZw座標系(ワールド座標系)の3次元座標で特定される。
図2に示すように、仮想空間50には、サッカーフィールドを表すオブジェクトであるフィールド51が配置される。例えばフィールド51は、Yw軸座標値が0であるような平面に相当するオブジェクトである。フィールド51上には、2本のタッチライン52、2本のゴールライン53、及び1本のセンターライン54が表される。サッカーの試合は、タッチライン52及びゴールライン53によって囲まれたピッチ55内で行われる。
また、フィールド51上には、サッカーのゴールを表すオブジェクトであるゴール56が配置される。さらに、フィールド51上には、サッカーボールを表すオブジェクトであるボール57と、サッカー選手を表すオブジェクトである選手キャラクタ60とが配置される。選手キャラクタ60は、歩行動作、走行動作、ステップ動作、パス動作、シュート動作、プレス動作、タックル動作等の各種動作を行う。試合中においては、所定条件の下、選手キャラクタ60とボール57とが関連付けられる。この場合、選手キャラクタ60の歩行動作や走行動作はドリブル動作となる。
図2では省略しているが、第1チーム(ユーザのサッカーチーム)と第2チーム(対戦相手であるコンピュータのサッカーチーム)とのサッカーの試合が行われる場合には、第1チームに所属する11体の選手キャラクタ60と、第2チームに所属する11体の選手キャラクタ60とがフィールド51上に配置される。
例えば、試合においては、第1チームに所属する複数の選手キャラクタ60のうちのいずれか1名の選手キャラクタ60がユーザの操作対象として設定される。ユーザの操作対象になっている選手キャラクタ60は、ユーザによって行われた動作指示操作に基づいて各種動作を行う。一方、第1チームに所属する複数の選手キャラクタ60のうちの、ユーザの操作対象になっていない選手キャラクタ60や、第2チームに所属する複数の選手キャラクタ60は、コンピュータの動作指示に基づいて各種動作を行う。なお、ユーザの操作対象は、第1チームに所属する複数の選手キャラクタ60のうちで、試合状況(例えばボール57の位置)又はユーザの切替指示操作に基づいて、試合中に切り替わるようにしてもよいし、第1チームに所属する複数の選手キャラクタ60のうちから予め設定された特定の1名の選手キャラクタ60に固定されていてもよい。
また、仮想空間50には、仮想的な視点58が設定される。視点58から視線方向Vを見た場合の仮想空間50を表すゲーム画像が表示部16に表示される。例えば、ユーザの操作対象になっている選手キャラクタ60又はボール57がゲーム画像に含まれるように、視点58の位置や視線方向Vは、ユーザの操作対象になっている選手キャラクタ60又はボール57の位置に基づいて設定される。
[2−2]ここで、選手キャラクタ60について詳しく説明する。図3は選手キャラクタ60の一例を示す。図3に示すように、選手キャラクタ60は、複数の部位の各々を示す複数の部位オブジェクトを含む。例えば、選手キャラクタ60は、複数の部位オブジェクトとして、頭601、首602、胸603、腰604、左上腕605L、右上腕605R、左前腕606L、右前腕606R、左手607L、右手607R、左腿608L、右腿608R、左脛609L、右脛609R、左足610L、及び右足610Rを含む。
また、左足610Lはヌルオブジェクト611Lを含み、右足610Rはヌルオブジェクト611Rを含む。例えば、ヌルオブジェクト611L,611Rは不可視のオブジェクトであり、点に相当するオブジェクトである。また、ヌルオブジェクト611L,611Rは、通常のオブジェクトと同様にジオメトリ演算等の対象になるが、通常のオブジェクトとは異なり、描画処理の対象にはならないオブジェクトである。ヌルオブジェクト611L,611Rは、左足610L及び右足610Rの足裏に相当する位置に配置される。ヌルオブジェクト611L,611Rを設定する意義については後述する。
選手キャラクタ60は複数のポリゴンによって構成される。「ポリゴン」とは、3以上の頂点によって構成される平面である。複数のポリゴンによって立体を構成することによって、選手キャラクタ60の各部位オブジェクトが構成される。
また、選手キャラクタ60の内部にはボーンが設定される。「ボーン」とは、選手キャラクタ60の骨格に相当するものである。選手キャラクタ60の内部には複数のボーンが設定されており、これら複数のボーンは、特定のボーン(例えば腰骨に対応するボーン)をルートとする階層構造で管理される。あるボーンの位置又は回転角度が変化した場合、当該ボーンの下の階層のボーンも連動するようになっており、ボーンの位置は、当該ボーンよりも上の階層のボーンの位置及び回転角度によって特定される。
選手キャラクタ60を構成する複数のポリゴンの各頂点には、少なくとも1つのボーンが関連付けられている。頂点の位置は当該ボーンの状態(位置又は回転角度)の変化に基づいて変化する。すなわち、ボーンの状態が変化すると、頂点が従動し、その結果、選手キャラクタ60の姿勢が変化する。このように、各ボーンの状態を制御することによって、選手キャラクタ60の姿勢を制御できる。
サッカーゲームでは、選手キャラクタ60を対象としてモーションデータを再生することによって、モーションデータに基づく動作を選手キャラクタ60に実行させる。すなわち、モーションデータに従ってフレームごとに選手キャラクタ60の姿勢を変化させることによって、当該モーションデータに基づく動作を選手キャラクタ60に実行させる。
選手キャラクタ60は複数種類の動作を実行し得るため、それら複数種類の動作にそれぞれ対応する複数種類のモーションデータが用意される。例えば、選手キャラクタ60に歩行動作を実行させる場合には、それら複数種類のモーションデータのうちから、歩行動作に対応するモーションデータを選択し、当該モーションデータを再生することによって、選手キャラクタ60に歩行動作を実行させることになる。
[2−3]図4Aは、選手キャラクタ60の歩行動作の一例を示す。すなわち、図4Aは、歩行動作を実行する際の選手キャラクタ60の姿勢の変化の一例を示す。歩行動作は複数のフレームにわたって行われるところ、図4Aは、それら複数のフレームのうちのいくつかのフレームにおける選手キャラクタ60の姿勢の一例を示している。
図4Aに示す歩行動作は、歩行動作に対応するモーションデータに基づいて実行される。以下では、歩行動作に対応するモーションデータを「歩行モーションデータ」と記載する。歩行動作を実行する際の各フレームにおける選手キャラクタ60の姿勢は歩行モーションデータに基づいて特定される。
図4Aに示す例では、第1フレーム(先頭フレーム)における選手キャラクタ60の姿勢が、右足610R及び左足610Lがフィールド51に接触し、右足610Rが左足610Lの前方に位置するような姿勢になっている(A1)。また、第48フレームにおける選手キャラクタ60の姿勢が、右足610Rの踵部分がフィールド51から離れた状態で右足610Rが左足610Lの後方に位置するような姿勢になっている(A2)。さらに、第96フレームにおける選手キャラクタ60の姿勢が、右足610Rの踵部分がフィールド51に接触し、左足610Lが右足610Rの前方に位置するような姿勢になっている(A3)。また、第144フレームにおける選手キャラクタ60の姿勢が、左足610Lが第96フレームにおける位置よりもさらに前方に位置するような姿勢になっている(A4)。図4Aに示すように、歩行動作では、選手キャラクタ60の左足610L及び右足610Rがフィールド51と接触したり離れたりするようになっている。なお、歩行動作が継続される場合、歩行モーションデータが最終フレームまで再生されると、再度、歩行モーションデータが先頭フレームから再生される。
図4Bは、選手キャラクタ60のステップ動作の一例を示す。すなわち、図4Bは、ステップ動作を実行する際の選手キャラクタ60の姿勢の変化の一例を示す。ステップ動作は複数のフレームにわたって行われるところ、図4Bは、それら複数のフレームのうちのいくつかのフレームにおける選手キャラクタ60の姿勢の一例を示す。
図4Bに示すステップ動作は、ステップ動作に対応するモーションデータに基づいて実行される。以下では、ステップ動作に対応するモーションデータを「ステップモーションデータ」と記載する。ステップ動作を実行する際の各フレームにおける選手キャラクタ60の姿勢はステップモーションデータに基づいて特定される。
図4Bに示す例では、第1フレーム(先頭フレーム)における選手キャラクタ60の姿勢が、右足610R及び左足610Lがフィールド51に接触し、右足610Rが左足610Lの前方に位置するような姿勢になっている(B1)。また、第48フレームにおける選手キャラクタ60の姿勢が、両膝が屈折し右足610Rが左足610Lの付近に位置するような姿勢になっている(B2)。さらに、第96フレームにおける選手キャラクタ60の姿勢が、両膝が伸びて右足610R及び左足610Lがフィールド51から離れているような姿勢になっている(B3)。また、第144フレームにおける選手キャラクタ60の姿勢が、右足610R及び左足610Lがフィールド51に再度接触するような姿勢になっている(B4)。図4Bに示すように、ステップ動作では、選手キャラクタ60の左足610L及び右足610Rがフィールド51と接触したり離れたりするようになっている。
[2−4]サッカーゲームでは、第1モーションデータに基づく第1動作を実行中の選手キャラクタ60の動作を第2モーションデータに基づく第2動作に切り替える場合がある。例えば、ユーザの操作対象になっている選手キャラクタ60が歩行動作を実行している状態で、ステップ動作の実行指示操作がユーザによって行われた場合には、歩行動作を実行中の選手キャラクタ60の動作がステップ動作に切り替えられる。なお、ユーザの操作対象になっていない選手キャラクタ60(すなわち、コンピュータによる動作指示に基づいて動作する選手キャラクタ60)に関しても、このような動作切替が実行される場合がある。
第1動作を実行中の選手キャラクタ60の動作を第2動作に切り替える場合、下記に説明するような「足滑り」の発生を抑制する必要がある。図5は、動作切替時の「足滑り」の一例について説明するための図である。なお図5では、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合を想定している。また図5では、選手キャラクタ60の姿勢が歩行モーションデータの第96フレームにおける姿勢(A3)である時点で、選手キャラクタ60の動作を歩行動作からステップ動作へと切り替える場合を想定している。
図5に示す例において、単にステップモーションデータの再生を先頭フレームから開始させた場合、選手キャラクタ60の姿勢は、歩行モーションデータの第96フレームにおける姿勢(A3)から、ステップモーションデータの先頭フレームにおける姿勢(B1)へと変化することになる。
これらの姿勢(A3,B1)の間では、フィールド51に接触している右足610Rの位置がずれている。具体的には、動作切替後の姿勢(B1)における右足610Rの位置は、動作切替前の姿勢(A3)における右足610Rの位置よりもXw軸正方向にずれている。その結果、動作切替時に、右足610Rがフィールド51上でXw軸正方向に移動することによって、選手キャラクタ60の右足610Rがフィールド51上で滑っているかのようにユーザに見えてしまい、ユーザに違和感を与えてしまう可能性がある。
なお、図5に示す例では、動作切替前後の姿勢(A3,B1)において、左足610Lの位置もずれている。しかしながら、動作切替前の姿勢(A3)では左足610Lがフィールド51に接触していないため、動作切替前後の姿勢(A3,B1)において、左足610Lの位置がずれていたとしても、動作切替時に、選手キャラクタ60の左足610Lがフィールド51上で滑っているかのようにユーザに見えないため、ユーザに違和感を与えてしまう可能性は低い。
[2−5]以下、「足滑り」の発生を抑制しつつ、第1動作を実行中の選手キャラクタ60の動作を第2動作に切り替えるための手法について説明する。図6は、当該手法の概要について説明するための図である。なお図6では、図5と同様、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合を想定している。また図6でも、選手キャラクタ60の姿勢が歩行モーションデータの第96フレームにおける姿勢(A3)である時点で、選手キャラクタ60の動作を歩行動作からステップ動作へと切り替える場合を想定している。
この場合、まず、動作切替時点における姿勢(A3)において、選手キャラクタ60の左足610L及び右足610Rのうちで、どちらがフィールド51に近いかを判定する。例えば、図2に示す仮想空間50では、フィールド51が、Yw軸座標値が0であるような平面に相当しているため、左足610Lのヌルオブジェクト611Lと右足610Rのヌルオブジェクト611RとのYw軸座標値を比較する。すなわち、ヌルオブジェクト611LのYw軸座標値がヌルオブジェクト611RのYw軸座標値よりも小さい場合には、左足610Lの方がフィールド51に近いと判定する。一方、ヌルオブジェクト611RのYw軸座標値がヌルオブジェクト611LのYw軸座標値よりも小さい場合には、右足610Rの方がフィールド51に近いと判定する。動作切替時点における姿勢(A3)の場合、ヌルオブジェクト611RのYw軸座標値がヌルオブジェクト611LのYw軸座標値よりも小さいため、右足610Rの方がフィールド51に近いと判定する。
次に、ステップモーションデータの複数のフレームのうちから設定された複数の候補フレームCF[1],CF[2],CF[3],・・・・,CF[N]の各々について、当該候補フレームにおける右足610Rの位置と、動作切替時点における姿勢(A3)の右足610Rの位置とを比較する。具体的には、複数の候補フレームCF[1]〜CF[N]の各々について、当該候補フレームにおける右足610Rのヌルオブジェクト611Rの位置と、動作切替時点における姿勢(A3)の右足610Rのヌルオブジェクト611Rの位置との間の距離を算出する。そして、複数の候補フレームCF[1]〜CF[N]のうちから、上記距離が最も小さい候補フレームを選択する。
ここで、複数の候補フレームCF[1]〜CF[N]とは、選手キャラクタ60の動作をステップ動作に切り替える場合に、ステップモーションデータの再生開始フレームとして選択され得る候補のフレームである。例えば、ステップモーションデータのキーフレームが複数の候補フレームCF[1]〜CF[N]として設定される。なお、複数の候補フレームCF[1]〜CF[N]には、ステップモーションデータのキーフレーム以外のフレームが含まれていてもよい。図6に示す例では、候補フレームCF[1]は図4Bに示した第1フレームに相当し、候補フレームCF[3]は図4Bに示した第48フレームに相当している。
複数の候補フレームCF[1]〜CF[N]のうちからいずれかを選択した後、当該選択された候補フレームから、ステップモーションデータに基づいて、ステップ動作を選手キャラクタ60に実行させる。例えば、候補フレームCF[3](第48フレーム)が選択された場合には、当該フレームから、ステップモーションデータに基づいて、ステップ動作を選手キャラクタ60に実行させる。
この場合、選手キャラクタ60の姿勢は、歩行モーションデータの第96フレームにおける姿勢(A3)から、ステップモーションデータの第48フレームにおける姿勢(B2)へと変化することになる。これらの姿勢(A3,B2)の間では、フィールド51に接触している右足610Rの位置のずれが小さいため、動作切替時に、選手キャラクタ60の右足610Rがフィールド51上で滑っているかのようにユーザに見えないように図ることができる。すなわち、「足滑り」の発生を抑制できる。
なお、選手キャラクタ60の姿勢を、歩行モーションデータの示す姿勢から、ステップモーションデータの示す姿勢へと切り替える場合、一つのフレームにおいて瞬時に切り替えるのではなく、所定数フレームの期間において、選手キャラクタ60の姿勢を、歩行モーションデータの示す姿勢とステップモーションデータの示す姿勢とをブレンドしてなる姿勢とし、歩行モーションデータの示す姿勢のブレンド比率を徐々に下げ、ステップモーションデータの示す姿勢のブレンド比率を徐々に上げることによって、選手キャラクタ60の姿勢を、歩行モーションデータの示す姿勢から、ステップモーションデータの示す姿勢へと徐々に切り替えるようにしてもよい。
また、複数の候補フレームCF[1]〜CF[N]は、先頭フレームから特定の範囲内にあるフレームのうちで設定するのが好ましい場合がある。例えば、ステップモーションデータのうちの先頭フレームから大きく離れたフレームが候補フレームとして設定されており、かつ、当該候補フレームが選択された場合には、選手キャラクタ60のステップ動作が途中から実行されることによって、選手キャラクタ60の動作が不自然であるとユーザが感じてしまう場合がある。この点、先頭フレームから特定の範囲内にあるフレームのうちで候補フレームを設定しておくことによって、このような不都合の発生を抑制できるようになる。
[2−6]以上に説明した手法によれば、歩行モーションデータに基づく歩行動作を実行中の選手キャラクタ60の動作をステップモーションデータに基づくステップ動作に切り替える場合に、フィールド51に接触している足の位置ずれを軽減でき、「足滑り」の発生を抑制できる。
また、以上に説明した手法によれば、ユーザによるステップ動作の実行指示操作に応じて、直ちに、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替えることができる。例えば、「足滑り」の発生を抑制する他の手法としては、歩行モーションデータのフレームのうちで、「足滑り」が発生しないようなフレーム(すなわち、選手キャラクタ60の足の位置が、ステップモーションデータの先頭フレームにおける選手キャラクタ60の足の位置に近いフレーム)を基準フレームとして予め設定しておき、歩行動作を実行中のキャラクタの動作をステップ動作に切り替える際には、基準フレームになるまで歩行動作を選手キャラクタ60に継続させ、基準フレームになったら、先頭フレームからステップモーションデータに基づいて選手キャラクタ60にステップ動作を実行させるような手法も考えられる。しかしながら、この手法では、実行指示操作に応じて直ちに選手キャラクタ60の動作をステップ動作に切り替えるのではなく、基準フレームになるのを待ち、基準フレームになってから選手キャラクタ60の動作をステップ動作に切り替えるため、選手キャラクタ60の動作切替が遅れる(すなわち、選手キャラクタ60の反応が遅い)との不満をユーザに感じさせてしまう可能性がある。これに対し、本実施形態に係る手法によれば、ステップ動作の実行指示操作に応じて、直ちに、選手キャラクタ60の動作を歩行動作からステップ動作に切り替えることができるため、選手キャラクタ60の動作切替が遅れる(すなわち、選手キャラクタ60の反応が遅い)との不満をユーザに感じさせないように図ることができる。
また、本実施形態に係る手法では、選手キャラクタ60の左足610L及び右足610Rのうちで、フィールド51に近い方の足を判定し、フィールド51に近い方の足の位置に基づいて、ステップモーションデータの複数の候補フレームCF[1]〜CF[N]のうちからいずれかを選択するようになっている。このようにすることによって、選手キャラクタ60の左足610L及び右足610Rのうちで、「足滑り」が発生させてしまう可能性が高い方の足に関して、動作切替時の位置ずれを軽減できるようになる。
また、本実施形態に係る手法では、選手キャラクタ60の左足610L及び右足610Rにヌルオブジェクト611L,611Rをそれぞれ設定し、選手キャラクタ60の左足610L及び右足610Rの位置としてヌルオブジェクト611L,611Rの位置を用いるようにしている。このようにすることによって、ヌルオブジェクト611L,611Rの位置のみについて着目すればよくなるため、処理を簡略化できる。また、ヌルオブジェクト611L,611Rは非表示のオブジェクトであるため、余計なオブジェクトが表示部16に表示されるという不都合も発生しない。
なお、以上では、「足滑り」の発生を抑制する場合について主に説明したが、本実施形態に係る手法は、「手滑り」の発生を抑制するために用いることもできる。例えば、キャラクタが逆立ちをした状態が各種動作を行うようなゲーム等、キャラクタが他のオブジェクト(例えば、フィールド、壁、又はテーブル等)に手を付いた状態で各種動作を行うようなゲームの場合、「手滑り」が発生する場合がある。すなわち、動作切替前後で他のオブジェクトに接触しているキャラクタの左手又は右手の位置ずれが発生することによって、動作切替時にキャラクタの左手又は右手が他のオブジェクト上で移動し、キャラクタの左手又は右手が他のオブジェクト上で滑っているかのようにユーザに見えてしまい、ユーザに違和感を与えてしまう可能性がある。この点、本実施形態に係る手法をキャラクタの左手又は右手を対象として実行することによって、「手滑り」の発生を抑制しつつ、キャラクタの動作を切り替えることもできる。なお、この場合、キャラクタの左手や右手にヌルオブジェクトを設定するようにすればよい。
[3.機能ブロック]次に、以上に説明した機能を実現するための構成について説明する。図7は、ゲームシステム1で実現される機能ブロックの一例を示す機能ブロック図である。図7に示すように、ゲームシステム1は、データ記憶部100と、第1モーションデータ取得部110と、第2モーションデータ取得部120と、第1動作実行部130と、特定部位選択部140と、第1特定部150と、第2特定部160と、第2動作実行部170とを含む。このうち、データ記憶部100は記憶部12、記憶部32、及びデータベース35のうちの少なくとも一つによって実現される。また、データ記憶部100以外の機能ブロックは、制御部11及び制御部31の少なくとも一つによって実現される。すなわち、データ記憶部100以外の機能ブロックのすべてを制御部11によって実現してもよいし、これらのすべてを制御部31によって実現してもよいし、これらの一部を制御部11によって実現し、残りを制御部31によって実現してもよい。
[3−1]データ記憶部100は、ゲームを実行するために必要なデータを記憶する。ここでは、データ記憶部100に記憶されるデータの一例として、先述のサッカーゲームを実行するために必要なデータについて説明する。図7に示すように、先述のサッカーゲームを実行するために必要なデータとして、例えば、モデルデータD101と、モーションデータD102と、候補フレームデータD103と、キャラクタ状態データD104とがデータ記憶部100に記憶される。
[3−1−1]モデルデータD101は、選手キャラクタ60の形状を示すデータである。モデルデータD101は、選手キャラクタ60の姿勢が基準姿勢である場合の選手キャラクタ60の各頂点(すなわち、選手キャラクタ60を構成する各ポリゴンの各頂点)の位置を示す頂点データを含む。頂点データは、ヌルオブジェクト611L,611Rの頂点の位置を示すデータも含む。例えば、各頂点の位置はローカル座標系で示される。「ローカル座標系」とは、例えば、選手キャラクタ60の基準点(例えば腰に相当する点等)を原点とし、上下方向に対応する軸であって、上方向を正方向とする第1軸と、左右方向に対応する軸であって、左方向を正方向とする第2軸と、前後方向に対応する軸であって、正面方向を正方向とする第3軸とを有する座標系である。なお、「基準姿勢」とは、ボーンが適用されていない姿勢(すなわち、ボーンの位置や回転角度が設定(変更)される前における基本の姿勢)である。また、頂点データは、頂点とボーンとの関連付けを示すデータも含む。
また、モデルデータD101は、選手キャラクタ60内に設定される各ボーンに関するボーンデータも含む。例えば、ボーンデータは、ボーンの階層構造に関するデータや、選手キャラクタ60の姿勢が基準姿勢である場合の各ボーンの位置及び回転角度を示すデータを含む。なお、ボーンの階層構造を示すデータ自体を記憶するのではなく、プログラムが扱うメモリ上で階層構造を展開するようにしてもよい。または、シェーダプログラムにおいてルールを定めて処理するようにし、ルールの異なるボーンを扱う場合にはシェーダプログラムを切り替えるという手法を採用してもよい。
[3−1−2]モーションデータD102は、選手キャラクタ60に動作を実行させる場合の各フレームにおける選手キャラクタ60の姿勢を制御するためのデータである。データ記憶部100は、選手キャラクタ60が実行可能な複数種類の動作にそれぞれ対応する複数種類のモーションデータD102を記憶する。
図8はモーションデータD102の一例を示す。モーションデータD102はモーションIDに関連付けて記憶される。モーションIDは、モーションデータ(又は動作)を一意に識別するための識別情報である。
モーションデータD102は、複数のキーフレームの各々ごとに、選手キャラクタ60に設定された各ボーンのボーン行列が定められたデータである。ボーン行列はボーンの位置及び回転角度を示す行列である。図8に示すように、モーションデータD102は「キーフレーム」及び「ボーン」フィールドを含む。「キーフレーム」フィールドは、モーションデータにおけるキーフレームのフレーム番号を示す。図8に示す例では、モーションIDが「M1」であるモーションデータD102に関して、第1フレーム、第48フレーム、第96フレーム、第144フレーム等がキーフレームになっている。「ボーン」フィールドには、選手キャラクタ60に設定されたすべてのボーンB1,B2,B3,B4,・・・の各々に関連付けて、当該ボーンの位置及び回転角度を示すボーン行列が登録される。
図8に示す例では、モーションIDが「M1」であるモーションデータD102において、第1フレームにおけるボーンB1,B2,B3,B4,・・・のボーン行列としてそれぞれBM11,BM21,BM31,BM41,・・・が設定されている。また、第48フレームにおけるボーンB1,B2,B3,B4,・・・のボーン行列としてそれぞれBM148,BM248,BM348,BM448,・・・が設定されている。
このため、モーションIDが「M1」であるモーションデータD102を再生する場合には、第1フレームにおいて、選手キャラクタ60のボーンB1,B2,B3,B4,・・・の位置及び回転角度がそれぞれボーン行列BM11,BM21,BM31,BM41,・・・に基づいて設定されることによって、選手キャラクタ60の姿勢が設定される。また、第48フレームにおいて、選手キャラクタ60のボーンB1,B2,B3,B4,・・・の位置及び回転角度がそれぞれボーン行列BM148,BM248,BM348,BM448,・・・に基づいて設定されることによって、選手キャラクタ60の姿勢が設定される。
[3−1−3]候補フレームデータD103は候補フレームを示すデータである。図9は候補フレームデータD103の一例を示す。候補フレームデータD103はモーションIDに関連付けて(モーションデータD102ごとに)記憶される。なお、図7では、モーションデータD102と候補フレームデータD103とを別個のデータとして示しているが、モーションデータD102と候補フレームデータD103とを一つのデータにまとめてもよい。
図9に示すように、候補フレームデータD103は「候補フレーム」フィールドを含む。「候補フレーム」フィールドは、モーションデータD102の複数のフレーム(選手キャラクタ60がモーションデータD102に基づく動作を実行する場合の複数のフレーム)のうちから設定された複数の候補フレームを示す。例えば、候補フレームとして設定されたフレームのフレーム番号のリストが「候補フレーム」フィールドに登録される。図9に示す例では、モーションIDが「M1」であるモーションデータD102に関しては、第1フレーム、第24フレーム、第48フレーム等が候補フレームとして設定されている。なお、図9では、候補フレームのフレーム番号を「候補フレーム」フィールドに登録しているが、先頭フレームから特定の範囲にあるフレームが候補フレームとして設定される場合には、当該特定範囲を示す情報を「候補フレーム」フィールドに登録してもよい。
[3−1−4]キャラクタ状態データD104は、仮想空間50に配置される各選手キャラクタ60の現在の状態を示すデータである。図10はキャラクタ状態データD104の一例を示す。図10に示すように、キャラクタ状態データD104は、「キャラクタID」、「位置」、「向き」、「再生モーション」、及び「再生フレーム」フィールド等を含む。
「キャラクタID」フィールドは、選手キャラクタ60を一意に識別するための識別情報を示す。「位置」フィールドは、仮想空間50における選手キャラクタ60の現在位置を示す。例えば、選手キャラクタ60の基準点(例えばローカル座標系における原点)の現在位置を示すワールド座標系(XwYwZw座標系)における座標値が「位置」フィールドに登録される。「向き」フィールドは、選手キャラクタ60が現在向いている方向を示す。
「再生モーション」フィールドは、選手キャラクタ60に関して現在再生されているモーションデータD102を示す。すなわち、「再生モーション」フィールドは、選手キャラクタ60が現在実行している動作の種類を示す。例えば、選手キャラクタ60に関して現在再生されているモーションデータD102のモーションIDが「再生モーション」フィールドに登録される。「再生フレーム」フィールドは、モーションデータD102の現在再生位置を示す。例えば、モーションデータD102の何フレーム目を現在再生中であるのかが「再生フレーム」に登録される。
図10に示す例では、キャラクタIDが「C101」である選手キャラクタ60の「再生モーション」フィールドに「M1」が登録され、「再生フレーム」フィールドに「40」が登録されている。これは、キャラクタIDが「C101」である選手キャラクタ60に関して、現在、モーションIDが「M1」であるモーションデータD102が再生されており、現在再生中のフレームが「第40フレーム」であることを示す。すなわち、これは、キャラクタIDが「C101」である選手キャラクタ60の現在の姿勢が、モーションIDが「M1」であるモーションデータD102の第40フレームの姿勢であることを示す。
なお、キャラクタ状態データD104は、以上に説明したフィールドの他に、例えば、選手キャラクタ60の移動速度を示すフィールド、選手キャラクタ60がボール57を保有しているか否かを示すフィールドや、選手キャラクタ60がユーザの操作対象になっているか否かを示すフィールド等を含む。
[3−1−5]先述のサッカーゲームを実行するために必要なデータは、以上に説明したデータに限られず、他のデータもデータ記憶部100に記憶される。例えば、ボール57の現在の状態(例えば位置、移動方向、及び移動速度等)を示すボール状態データ、視点58の現在の状態(例えば位置、視線方向、及び画角等)を示す視点状態データや、試合の戦況(例えば、両チームの得点や経過時間等)を示す戦況データ等もデータ記憶部100に記憶される。
[3−2]第1モーションデータ取得部110は、キャラクタに第1動作を実行させるための第1モーションデータを取得する。第1動作実行部130は、第1モーションデータに基づいて、キャラクタに第1動作を実行させる。
「第1動作」とは、キャラクタによって実行される動作の一つである。例えば、「第1動作」は、キャラクタを操作するユーザ(又はコンピュータ)によって指示された動作である。
例えば、「第1動作」では、キャラクタの特定部位が他のオブジェクトと接触する。すなわち、「第1動作」では、キャラクタの特定部位が他のオブジェクトと接触したり、他のオブジェクトから離れたりする。または、「第1動作」が開始されてから終了するまで、キャラクタの特定部位が他のオブジェクトに接触し続けてもよい。
「第1モーションデータ」とは、第1動作に対応するモーションデータである。「第1モーションデータ」とは、キャラクタに第1動作を実行させるためのモーションデータである。すなわち、「第1モーションデータ」とは、キャラクタに第1動作を実行させる場合の各フレームにおけるキャラクタの姿勢を特定するためのモーションデータである。
「モーションデータを取得する」とは、例えば、補助記憶部に記憶されたモーションデータを読み出すことである。または、「モーションデータを取得する」とは、例えば、他の装置から通信ネットワークを介してモーションデータを受信することであってもよい。
先述のサッカーゲームの場合、例えば、歩行動作が「第1動作」の一例に相当し、歩行モーションデータが「第1モーションデータ」の一例に相当する。また、選手キャラクタ60が「キャラクタ」の一例に相当し、選手キャラクタ60の左足610L又は右足610Rが上述の「特定部位」の一例に相当し、フィールド51が上述の「他のオブジェクト」の一例に相当する。
先述のサッカーゲームの場合、第1モーションデータ取得部110は、歩行モーションデータをデータ記憶部100から取得する。また、第1動作実行部130は、歩行モーションデータを再生することによって、歩行モーションデータに基づく歩行動作を選手キャラクタ60に実行させる。
[3−3]第2モーションデータ取得部120は、キャラクタに第2動作を実行させるための第2モーションデータを取得する。
「第2動作」とは、キャラクタによって実行される動作の一つであって、第1動作とは異なる動作である。例えば、「第2動作」は、キャラクタを操作するユーザ(又はコンピュータ)によって指示された動作である。
例えば、「第2動作」では、キャラクタの特定部位が他のオブジェクトと接触する。すなわち、「第2動作」では、キャラクタの特定部位が他のオブジェクトと接触したり、他のオブジェクトから離れたりする。または、「第2動作」が開始されてから終了するまで、キャラクタの特定部位が他のオブジェクトに接触し続けてもよい。
「第2モーションデータ」とは、第2動作に対応するモーションデータである。「第2モーションデータ」とは、キャラクタに第2動作を実行させるためのモーションデータである。すなわち、「第2モーションデータ」とは、キャラクタに第2動作を実行させる場合の各フレームにおけるキャラクタの姿勢を特定するためのモーションデータである。
先述のサッカーゲームの場合、例えば、ステップ動作が「第2動作」の一例に相当し、ステップモーションデータが「第2モーションデータ」の一例に相当する。第2モーションデータ取得部120はステップモーションデータをデータ記憶部100から取得する。
[3−4]特定部位選択部140は、キャラクタが有する複数の部位のうちのいずれかを特定部位として選択する。例えば、キャラクタが、第1動作及び第2動作において、他のオブジェクト上に接触したり、他のオブジェクト上から離れたりする複数の部位を有する場合、特定部位選択部140は、当該複数の部位の各々と他のオブジェクトとの間の距離に基づいて、複数の部位のうちのいずれかを特定部位として選択する。
「特定部位」とは、キャラクタの複数の部位のうちの特定の部位である。「特定部位」とは、第1動作及び第2動作において、他のオブジェクトと接触し得る部位である。例えば、左足又は右足が「特定部位」の一例に相当し得る。また例えば、左手又は右手が「特定部位」の一例に相当し得る。「他のオブジェクト」とは、キャラクタの部位によって接触され得るオブジェクトである。
例えば、「他のオブジェクト」とは、キャラクタの左足又は右足によって接触され得るオブジェクトである。すなわち、「他のオブジェクト」とは、例えば、キャラクタの左足又は右足によって接触され得る面を有するオブジェクトである。具体的には、「他のオブジェクト」とは、キャラクタが立つことが可能な面を有するようなオブジェクトである。例えば、フィールド、地面、床等が「他のオブジェクト」の一例に相当する。なお、「面」は、平面であってもよいし、曲面であってもよいし、凹凸のある面であってもよい。
また例えば、「他のオブジェクト」とは、キャラクタの左手又は右手によって接触され得るオブジェクトである。すなわち、「他のオブジェクト」とは、例えば、キャラクタの左手又は右手によって接触され得る面を有するオブジェクトである。具体的には、「他のオブジェクト」とは、例えば、壁、崖、テーブル、フィールド、地面、床等である。なお、「面」は、平面であってもよいし、曲面であってもよいし、凹凸のある面であってもよい。また例えば、キャラクタの左手又は右手によって掴まれるオブジェクトであってもよい。具体的には、例えば、ロープやはしご等であってもよい。
「複数の部位の各々と他のオブジェクトとの間の距離」とは、例えば、複数の部位の各々の基準点から他のオブジェクトの基準点までの距離である。ここで、「他のオブジェクトの基準点」は予め定められた点であってもよいし、複数の部位の各々の基準点から他のオブジェクトへ垂らした垂線の足を「他のオブジェクトの基準点」としてもよい。
例えば、キャラクタが左足と右足とを有している場合、左足と右足とが「複数の部位」の一例に相当し、特定部位選択部140は、キャラクタの左足と右足との各々と他のオブジェクトとの間の距離に基づいて、左足と右足とのうちのいずれかを特定部位として選択する。
また例えば、キャラクタが左手と右手とを有している場合、左手と右手とが「複数の部位」の一例に相当し、特定部位選択部140は、キャラクタの左手と右手との各々と他のオブジェクトとの間の距離に基づいて、左手と右手とのうちのいずれかを特定部位として選択する。
例えば、特定部位選択部140は、複数の部位のうちで、他のオブジェクトとの距離が最も小さい部位を特定部位として選択する。または、特定部位選択部140は、複数の部位のうちで、他のオブジェクトとの距離が閾値以下である部位を特定部位として選択してもよい。すなわち、特定部位選択部140は、複数の部位の各々について順番に、上記距離が閾値以下であるか否かを判定し、上記距離が閾値以下である部位が見つかったら、残りの部位について判定を行うことなく、当該部位を特定部位として選択してもよい。
先述のサッカーゲームの場合、選手キャラクタ60の左足610L及び右足610Rが「複数の部位」の一例に相当し、フィールド51が「他のオブジェクト」の一例に相当する。特定部位選択部140は、選手キャラクタ60の左足610L及び右足610Rの各々とフィールド51との間の距離に基づいて、選手キャラクタ60の左足610L及び右足610Rのうちのいずれかを特定部位として選択する。
具体的には、選手キャラクタ60の左足610Lのヌルオブジェクト611Lとフィールド51との距離(すなわち、ヌルオブジェクト611LのYw軸座標値)が、選手キャラクタ60の右足610Rのヌルオブジェクト611Rとフィールド51との距離(すなわち、ヌルオブジェクト611RのYw軸座標値)よりも小さい場合に、特定部位選択部140は選手キャラクタ60の左足610Lを特定部位として選択する。
一方、選手キャラクタ60の右足610Rのヌルオブジェクト611Rとフィールド51との距離(すなわち、ヌルオブジェクト611RのYw軸座標値)が選手キャラクタ60の左足610Lのヌルオブジェクト611Lとフィールド51との距離(すなわち、ヌルオブジェクト611LのYw軸座標値)よりも小さい場合に、特定部位選択部140は選手キャラクタ60の右足610Rを特定部位として選択する。
[3−5]第1特定部150は、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合に、第1モーションデータの動作切替時フレームにおけるキャラクタの特定部位の位置を特定する。
「第1動作を実行中のキャラクタの動作を第2動作に切り替える」とは、第1動作を実行しているキャラクタに実行させる動作を第1動作から第2動作に切り替えることである。言い換えれば、「第1動作を実行中のキャラクタの動作を第2動作に切り替える」とは、第1動作を実行中のキャラクタに第2動作を開始させることである。すなわち、「第1動作を実行中のキャラクタの動作を第2動作に切り替える」とは、キャラクタによって実行されている第1動作の実行(続行)を中止させ、当該キャラクタに第2動作を開始させることである。
「動作切替時フレーム」とは、第1動作を実行中のキャラクタの動作を第2動作に切り替えるタイミングにおけるフレームである。「動作切替時フレーム」は、予め定められたフレームではなく、例えば、ユーザによる第2動作の実行指示操作に応じて、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合であれば、実行指示操作が行われたと判定されたフレームが「動作切替時フレーム」に相当する。
例えば、キャラクタは、複数の部位オブジェクトを含んで構成され、当該複数の部位オブジェクトのうちの、特定部位に対応する部位オブジェクトは、非表示の基準オブジェクトを含んで構成される。そして、第1特定部150は、動作切替時フレームにおけるキャラクタの基準オブジェクトの位置を特定する。
「複数の部位オブジェクト」とは、キャラクタを構成する複数のオブジェクトである。例えば、個々の部位オブジェクトは複数のポリゴンを含んで構成される。
「非表示のオブジェクト」とは、表示部16に表示されないオブジェクトである。例えば、「非表示のオブジェクト」とは、透明に設定されたオブジェクトである。言い換えれば、「非表示のオブジェクト」とは、表示部16への表示対象(VRAMへの描画対象)から除外されるオブジェクトである。
「基準オブジェクト」とは、第1特定部150や第2特定部160による位置の特定の対象として用いられるオブジェクトであり、それ以外の用途のないオブジェクトである。例えば、ヌルオブジェクトが「基準オブジェクト」として設定される。
先述のサッカーゲームの場合、選手キャラクタ60の左足610L及び右足610Rにそれぞれ設定されたヌルオブジェクト611L及びヌルオブジェクト611Rが「基準オブジェクト」の一例に相当する。
先述のサッカーゲームでは、例えば、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合に、第1特定部150は、動作切替時フレームにおける選手キャラクタ60の左足610L又は右足610Rの位置を特定する。具体的には、特定部位選択部140によって特定部位として選択された部位が左足610Lである場合に、第1特定部150は、動作切替時フレームにおけるヌルオブジェクト611Lの位置を特定する。一方、特定部位選択部140によって特定部位として選択された部位が右足610Rである場合に、第1特定部150は、動作切替時フレームにおけるヌルオブジェクト611Rの位置を特定する。
[3−6]第2特定部160は、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合に、第2モーションデータの各フレームのうちから設定された複数の候補フレームの各々におけるキャラクタの特定部位の位置を特定する。
「複数の候補フレーム」とは、第2動作実行部170(フレーム選択部172)による選択の候補となるフレームである。すなわち、「複数の候補フレーム」とは、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合にどのフレームから第2モーションデータに基づいてキャラクタに動作させるのかを決定するための基準として第2動作実行部170(フレーム選択部172)によって選択され得る候補となるフレームである。
「複数の候補フレーム」とは、第2モーションデータの各フレームのうちから設定された複数のフレームである。言い換えれば、「複数の候補フレーム」とは、キャラクタに第2動作を実行させる場合の各フレームのうちから設定された複数のフレームである。例えば、第2モーションデータの全フレーム(言い換えれば、キャラクタに第2動作を実行させる場合の全フレーム)のうちの複数のフレームが「複数の候補フレーム」として設定される。第2モーションデータの全フレームのうちの一部である複数のフレームが「複数の候補フレーム」として設定されてもよいし、第2モーションデータの全フレームが「複数の候補フレーム」として設定されてもよい。
例えば、「複数の候補フレーム」は、第2モーションデータの各フレームのうちからゲーム開発者によって予め設定された複数のフレームである。なお、「複数の候補フレーム」は、第2モーションデータの各フレームのうちからコンピュータによって予め設定された複数のフレームであってもよい。
例えば、第2モーションデータが、キャラクタに第2動作を実行させる場合の全フレームのうちの複数の特定フレーム(キーフレーム)におけるキャラクタの姿勢を定めたデータである場合、複数の特定フレーム(キーフレーム)の全部又は一部が「複数の候補フレーム」として設定される。なお、第2モーションデータが、キャラクタに第2動作を実行させる場合の全フレームのうちの複数の特定フレーム(キーフレーム)におけるキャラクタの姿勢を定めたデータであっても、特定フレーム以外のフレームが「複数の候補フレーム」に含まれてもよい。
なお、「複数の候補フレーム」は、第2モーションデータの先頭フレームから特定の範囲内にあるフレームのうちで設定される。例えば、第2モーションデータのあるフレーム(ここではフレームXと呼ぶ)から第2モーションデータの再生を開始させたとしても、キャラクタの第2動作が不自然であるとはユーザに感じさせてしまうおそれがないが、フレームXよりも後のフレームから第2モーションデータの再生を開始させると、キャラクタの第2動作が不自然であるとユーザに感じさせてしまうおそれがあるような場合、先頭フレームからフレームXまでが「特定の範囲」に相当する。
「複数の候補フレームの各々におけるキャラクタの特定部位の位置」とは、第2モーションデータに基づいてキャラクタに第2動作を実行させたと仮定した場合の複数の候補フレームの各々におけるキャラクタの特定部位の位置である。
先述したように、例えば、キャラクタは、複数の部位オブジェクトを含んで構成され、当該複数の部位オブジェクトのうちの、特定部位に対応する部位オブジェクトは、非表示の基準オブジェクトを含んで構成される。そして、第2特定部160は、複数の候補フレームの各々におけるキャラクタの基準オブジェクトの位置を特定する。
先述のサッカーゲームでは、例えば、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合に、第2特定部160は、ステップモーションデータの各フレームのうちから設定された複数の候補フレームCF[1]〜CF[N]の各々における選手キャラクタ60の左足610L又は右足610Rの位置を特定する。具体的には、特定部位選択部140によって特定部位として選択された部位が左足610Lである場合に、第2特定部160は、複数の候補フレームCF[1]〜CF[N]の各々におけるヌルオブジェクト611Lの位置を特定する。一方、特定部位選択部140によって特定部位として選択された部位が右足610Rである場合に、第2特定部160は、複数の候補フレームCF[1]〜CF[N]の各々におけるヌルオブジェクト611Rの位置を特定する。
[3−7]第2動作実行部170は、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合に、第1特定部150によって特定された動作切替時フレームにおける特定部位の位置と、第2特定部160によって特定された複数の候補フレームの各々における特定部位の位置とに基づいて、複数の候補フレームのうちのいずれかを選択し、当該選択された候補フレームに基づくフレームから第2モーションデータに基づいてキャラクタに動作を実行させる。
例えば、第2動作実行部170は、第1特定部150によって特定された動作切替時フレームにおける特定部位の位置と、第2特定部160によって特定された複数の候補フレームの各々における特定部位の位置とを比較し、その比較結果に基づいて、複数の候補フレームのうちからいずれかを選択する。
図7に示すように、第2動作実行部170は、距離取得部171とフレーム選択部172とを含む。距離取得部171は、第1特定部150によって特定された動作切替時フレームにおける特定部位の位置と、第2特定部160によって特定された複数の候補フレームの各々における特定部位の位置との間の距離を取得する。フレーム選択部172は、複数の候補フレームのうちから、距離取得部171によって取得された距離が最も小さい候補フレームを選択する。そして、第2動作実行部170は、フレーム選択部172によって選択された候補フレームに基づくフレームから第2モーションデータに基づいてキャラクタに動作を実行させる。
「距離」は、特定部位の位置が座標値(x,y,z)で示される場合であれば、Δx2+Δy2+Δz2の平方根として算出することができ、特定部位の位置が座標値(x,y)で示される場合であれば、Δx2+Δy2の平方根として算出することができる。
「選択された候補フレームに基づくフレーム」とは、例えば、選択された候補フレーム自体である。または、「選択された候補フレームに基づくフレーム」とは、選択された候補フレーム以外のフレームであって、選択された候補フレームに基づいて選択されたフレームであってもよい。例えば、「選択された候補フレームに基づくフレーム」とは、選択された候補フレームの前又は/及び後の所定範囲にあるフレームであってもよい。
「選択された候補フレームに基づくフレームから第2モーションデータに基づいてキャラクタに動作を実行させる」とは、例えば、選択された候補フレームに基づくフレームにおけるキャラクタの姿勢を第2モーションデータに基づいて特定し、キャラクタの姿勢を、上記特定された姿勢から、第2モーションデータに従って変化させることである。
なお、第2動作実行部170は、キャラクタの姿勢を第1モーションデータに基づく姿勢から第2モーションデータに基づく姿勢へと動作切替時フレームにおいて瞬時に切り替えるのではなく、動作切替時フレームから所定数フレームの期間においては、キャラクタの姿勢を、第1モーションデータに基づく姿勢と第2モーションデータに基づく姿勢とをブレンドしてなる姿勢とし、第1モーションデータに基づく姿勢のブレンド比率を徐々に下げ、第2モーションデータに基づく姿勢のブレンド比率を徐々に上げることによって、キャラクタの姿勢を、第1モーションデータに基づく姿勢から第2モーションデータに基づく姿勢へと徐々に切り替えるようにしてもよい。
「第1モーションデータに基づく姿勢と第2モーションデータに基づく姿勢とをブレンドする」とは、第1モーションデータに基づく姿勢におけるキャラクタの頂点座標を(x1,y1,z1)とし、第2モーションデータに基づく姿勢におけるキャラクタの頂点座標(x2,y2,z2)とし、第2モーションデータに基づく姿勢のブレンド比率をα(α:0〜1の数値)とすると、キャラクタの頂点座標を((x1*(1−α))+(x2*α),(y1*(1−α))+(y2*α),(z1*(1−α))+(z2*α))とすることである。
先述したように、例えば、キャラクタは、複数の部位オブジェクトを含んで構成され、当該複数の部位オブジェクトのうちの、特定部位に対応する部位オブジェクトは、非表示の基準オブジェクトを含んで構成される。そして、第2動作実行部170は、第1特定部150によって特定された動作切替時フレームにおける基準オブジェクトの位置と、第2特定部160によって特定された複数の候補フレームの各々における基準オブジェクトの位置とに基づいて、複数の候補フレームのうちのいずれかを選択する。
先述のサッカーゲームでは、例えば、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合に、第2動作実行部170は、歩行モーションデータの動作切替時フレームにおける左足610L又は右足610Rの位置と、ステップモーションデータの複数の候補フレームCF[1]〜CF[N]の各々における左足610L又は右足610Rの位置とに基づいて、複数の候補フレームCF[1]〜CF[N]のうちのいずれかを選択する。
具体的には、特定部位選択部140によって特定部位として選択された部位が左足610Lである場合に、距離取得部171は、歩行モーションデータの動作切替時フレームにおけるヌルオブジェクト611Lの位置と、ステップモーションデータの複数の候補フレームCF[1]〜CF[N]の各々におけるヌルオブジェクト611Lの位置との間の距離を取得する。すなわち、図11に示すように、距離取得部171は、ステップモーションデータの各候補フレームCF[i](i=1,2,・・・,N)について、歩行モーションデータの動作切替時フレームにおけるヌルオブジェクト611Lの位置と、ステップモーションデータの候補フレームCF[i]におけるヌルオブジェクト611Lの位置との間の距離Diを取得する。また、フレーム選択部172は、複数の候補フレームCF[1]〜CF[N]のうちから、距離取得部171によって取得された距離が最も小さい候補フレームを選択する。そして、第2動作実行部170は、フレーム選択部172によって選択された候補フレームからステップモーションデータに基づいて選手キャラクタ60に動作を実行させる。
一方、特定部位選択部140によって特定部位として選択された部位が右足610Rである場合に、距離取得部171は、歩行モーションデータの動作切替時フレームにおけるヌルオブジェクト611Rの位置と、ステップモーションデータの複数の候補フレームCF[1]〜CF[N]の各々におけるヌルオブジェクト611Rの位置との間の距離を取得する。すなわち、図11に示すように、距離取得部171は、ステップモーションデータの各候補フレームCF[i](i=1,2,・・・,N)について、歩行モーションデータの動作切替時フレームにおけるヌルオブジェクト611Rの位置と、ステップモーションデータの候補フレームCF[i]におけるヌルオブジェクト611Rの位置との間の距離Diを取得する。また、フレーム選択部172は、複数の候補フレームCF[1]〜CF[N]のうちから、距離取得部171によって取得された距離が最も小さい候補フレームを選択する。そして、第2動作実行部170は、フレーム選択部172によって選択された候補フレームからステップモーションデータに基づいて選手キャラクタ60に動作を実行させる。
[4.処理]次に、ゲームシステム1(ゲーム端末10)で実行される処理について説明する。
図12は、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合に実行される処理の一例を示す。例えば、ユーザの操作対象になっている選手キャラクタ60が歩行動作を実行している間に、ステップ動作の実行指示操作がユーザによって行われた場合に、図12に示す処理が実行される。また例えば、ユーザの操作対象になっていない選手キャラクタ60が歩行動作を実行している間に、当該選手キャラクタ60に対するステップ動作の実行指示がコンピュータによって行われた場合に、図12に示す処理が実行される。ゲーム端末10の制御部11が図12に示す処理をプログラムに従って実行することによって、制御部11が図7に示す機能ブロック(データ記憶部100を除く)として機能するようになる。
図12に示すように、まず、制御部11は、歩行モーションデータの動作切替時フレーム(歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替えるタイミングのフレーム)における選手キャラクタ60の左足610Lのヌルオブジェクト611Lの位置を取得する(S100)。
例えば、制御部11は、キャラクタ状態データD104(再生フレームフィールド)に基づいて、現在再生中のフレームのフレーム番号を特定する。また、制御部11は、歩行モーションデータに基づいて、当該フレームにおける選手キャラクタ60の各ボーンのボーン行列を取得する。そして、制御部11は、選手キャラクタ60の各ボーンの位置及び回転角度を、取得したボーン行列に基づいて設定することによって、選手キャラクタ60のヌルオブジェクト611Lの位置を示すローカル座標系の座標値(すなわち、選手キャラクタ60の基準点に対するヌルオブジェクト611Lの相対的位置)を特定する。また、制御部11は、キャラクタ状態データD104(位置フィールド)に基づいて、選手キャラクタ60の基準点の位置を示すワールド座標系の座標値を特定する。そして、制御部11は、これらに基づいて、ヌルオブジェクト611Lの位置を示すワールド座標系の座標値を特定する。
同様に、制御部11は、歩行モーションデータの動作切替時フレームにおける選手キャラクタ60の右足610Rのヌルオブジェクト611Rの位置を取得する(S102)。この処理はステップS100と同様である。
ステップS100及びS102の実行後、制御部11は、選手キャラクタ60の左足610L及び右足610Rのうちで、フィールド51に近い方の足を特定部位として選択する(S104)。
例えば、制御部11は、ステップS100で取得した左足610Lのヌルオブジェクト611Lの位置とフィールド51との距離(第1距離)を取得する。具体的には、制御部11は、ヌルオブジェクト611Lからフィールド51へ垂らした垂線の長さを上記第1距離として取得する。なお、フィールド51がワールド座標系のYw軸座標値が0となるような平面に相当している場合、制御部11は、ヌルオブジェクト611LのYw軸座標値を上記第1距離として取得してもよい。同様に、制御部11は、ステップS102で取得した右足610Rのヌルオブジェクト611Rの位置とフィールド51との距離(第2距離)を取得する。そして、第1距離が第2距離よりも短い場合に、制御部11は左足610Lを特定部位として選択する。一方、第2距離が第1距離よりも短い場合に、制御部11は右足610Rを特定部位として選択する。
また、制御部11はステップモーションデータを取得する(S106)。例えば、ステップモーションデータが記憶部12に記憶されている場合、制御部11はステップモーションデータを記憶部12から読み出す。
さらに、制御部11は変数iを1に初期化し(S108)、第i番目の候補フレームCF[i]における選手キャラクタ60の特定部位の位置を取得する(S110)。
例えば、制御部11は、ステップモーションデータの候補フレームデータD103を参照し、第i番目の候補フレームCF[i]として設定されているフレームのフレーム番号を取得する。また、制御部11は、ステップモーションデータに基づいて、当該フレームにおける選手キャラクタ60の各ボーンのボーン行列を取得する。
そして、ステップS104で選択された特定部位が左足610Lである場合、制御部11は、選手キャラクタ60の各ボーンの位置及び回転角度を、取得したボーン行列に基づいて設定することによって、選手キャラクタ60の左足610Lのヌルオブジェクト611Lの位置を示すローカル座標系の座標値(すなわち、選手キャラクタ60の基準点に対するヌルオブジェクト611Lの相対的位置)を特定する。
一方、ステップS104で選択された特定部位が右足610Rである場合、制御部11は、選手キャラクタ60の各ボーンの位置及び回転角度を、取得したボーン行列に基づいて設定することによって、選手キャラクタ60の右足610Rのヌルオブジェクト611Rの位置を示すローカル座標系の座標値(すなわち、選手キャラクタ60の基準点に対するヌルオブジェクト611Rの相対的位置)を特定する。
ステップS110の実行後、制御部11は、第i番目の候補フレームCF[i]における特定部位の位置(すなわち、ステップS112で取得された位置)と、動作切替時フレームにおける特定部位の位置(ステップS100又はS102で取得された位置のうち、ステップS104で特定部位として特定された足の位置)との間の距離を取得する(S112)。
例えば、ステップS104で選択された特定部位が左足610Lである場合、制御部11は、ステップS110で取得されたヌルオブジェクト611Lの位置(ローカル座標系の座標値)と、ステップS100で取得されたヌルオブジェクト611Lの位置(ローカル座標系の座標値)との間の距離を算出する。一方、ステップS104で選択された特定部位が右足610Rである場合、制御部11は、ステップS110で取得されたヌルオブジェクト611Rの位置(ローカル座標系の座標値)と、ステップS102で取得されたヌルオブジェクト611Rの位置(ローカル座標系の座標値)との間の距離を算出する。そして、制御部11は、以上のようにして算出された距離を、第i番目の候補フレームCF[i]を識別する情報と関連付けて記憶部12に記憶させる(図11)。
ステップS112の実行後、制御部11は変数iに「1」を加算する(S114)。また、制御部11は変数iがN以下であるか否かを判定する(S116)。ここで、「N」は、ステップモーションデータにおける候補フレームの総数を示している(図6)。
変数iがN以下である場合(S116:Yes)、制御部11は、ステップS110〜S114の処理を再度実行する。一方、変数iがN以下でない場合(S116:No)とは、すべての候補フレームCF[1]〜CF[N]について上記距離を取得し終えた場合である。この場合、制御部11は、複数の候補フレームCF[1]〜CF[N]のうちで、ステップS112において取得した距離が最も小さい候補フレームを選択する(S118)。
ステップS118の実行後、制御部11は、ステップS118で選択した候補フレームからステップモーションデータに基づいて選手キャラクタ60に動作を実行させる(S120)。
例えば、制御部11は、歩行モーションデータの再生を中止し、ステップS118で選択した候補フレームからステップモーションデータを再生することによって選手キャラクタ60にステップ動作を開始させる。
また例えば、制御部11は、動作切替時フレームから所定数フレームの期間において、歩行モーションデータと、ステップS118で選択した候補フレームからのステップモーションデータとのブレンド再生を実行するようにしてもよい。すなわち、制御部11は、動作切替時フレームから所定数フレームの期間において、選手キャラクタ60の姿勢を、歩行モーションデータに基づく姿勢とステップモーションデータに基づく姿勢とをブレンドしてなる姿勢とし、歩行モーションデータに基づく姿勢のブレンド比率を徐々に下げ、ステップモーションデータに基づく姿勢のブレンド比率を徐々に上げることによって、選手キャラクタ60の姿勢を、歩行モーションデータに基づく姿勢からステップモーションデータに基づく姿勢へと徐々に切り替えるようにしてもよい。つまり、制御部11は、動作切替時フレームから所定数フレームの期間において、選手キャラクタ60の動作を、歩行動作とステップ動作とをブレンドしてなる動作とし、歩行動作のブレンド比率を徐々に下げ、ステップ動作のブレンド比率を徐々に上げることによって、選手キャラクタ60の動作を歩行動作からステップ動作へと徐々に切り替えるようにしてもよい。
なお、ステップS112において、制御部11はワールド座標系における距離を取得してもよい。すなわち、ステップS104で選択された特定部位が左足610Lである場合には、ステップS110において、制御部11は、キャラクタ状態データD104(位置フィールド)に基づいて、選手キャラクタ60の基準点の位置を示すワールド座標系の座標値を特定し、ヌルオブジェクト611Lの位置を示すローカル座標系の座標値と、選手キャラクタ60の基準点の位置を示すワールド座標系の座標値とに基づいて、ヌルオブジェクト611Lの位置を示すワールド座標系の座標値を特定してもよい。そして、ステップS112において、制御部11は、ステップS110で取得されたヌルオブジェクト611Lの位置(ワールド座標系の座標値)と、ステップS100で取得されたヌルオブジェクト611Lの位置(ワールド座標系の座標値)との間の距離を算出してもよい。同様に、ステップS104で選択された特定部位が右足610Rである場合には、ステップS110において、制御部11は、ヌルオブジェクト611Rの位置を示すワールド座標系の座標値を特定してもよい。そして、ステップS112において、制御部11は、ステップS110で取得されたヌルオブジェクト611Rの位置(ワールド座標系の座標値)と、ステップS100で取得されたヌルオブジェクト611Rの位置(ワールド座標系の座標値)との間の距離を算出してもよい。
また、ステップS104において、制御部11は、左足610Lのヌルオブジェクト611Lの位置を示すローカル座標系の座標値と、右足610Rのヌルオブジェクト611Rの位置を示すローカル座標系の座標値とを比較することによって、フィールド51に近い方の足を特定するようにしてもよい。例えば、制御部11は、ヌルオブジェクト611Lの位置を示すローカル座標系の座標値と所定の座標値(フィールド51に対応するローカル座標系の座標値)との間の距離を第1距離として算出してもよい。同様に、制御部11は、ヌルオブジェクト611Rの位置を示すローカル座標系の座標値と所定の座標値(フィールド51に対応するローカル座標系の座標値)との間の距離を第2距離として算出してもよい。そして、第1距離が第2距離よりも短い場合に、制御部11は左足610Lを特定部位として選択し、第2距離が第1距離よりも短い場合に、制御部11は右足610Rを特定部位として選択してもよい。
[5.まとめ]以上に説明したゲームシステム1によれば、例えば、歩行動作を実行中のキャラクタの動作をステップ動作に切り替える場合に、動作切替時における選手キャラクタ60の左足610L又は右足610R(例えばフィールド51に接触している方の足)の位置ずれを軽減でき、その結果、「足滑り」の発生を抑制できる。
なお、「足滑り」は、フィールド51に接触している足又はフィールド51に近い位置にある足について発生しやすい。一方、フィールド51から離れている足に関しては、動作切替時に位置ずれが生じていたとしても、ユーザに違和感を与えてしまう可能性は低い。この点、ゲームシステム1によれば、選手キャラクタ60の左足610L又は右足610Rのうち、フィールド51に近い方の足がどちらであるかを判定し、フィールド51に近い方の足について、動作切替時の位置ずれを軽減するため、「足滑り」が発生する可能性が高い足に関して、動作切替時の位置ずれを軽減できる。
また、ゲームシステム1によれば、例えば、ユーザによるステップ動作の実行指示操作に応じて、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合に、実行指示操作に応じて、直ちに、選手キャラクタの動作を切り替えることができ、選手キャラクタ60の動作切替が遅れる(すなわち、選手キャラクタ60の反応が遅い)との不満をユーザに感じさせないように図ることができる。
また、ゲームシステム1によれば、左足610Lにヌルオブジェクト611Lを設定し、右足610Rにヌルオブジェクト611Rを設定したことによって、第1特定部150、第2特定部160、及び第2動作実行部170において、左足610L又は右足610Rの位置としてヌルオブジェクト611L,611Rの位置のみに着目すればよくなるため、処理を簡略化できる。また、ヌルオブジェクト611L,611Rは非表示のオブジェクトであるため、余計なオブジェクトが表示部16に表示されるという不都合も発生しない。
[6.変形例]本発明は以上に説明した実施形態に限定されるものではない。
[6−1]例えば、第2動作実行部170は、第2モーションデータの複数の候補フレームの各々について、順番に、第1特定部150によって特定された第1モーションデータの動作切替時フレームにおける特定部位の位置と、第2特定部160によって特定された当該候補フレームにおける特定部位の位置との間の距離が閾値よりも小さい否かを判定していき、当該距離が閾値よりも小さい候補フレームが見つかったら、残りの候補フレームについて判定を行うことなく当該候補フレームを選択するようにしてもよい。
すなわち、図12に示す処理では、ステップS112の実行後において、ステップS112で取得された距離が閾値よりも小さいか否かを判定するようにしてもよい。そして、距離が閾値よりも小さければ、第i番目の候補フレームCF[i]を選択して、ステップS120を実行し、一方、距離が閾値よりも小さくなければ、ステップS114を実行するようにしてもよい。このようにすれば、候補フレームCF[1]〜CF「N」のすべてについて距離を取得しなくても、いずれかの候補フレームを選択できる場合があるため、複数の候補フレームCF[1]〜CF「N」のうちからいずれかを選択するための処理負荷を軽減できる。
[6−2]また例えば、第2動作実行部170は、第1特定部150によって特定された第1モーションデータの動作切替時フレームにおける特定部位(例えば左足又は右足)の位置に基づいて設定される判定領域(例えば、第1動作を実行中のキャラクタの特定部位の位置から閾値以下の領域)内に、第2特定部160によって特定された、第2モーションデータの複数の候補フレームのいずれかにおける特定部位の位置が含まれる場合に、当該候補フレームを選択するようにしてもよい。
すなわち、図12に示す処理では、ステップS104において特定部位として特定された足が左足610Lであれば、ステップS110の実行後において、ステップS100で取得された位置に基づいて設定される判定領域内に、ステップS110で取得された位置が含まれているか否かを判定するようにしてもよい。一方、ステップS104において特定部位として特定された足が右足610Rであれば、ステップS110の実行後において、ステップS102で取得された位置に基づいて設定される判定領域内に、ステップS110で取得された位置が含まれているか否かを判定するようにしてもよい。そして、ステップS110で取得された位置が判定領域に含まれていれば、第i番目の候補フレームCF[i]を選択して、ステップS120を実行し、一方、ステップS110で取得された位置が判定領域に含まれていなければ、ステップS114を実行するようにしてもよい。このようにしても、候補フレームCF[1]〜CF「N」のすべてについて距離を取得しなくても、いずれかの候補フレームを選択できる場合があるため、処理負荷を軽減できる。
[6−3]また例えば、第2動作実行部170は、第1特定部150によって特定された第1モーションデータの動作切替時フレームにおける特定部位(例えば左足又は右足)の位置が、第2特定部160によって特定された、第2モーションデータの複数の候補フレームのいずれかにおけるキャラクタの特定部位の位置に基づいて設定される判定領域(例えば、複数の候補フレームの各々におけるキャラクタの特定部位の位置から閾値以下の領域)内に含まれる場合に、当該候補フレームを選択するようにしてもよい。
すなわち、図12に示す処理では、ステップS104において特定部位として特定された足が左足610Lであれば、ステップS110の実行後において、ステップS110で取得された位置に基づいて設定される判定領域内に、ステップS100で取得された位置が含まれているか否かを判定するようにしてもよい。一方、ステップS104において特定部位として特定された足が右足610Rであれば、ステップS110の実行後において、ステップS110で取得された位置に基づいて設定される判定領域内に、ステップS102で取得された位置が含まれているか否かを判定するようにしてもよい。そして、ステップS100又はS102で取得された位置が判定領域に含まれていれば、第i番目の候補フレームCF[i]を選択して、ステップS120を実行し、一方、ステップS100又はS102で取得された位置が判定領域に含まれていなければ、ステップS114を実行するようにしてもよい。このようにしても、候補フレームCF[1]〜CF「N」のすべてについて距離を取得しなくても、いずれかの候補フレームを選択できる場合があるため、処理負荷を軽減できる。
[6−4]また例えば、ゲーム端末10(画像処理装置の一例)の制御部11によって実行されることとして説明した処理の全部又は一部がサーバ30(画像処理装置の他の一例)で実行されてもよい。この場合、サーバ30で処理を実行するために必要なデータを記憶部32又はデータベース35に格納したり、ゲーム端末10からサーバ30に送信したりするようにすればよい。また、各種画像を表示部16に表示するために必要なデータ(画像自体を示すデータ又は画像を生成するためのデータ等)をサーバ30からゲーム端末10に送信するようにすればよい。
[6−5]以上では、主に、歩行動作を実行中の選手キャラクタ60の動作をステップ動作に切り替える場合について主に説明したが、本発明は、歩行動作以外の動作を実行中の選手キャラクタ60の動作をステップ動作以外の動作に切り替える場合に用いることもできる。
また、以上では、サッカーゲームにおいて、「足滑り」の発生を抑制しつつ、選手キャラクタ60の動作を切り替える場合について主に説明したが、本発明は、サッカーゲーム以外のゲームにも適用できる。
また、以上では、「足滑り」の発生を抑制する場合について主に説明したが、先述したように、本発明は、「手滑り」の発生を抑制するために用いることもできる。例えば、キャラクタが逆立ちをした状態が各種動作を行うようなゲーム等、キャラクタが他のオブジェクト(例えば、フィールド、壁、又はテーブル等)に手を付いた状態で各種動作を行うようなゲームでは、動作切替前後で他のオブジェクトに接触しているキャラクタの左手又は右手の位置ずれが発生することによって、動作切替時にキャラクタの左手又は右手が他のオブジェクト上で滑っているかのようにユーザに見えてしまう可能性がある。この点、本発明に係る手法をキャラクタの左手又は右手を対象として実行することによって、「手滑り」の発生を抑制しつつ、キャラクタの動作を切り替えることもできる。
[6−6]以上では、本発明を画像処理システム(画像処理装置)の一例であるゲームシステム1(ゲーム端末10)に適用した場合について説明したが、本発明は、ゲームシステム1以外の画像処理システムにも適用できる。本発明は、第1モーションデータに基づく第1動作を実行中のキャラクタを第2モーションデータに基づく第2動作に切り替えるような各種画像処理システム(画像処理装置)に適用できる。
[7.付記]以上のような記載から、本発明は例えば以下のように把握される。なお、本発明の理解を容易にするために、適宜図面に記載された符号を括弧書きで記載するが、それにより本発明が図示の態様に限定されるものではない。
1)本発明の一態様に係る画像処理装置(10)は、キャラクタ(例えば選手キャラクタ60)に第1動作(例えば歩行動作)を実行させるための第1モーションデータ(例えば歩行モーションデータ)を取得する第1取得手段(110)と、前記キャラクタに第2動作(例えばステップ動作)を実行させるための第2モーションデータ(例えばステップモーションデータ)を取得する第2取得手段(120)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1モーションデータの動作切替時フレームにおける前記キャラクタの特定部位(例えば左足610L又は右足610R)の位置を特定する第1特定手段(150)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第2モーションデータの各フレームのうちから設定された複数の候補フレームの各々における前記キャラクタの前記特定部位の位置を特定する第2特定手段(160)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1特定手段(150)によって特定された前記動作切替時フレームにおける前記特定部位の位置と、前記第2特定手段(160)によって特定された前記複数の候補フレームの各々における前記特定部位の位置とに基づいて、前記複数の候補フレームのうちのいずれかを選択し、当該選択された候補フレームに基づくフレームから前記第2モーションデータに基づいて前記キャラクタに動作を実行させる実行手段(170)と、を含む。
6)本発明の一態様に係る画像処理システム(1)は、キャラクタに第1動作を実行させるための第1モーションデータを取得する第1取得手段(110)と、前記キャラクタに第2動作を実行させるための第2モーションデータを取得する第2取得手段(120)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1モーションデータの動作切替時フレームにおける前記キャラクタの特定部位の位置を特定する第1特定手段(150)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第2モーションデータの各フレームのうちから設定された複数の候補フレームの各々における前記キャラクタの前記特定部位の位置を特定する第2特定手段(160)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1特定手段(150)によって特定された前記動作切替時フレームにおける前記特定部位の位置と、前記第2特定手段(160)によって特定された前記複数の候補フレームの各々における前記特定部位の位置とに基づいて、前記複数の候補フレームのうちのいずれかを選択し、当該選択された候補フレームに基づくフレームから前記第2モーションデータに基づいて前記キャラクタに動作を実行させる実行手段(170)と、を含む。
7)また、本発明の一態様に係るプログラムは、1)〜5)のいずれかに記載の画像処理装置(10)、又は、6)に記載の画像処理システム(1)としてコンピュータを機能させるためのプログラムである。
8)また、本発明の一態様に係る情報記憶媒体は、7)に記載のプログラムを記録したコンピュータで読み取り可能な情報記憶媒体である。
9)また、本発明の一態様に係る画像処理方法(画像処理装置(10)又は画像処理システム(1)の制御方法)は、キャラクタに第1動作を実行させるための第1モーションデータを取得する第1取得ステップ(S100,S102)と、前記キャラクタに第2動作を実行させるための第2モーションデータを取得する第2取得ステップ(S106)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1モーションデータの動作切替時フレームにおける前記キャラクタの特定部位の位置を特定する第1特定ステップ(S100,S102,S104)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第2モーションデータの各フレームのうちから設定された複数の候補フレームの各々における前記キャラクタの前記特定部位の位置を特定する第2特定ステップ(S110)と、前記第1動作を実行中の前記キャラクタの動作を前記第2動作に切り替える場合に、前記第1特定ステップによって特定された前記動作切替時フレームにおける前記特定部位の位置と、前記第2特定ステップによって特定された前記複数の候補フレームの各々における前記特定部位の位置とに基づいて、前記複数の候補フレームのうちのいずれかを選択し、当該選択された候補フレームに基づくフレームから前記第2モーションデータに基づいて前記キャラクタに動作を実行させる実行ステップ(S118,S120)と、を含む。
上記1)、6)〜9)に記載の発明によれば、第1モーションデータに基づく第1動作を実行中のキャラクタの動作を第2モーションデータに基づく第2動作に切り替える場合に、第1モーションデータの動作切替時フレームにおけるキャラクタの特定部位の位置と、第2モーションデータの各フレームのうちから設定された複数の候補フレームの各々におけるキャラクタの特定部位の位置とに基づいて、複数の候補フレームのうちのいずれかを選択し、選択された候補フレームに基づくフレームから第2モーションデータに基づいてキャラクタに動作を実行させる。
以上のようにしたことによって、第1動作から第2動作への動作切替時の特定部位(例えばフィールド、地面、又は床に接地している足、又は、壁又はテーブル等に接触している手等)の位置ずれを軽減できる。その結果、第1動作から第2動作への動作切替時にキャラクタの特定部位が他のオブジェクト(例えば、フィールド、地面、床、壁、又はテーブル等)上で滑っているかのように見えてしまうことを抑制できる。
また、以上のようにしたことにとって、ユーザによる第2動作の実行指示操作に応じて、第1動作を実行中のキャラクタの動作を第2動作に切り替える場合に、実行指示操作に応じて直ちにキャラクタの動作を切り替えることができる。その結果、キャラクタの動作切替が遅れる(すなわち、キャラクタの反応が遅い)との不満をユーザに感じさせないように図ることができる。
以上のように、上記1)、6)〜9)に記載の発明によれば、第1モーションデータに基づく第1動作を実行中のキャラクタの動作を第2モーションデータに基づく第2動作に切り替えることを、動作切替時にキャラクタの特定部位が他のオブジェクト(例えば、フィールド、地面、床、壁、又は壁等)上で滑っているかのように見えてしまわないようにしつつ、かつ、キャラクタの動作切替が遅れる(すなわち、キャラクタの反応が遅い)との不満をユーザに感じさせないようにしつつ実現することができる。すなわち、第1モーションデータに基づく第1動作を実行中のキャラクタの動作を第2モーションデータに基づく第2動作に切り替えることを好適に実行することが可能になる。
2)本発明の一態様に係る画像処理装置(10)では、前記実行手段(170)は、前記第1特定手段(150)によって特定された前記動作切替時フレームにおける前記特定部位の位置と、前記第2特定手段(160)によって特定された前記複数の候補フレームの各々における前記特定部位の位置との間の距離を取得する距離取得手段(171)と、前記複数の候補フレームのうちから、前記距離が最も小さい候補フレームを選択するフレーム選択手段(172)と、を含むようにしてもよい。
2)に記載の発明によれば、第1特定手段によって特定された動作切替時フレームにおける特定部位の位置と、第2特定手段によって特定された複数の候補フレームの各々における特定部位の位置との間の距離を取得し、複数の候補フレームのうちから、当該距離が最も小さい候補フレームを選択するため、第1動作から第2動作への動作切替時の特定部位の位置ずれをできる限り小さくできる。
3)本発明の一態様に係る画像処理装置(10)では、前記キャラクタは、前記第1動作及び前記第2動作において、他のオブジェクト(例えばフィールド51)上に接触したり、前記他のオブジェクト上から離れたりする複数の部位(例えば左足610L及び右足610R)を有し、前記画像処理装置(10)は、前記複数の部位の各々と前記他のオブジェクトとの間の距離に基づいて、前記複数の部位のうちのいずれかを前記特定部位として選択する特定部位選択手段(140)をさらに含むようにしてもよい。
3)に記載の発明によれば、第1動作から第2動作への動作切替時に他のオブジェクト上で滑っているかのように見えてしまうという不都合を発生させてしまう可能性が高い部位に関して、動作切替時の位置ずれを軽減できるようになる。第1動作から第2動作への動作切替時にキャラクタの部位が他のオブジェクト上で滑っているかのように見えてしまうという不都合は、他のオブジェクト上に接触している部位又は他のオブジェクトに近い位置にある部位について発生しやすい。一方、他のオブジェクトから離れている部位に関しては、動作切替時に位置ずれが生じていたとしても、ユーザに違和感を与えてしまう可能性は低い。この点、本発明によれば、キャラクタの複数の部位の各々と他のオブジェクトとの間の距離に基づいて、当該複数の部位のうちのいずれかを特定部位として選択するようにしたため、上記不都合を発生させてしまう可能性が高い部位に関して、第1動作から第2動作への動作切替時の位置ずれを軽減できるようになる。
4)本発明の一態様に係る画像処理装置(10)では、前記キャラクタは、複数の部位オブジェクトを含んで構成され、前記複数の部位オブジェクトのうちの、前記特定部位に対応する部位オブジェクト(例えば左足610L又は右足610R)は、非表示の基準オブジェクト(例えばヌルオブジェクト611L又は611R)を含んで構成され、前記第1特定手段(150)は、前記動作切替時フレームにおける前記キャラクタの前記基準オブジェクトの位置を特定し、前記第2特定手段(160)は、前記複数の候補フレームの各々における前記キャラクタの前記基準オブジェクトの位置を特定し、前記実行手段(170)は、前記第1特定手段(150)によって特定された前記動作切替時フレームにおける前記基準オブジェクトの位置と、前記第2特定手段(160)によって特定された前記複数の候補フレームの各々における前記基準オブジェクトの位置とに基づいて、前記複数の候補フレームのうちのいずれかを選択するようにしてもよい。
4)に記載の発明によれば、第1特手手段、第2特定手段や、実行手段において、基準オブジェクトの位置のみについて着目すればよくなるため、処理を簡略化できる。また、基準オブジェクトは非表示のオブジェクトであるため、余計なオブジェクトが表示部に表示されるという不都合も発生しない。
5)本発明の一態様に係る画像処理装置(10)では、前記複数の候補フレームは、前記第2モーションデータの先頭フレームから特定の範囲内にあるフレームのうちで設定されるようにしてもよい。
5)に記載の発明によれば、下記に説明するような不都合の発生を抑制できる。第2モーションデータの先頭フレームから離れたフレームから第2モーションデータに基づいてキャラクタに動作を実行させた場合、キャラクタの動作が第2動作の途中から実行されることによって、キャラクタの動作が不自然であるとユーザが感じてしまうおそれがある。この点、5)に記載の発明によれば、このような不都合の発生を抑制できる。
10)本発明の一態様に係る画像処理装置(10)では、前記キャラクタは左足と右足とを有し、前記複数の部位は前記左足と前記右足とであってもよい。
10)に記載の発明によれば、キャラクタの左足及び右足のうち、第1動作から第2動作への動作切替時に他のオブジェクト(例えばフィールド、地面、又は床等)上で滑っているかのように見えてしまうという不都合を発生させてしまう可能性が高い方の部位に関して、動作切替時の位置ずれを軽減できるようになる。第1動作から第2動作への動作切替時に他のオブジェクト上で滑っているかのように見えてしまうという不都合は、左足と右足とのうちの、他のオブジェクト上に接触している方(又は他のオブジェクトに近い方)について発生しやすい。この点、本発明によれば、キャラクタの左足と右足とのうちの、上記不都合を発生させてしまう可能性が高い方に関して、動作切替時の位置ずれを軽減できるようになる。
11)本発明の一態様に係る画像処理装置(10)では、前記キャラクタは左手と右手とを有し、前記複数の部位は前記左手と前記右手とであってもよい。
11)に記載の発明によれば、キャラクタの左手及び右手のうち、第1動作から第2動作への動作切替時に他のオブジェクト(例えば壁又はテーブル等)上で滑っているかのように見えてしまうという不都合を発生させてしまう可能性が高い方の部位に関して、動作切替時の位置ずれを軽減できるようになる。第1動作から第2動作への動作切替時に他のオブジェクト上で滑っているかのように見えてしまうという不都合は、左手と右手とのうちの、他のオブジェクト上に接触している方(又は他のオブジェクトに近い方)について発生しやすい。この点、本発明によれば、キャラクタの左手と右手とのうちの、上記不都合を発生させてしまう可能性が高い方の部位に関して、動作切替時の位置ずれを軽減できるようになる。