(57)【要約】      （修正有）【課題】オリジナルキャラクタ（第１のオブジェクト）と物体（連携オブジェクト）とが関連して動く場合のオリジナルキャラクタのモーションデータを用いて，カレントキャラクタ（第２のオブジェクト）の適切なモーションデータを生成する。【解決手段】三次元空間におけるオブジェクトのモーションデータを生成する際に、前記モーションデータが定義するモーションには、少なくとも移動、回転、及び変形のいずれか１つを含み、第１のオブジェクトが連携オブジェクトと関連して動くように前記第１のオブジェクトのモーションを定義した第１のモーションデータを補正することによって、第２のオブジェクトのための第２のモーションデータを生成し、前記第１のオブジェクトと前記連携オブジェクトとの第１の位置関係を有し、前記第２のオブジェクトと前記連携オブジェクトとの第２の位置関係を、前記第１の位置関係に適合させる。【選択図】図９
2015176495.tif 000002
【特許請求の範囲】
【請求項１】
三次元空間におけるオブジェクトのモーションデータを，コンピュータが生成する方法であって，前記モーションデータが定義するモーションは，少なくとも移動，回転，及び変形のいずれか１つを含み，
当該方法は，
第１のオブジェクトが連携オブジェクトと関連して動くように前記第１のオブジェクトのモーションを定義した第１のモーションデータを補正することによって，第２のオブジェクトのための第２のモーションデータを生成するステップであって，前記第１のオブジェクトと前記連携オブジェクトとの第１の位置関係を有し，前記第２のオブジェクトと前記連携オブジェクトとの第２の位置関係を，前記第１の位置関係に適合させる，ステップ，
を有する方法。
【請求項２】
前記第１の位置関係は，前記連携オブジェクトからみた前記第１のオブジェクトの着目点の第１の相対的な位置であり，
前記第２の位置関係は，前記連携オブジェクトからみた前記第２のオブジェクトの着目点の第２の相対的な位置である，
請求項１記載の方法。
【請求項３】
前記第２のモーションデータを生成するステップは，
前記第１の相対的な位置と前記第２の相対的な位置との変位量が最小化するように，前記第１のオブジェクトの所定の移動部位に対応する前記第２のオブジェクトの移動部位の位置を移動させるステップ，
を含む，請求項２記載の方法。
【請求項４】
前記第２のモーションデータを生成するステップは，
前記第２のモーションデータを適用した際の前記第２のオブジェクトのモーションが，時間軸上で滑らかとなるよう，前記第２のオブジェクトのモーションデータを平滑化する，
請求項１ないし３のうちいずれか１項記載の方法。
【請求項５】
前記連携オブジェクトは，大きさが零であるか，又は非表示とされる，請求項１ないし４のうちいずれか１項記載の方法。
【請求項６】
前記第１のオブジェクトの前記所定の移動部位は，複数の候補が存在し，予め定められた優先度に基づいて，前記複数の候補から順次選択され利用される，
請求項３記載の方法。
【請求項７】
前記第１のオブジェクトの着目点は，前記連携オブジェクトに，予め関連付けられており，
前記第２のオブジェクトの着目点は，予め関連付けられた前記第１のオブジェクトの着目点に基づいて特定される，請求項１ないし６のうちいずれか１項記載の方法。
【請求項８】
前記第１のモーションデータは，前記連携オブジェクトに，予め関連付けられている，請求項１ないし７のうちいずれか１項記載の方法。
【請求項９】
請求項１ないし８のうちいずれか１項記載の方法をコンピュータに実行させるためのプログラム。
【請求項１０】
前記連携オブジェクトを定義するデータと，
請求項８記載の方法により前記連携オブジェクトに関連付けられた１つ以上の前記第１のモーションデータと，
を有するファイルのデータ構造。
【請求項１１】
請求項１０記載のデータ構造を有するファイルを記憶した記憶媒体。
【請求項１２】
三次元空間におけるオブジェクトのモーションデータを含むデータ構造であって，前記モーションデータが定義するモーションは，少なくとも移動，回転，及び変形のいずれか１つを含み，
当該データ構造は，
第１のオブジェクトが連携オブジェクトと関連して動くように前記第１のオブジェクトのモーションを定義した第１のモーションデータと，
前記連携オブジェクトを三次元空間上で定義する連携オブジェクト定義データと，
を有し，
前記第１のモーションデータ及び前記連携オブジェクト定義データは，第２のオブジェクトのモーションを定義する第２のモーションデータを生成するために用いられる，
データ構造。
【請求項１３】
請求項１２記載のデータ構造を有する，記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，三次元空間におけるオブジェクトのモーションの生成方法，プログラム，及び記憶媒体に関する。
【０００２】
三次元（３Ｄ）仮想空間又は実空間上において，キャラクタなどの（仮想的な）オブジェクトの移動，回転，変形等を制御することにより，アニメーションなどの製作を支援する技術が存在する。この場合に，複数のボーン（骨）を関節で繋いだスケルトンモデル（骨格モデル）（図１（ａ））が使われる場合がある。
【０００３】
本願明細書で例示として取り上げるオブジェクトは，図１（ａ）のようにボーン１０１，ボーン１０２等で連結されたスケルトンモデルで構成される。スケルトンモデルを構成する各部位はノードと呼ばれ，各ノードは，親子の関係を持つことも可能である。ノードの回転（曲げ，捻り）の状態は，親ノードを基準とした子ノードの向きで表すことができる。ノードの向きを表すために，各々のノードに座標系が定められる（不図示）。親子関係にあるノードの原点どうしを結ぶ線分，あるいはノード自体がボーンとなる。
【０００４】
人体モデル，動物，構造物等の姿勢（ポーズ，モーション等）を制御する際に用いられるこのようなスケルトンモデルにおいては，図１（ａ）に示す各々のボーンおよび関節の位置，回転（曲げ，捻り）等を意図したとおりに制御することが必要となる。図１（ａ）に示されるスケルトンモデルでは，各々のボーンは関節で結合されており，各々のボーンの動きが他のボーンの動きに影響を与える。従来，スケルトンをモデル化し，スケルトンモデルを制御する手法として，種々のものが提案されている。
【０００５】
たとえば，標準モデルに対して予めポーズ又はモーションを定義しておき，制御対象モデルに対して，標準スケルトンモデルのポーズ又はモーションを適用することで，簡便に制御対象モデルのポーズ又はモーションを制御する手法が提案されている（例えば，特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１２０３９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本明細書では，ポーズ又はモーションを定義するために用いる標準モデルとして，「オリジナルキャラクタ」の語を用いる。また，そのモーションを用いて制御する対象のモデルとして，「カレントキャラクタ」の語を用いる。
【０００８】
図１（ａ）は，具体的なスケルトンモデルを示している。
【０００９】
図１（ｂ）は，スケルトンモデルに，例えば複数のポリゴンから構成されるスキンを関連付け，オリジナルキャラクタ１１０を構成した例を示している。
【００１０】
図２（ａ）は，制御対象モデルとしてのカレントキャラクタのボーンの構成を示しており，例えば，ボーン２０１，ボーン２０２を含んでいる。
【００１１】
図２（ｂ）は，複数のボーンに対して体表面を表現する複数のポリゴンを関連付けたカレントキャラクタ２１０が示されている。
【００１２】
図３（ａ）は，仮想的な，栓の開いたペットボトル３１０を示している。
【００１３】
図３（ｂ）は，オリジナルキャラクタ３２０が，ペットボトル３３０を右手で保持し，ペットボトル３３０の飲料を飲んでいるポーズを示している。この場合，ペットボトルの先端部３３１と，オリジナルキャラクタ３２０の口３２１が接触している。このようなポーズ（フレーム）を複数用いて，時間軸上で連続してオリジナルキャラクタ３２０及びペットボトル３３０を動かすことによって，三次元空間上で，オリジナルキャラクタ３２０がペットボトル３３０の飲料を飲むモーションを作ることができる。
【００１４】
図４（ａ）は，図３（ｂ）のオリジナルキャラクタのポーズを，カレントキャラクタ４２０ｂに対して適用した様子を示した図である。カレントキャラクタ４２０ｂは，ペットボトル４３０ｂを右手４２２で持っている。しかしながら，カレントキャラクタ４２０ｂの口４２１ｂとペットボトルの先端４３１ａとの間が接触しておらず，離れている。
【００１５】
図４（ｂ）は，図４（ａ）の一部を拡大した図である。口４２１ｂとペットボトルの先端４３１ｂとの間にズレが生じている。このようなズレが生じる原因は，オリジナルキャラクタ３２０とカレントキャラクタ４２０ｂが，異なる体型や構造を持つためである。したがって，オリジナルキャラクタ３２０のポーズをそのままカレントキャラクタ４２０ｂに適用しても，意図したとおりのポーズが得られず，不自然なポーズとなってしまう場合があることが分かる。したがって，複数のポーズの連続であるモーションにおいても，オリジナルキャラクタのモーションを単に適用しても，カレントキャラクタのモーションが，意図した通りのモーションとならない場合がある。
【００１６】
本発明は，このような不都合を解消することを目的としている。すなわち，オリジナルキャラクタ（第１のオブジェクト）と物体（連携オブジェクト）とが関連して動く場合のオリジナルキャラクタのモーションデータを用いて，カレントキャラクタ（第２のオブジェクト）の適切なモーションデータを生成することを目的とする。
【課題を解決するための手段】
【００１７】
本実施例によれば，三次元空間におけるオブジェクトのモーションデータを，コンピュータが生成する方法であって，前記モーションデータが定義するモーションは，少なくとも移動，回転，及び変形のいずれか１つを含み，当該方法は，第１のオブジェクトが連携オブジェクトと関連して動くように前記第１のオブジェクトのモーションを定義した第１のモーションデータを補正することによって，第２のオブジェクトのための第２のモーションデータを生成するステップであって，前記第１のオブジェクトと前記連携オブジェクトとの第１の位置関係を有し，前記第２のオブジェクトと前記連携オブジェクトとの第２の位置関係を，前記第１の位置関係に適合させる，ステップ，を有する方法が提供される。
【発明の効果】
【００１８】
実施形態によれば，キャラクタのモーションデータを簡便に生成し，利用することができる。
【図面の簡単な説明】
【００１９】
【図１】スケルトンモデル（骨格モデル）の例を示す図である。
【図２】カレントキャラクタ（制御対象モデル）の例を示す図である。
【図３】オリジナルキャラクタがペットボトルの飲料を飲んでいるポーズを示す図である。
【図４】オリジナルキャラクタのポーズを，カレントキャラクタに適用した図である。
【図５】カレントキャラクタの補正されたポーズを示した図である。
【図６】オリジナルキャラクタ及びカレントキャラクタの着目点を示す図である。
【図７】オリジナルキャラクタが，椅子に腰掛けているポーズを示した図である。
【図８】オリジナルキャラクタのポーズをカレントキャラクタに適用した図である。
【図９】一実施例の処理手順の概要を示したフローチャートである。
【図１０】カレントキャラクタのポーズの補正に関する詳細なフローチャートである。
【図１１】補正の正逆の判定処理を示すフローチャートである。
【図１２】手の向きを保存しておき，移動処理後に手の向きを戻す処理を示す図である。
【図１３】フルートを吹くポーズを示した図である。
【図１４】ペットボトルの栓を開けるポーズを示した図である。
【図１５】シャベルを持ったキャラクタのポーズを示した図である。
【発明を実施するための形態】
【００２０】
なお，本明細書においては，ポーズは，時間的長さがゼロのモーションとして捉えることができるため，モーションを定義するモーションデータ及びポーズを定義するポーズデータは，いずれもモーションデータとして扱う。
【００２１】
また，本明細書では，キャラクタの語を主として用いる。キャラクタは，仮想的な人物又は生物に対して主に用いられる。しかしながら，本発明は，仮想的な人物又は生物以外に，一般的なオブジェクト（例えば，自転車，自動車，ボール等）の仮想的なオブジェクトを排除しない。したがって，本明細書において用いる仮想的なキャラクタ，物体等は，仮想的なオブジェクトの語で総称され得る点に留意すべきである。
【００２２】
また，本明細書では，ボーンを有するスケルトンモデルを三次元オブジェクトの例として用いて説明行うが，本発明は，特定の三次元モデルに限定されるものではない。すなわち，ボーンを持たない三次元モデル，ボーン以外を用いた三次元モデルに，以下に説明する実施例を適用しても良い。
【００２３】
上述のようにしてキャラクタのポーズ又はモーションを作成する際に，物体との絡みが入ると，位置又は向きの調整作業が煩雑になることがある。例えば自転車に跨るポーズを作る際には，サドルと尻，ペダルと足，ハンドルと手の位置合わせが必要である。
【００２４】
また，ある体型のキャラクタを使って作ったポーズやモーションを，異なる体型のキャラクタに適用すると，部位の位置関係に不整合を生じることがある。例えば，「左手で持った携帯電話のボタンを，右手の人差し指で押す」ポーズを，肩幅や腕の長さが異なるキャラクタに適用すると，そのままではボタンと指の位置が合わなくなることがある。
【００２５】
以下に示す実施例は，このような不都合にも対応できるものである。以下，実施例を説明する。
【００２６】
［モーション付き物体の作成］
まず，標準的な体型のキャラクタ（例えば，図３（ｂ）のオリジナルキャラクタ３２０）を使って，正しいモーションを作る。ここで言う「正しい」とは，物体（例えば，図３（ｂ）のペットボトル３３０）とキャラクタの部位（例えば，図３（ｂ）のオリジナルキャラクタ３２０の口３２１）との位置関係が正しい（この例の場合には，ペットボトルの先端部３３１が口に接触している）という意味である。前記の携帯電話の例では，ボタンと人差し指の位置が合っていることを意味する（不図示）。また，ここで使用したキャラクタ３２０を，「オリジナルキャラクタ」（３２０）と呼ぶことにする。
【００２７】
そして，オリジナルキャラクタ３２０のモーションデータ(および補正)を適用するキャラクタを「カレントキャラクタ」（４２０ｂ）と呼ぶ。
【００２８】
オリジナルキャラクタ３２０に対して作成したモーションデータに，次の情報を付加する。
・キャラクタのどの部位を着目点にするか。
・キャラクタのどの部位を移動部位にするか。
【００２９】
着目点と移動部位は，後述のモーション補正の際に使われる。
【００３０】
着目点とは，例えば，キャラクタに存在する点であり，物体（例えばペットボトル）との位置関係を正しくするべき点をいう。着目点は，モーションデータに関連付けておくことによって，モーションデータが用いられる際に適切な着目点が利用されるようにすることができる。着目点には，例えば，「左目」「口」等のキャラクタに存在する複数の着目点を特定するために，ユニークな名前が付与されていることが望ましい。また，複数のキャラクタに対して，着目点に関する統一的な命名法を定めておくことが望ましい。着目点に関し，統一的な命名がなされていれば，オリジナルキャラクタのモーションデータに関連付けられた着目点を，他のカレントキャラクタに適用する場合に，カレントキャラクタの着目点を容易に特定することができる。
【００３１】
移動部位とは，例えば，カレントキャラクタ４２０ｂの部位であって，カレントキャラクタ４２０ｂのポーズを補正する際に動かす部位をいう。
【００３２】
オリジナルキャラクタに関して，物体（例えば，図３（ｂ）のペットボトル３３０）の座標系における着目点（例えば，図３（ｂ）のオリジナルキャラクタ３２０の口３２１）の位置を求める。これが「正しい位置関係」である。カレントキャラクタ４２０ｂに，モーションデータを適用した場合の，物体（例えば，図４（ａ）のペットボトル４３０ｂ）の座標系における着目点（例えば，図４（ａ）のカレントキャラクタ４２０ｂの口４２１ｂ）の位置を求める。これが「現在の位置関係」である。
【００３３】
そして，上記「正しい位置関係」と上記「現在の位置関係」との差異を求める。移動部位（図４（ａ）の右手４２２）を，この差異ベクトルだけ動かして，物体とカレントキャラクタの着目点との位置関係を正しい状態にする。
【００３４】
図５は，カレントキャラクタ５２０の補正されたポーズを示した図である。
【００３５】
移動部位である腕５２２を移動させることによって，カレントキャラクタ５２０の持つペットボトル５３０と，カレントキャラクタ５２０の口５２１との位置関係が正しい状態になり，その結果ペットボトル５３０の先端５３１が口５２１に接触した状態になる。以上の処理手順から分かるように，本補正手法における物体の扱いは，物体座標系における着目点の位置を使用するだけなので，物体の形状に関する情報を一切必要としない。腕５２２は，IK(inverse  kinematics)によって，自然な形で腕５２２の各部位が移動する。なお、本発明は上記の処理手順に限定されるものではない。
【００３６】
図６（ａ）は，オリジナルキャラクタ６２０の着目点の例を示した図である。オリジナルキャラクタ６２０には，目の着目点６２１，６２２，鼻の着目点６２４，口の着目点６２５，耳の着目点６２３が，予め設定されている。
【００３７】
図６（ｂ）は，カレントキャラクタ６３０の着目点の例を示した図である。カレントキャラクタ６３０には，目の着目点６３１，６３２，鼻の着目点６３４，口の着目点６３５，耳の着目点６３３が，予め設定されている。
【００３８】
図７（ａ）は，オリジナルキャラクタ７２０が，椅子７５０に腰掛けているポーズを示した図である。オリジナルキャラクタ７２０と椅子７５０に対して自然な見た目になるようポーズ付けされている。
【００３９】
図７（ｂ）は，オリジナルキャラクタ７２１に設定された着目点７３１を示している。
【００４０】
図８（ａ）は，オリジナルキャラクタのポーズをカレントキャラクタ８２０ａに適用した状態を示した図である。カレントキャラクタ８２０ａの尻が，椅子８５０ａから離れていて，不自然な状態となっていることが分かる。
【００４１】
図８（ｂ）は，着目点８２１ｂと椅子８５０ｂとの位置関係が正しくなるように，カレントキャラクタ８２０ｂのポーズに補正を施した例を示している。この場合には，移動部位は腰と胸である。腰と胸を移動させると，連動して腰から左右手首まで，腰から首を経てその先全て，腰から左右足首までも動く。この場合，左右手首から先，足首から先は動かさなくても良い。
【００４２】
前記の携帯電話の例では，右手の人差し指の先を着目点とし，右手を移動部位とする（不図示）。このようにして，補正用の情報を付加したモーションデータを，「補正情報付きモーション」と呼ぶことにする。
【００４３】
1個の物体に対して，1個または複数個の補正情報付きモーションを付加したものを，「モーション付き物体」と呼ぶことにする。
【００４４】
［モーション付き物体の使用］
ユーザは，例えば次の手順でモーション付き物体を使うことができる。
1)  使いたいキャラクタとモーション付き物体を選ぶ。
2)  モーション付き物体が持っているモーションデータの中から，キャラクタに適用したいものを選ぶ。すると，そのキャラクタに合うように補正(後述)が掛かった状態で，そのキャラクタにモーションが適用される。
【００４５】
［モーション補正処理の概要］
上述のように，キャラクタのモーションは，複数のポーズが時系列に並んだものとして扱うことができる。したがって，モーションの補正は，個々のポーズに対する補正として実行することができる。
【００４６】
すでに述べたように，モーションデータ(および補正)を適用する対象となるキャラクタを，「カレントキャラクタ」と呼ぶことにする。
1)  オリジナルキャラクタにポーズデータを適用し，物体と着目点との位置関係を求める。
2)  カレントキャラクタにポーズデータを適用し，物体と着目点との位置関係を求める。
3)  上記オリジナルキャラクタにおける位置関係1)と,カレントキャラクタにおける位置関係2)との差異を求め，これを「変位量」とする。
4)  カレントキャラクタの移動部位を動かすべき量「移動量」を上記変位量から求める。移動部位を移動量だけ移動させことにより，上記変位量が０（又は最小）となるようにする。移動部位の移動にはIK(inverse  kinematics)を使う。すなわち，カレントキャラクタの移動部位をIKによって移動させることによって，物体または着目点が移動し，上記変位量が０（又は最小）となる。なお，IKについては，当業者に周知の技術であるため，説明は省略する。
【００４７】
以上の処理によって，物体と着目点との位置関係が正しい状態（または，正しい状態に近い状態）になる。
【００４８】
以上の手法には，以下のような利点がある。
1.  ポーズやモーションの作成
モーション(ポーズ)を一から作る代わりに，モーション付き物体が持っているモーション(ポーズ)を適用することで，欲しいモーション(ポーズ)が簡単に得られ，繁雑な位置合わせが不要になる（または，位置あわせを無視できる程度のモーション(ポーズ)が得られる）。
2.  ポーズやモーションの適用
モーション(ポーズ)を，元のキャラクタとは異なる体型のキャラクタに適用しても，部位の位置関係に不整合を生じない（または，無視できる程度の不整合に留めることが容易にできる）。
3.  モーションのディテール
本補正手法の特徴として，着目点と物体との位置を合わせるのではなく，両者の位置関係を同じ（又は，非常に近い）状態にするという点が挙げられる。この特徴により，オリジナルキャラクタのモーションのディテール(物体と着目点との間の微妙な位置変化)が，モーションの補正後も再現される（または，再現されやすい）。
【００４９】
［部位移動に使うIK(inverse  kinematics)］
部位の移動にはIK(inverse  kinematics)を使うことができるが，IKの種類には「フルボディIK」と「部分IK」がある。フルボディIKでは，1か所を動かすと全身の部位が追随して動く。これに対して，部分IKでは限定された部位のみが動く。例えば，肩から手首までの部分IKの場合，右手を動かしたときに右肩から先のみが動く。フルボディIKでも，固定点を適切に設定することで，部分IKと同等の挙動をさせることができる。例えば，右肩の位置を固定すれば，右手を動かしたときに追随して動くのは右肩から先のみとなり，前述の部分IKの例と同等になる。
【００５０】
複数のモーション補正情報を使って順に補正を行なう場合，先のモーション補正情報で着目点とした部位，又は物体がアタッチされた部位が，後のモーション補正情報による補正で動くことのないように，IKによる追随範囲を適切に設定する必要がある。
【００５１】
［物体をキャラクタにアタッチする場合］
物体をキャラクタにアタッチさせる場合と，アタッチさせない場合とがある。アタッチされた物体は，キャラクタが移動したりポーズを変えたりしても，アタッチ先の部位と一体となって動く。アタッチの有無の例については，後述の「モーション補正の例」において更に詳述する。
【００５２】
［補正方向の正逆］
移動部位を動かすべき方向は，着目点が存在する部位，又は物体がアタッチされた部位との位置関係によって，正反対の方向となる。着目点が存在する部位が移動部位の移動に追随する場合に，移動部位を動かすべき方向を，「正」方向と定義する。これに対して，物体がアタッチされた部位が移動部位の移動に追随する場合は，移動部位を動かすべき方向が反対になり，この方向を「逆」方向と定義する。移動方向の正逆の例を以下に示す。
・正方向:既に述べた「携帯電話」がこれに該当する。
・逆方向:既に述べた「ペットボトル」がこれに該当する。
【００５３】
［補正量のウェイト付け］
1つのモーション補正情報の中で複数の移動部位を指定し，着目点が追随する移動部位と，物体アタッチ先部位が追随する移動部位の両方を使うこともできる(後述の例「刀」を参照)。前者の移動部位は正方向に移動させる。後者の移動部位は逆方向に移動させる。なお，両者を移動させた結果が正しい（物体と着目点との位置関係が正しい）状態になるためには，それぞれの移動量に係数を掛けて移動量を小さくすることが必要になる。この係数を「ウェイト値」と呼ぶことにする。ウェイト値の和が1になるように設定することで，正しい補正結果が得られる。
【００５４】
［移動補助部位］
移動部位のみではポーズを補正しきれない場合がある。後述の例「自転車」では，カレントキャラクタの腕が短いと，手を移動部位としてポーズを補正しても，手がハンドルに届かない場合がある。このような場合に，さらに移動補助部位として胸等の移動を併用し，手がハンドルに届くように補正することが望ましい。
【００５５】
［着目点の合成］
着目点の位置は，予めキャラクタに設定されていることが望ましい。適切な位置に着目点がない場合もある。この場合には，既存の複数の着目点の位置を合成して代用することができる。これを「合成着目点」と呼ぶことにする。合成の方法は，着目点の座標値の平均をとってもよい。
【００５６】
［着目点座標の事前計算と保存］
補正処理「モーション補正処理の概要」の1)で，オリジナルキャラクタにポーズを適用し，物体と着目点との位置関係を求めているが，これを以下の処理に置き換えることができる。
a)  前もって，モーションの全フレームについて，オリジナルキャラクタにポーズを適用したときの，物体の座標系における着目点の位置を求め，これをデータとして保存しておく。
b)  補正処理実行時に，保存しておいたデータから，該当するフレームの，物体の座標系における着目点の位置を読み出して使う。
【００５７】
以上の処理で，補正処理の実行時に，オリジナルキャラクタにポーズを適用する処理が不要になるため，処理負荷を軽減できる。
【００５８】
［物体の非表示］
大きさ0の物体を使うことができる。あるいは物体を表示しないこともできる。物体に対して，このような取り扱いをすることによって，物体を使わないモーションにも本手法の補正を適用することができる。例えば，合掌ポーズで両手の位置がずれるのを補正できる。
【００５９】
［時間による補正率の変化］
タイムライン(時間軸)上で，モーション毎（フレーム毎）に補正率(補正の程度)を変化させてもよい。
【００６０】
タイムライン上で，補正を必要としないモーションの後に補正を必要とするモーションが続く場合に，急に補正が掛かり，モーションが不連続になることがある。そこで，補正が必要なモーションについては，補正率の値を0から徐々に上げることで，補正が無いモーションから補正があるモーションに移る場合に，モーションが不連続になるのを避けることができる。
【００６１】
［位置による補正率の変化］
物体と着目点との距離に応じて補正率を変えてもよい。
【００６２】
一般的な傾向として，物体が着目点から離れている場合には補正を必要としないことが多い。そこで，物体と着目点との距離が所定の値以上の場合には，距離が大きくなるにつれて補正率を下げてもよい。これにより，キャラクタのモーションがより自然なものになる場合がある。
【００６３】
図９は，一実施例の処理手順の概要を示したフローチャートである。
【００６４】
ステップＳ９１０で，キャラクタのモーションをオリジナルキャラクタとカレントキャラクタに適用する。
【００６５】
以下の処理は，キャラクタのポーズ毎（フレーム毎）に処理される。
【００６６】
ステップＳ９２０で，全てのカレントキャラクタのポーズについて処理したかが，チェックされる。全てのポーズ（フレーム）が処理されれば終了する（「はい」）。処理すべきポーズ（フレーム）が存在すれば（「いいえ」），処理はステップＳ９２５に移る。
【００６７】
ステップＳ９２５で，オリジナルキャラクタとカレントキャラクタのポーズを１つずつ順次取り出す。
【００６８】
ステップＳ９３０で，オリジナルキャラクタの着目点と物体との位置関係が，カレントキャラクタの着目点と物体との位置関係に適合しているかがチェックされる。適合しているとは，，オリジナルキャラクタの物体の座標系においてオリジナルキャラクタの着目点が所与の座標に位置しているのであれば，カレントキャラクタの物体の座標系においてカレントキャラクタの着目点が同じ座標に位置しているか，その座標に近いところに位置していることを意味する。この判断が「はい」であれば，ステップＳ９２０に戻る。この判断が「いいえ」であれば，ステップＳ９４０に移る。
【００６９】
ステップＳ９４０で，カレントキャラクタの着目点と物体との位置関係を，オリジナルキャラクタの着目点と物体との位置関係に適合させるために，カレントキャラクタの移動部位を移動させて，カレントキャラクタの補正されたポーズデータを得る。なお，移動補助部位が指定されている場合には，移動補助部位を移動させる必要があれば移動させ，カレントキャラクタの修正されたポーズデータを得てもよい。そして処理は，ステップＳ９２０に戻る。
【００７０】
ステップＳ９５０で，カレントキャラクタの，全ての補正されたポーズデータから，カレントキャラクタのモーションデータを生成する。
【００７１】
以上で，補正されたカレントキャラクタのモーションデータが得られ，このモーションデータを利用して，カレントキャラクタと物体とを動かすことができる。
【００７２】
［モーション補正の例］
モーション補正の例を以下に説明する。表の1つの行が「モーション補正情報」1個に相当する。各モーション補正情報は，上の行から順に適用される。なお，下記のモーション補正の例は，表１のような部分IKを使うことを想定している。
【００７３】
【表１】
2015176495.tif 000003
［物体として携帯電話を用いる例］
例えば，左手で持った携帯電話のボタンを，右手の人差し指で押す例を以下に示す。携帯電話は，左手にアタッチされているとする。
【００７４】
【表２】
2015176495.tif 000004
ボタンと指先の位置関係が正しくなるようにカレントキャラクタのモーションを補正する。
【００７５】
［物体としてペットボトルを用いる例（飲料を飲む）］
上述したように，右手に持ったボトルを口に運び飲み物を飲む例を以下に示す。ペットボトルは右手にアタッチされているとする。
【００７６】
【表３】
2015176495.tif 000005
ペットボトルと口の位置関係が正しくなるように補正する。
【００７７】
［物体として刀を用いる例］
刀を正面に構え，上段に振りかぶり，振り降ろす例を以下に示す。刀は左手にアタッチされているとする。
【００７８】
【表４】
2015176495.tif 000006
刀と右手の位置関係が正しくなるように補正する。刀がなるべく正面に来るようにするために，両手を移動部位にして半分ずつ補正することが望ましい。
【００７９】
［物体としてトロンボーンを用いる例］
トロンボーンの演奏を行う場合を想定する。右腕の曲げ伸ばし，頭や上体を動かす等を行っても良い。この場合には，物体自体がモーション（トロンボーン可動部の伸び縮み）を持っても良い。トロンボーンは左手にアタッチされているとする。
【００８０】
【表５】
2015176495.tif 000007
トロンボーンと口の位置関係，及びトロンボーンと右手の位置関係が正しくなるように補正する。このモーション補正では，補正の順序が重要である。「逆」の移動部位を先に移動させ，次に「正」の移動部位を移動させる順序で補正する必要がある。この補正順序を逆にすると，まず右手の位置をトロンボーンに合わせ，その後トロンボーンの位置を口に合わせるので，結果はトロンボーンと右手の位置がずれてしまう。このようにならないよう，補正の順序を適正に行うことが必要である。なお、本発明の補正順序は、この順序に限定されるものではない。
【００８１】
［物体として自転車を用いる例］
自転車を漕ぐ。物体が動き（ペダルの回転，車輪の回転等）を持っても良い。自転車の全体の移動が伴う。
【００８２】
【表６】
2015176495.tif 000008
自転車と各着目点との位置関係が正しくなるように補正する。右手を移動部位として右手位置を前方に補正しても，右手がハンドルに届かない場合には，さらに胸を(上体を前方に)動かしてもよい。左手についても同様である。
【００８３】
［物体として椅子(大柄キャラクタ)を用いる例］
立った状態から椅子に座るまでのモーションを生成する場合以下に示す。座ったとき足が床に着くことがを想定している。
【００８４】
【表７】
2015176495.tif 000009
［物体として椅子(小柄キャラクタ)を用いる例］
立った状態から椅子に座るまでモーションを生成する場合を以下に示す。座ったとき足が床から浮くことを想定している。
【００８５】
前半:右腿を椅子に乗せる。
【００８６】
【表８】
2015176495.tif 000010
後半:全身を移動させる。
【００８７】
【表９】
2015176495.tif 000011
［物体としてドアを用いる例］
右手でドアノブを握り，ドアを開けて部屋に入る動作を示す。物体がモーション（ドアノブの回転，ドアの開閉等）を持っている。
【００８８】
【表１０】
2015176495.tif 000012
ドア(ドア枠)と右手との位置関係が正しくなるように補正する。その結果，ドアノブと右手の位置が合う。
【００８９】
以下に本明細書において用いた用語の定義を示す。
【００９０】
【表１１】
2015176495.tif 000013
本明細書において用いる記号を以下のように定義する。
BOpoi:オリジナルキャラクタの，着目点が乗るボーン。
BCpoi:カレントキャラクタの，着目点が乗るボーン。
M'bp:ワールド座標系におけるボーンBOpoiの位置・向きを表すマトリクス(4×4行列)。
Mbp:ワールド座標系におけるボーンBCpoiの位置・向きを表すマトリクス(4×4行列)。
U'poi:ボーンBOpoiの座標系における着目点の位置を表すベクトル(3次元ベクトル)。
Upoi:ボーンBCpoiの座標系における着目点の位置を表すベクトル(3次元ベクトル)。
V'poi:ワールド座標系におけるオリジナルキャラクタの着目点の位置を表すベクトル(3次元ベクトル)。
Vpoi:ワールド座標系におけるカレントキャラクタの着目点の位置を表すベクトル(3次元ベクトル)。
BOobj:オリジナルキャラクタの，物体のアタッチ先ボーン。
BCobj:カレントキャラクタの，物体のアタッチ先ボーン。
M'bo:ワールド座標系におけるボーンBOobjの位置・向きを表すマトリクス(4×4行列)。
Mbo:ワールド座標系におけるボーンBCobjの位置・向きを表すマトリクス(4×4行列)。
L'obj:ボーンBOobjの座標系における物体の位置・向きを表すマトリクス(4×4行列)。
Lobj:ボーンBCobjの座標系における物体の位置・向きを表すマトリクス(4×4行列)。
M'obj:ワールド座標系におけるオリジナルキャラクタの物体の位置・向きを表すマトリクス(4×4行列)。
Mobj:ワールド座標系におけるカレントキャラクタの物体の位置・向きを表すマトリクス(4×4行列)。
V'poi_obj：物体座標系におけるオリジナルキャラクタの着目点の位置を表すベクトル(3次元ベクトル)。
Kr:補正率。補正を掛ける程度を表し0以上1以下の値を持つ。0が補正なし，1が完全補正を意味する。
Ks:補正の正逆係数。補正方向の正逆を表し，1または-1の値を持つ。正方向であれば-1，逆方向であれば1。
Kw:補正のウェイト値。物体アタッチ先部位と着目点部位の両方を移動させる場合に，両者の移動量の割合を調整する値。
Mhf:ワールド座標系における手（又は足）ノードの向きを表すマトリクス(3×3行列)。
【００９１】
［補正処理］
図１０は，カレントキャラクタのポーズの補正に関する詳細なフローチャートを示している。
オリジナルキャラクタにポーズを適用する。これによりM'bpとM'boが決まる。
U'poiは，キャラクタ毎に決まった値を持っているので，その値を使う。
L'objは，オリジナルキャラクタを使ってモーションを作った際の値を使う。
【００９２】
ステップＳ１０１０で，オリジナルキャラクタの物体の位置・向きを求める:
M'objを次式で求める。
M'obj=L'objM'bo                          (1)
ステップＳ１０２２で，オリジナルキャラクタの着目点の位置を求める:
V'poiを次式で求める。
V'poi=U'poiM'bp                          (2)
ステップＳ１０２４で，カレントキャラクタの着目点の位置を求める:
カレントキャラクタにポーズを適用する。これによりMbpとMboが決まる。
Upoiは，キャラクタ毎に決まった値を持っているので，その値を使う。
Lobjは，カレントキャラクタに対する物体のアタッチ状態を使う。
Vpoiを次式で求める。
Vpoi=UpoiMbp                              (3)
ステップＳ１０２６で，カレントキャラクタの物体の位置・向きを求める:
Mobjを次式で求める。
Mobj=LobjMbo                              (4)
ステップＳ１０３０で，物体座標系における，着目点のあるべき位置Ptを求める。
Pt=KrV'poiM'obj-1+(1-Kr)VpoiMobj-1            (5)
ステップｓ１０４０で，ワールド座標系における，着目点のあるべき位置からのずれVdを求める。
Vd=Vpoi-PtMobj                            (6)
ステップＳ１０５０で，移動部位が手又は足であるかを判断する。「はい」であればステップＳ１０５２に進む。「いいえ」であれば，ステップＳ１０５４に進む。
【００９３】
ステップＳ１０５２で，ワールド座標系における手（又は足）ノードの向きを取得し，Mhfとする。
【００９４】
すなわち，移動前の手(または足)の向き(ワールド座標系)をMhfとして保存しておく。
【００９５】
ステップＳ１０５４で，次式により，移動部位の移動量Vmを求める。
Vm=KsKwVd                                (7)
正逆係数Ksを決めるのに必要な移動方向の正逆の判定方法は，図１１を用いて後述する。
【００９６】
ステップＳ１０５６で，移動部位をVmだけ移動させる。
【００９７】
ステップＳ１０５７で，移動部位が手又は足であるかを判断する。「はい」であればステップＳ１０５８に進む。「いいえ」であれば，ステップＳ１０６０に進む。
【００９８】
ステップＳ１０５８で，手（又は足）ノードの向きを元の向きMhfに戻す。
【００９９】
図１２は，手の向きを保存する処理（ステップＳ１０５２），および移動処理後に手の向きを戻す処理（ステップＳ１０５８）を示している。図１２（ａ）は，手１２００のノード１２１０を動かす前の状態を示している。図１２（ｂ）は，IKを用いて手１２０１を動かした状態を示している。手１２０１の向きが，手１２００とは異なった向きになっているのが分かる。図１２（ｃ）は，保存しておいたMhfを読み出し，手１２００と同じ向きに，手１２０２の方向を戻した状態を示している。このように，IKを使って手(または足)を移動量１２２０だけ動かすと，移動させた手(または足)の向き(ワールド座標系)が変化する。手（または足）に着目点が設定されている場合，手の向きが変化すると，着目点の移動量が移動部位（手または足）の移動量とは異なる量になり，正しく補正ができない。また，手（または足）に物体がアタッチされている場合も同様で，物体の移動量が移動部位（手または足）の移動量と異なる量になり，正しく補正ができない。そこで，移動後に，手(または足)の向きをに戻すことで，正しく補正がなされるようにする。
【０１００】
なお，本実施例の場合，手又は足に対して，Mhfを用いた上述の処理を施したが，他の部位に対して，この処理を施すように設定しても良い。この処理を施すか否かは，移動に使用するIKの挙動に基づいて，予め決定しておくことができる。
ステップＳ１０６０で，移動補助部位があるかを判断する。「はい」であれば，Ｓ１０７０に進む。「いいえ」であれば，終了する。
【０１０１】
ステップＳ１０７０で，カウンタをリセットするために，counter=0とする。
【０１０２】
ステップＳ１０８２で，カレントキャラクタの着目点の位置を求める:
カレントキャラクタにポーズを適用する。これによりMbpとMboが決まる。
Upoiは，キャラクタ毎に決まった値を持っているので，その値を使う。
Lobjは，カレントキャラクタに対する物体のアタッチ状態を使う。
Vpoiを次式で求める。
Vpoi=UpoiMbp
ステップＳ１０８４で，カレントキャラクタの物体の位置・向きを求める:
Mobjを次式で求める。
Mobj=LobjMbo
ステップＳ１０８６で，ワールド座標系における，着目点のあるべき位置からのずれVdを求める。
Vd=Vpoi-PtMobj
ステップＳ１０８８で，Vdがeps以下か又はcounterの値がＮ以上かを判断する。epsは位置合わせの許容値で，予め決められた値である。epsの値としては，キャラクタの身長の１/２０００程度としてもよい。Ｎは移動補助部位の最大移動回数で，予め決められた値である。Ｎの値としては，３程度としてもよい。
【０１０３】
ステップＳ１０８８で「はい」であれば終了する。「いいえ」であれば，ステップＳ１０９０に進む。
【０１０４】
ステップＳ１０９０で，ワールド座標系における移動量Vmを次式で求める。
Vm=KsVd
正逆係数Ksを決めるのに必要な移動方向の正逆の判定方法は，図１１を用いて後述する。
【０１０５】
ステップＳ１０９２で，移動部位をVmだけ移動させる。
【０１０６】
ステップＳ１０９４でcounterを1増やし，ステップＳ１０８２及びステップＳ１０８４に戻る。
（物体をアタッチしない場合の処理）
なお，物体をアタッチしない場合(物体が椅子の場合など)には，上記「補正処理」に対して，以下の変更を加える。
【０１０７】
物体のアタッチ先ボーンであるBOobj,BCobjは存在しない。そのため，これらのボーンの位置・向きを表すマトリクスM'bo,Mbo,L'obj,Lobjも存在しない。
【０１０８】
モーション毎に所定のM'objの値を付与しておく。例えば椅子に座るモーションに椅子の位置・向きを付与する。式(1)でM'objを求める代わりに，この値を使う。
【０１０９】
Mobjの値は，カレントキャラクタにモーションを適用する際の，物体の位置・向きを使う。式(4)でMobjを求める代わりに，この値を使う。
（事前計算の利用）
式(5)の中のV'poiM'obj-1については，カレントキャラクタについての情報を含まないので，事前に計算することができる。
V'poi_obj=V'poiM'obj-1                      (8)
V'poi_objは，物体座標系におけるオリジナルキャラクタの着目点の位置を意味する。V'poi_objをモーションの全フレームについて事前計算して保存しておく。モーション補正実行時には，保存しておいたV'poi_objを使う。
【０１１０】
これにより，補正実行時には，以下の処理および情報が不要になる。
・オリジナルキャラクタに対するポーズ適用。
・式(1),(2)の計算。
・U'poi,L'objの値。
以上が，ポーズの補正フローの詳細である。
【０１１１】
図１１は，補正時の移動方向の正逆を判定する処理を示すフローチャートである。
【０１１２】
ステップＳ１１１０で，物体がキャラクタにアタッチされているかを判断する。「いいえ」であればステップＳ１１１２に進む。「はい」であれば，ステップＳ１１１４に進む。
【０１１３】
ステップＳ１１１２で，移動方向は正であると決定される。
【０１１４】
ステップＳ１１１４で，着目点（のノードのどれか）が移動部位の連動範囲内かが判断される。「はい」であれば，ステップＳ１１１６に進む。「いいえ」であればステップＳ１１１８に進む。
【０１１５】
ステップＳ１１１６で，移動方向は正であると決定される。
【０１１６】
ステップＳ１１１８で，物体のアタッチ先が，移動部位の連動範囲内かが判断される。「はい」であればステップＳ１１２０に進む。「いいえ」であれば，ステップＳ１１２２に進む。
【０１１７】
ステップＳ１１２０で，移動方向は逆であると決定される。
【０１１８】
ステップＳ１１２２で，不正な組合せであると決定される。この場合には，補正を行わなくても良い。
【０１１９】
以上が，補正の移動方向の正逆を判定する処理の詳細である。
【０１２０】
［その他の実施例］
以上説明した処理を用いた以下の実施例を説明する。
【０１２１】
［物体としてフルートを用いる例］
図１３は，フルートを吹くポーズを示した図である。図１３（ａ）は，オリジナルキャラクタ１３００がフルート１３０９を吹いているポーズを示している。フルート１３０９が右手１３０２にアタッチされている。左手１３０３は，フルートの適正な位置に添えられている。口１３０４は，フルートの吹き口１３０５に対して適正な位置にある。
【０１２２】
図１３（ｂ）は，１３００のポーズを，補正せずにカレントキャラクタ１３１０にそのまま適用した状態を示している。フルート１３１９は右手１３１２にアタッチされている。左手１３１３は，フルート１３１９と適正な位置関係になっていない。また，フルートの吹き口（不図示）は口１３１４と大きく離れていて，カレントキャラクタ１３１０の中に隠れてしまっている。
【０１２３】
図１３（ｃ）は，以下の表の補正情報に基づいて適正に補正されたカレントキャラクタ１３２０のポーズを示している。
【０１２４】
【表１２】
2015176495.tif 000014
フルートの演奏を行っているため，頭や上体を動かすモーションが付加されても良い。フルートと口の位置関係，およびフルートと左手の位置関係が正しくなるように補正する。このモーション補正では，補正の順序が重要である。まず「逆」の移動部位（右手１３２２）を移動させ，次に「正」の移動部位（左手１３２３）を移動させる。この順序を逆にすると，まず左手の位置をフルートに合わせ，その後フルートの位置を口に合わせるので，結果はフルートと左手の位置がずれてしまう。
【０１２５】
［物体としてペットボトルを用いる例（キャップを回す）］
図１４は，ペットボトルの栓を開けるポーズを示している。図１４（ａ）は，オリジナルキャラクタ１４００の右手１４０２にペットボトル１４０９がアタッチされている。左手１４０４がペットボトルの栓１４０８に添えられている。
【０１２６】
図１４（ｂ）は，ポーズを補正せずに，カレントキャラクタ１４１０に適用した場合を示している。ペットボトルの栓１４１８と，左手１４１４との位置がずれていることが分かる。
【０１２７】
図１４（ｃ）は，カレントキャラクタ１４２０の右手１４２２を移動させて，ポーズを補正した例を示している。ペットボトルの栓１４２８の位置が移動し，左手１４２４の位置と整合している。この場合の補正の処理は以下の表の通りである。
【０１２８】
【表１３】
2015176495.tif 000015
図１４（ｄ）は，カレントキャラクタ１４３０の左手１４３４を移動させて，ポーズを補正した例を示している。左手１４３４が移動し，ペットボトルの栓１４３８と整合している。この場合の補正の処理は以下の表の通りである。
【０１２９】
【表１４】
2015176495.tif 000016
なお，両手を移動させて，ポーズを補正することも可能である（不図示）。この場合の補正の処理の内容は以下の表の通りである。
【０１３０】
【表１５】
2015176495.tif 000017
［物体としてシャベルを用いる例］
図１５は，シャベルを持ったキャラクタのポーズを補正する例を示している。図１５（ａ）は，オリジナルキャラクタ１５００がシャベル１５０９を両手で持っているポーズを示している。右手１５０４にシャベル１５０９がアタッチされている。左手１５０２は，シャベルの柄の中間位置１５０８を握っている。
【０１３１】
図１５（ｂ）は，カレントキャラクタ１５１０に，補正をせずにポーズを適用した場合を示している。シャベル１５１９の柄の中間位置１５１８と，左手１５１２との位置がずれているのが分かる。
【０１３２】
図１５（ｃ）は，カレントキャラクタ１５２０の左手１５２２を動かして，シャベル１５２９の柄の中間位置１５２８との位置関係が正しくなるように，ポーズを補正した状態を示している。この場合の補正の処理は以下の表の通りである。
【０１３３】
【表１６】
2015176495.tif 000018
［変形例］
以上説明した実施例の方法は，コンピュータにより実行され得る。また，実施例の方法は，コンピュータに実行させるプログラムとして，インプリメントされてもよい。
【０１３４】
また，以上の実施例におけるモーションデータは，物体に関連付けられたデータ構造を有する。また，このデータ構造を有するファイルは，記憶媒体に保存され得る。物体には，１つ以上のモーションデータが関連付けられて，データ構造を形成する。また，このデータ構造を有するファイルは，記憶媒体に保存され得る。三次元空間で物体を定義するデータとモーションデータとが同一の記憶媒体に格納されても良い。
【０１３５】
また，オリジナルキャラクタの着目点は，モーションデータと関連付けられて記憶され得る。カレントキャラクタの着目点は，オリジナルキャラクタの着目点に対応する着目点が，選択され得る。
【０１３６】
なお，上述の実施例において，方法のステップは，矛盾のない限り，同時に，又は順序を入れ替えて実行されてもよい。
【０１３７】
以上の実施例は，ハードウエアの装置としてインプリメントされ得る。
【０１３８】
既に述べたように，オリジナルキャラクタ，カレントキャラクタ，及び物体は，オブジェクトの語によって表現されても良い。
【０１３９】
また，物体自体が動き，回転，変形してもよい。
【０１４０】
加えて，各請求項に記載された発明は，仮想空間におけるオブジェクトのモーションの制御に限定されるものではなく，実空間における現実のオブジェクトのモーションの制御に用いることができる。実空間において，本発明を適用する場合には，位置センサ，近接センサ，撮像画像のパターン認識技術等が併用して用いられても良い。
【０１４１】
以上の実施例は，請求項に記載された発明を限定するものではなく，例示として取り扱われることは言うまでもない。
【０１４２】
本明細書において，オリジナルキャラクタ，物体，及びカレントキャラクタは，それぞれ，第１のオブジェクト，連携オブジェクト，及び第２のオブジェクトの一例である。
【符号の説明】
【０１４３】
１０１：ボーン
３１０：物体（ペットボトル）
３２０：オリジナルキャラクタ
４２０ｂ：カレントキャラクタ
【図３】
2015176495.tif 000019
【図４】
2015176495.tif 000020
【図５】
2015176495.tif 000021
【図６】
2015176495.tif 000022
【図９】
2015176495.tif 000023
【図１０】
2015176495.tif 000024
【図１１】
2015176495.tif 000025
【図１３】
2015176495.tif 000026
【図１４】
2015176495.tif 000027
【図１５】
2015176495.tif 000028
【図１】
2015176495.tif 000029
【図２】
2015176495.tif 000030
【図７】
2015176495.tif 000031
【図８】
2015176495.tif 000032
【図１２】
2015176495.tif 000033