以下、本発明の実施形態の一例について図面に基づき詳細に説明する。
例えば、本発明はゲームを開発するために用いられる開発用コンピュータに適用することができる。また例えば、本発明はゲームをプレイするために用いられるゲーム装置(例えば、家庭用ゲーム機、携帯ゲーム機、業務用ゲーム機、携帯電話、パーソナルコンピュータ等)に適用することもできる。さらに本発明は、上記の開発用コンピュータ又はゲーム装置以外の画像処理装置にも適用することができる。
図1は、本発明の実施形態に係る画像処理装置のハードウェア構成を示す図である。図1に示すように、本実施形態に係る画像処理装置10は、制御部11、主記憶部12、補助記憶部13、入力部14、表示部15、音声出力部16、光ディスクドライブ部17、及び通信インタフェース18を含む。
制御部11は、例えばCPU(Central Processing Unit)、GPU(Graphics Processing Unit)、及びSPU(Sound Processing Unit)等を含み、プログラムに従って情報処理を実行する。主記憶部12は例えばRAM(Random Access Memory)を含んで構成される。主記憶部12には、補助記憶部13又は光ディスクから読み出されたプログラムやデータが記憶される。また主記憶部12は、処理の過程で必要なデータを記憶するワークメモリとしても用いられる。補助記憶部13は例えばハードディスク装置(情報記億媒体)を含む。
入力部14は例えばキーボード、マウス、タッチパネル、又はゲームコントローラ等を含み、入力を行うために用いられる。表示部15は例えば家庭用テレビ受像機又は液晶表示パネル等であり、制御部11の指示に従って画面を表示する。音声出力部16は例えばスピーカ又はヘッドホン等を含み、制御部11の指示に従って音声データを出力する。
光ディスクドライブ部17は光ディスク(情報記憶媒体)に記憶されたプログラムやデータを読み取る。通信インタフェース18は、例えばインターネット等の通信ネットワークに画像処理装置10を通信接続するためのインタフェースである。なお、ここではプログラムやデータを画像処理装置10に供給するために光ディスクを用いるが、メモリカード等、他の情報記憶媒体を用いるようにしてもよい。また、通信ネットワークを介して遠隔地からプログラムやデータを画像処理装置10に供給するようにしてもよい。
図2は、画像処理装置10の表示部15に表示される画面の一例を示す図である。図2に示す画面20にはキャラクタオブジェクト22が表示されている。キャラクタオブジェクト22は各種動作を行う。以下では、キャラクタオブジェクト22が左手24l、右手24r、左足26l、及び右足26rを音楽に合わせて動かしてダンスを踊る場合について説明する。
また、画面20には移動経路オブジェクト28も表示されている。移動経路オブジェクト28は、ユーザ(キャラクタオブジェクト22の動きを見る者)にキャラクタオブジェクト22の動きを案内する役割を果たす。すなわち、移動経路オブジェクト28は、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザに案内する役割を果たす。
図2に示す移動経路オブジェクト28は、キャラクタオブジェクト22の左手24lの移動経路を示している。この場合の左手24lの動きは、「左手24lを体の真横で弧を描くようにして頭上まで上げ、その後、同じく弧を描くようにして左手24lを右手24r付近まで下ろす」というような動きである。
図3も画面20の一例を示す図である。図3に示す移動経路オブジェクト28は、キャラクタオブジェクト22の右手24rの移動経路を示している。この場合の右手24rの動きは、図4に示すように、「右手24rを頭の後方から前方に弧を描くように振り下ろす」というような動きである。
図2,3に示す移動経路オブジェクト28を参照することによって、キャラクタオブジェクト22が左手24l、右手24rを動かす場合における左手24l、右手24rの移動経路をユーザが把握できるようにしている。なお、キャラクタオブジェクト22の他の部位(例えば左足26l、右足26r)の移動経路を案内するための移動経路オブジェクト28が画面20に表示されるようにしてもよい。
画面20を表示部15に表示するために仮想3次元空間が主記憶部12に構築される。図5は仮想3次元空間の一例を示す図である。図5に示す仮想3次元空間30には、互いに直交する3つの座標軸(Xw,Yw,Zw軸)が設定されている。なお、図5に示す仮想3次元空間30の状態は図2に示す画面20に対応している。
図5に示す仮想3次元空間30にはキャラクタオブジェクト22と移動経路オブジェクト28とが配置されている。キャラクタオブジェクト22及び移動経路オブジェクト28は、それぞれ、複数のポリゴンを含んで構成される。
キャラクタオブジェクト22の内部には、キャラクタオブジェクト22の姿勢を制御するためのスケルトンが設定される。スケルトンは、関節に相当する複数のジョイントと、ジョイント間を接続するための複数のボーンとを含む。これらのジョイント及びボーンの状態(例えば位置や回転角度)が変化することによって、キャラクタオブジェクト22の各部位(例えば、左手24l、右手24r、左足26l、及び右足26r)の位置等が変化する。
図5に示す移動経路オブジェクト28は帯状のオブジェクトになっている。図5に示す例では移動経路オブジェクト28が平面状のオブジェクトになっているが、移動経路オブジェクト28にはねじれ部分が含まれる場合があり、その場合には、移動経路オブジェクト28は曲面状のオブジェクトになる。なお、移動経路オブジェクト28は帯状のオブジェクトに限られず、立体状のオブジェクトであってもよい。
また、仮想3次元空間30には仮想カメラ32(視点)が設定される。そして、この仮想カメラ32から見た仮想3次元空間30が画面20に表示される。なお、例えば、仮想カメラ32はキャラクタオブジェクト22と一定の位置関係を有するように設定される。すなわち、キャラクタオブジェクト22が常に画面20内の所定領域(例えば中央領域)に表示されるように、仮想カメラ32の位置、視線方向、及び画角は設定される。
以下、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28を生成するための技術について説明する。
図6は、画像処理装置10で実現される機能のうち、移動経路オブジェクト28の生成に関連する機能を主に示す機能ブロック図である。図6に示すように、画像処理装置10は記憶部40、移動経路データ取得部42、移動経路オブジェクト生成部44、及び表示制御部46を含む。
記憶部40は、例えば主記憶部12、補助記憶部13、及び光ディスクの少なくとも一つによって実現される。なお記憶部40は、画像処理装置10と通信ネットワークを介して通信接続される他の装置に備えられる記憶装置によって実現されるようにしてもよい。記憶部40以外の機能ブロックは、例えば制御部11によって実現される。
まず、記憶部40について説明する。記憶部40は各種データを記憶する。
例えば、キャラクタオブジェクト22の形状を示すモデルデータが記憶部40に記憶される。モデルデータでは、キャラクタオブジェクト22を構成する各ポリゴンの頂点の位置が、例えば、キャラクタオブジェクト22の基準点(例えば腰の位置)を原点とするローカル座標系の座標値として保持される。
また例えば、キャラクタオブジェクト22のためのモーションデータが記憶部40に記憶される。モーションデータは、キャラクタオブジェクト22に各種動作を行わせるためのデータである。例えば、モーションデータは、キャラクタオブジェクト22が各種動作を行う場合のスケルトンの状態の変化を定めたデータであり、キャラクタオブジェクト22のスケルトンの状態をモーションデータに従って変化させることによって、キャラクタオブジェクト22が各種動作を行うようになる。以下では、モーションデータに従ってキャラクタオブジェクト22のスケルトンの状態を変化させることを「モーションデータを再生する」と記載する。
なお、モーションデータは、例えばダンサー等の人の動きをモーションキャプチャ技術を用いて記録することによって得られるモーションキャプチャデータに基づいて生成される。本実施形態の場合、このモーションキャプチャデータも記憶部40に記憶される。
次に、移動経路データ取得部42及び移動経路オブジェクト生成部44について説明する。移動経路データ取得部42は、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路に関する移動経路データを取得する。移動経路オブジェクト生成部44は移動経路オブジェクト28を移動経路データに基づいて生成する。
図7は、移動経路データ取得部42及び移動経路オブジェクト生成部44が実行する処理の一例を示すフロー図である。なお、制御部11が図7に示す処理をプログラムに従って実行することによって、制御部11が移動経路データ取得部42及び移動経路オブジェクト生成部44として機能するようになる。
図7に示すように、まず、移動経路データ取得部42は、記憶部40に記憶されるモーションキャプチャデータを読み出す(S101)。上述したように、モーションキャプチャデータは人の動きをモーションキャプチャ技術を用いて記録することによって得られるデータである。
図8はモーションキャプチャデータの一例を示す模式図である。図8は、例えば、人が「左手を体の真横で弧を描くようにして頭上まで上げ、その後、同じく弧を描くようにして左手を右手の付近まで下ろす動き」を行った場合における左手の動きをモーションキャプチャ技術によって記録することによって得られたモーションキャプチャデータの一例を示している。
図8における点50a,50b,50c,50dは、人が上記の動作を行った場合に所定時間ごとに記録された左手の位置を示している。点50aは最初に記録された位置を示している。また、点50bは第2番目に記録された位置を示し、点50cは第3番目に記録された位置を示している。点50dは最後に記録された位置を示している。
ステップS101の処理が実行された後、移動経路データ取得部42は補間処理をモーションキャプチャデータに施すによって、部位(例えば左手)の移動経路データを取得する(S102)。移動経路データを取得するための補間処理としては種々の補間処理を採用することができる。例えば、B−スプライン補間処理、N−スプライン補間処理、又は丸み不均一スプライン補間処理(Rounded Nonuniform spline)を採用するようにするとよい。
図9A,9B,9Cは図8に示すモーションキャプチャデータに補間処理を施した場合に取得される左手の移動経路データの例を示す模式図である。図9A〜9Cにおいて、符号62は補間処理によって取得された左手の移動経路を示している。また、符号60は移動経路62上の頂点を示している。つまり、符号60は左手が通る複数の位置を示している。図9A〜9Cに示すように、補間処理によって得られる移動経路62には複数の頂点60が設定されている。
図9Aは、図8に示すモーションキャプチャデータにB−スプライン補間処理を施した場合に取得される左手の移動経路データの一例を示している。図9Aに示すように、この場合に取得される移動経路62は、点50a〜50dを直線で結んだ場合の経路52の内側で弧を描くような経路になる。
図9Bは、図8に示すモーションキャプチャデータに丸み不均一スプライン補間処理を施した場合に取得される左手の移動経路データの一例を示している。図9Bに示すように、この場合に取得される移動経路62は、点50a〜50dを直線で結んだ場合の経路52の外側で弧を描くような経路になる。
図9Cは、図8に示すモーションキャプチャデータにN−スプライン補間処理を施した場合に取得される左手の移動経路の一例を示している。図9Cに示すように、この場合に取得される移動経路62は、点50a〜50dを直線で結んだ場合の経路52の外側で弧を描くような経路になる。この場合の移動経路62は、上記の経路52との違いが比較的小さく、かつ、ある程度のなめらかさを有するような経路となる。
ステップS102においてどの補間処理を採用するかは、例えば、得られる移動経路62と上記の経路52との間の違いを小さくすることを重視するのか、又は、得られる移動経路62のなめらかさを重視するのか等の点を考慮して決定するようにすればよい。なお、補間処理によって得られる移動経路62の頂点60の数が多くなりすぎると、後の処理の負荷が増大してしまうため、補間処理を実行する場合には頂点60の数をどの程度にするのかについて留意する必要がある。
ステップS102の処理が実行された後、移動経路データ取得部42は、移動経路62の頂点60のうちに、前の頂点60との間の距離が基準距離未満である頂点60が存在するか否かを判定する(S103)。そして、そのような頂点60が存在すると判定された場合、移動経路データ取得部42はその頂点60を移動経路データから取り除く(S104)。
図10はステップS103,S104の処理について説明するための図であり、ステップS102で取得された移動経路データの一例を示している。図10に示す移動経路62では、頂点60aと、頂点60aの次の頂点60bとの間の距離が短くなっている。頂点60aと頂点60bとの間の距離が基準距離未満である場合、ステップS103では、前の頂点60との間の距離が基準距離未満である頂点60として頂点60bが存在すると判定される。そして、ステップS104では頂点60bが取り除かれる。なおこの場合、頂点60bの代わりに、頂点60aが取り除かれるようにしてもよい。
移動経路62において隣り合う2つの頂点60間の距離が短いと、移動経路オブジェクト生成部44によって生成される移動経路オブジェクト28が歪みやすくなる。この点、ステップS103,S104の処理を実行することによって、そのような不都合が生じないように図ることが可能になる。
移動経路データ取得部42は上記に説明したようにして移動経路データを生成する。なお、移動経路データが記憶部40に予め記憶されているような場合においては、移動経路データ取得部42は、ステップS101〜S104の処理を実行する代わりに、記憶部40に記憶される移動経路データを取得するようにすればよい。
ステップS101〜S104の処理によって移動経路データが取得された後、移動経路オブジェクト生成部44は移動経路オブジェクト28を移動経路データに基づいて生成する(S105)。
移動経路オブジェクト生成部44は、キャラクタオブジェクト22の位置に基づいて設定される基準位置から移動経路62上の頂点60への方向に基づいて、移動経路オブジェクト28を生成する。
まず、基準位置について図11を参照しながら説明する。例えば、基準位置は、キャラクタオブジェクト22のいずれかの部位(以下「基準部位」と記載する。)の位置に基づいて設定される。例えば、基準位置は、キャラクタオブジェクト22の喉70の位置に基づいて設定される。また例えば、基準位置は、キャラクタオブジェクト22の頭72、腰74、左肘76l、又は右肘76rのいずれかの位置に基づいて設定されるようにしてもよい。なお、基準位置は、これらの部位以外の部位の位置に基づいて設定されるようにしてもよい。
例えば、基準位置は、キャラクタオブジェクト22の基準部位の位置に設定される。例えば、喉70が基準部位である場合には喉70の位置が基準位置に設定される。
また例えば、基準位置は、キャラクタオブジェクト22の基準部位と所定の位置関係を有する位置に設定されるようにしてもよい。例えば、基準位置は、キャラクタオブジェクト22の基準部位の位置から所定方向に所定距離だけ移動した位置に設定されるようにしてもよい。例えば、喉70が基準部位である場合、図11に示すように、喉70の位置から真上方向に所定距離Lだけ移動した位置78uが基準位置に設定されるようにしてもよい。または、喉70の位置から真下方向に所定距離Lだけ移動した位置78dが基準位置に設定されるようにしてもよい。
移動経路オブジェクト生成部44は、上記のようにして設定された基準位置から移動経路62上の頂点60への方向に基づいて、移動経路オブジェクト28のうちの、該移動経路62上の頂点60に対応する部分の向きを設定する。例えば、移動経路オブジェクト生成部44は、基準位置から移動経路62上の頂点60への方向に基づく基準方向に基づいて、移動経路オブジェクト28のうちの、該移動経路62上の頂点60に対応する部分の面の向きを設定する。なお、「基準方向」とは、基準位置から移動経路62上の頂点60への方向との角度差が基準角度であるような方向である。すなわち、「基準方向」とは、例えば、基準位置から移動経路62上の頂点60への方向と、該基準方向と、の間の角度が基準角度となるような方向である。
具体的には、移動経路オブジェクト生成部44は、上記の基準方向に基づいて、移動経路オブジェクト28を構成するポリゴンを生成する。
図12は、移動経路オブジェクト28の生成方法の一例について説明するための図である。図12は、図2に示す移動経路オブジェクト28を生成する場合の例について示している。なお、図12に示す方法では、上記の「基準角度」が0度になっており、基準位置から移動経路62上の頂点60への方向自体が上記の「基準方向」に相当している。
図12に示す方法の場合、移動経路オブジェクト生成部44は、移動経路62上の頂点60aから方向82aに所定距離Dだけ移動してなる点84aを取得する。なお、方向82aは基準位置80から頂点60aへの方向であり、上記の「基準方向」に相当する。
また、移動経路オブジェクト生成部44は、移動経路62上の頂点60bから方向82bに所定距離Dだけ移動してなる点84bを取得する。なお、頂点60bは頂点60aの次の頂点60である。また、方向82bは基準位置80から頂点60bへの方向であり、上記の「基準方向」に相当する。
そして、移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60a,60b及び点84a,84bに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60a,60b及び点84a,84bを頂点とするポリゴン86aを生成する。
同様に、移動経路オブジェクト生成部44は、移動経路62上の頂点60cから方向82c(基準方向)に所定距離Dだけ移動してなる点84cを取得する。そして、移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60c及び点84cに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60b,60c及び点84b,84cを頂点とするポリゴン86bを生成する。
また、移動経路オブジェクト生成部44は、移動経路62上の頂点60dから方向82d(基準方向)に所定距離Dだけ移動してなる点84dを取得する。そして、移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60d及び点84dに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60c,60d及び点84c,84dを頂点とするポリゴン86cを生成する。
さらに、移動経路オブジェクト生成部44は、移動経路62上の頂点60eから方向82e(基準方向)に所定距離Dだけ移動してなる点84eを取得する。そして、移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60e及び点84eに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60d,60e及び点84d,84eを頂点とするポリゴン86dを生成する。
移動経路オブジェクト生成部44は、上記のようにして、移動経路オブジェクト28の一部を構成するポリゴン86a,86b,86c,86dを生成する。移動経路オブジェクト生成部44は、ポリゴン86a,86b,86c,86dと同様にして、移動経路オブジェクト28を構成するすべてのポリゴンを生成する。
下記に説明するように、図12に示す方法によれば、仮想カメラ32から見える移動経路オブジェクト28の面積が広くなるように図ることができるようになる。その結果として、例えば、画面20に表示される移動経路オブジェクト28の一部が細くなりすぎてしまったり、つぶれてしまったりする等の不都合の発生を抑制できるようになる。
ここでは、キャラクタオブジェクト22が、図2において説明したような動き、すなわち、「左手24lを体の真横で弧を描くようにして頭上まで上げ、その後、同じく弧を描くようにして左手24lを右手24r付近まで下ろす」というような動きを行う場合を想定する。この場合、キャラクタオブジェクト22の正面前方に配置される仮想カメラ32から基準位置80(例えば、キャラクタオブジェクト22の喉70)への方向と、該基準位置80から左手24lの移動経路62上の頂点60(例えば、頂点60a〜60e)への方向(例えば、方向82a〜82e)との間の角度は、比較的90度に近い角度になる。
この点、図12に示す方法によれば、移動経路オブジェクト28を構成するポリゴン(例えばポリゴン86a〜86d)の面方向は、基準位置80から移動経路62上の頂点60(例えば、頂点60a〜60e)への方向(例えば、方向82a〜82e)と略等しい方向になる。このため、仮想カメラ32の視線方向(すなわち、仮想カメラ32からキャラクタオブジェクト22への方向)と、移動経路オブジェクト28を構成するポリゴンの面方向との間の角度は、比較的90度に近い角度になる。言い換えれば、仮想カメラ32の視線方向と、移動経路オブジェクト28を構成するポリゴンの面の法線方向との間の角度は、比較的0度に近い角度になる。
その結果、仮想カメラ32から見える移動経路オブジェクト28の面積が広くなり、例えば図2に示すような移動経路オブジェクト28を生成できるようになる。すなわち、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28を生成できるようになる。例えば、画面20に表示される移動経路オブジェクト28の一部が細くなりすぎてしまったり、つぶれてしまったりする等の不都合の発生を抑制しつつ、移動経路オブジェクト28を生成できるようになる。
移動経路オブジェクト28の生成方法は図12に示した方法に限られない。図13は、移動経路オブジェクト28の生成方法の他の一例について説明するための図である。図13は、図3に示す移動経路オブジェクト28を生成する場合の例について示している。なお、図13に示す方法は、上記の「基準角度」が90度になっている点と、上記の「基準方向」が、基準位置80から移動経路62上の頂点60への方向と直交する方向になっている点とで図12に示す方法とは異なっている。
図13に示す方法の場合、移動経路オブジェクト生成部44は、移動経路62上の頂点60fから方向88fに所定距離Dだけ移動してなる点84fを取得する。なお、方向88fは方向82fと直交する方向であり、上記の「基準方向」に相当する。方向82fは基準位置80から頂点60fへの方向である。
また、移動経路オブジェクト生成部44は、移動経路62上の頂点60gから方向88gに所定距離Dだけ移動してなる点84gを取得する。なお、頂点60gは頂点60fの次の頂点60である。また、方向88gは方向82gと直交する方向であり、上記の「基準方向」に相当する。方向82gは基準位置80から頂点60gへの方向である。
そして、移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60f,60g及び点84f,84gに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60f,60g及び点84f,84gを頂点とするポリゴン86fを生成する。
同様に、移動経路オブジェクト生成部44は、移動経路62上の頂点60hから方向88hに所定距離Dだけ移動してなる点84hを取得する。なお、方向88hは方向82hと直交する方向であり、上記の「基準方向」に相当する。方向82hは基準位置80から頂点60hへの方向である。移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60h及び点84hに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60g,60h及び点84g,84hを頂点とするポリゴン86gを生成する。
また、移動経路オブジェクト生成部44は、移動経路62上の頂点60iから方向88iに所定距離Dだけ移動してなる点84iを取得する。なお、方向88iは方向82iと直交する方向であり、上記の「基準方向」に相当する。方向82iは基準位置80から頂点60iへの方向である。移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60i及び点84iに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60h,60i及び点84h,84iを頂点とするポリゴン86hを生成する。
さらに、移動経路オブジェクト生成部44は、移動経路62上の頂点60jから方向88jに所定距離Dだけ移動してなる点84jを取得する。なお、方向88jは方向82jと直交する方向であり、上記の「基準方向」に相当する。方向82jは基準位置80から頂点60jへの方向である。移動経路オブジェクト生成部44は、移動経路オブジェクト28を構成するポリゴンを頂点60j及び点84jに基づいて生成する。例えば、移動経路オブジェクト生成部44は、頂点60i,60j及び点84i,84jを頂点とするポリゴン86iを生成する。
移動経路オブジェクト生成部44は、上記のようにして、移動経路オブジェクト28の一部を構成するポリゴン86f,86g,86h,86iを生成する。移動経路オブジェクト生成部44は、ポリゴン86f,86g,86h,86iと同様にして、移動経路オブジェクト28を構成するすべてのポリゴンを生成する。
下記に説明するように、図13に示す方法によれば、仮想カメラ32から見える移動経路オブジェクト28の面積が広くなるように図ることができるようになる。その結果として、例えば、画面20に表示される移動経路オブジェクト28の一部が細くなりすぎてしまったり、つぶれてしまったりする等の不都合の発生を抑制できるようになる。
ここでは、キャラクタオブジェクト22が、図3,4において説明したような動き、すなわち、「右手24rを頭の後方から前方に弧を描くように振り下ろす」というような動きを行う場合を想定する。この場合、キャラクタオブジェクト22の正面前方に配置される仮想カメラ32から基準位置80(例えば、キャラクタオブジェクト22の喉70)への方向と、該基準位置80から右手24rの移動経路62上の頂点60(例えば、頂点60f〜60j)への方向(例えば、方向82f〜82j)と、の間の角度は比較的小さい角度(0度に近い角度)となる。
この点、図13に示す方法によれば、移動経路オブジェクト28を構成するポリゴン(例えばポリゴン86f〜86i)の面方向は、基準位置80から移動経路62上の頂点60(例えば、頂点60f〜60j)への方向(例えば、方向82f〜82j)と直交する方向(例えば、方向88f〜88j)と略等しくなる。このため、仮想カメラ32の視線方向(すなわち、仮想カメラ32からキャラクタオブジェクト22への方向)と、移動経路オブジェクト28を構成するポリゴンの面方向との間の角度は、比較的90度に近い角度になる。言い換えれば、仮想カメラ32の視線方向と、移動経路オブジェクト28を構成するポリゴンの面の法線方向との間の角度は、比較的0度に近い角度になる。
その結果として、仮想カメラ32から見える移動経路オブジェクト28の面の面積が広くなり、例えば図3に示すような移動経路オブジェクト28を生成できるようになる。すなわち、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28を生成できるようになる。例えば、画面20に表示される移動経路オブジェクト28の一部が細くなりすぎてしまったり、つぶれてしまったりする等の不都合の発生を抑制しつつ、移動経路オブジェクト28を生成できるようになる。
ステップS105で生成された移動経路オブジェクト28を示すデータが記憶部40に保存される。なお、このデータでは、移動経路オブジェクト28の各頂点の位置が、例えば、キャラクタオブジェクト22の基準点(例えば腰の位置)を原点とするローカル座標系の座標値で示される。
次に、表示制御部46について説明する。表示制御部46は、キャラクタオブジェクト22及び移動経路オブジェクト28が配置された仮想3次元空間30を仮想カメラ32から見た様子を表す画面を表示部15に表示させる。
図14は、表示制御部46が実行する処理の一例を示すフロー図である。なお、制御部11が図14に示す処理をプログラムに従って実行することによって、制御部11が表示制御部46として機能するようになる。
図14に示すように、表示制御部46は第1時点になったか否かを監視する(S201)。第1時点とは、移動経路オブジェクト28に対応する動作をキャラクタオブジェクト22が開始する時点よりも基準時間T1前の時点である。例えば、キャラクタオブジェクト22が音楽に合わせてダンスを行うような場合、基準時間T1はn拍(例えばn:2)に対応する時間に設定される。
また、「移動経路オブジェクト28に対応する動作」とは、移動経路オブジェクト28が示す移動経路62に沿ってキャラクタオブジェクト22が部位を動かす動作である。例えば、図2に示す移動経路オブジェクト28の場合、「左手24lを体の真横で弧を描くようにして頭上まで上げ、その後、同じく弧を描くようにして左手24lを右手24r付近まで下ろす動作」が「移動経路オブジェクト28に対応する動作」に相当する。また例えば、図3に示す移動経路オブジェクト28の場合、「右手24rを頭の後方から前方に弧を描くように振り下ろす動作」が「移動経路オブジェクト28に対応する動作」に相当する。
第1時点になっていないと判定された場合、表示制御部46は監視を続行する。一方、第1時点になったと判定された場合、表示制御部46は、移動経路オブジェクト28を始端から終端に向かって徐々に画面20に表示させていく(S202)。
図15はこの場合の画面20の一例を示す。なお図15において、実線で表されている部分は画面20に表示される部分を示しており、点線で表されている部分は画面20に表示されない部分を示している。図15に示す状態では、移動経路オブジェクト28の始端90から途中92までの部分96が画面20に表示され、移動経路オブジェクト28の途中92から終端94までの部分98が画面20に表示されていない。
ステップS202において、例えば、表示制御部46は、移動経路オブジェクト28を透明状態で仮想3次元空間30に配置する。そして、その後、表示制御部46は、移動経路オブジェクト28の始端90から終端94に向かって徐々に、移動経路オブジェクト28を不透明状態に変えていく。
なお、表示制御部46は第2時点になるまでに移動経路オブジェクト28の全体を画面20に表示させる。第2時点とは、移動経路オブジェクト28に対応する動作をキャラクタオブジェクト22が開始する時点よりも基準時間T2前の時点である。なお、基準時間T2は基準時間T1よりも短い時間である。例えば、キャラクタオブジェクト22が音楽に合わせてダンスを行うような場合、基準時間T2はm拍(m<n;例えばm:1)に対応する時間に設定される。
ステップS201,S202の処理が実行されることによって、本実施形態では、上記の第1時点になるまで移動経路オブジェクト28の画面20への表示が制限(抑止)される。そして、第1時点から上記の第2時点までの期間において、画面20に表示される移動経路オブジェクト28が始端90から終端94まで徐々に伸びる(図14参照)。そして、第2時点において移動経路オブジェクト28の全体が画面20に表示される(図2,3参照)。以上のようにして移動経路オブジェクト28が表示されることによって、ユーザは、キャラクタオブジェクト22が部位を動かし始める時点が近づいていることを把握できるようになり、さらに、キャラクタオブジェクト22が部位をどのように動かすかも事前に把握できるようになる。
ステップS202の処理が実行された後、表示制御部46は、移動経路オブジェクト28に対応する動作をキャラクタオブジェクト22が開始する時点になったか否かを監視する(S203)。キャラクタオブジェクト22が上記の動作を開始する時点になっていないと判定された場合、表示制御部46は監視を続行する。
一方、キャラクタオブジェクト22が上記の動作を開始する時点になったと判定された場合、表示制御部46はキャラクタオブジェクト22に上記の動作を開始させる(S204)。すなわち、表示制御部46は、キャラクタオブジェクト22に関して、上記の動作に対応するモーションデータの再生を開始する。
さらに表示制御部46は、モーションデータの再生と同期して、移動経路オブジェクト28の始端90から終端94に向かって移動経路オブジェクト28の色を徐々に変えていく(S205)。
図16はこの場合の画面20の一例を示す。なお、図16に示す移動経路オブジェクト28において、斜線が付された部分と斜線が付されていない部分とは色が異なることを示している。図16に示す移動経路オブジェクト28では、始端90から途中92までの部分96の色が、途中92から終端94までの部分98の色とは異なる色に変わっている。
ステップS205の処理が実行されることによって、ユーザは、キャラクタオブジェクト22が移動経路62に沿って動かしている部位(図16の場合であれば左手24l)の現在位置を容易に把握できるようになる。
また、表示制御部46は、キャラクタオブジェクト22が上記の動作を完了したか否かを監視する(S206)。すなわち、表示制御部46は、ステップS204で開始されたモーションデータの再生が完了したか否かを監視する。
キャラクタオブジェクト22が上記の動作を完了していないと判定された場合、表示制御部46は監視を続行する。一方、キャラクタオブジェクト22が上記の動作を完了したと判定された場合、表示制御部46は移動経路オブジェクト28を画面20から消去する(S207)。例えば、表示制御部46は移動経路オブジェクト28を仮想3次元空間30から取り除く。
以上に説明した画像処理装置10によれば、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28を生成することが可能になる。また、そのような移動経路オブジェクト28を画面20に好適に表示することが可能になる。
上述したように、本発明は、ゲームを開発するために用いられる開発用コンピュータに適用することができる。このような開発用コンピュータによれば、ゲーム開発者は、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28を生成できるようになる。また、このような移動経路オブジェクト28を生成するための手間を軽減できるようになる。なお、この場合の画面20は、生成された移動経路オブジェクト28をゲーム開発者が確認するための画面となる。
また上述したように、本発明は、ゲームをプレイするためのゲーム装置に適用することもできる。このようなゲーム装置によれば、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるような移動経路オブジェクト28が生成され、画面20(ゲーム画面)に表示されるようになる。その結果、キャラクタオブジェクト22が部位を動かす場合における該部位の移動経路をユーザが容易に把握できるようになる。
ところで、近年、表示部の前方領域に立つユーザの各部位の位置を、表示部の前方領域を撮影する撮影装置の撮影画像と、表示部の前方に照射された赤外線光の反射光を検出する赤外線センサの検出結果とに基づいて取得するゲーム装置が提案されている。このようなゲーム装置によれば、ユーザが各種動作(例えばダンス)を行った場合のユーザの各部位の位置の変化を示すデータを取得することができる。
そこで、上記のデータに基づいて、キャラクタオブジェクト22のモーションデータを生成するようにしてもよい。そして、生成されたモーションデータに基づいて、キャラクタオブジェクト22に動作を行わせるようにしてもよい。このようにすれば、ユーザが行った動作と同様の動作をキャラクタオブジェクト22に行わせることが可能になる。
さらに、この場合、移動経路データ取得部42は上記のデータに基づいて移動経路データを取得するようにしてもよい。例えば、移動経路データ取得部42は、モーションキャプチャデータと同様にして、補間処理を上記のデータに施すことによって移動経路データを生成するようにしてもよい。また例えば、移動経路データ取得部42は上記のデータ自体を移動経路データとして取得するようにしてもよい。このようにすれば、ユーザによって行われた部位(例えば左手)の動きを案内する移動経路オブジェクト28を生成したり、画面20に表示したりすることが可能になる。
なお、本発明は以上に説明した実施の形態に限定されるものではない。
(A)例えば、移動経路オブジェクト28をねじる位置とねじる程度とをゲーム開発者(又はユーザ)が指定できるようにしてもよい。この場合、移動経路オブジェクト生成部44は、ゲーム開発者(又はユーザ)によって指定された位置又は程度に基づいて、移動経路オブジェクト28をねじるようにすればよい。
(B)また例えば、ゲーム開発者(又はユーザ)が移動経路オブジェクト28の生成方法を複数の生成方法のうちから選択できるようにしてもよい。
例えば、図12に示す方法と図13に示す方法とのいずれを採用するのかをゲーム開発者(又はユーザ)が選択できるようにしてもよい。また、基準位置80をどのように設定するかをゲーム開発者(又はユーザ)が選択できるようにしてもよい。例えば、どの部位を基準部位に設定するかや、基準部位と基準位置との位置関係をどのように設定するかをゲーム開発者(又はユーザ)が選択できるようにしてもよい。
また、ゲーム開発者(又はユーザ)が選択可能な生成方法には、図12又は図13に示す方法以外の方法が含まれるようにしてもよい。例えば、移動経路オブジェクト28の法線方向が仮想カメラ32への方向と一致するようにして移動経路オブジェクト28を生成するような方法もゲーム開発者(又はユーザ)が選択できるようにしてもよい。
(C)また例えば、移動経路オブジェクト生成部44は、部位の移動経路62が複数の類型のいずれに属するかを判定するようにしてもよい。そして、移動経路オブジェクト生成部44は移動経路オブジェクト28の生成方法をその判定結果に基づいて選択するようにしてもよい。
例えば、記憶部40は、上記の複数の類型の各々と、移動経路オブジェクト28の生成方法との対応関係に関する情報を記憶する。そして、移動経路オブジェクト生成部44は、部位の移動経路62が属する類型に対応する生成方法で移動経路オブジェクト28を生成する。
(C−1)例えば、移動経路オブジェクト生成部44は、移動経路オブジェクト28の生成方法として、図12に示す方法と図13に示す方法とのいずれを採用するのかを、部位の移動経路62が属する類型に基づいて決定するようにしてもよい。例えば、移動経路オブジェクト生成部44は、移動経路62が第1類型に属する場合に図12に示す方法を採用し、移動経路62が第2類型に属する場合に図13に示す方法を採用するようにしてもよい。
ここで、第1類型とは、図12に示す方法を採用した方が図13に示す方法を採用する場合に比べて移動経路オブジェクト28が画面20に好適に表示される(例えば、画面20に表示される移動経路オブジェクト28の面積が大きくなる)ような移動経路62の類型である。同様に、第2類型とは、図13に示す方法を採用した方が図12に示す方法を採用する場合に比べて移動経路オブジェクト28が画面20に好適に表示される(例えば、画面20に表示される移動経路オブジェクト28の面積が大きくなる)ような移動経路62の類型である。
なお、図12に示す方法と図13に示す方法との間では上述の「基準角度」が異なっている。このため、図12に示す方法と図13に示す方法とのいずれを採用するのかを決定することは、上述の「基準角度」を決定することに相当している。
(C−2)また例えば、移動経路オブジェクト生成部44は基準位置を部位の移動経路62が属する類型に基づいて変えるようにしてもよい。例えば、移動経路オブジェクト生成部44は、基準部位と、基準部位と基準位置との位置関係と、の少なくとも一方を、部位の移動経路62が属する類型に基づいて変えるようにしてもよい。
具体的には、例えば、移動経路オブジェクト生成部44は、移動経路62が第1類型に属する場合に喉70を基準部位に設定し、移動経路62が第2類型に属する場合に腰74を基準部位に設定するようにしてもよい。また例えば、移動経路オブジェクト生成部44は、移動経路62が第1類型に属する場合に喉70の位置を基準位置に設定し、移動経路62が第2類型に属する場合に、喉70の位置より真上に所定距離Lだけ移動した位置78uを基準位置に設定するようにしてもよい。また例えば、移動経路オブジェクト生成部44は、移動経路62が第1類型に属する場合に、喉70の位置より真上に所定距離Lだけ移動した位置78uを基準位置に設定し、移動経路62が第2類型に属する場合に、腰74の位置を基準位置に設定するようにしてもよい。
以上のようにすれば、移動経路オブジェクト28の生成方法として、部位の移動経路62に合った最適な生成方法を採用できるようになる。