(57)【特許請求の範囲】
【請求項１】
複数の骨が１つ以上の関節によって連結されている骨格モデルにおいて，エフェクタの捻りの角度の制御をコンピュータが実行する方法であって，前記エフェクタは，前記関節又は前記骨の端点であり，三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり，前記捻りの角度は，１つ以上の固定点から前記エフェクタに到る複数の骨の間の各関節の捻りの集積により生ずる回転角度であり，
前記方法は，
前記骨格モデルにおける前記１つ以上の固定点の各々の位置を特定する，固定点特定ステップと，
前記エフェクタの位置と前記１つ以上の固定点の各々の位置とに基づき，前記エフェクタを通る捻り軸を決定する，捻り軸決定ステップと，
前記捻り軸に略垂直であって前記エフェクタが移動し得る面上の第１の閉経路に沿って，前記エフェクタを動かす，第１閉経路移動ステップと，
を有する方法。
【請求項２】
前記第１閉経路移動ステップにおける前記エフェクタの捻り角度を第１の捻り角度として取得する，第１捻り角度取得ステップと，
前記第１の閉経路の面積と，前記第１の捻り角度とに基づき，所望の捻り角度を得るために必要な前記エフェクタが移動し得る面上の第２の閉経路を決定する，第２閉経路決定ステップと，
前記第２の閉経路に沿って，前記エフェクタを動かす，第２閉経路移動ステップと，
を更に有する，請求項１記載の方法。
【請求項３】
前記エフェクタ及び前記１つ以上の固定点のうち少なくとも１つは，オペレータの指示に基づき決定される，請求項１乃至２のうちいずれか１項記載の方法。
【請求項４】
前記閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は，表示画面に表示せず，前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させる，請求項１乃至３のうちいずれか１項記載の方法。
【請求項５】
二つ以上の前記固定点がある場合において，前記固定点の重心位置とエフェクタとを結ぶ直線を，前記捻り軸とする，請求項１乃至４のうちいずれか１項記載の方法。
【請求項６】
二つの前記固定点がある場合において，前記二つの固定点を結ぶ直線を，前記捻り軸の方向とする，請求項１乃至４のうちいずれか１項記載の方法。
【請求項７】
二つ以上の前記固定点がある場合において，前記固定点の各々の位置に質点を配置し，前記エフェクタの回りの慣性モーメントが最小となる回転軸を，前記捻り軸とする，請求項１乃至４のうちいずれか１項記載の方法。
【請求項８】
前記請求項１乃至７のうちいずれか１項記載の方法をコンピュータに実行させる命令を含む，プログラム。
【請求項９】
複数の骨が１つ以上の関節によって連結されている骨格モデルにおいて，エフェクタの捻りの角度を制御する装置であって，前記エフェクタは，前記関節又は前記骨の端点であり，三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり，前記捻りの角度は，１つ以上の固定点から前記エフェクタに到る複数の骨の間の各関節の捻りの集積により生ずる回転角度であり，
前記装置は，
前記骨格モデルにおける前記１つ以上の固定点の各々の位置を特定する，固定点特定部と，
前記エフェクタの位置と前記１つ以上の固定点の各々の位置とに基づき，前記エフェクタを通る捻り軸を決定する，捻り軸決定部と，
前記捻り軸に略垂直な前記エフェクタが移動し得る面上の第１の閉経路に沿って，前記エフェクタを動かす，第１閉経路移動部と，
を有する装置。
【請求項１０】
前記第１閉経路移動部における前記エフェクタの捻り角度を第１の捻り角度として取得する，第１捻り角度取得部と，
前記第１の閉経路の面積と，前記第１の捻り角度とに基づき，所望の捻り角度を得るために必要な前記エフェクタが移動し得る面上の第２の閉経路を決定する，第２閉経路決定部と，
前記第２の閉経路に沿って，前記エフェクタを動かす，第２閉経路移動部と，
を更に有する，請求項９記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、骨格モデルの捻りの制御に関する。
【背景技術】
【０００２】
ＣＧキャラクタ等を動かしてポーズやアニメーションを作る際に，複数の骨を関節で繋いだ骨格モデル（スケルトンモデル）（図１（ａ））が使われる場合がある。このような骨格モデルは，仮想空間ばかりでなく，ロボット制御等の実空間における対象物を制御する場合にも用いられ得る。
【０００３】
本願明細書では，図１（ｂ）のように関節の両側の骨のうち一方を親骨，他方を子骨と呼ぶことにする。関節の回転（曲げ，捻り）の状態は，親骨を基準とした子骨の向きで表すことができる。骨の向きを表すために，各々の骨に対して図１（ｂ）のように座標系が定められる。図１（ｂ）の座標系では，ｘ軸回転が捻り，ｙ軸回転とｚ軸回転が曲げとなる。子骨の捻りの状態は，ｙ軸（又はｚ軸）の向きで定義できる。
【０００４】
三次元仮想空間又は実空間で人体モデル，動物，構造物等の姿勢（ポーズ，動き等）を制御する際に用いられるこのような骨格モデルにおいては，図１（ａ）に示す各々の骨および関節の位置，角度，回転（曲げ，捻り）等を意図したとおりに制御することが必要となる。図１（ａ）に示される骨格モデルでは，各々の骨は関節で結合されており，各々の骨の動きが他の骨の動きに影響を与える。従来から，骨格をモデル化し，骨格モデルを制御する手法として，種々のものが提案されている。
【０００５】
骨格モデルを制御する手法の一例として，逆運動学（Ｉｎｖｅｒｓｅ  Ｋｉｎｅｍａｔｉｃｓ）のうちのＣＣＤ（Ｃｙｃｌｉｃ−Ｃｏｏｒｄｉｎａｔｅ−Ｄｅｓｃｅｎｔ）法を説明する。なお，本発明はこの手法への適用に限定されるものではない。
【０００６】
［ＣＣＤ（Ｃｙｃｌｉｃ−Ｃｏｏｒｄｉｎａｔｅ−Ｄｅｓｃｅｎｔ）法］
図２に示すように，複数の関節Ｊ１乃至Ｊ３と複数の骨Ｂ１乃至Ｂ３を有する骨格モデルを例にして説明する。関節Ｊ３の位置が固定されている場合において，骨格モデルの骨Ｂ１の点Ａを目標点である点Ｄに移動させる場合のＣＣＤ法の操作を以下に示す。ＣＣＤ法は，１回の計算ステップで１つの関節（Ｊ１）の角度のみを動かして，点Ａと点Ｄとの距離を最小化し，順次この操作を全ての関節（Ｊ１乃至Ｊ３）について計算する。この操作によって，順次点Ａと点Ｄとの距離が小さくなる。この計算を繰り返す。具体的な計算方法を以下に示す。
（１）図２（ｂ）に示すように，まず，関節Ｊ１の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ１を中心として骨Ｂ１を角度θ１だけ回転させ，関節Ｊ１と目標Ｄとを結んだ直線ｈ１上に，点Ａを移動させる。これによって，点Ａは，直線ｈ１上に位置するため，点Ａと点Ｄとの距離が最短になる。
（２）図２（ｃ）に示すように，次に関節Ｊ２の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ２を中心として骨Ｂ２を角度θ２だけ回転させ，関節Ｊ２と目標Ｄとを結んだ直線ｈ２上に，点Ａを移動させる。これによって，点Ａと点Ｄとの距離が最短になる。
（３）図２（ｄ）に示すように，次に関節Ｊ３の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ３を中心として骨Ｂ３を角度θ３だけ回転させ，関節Ｊ３と目標Ｄとを結んだ直線ｈ３上に，点Ａを移動させる。これによって，点Ａと点Ｄとの距離が最短になる。
（４）同じ操作を上記（１）から再度繰り返す。
【０００７】
点Ａと点Ｄの距離が閾値ｅ以下になること，及び反復回数が上限回数を超えたこと，の少なくともいずれか一方が満たされたときに計算を打ち切ることとしてもよい。
【０００８】
上記の例では，点Ａは，端点であったが，一般には，骨格の関節である場合もある。以下の説明では，骨格モデルにおける動かす点Ａをエフェクタと呼ぶ。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のＣＣＤ法は，関節を中心とした骨の曲げ操作を行うことができるが，骨の捻りの操作を意図した通りに行うことが困難である。また，ＣＣＤ法以外にも，捻りの操作を意図した通りに行うことが困難であったり，複雑であったりする手法が存在する。
【００１０】
本発明は，このような上述の課題を解決することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は，複数の骨が１つ以上の関節によって連結されている骨格モデルにおいて，捻り軸に対するエフェクタの捻りの角度を制御する方法であって，前記エフェクタは，前記関節又は前記骨の端点であり，三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり，前記方法は，前記骨格モデルにおける１つ以上の固定点の各々の位置を特定する，固定点特定ステップと，前記エフェクタの位置と前記１つ以上の固定点の各々の位置とに基づき，前記捻り軸を決定する，捻り軸決定ステップと，前記捻り軸に略垂直な平面上の第１の閉経路に沿って，前記エフェクタを動かす，第１閉経路移動ステップと，を有する方法を提供する。
【００１２】
また，本発明は，前記第１閉経路移動ステップにおける前記エフェクタの捻り角度を第１の捻り角度として取得する，第１捻り角度取得ステップと，前記第１の閉経路の面積と，前記第１の捻り角度とに基づき，所望の捻り角度を得るために必要な前記平面上の第２の閉経路を決定する，第２閉経路決定ステップと，前記第２の閉経路に沿って，前記エフェクタを動かす，第２閉経路移動ステップと，を更に有してもよい。
【００１３】
また，本発明は，前記エフェクタ及び前記１つ以上の固定点のうち少なくとも１つは，オペレータの指示に基づき決定してもよい。
【００１４】
また，本発明は，前記第１の閉経路及び前記第２の閉経路のうち少なくとも一つの閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は，表示画面に表示せず，前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させてもよい。
【００１５】
また，本発明は，二つ以上の前記固定点がある場合において，前記固定点の重心位置とエフェクタとを結ぶ直線を，前記捻り軸としてもよい。
【００１６】
更に，本発明は，二つの前記固定点がある場合において，前記二つの固定点を結ぶ直線を，前記捻り軸としてもよい。
【００１７】
また，二つ以上の前記固定点がある場合において，前記固定点の各々の位置に質点を配置し，前記エフェクタの回りの慣性モーメントが最小となる回転軸を，前記捻り軸としてもよい。
【００１８】
さらに，本発明は，上記構成を実行するプログラム，及び，これを実現する装置であってもよい。
【発明の効果】
【００１９】
骨格モデルにおいて，所望の捻りを，容易に制御することができる。
【図面の簡単な説明】
【００２０】
【図１】骨格モデル，親骨，子骨，及び座標系を示す図。
【図２】ＣＣＤ法による骨格モデルの制御方法を示す図。
【図３】平面三角形上を移動する場合の，効果を示す図。
【図４】球面三角形上を移動する場合の，球面過剰とその効果を説明する図。
【図５】子骨の関節を中心とした球と子骨の軸ｘ，ｙ，ｚとの関係を示す図。
【図６】子骨を球面三角形上を移動させた場合の捻りを示す図。
【図７】骨格モデルに捻りを加える操作を示す図。
【図８】二つの固定点を持つ骨格モデルに捻りを加える操作を示す図。
【図９】複数の骨を有する骨格モデルに捻りを加える操作を示す図。
【図１０】複数の骨を有する骨格モデルで，骨の曲がり具合が異なる場合を示す図。
【図１１】固定点が対向している場合の捻り軸を示す図。
【図１２】本発明のハードウエア構成を示す図。
【図１３】本発明の機能構成を示す図。
【図１４】本発明の処理の流れを示す図。
【発明を実施するための形態】
【００２１】
球面過剰の概念を用いて，本発明の基本的原理を以下に説明する。
【００２２】
図３に示すように，二次元空間の平面上の三角形Ａ１Ｂ１Ｃ１の辺に沿って，矢印ｖ１を有する図形を移動させる。まず、図３（ａ）のように点Ａ１から点Ｂ１を経由させ，更に図３（ｂ）のように，点Ｃ１を経由させ，点Ａ１に戻す操作を行う。この場合，平面上を移動する矢印ｖ１の向きは常に一定方向を向いている。したがって，矢印ｖ１の向きは，上記の操作を行った前後で変化しない。
【００２３】
図４は，球面上に描かれた球面三角形Ａ２Ｂ２Ｃ２を用いた場合を示している。図４（ａ）のように矢印ｖ２を有する図形を点Ａ２から点Ｂ２を経由させ，更に図４（ｂ）のように，点Ｃ２を経由させ，点Ａ２に戻す操作を行う。この場合，球面三角形を移動する矢印ｖ２の向きは，上記の操作を行った前後で，ｖ２からｖ３に変化している。
【００２４】
図４の現象は，球面過剰に起因するものとして，知られている。球面過剰とは，球面多角形の内角の和から，この多角形と同じ辺数を有する平面多角形の内角の和を引いた差のことで，常に正の値であることから，このように呼ばれている。球面過剰の値は，その球面の半径を１とした場合，その球面多角形の面積に等しい。また，これは球の中心から見た球面多角形の立体角に等しい。
【００２５】
図５に示すように，関節を中心点とする半径１の球面Ｓを作り，子骨のｘ軸と球面Ｓとの交点をＰとする。関節の曲げ状態は，図５のように，点Ｐの位置で表すことができる。  捻りの状態は，ｙ軸（あるいはｚ軸）の向きで知ることができる。
【００２６】
図６に示すように関節を曲げて（捻りは加えずに）子骨の向きを変え，Ｐ１→Ｐ２→Ｐ３→Ｐ１と動かして元の位置に戻すと，球面過剰の効果によりｙ軸（ｚ軸）の向きが変わり，捻りが発生する。
【実施例】
【００２７】
一般に，ＩＫで動かす（位置・向きを所望の状態にする）関節点をエフェクタと呼ぶ。図７に示すように，骨格モデルの固定点の位置をＰｒとし，エフェクタの初期位置をＰ０とする。エフェクタをＰ０→Ｐ１→Ｐ２→Ｐ３→Ｐ４→Ｐ１→Ｐ０とループするように動かす。このとき，エフェクタとＰｒとの距離が変わらないようにする（即ち，ＰｒＰ０＝ＰｒＰ１＝ＰｒＰ２＝ＰｒＰ３＝ＰｒＰ４）。球面過剰の効果により捻りが発生する。
【００２８】
図８のように，分岐した骨格モデルが複数の固定点を持つ場合は，複数の固定点（Ｐｒ１，Ｐｒ２，…）の重心Ｐｒｍを求め，図６のＰｒの替わりにこのＰｒｍを使う。
【００２９】
または，骨格モデルのうちの１本の骨（例えば最も根元の骨，あるいは最も末端の骨等）の方向を捻り軸の方向としてもよい。
【００３０】
［曲がり分布の影響］
複数の骨が連結した骨格モデルを上述の手法によって捻る場合，関節の曲がりの分布が結果に影響する点を以下に説明する。
【００３１】
エフェクタを図９のようにループ移動させたとする。骨格モデルが図１０（ａ）のように根元のみで曲がった場合と，図１０（ｃ）のように先端部のみで曲がった場合とを比較する。図１０（ａ）では根元の関節のみに捻りが生じ，図１０（ｃ）では先端の関節のみに捻りが生じる。図１０（ａ）の根元の関節の曲げ角と，図１０（ｃ）の先端の関節の曲げ角とを比べると，後者のほうが大きい。そのため，生じる捻り角は，図１０（ｃ）のほうが大きくなる。また，図１０（ｂ）は，その中間を示しており，曲げが一つの関節に集中せず，全部の関節が同程度に曲がっている。このような，複数の関節の曲がり具合が異なる現象は，骨格モデルを動かすIKアルゴリズムとして何れのアルゴリズムを採用するかに影響される場合がある。あるいは，各々の関節の曲がり具合に異なる抵抗値を設定している場合にも発生する。
【００３２】
このように，関節の曲がりの分布によって，生じる捻りの分布だけでなく，捻りの総量にも違いが出る。そのため，均等な捻りが欲しい場合には，曲がりの分布が均等になるようにＩＫを調整する必要がある。逆に，曲がりを不均等にすることで，敢えて捻りを不均等にすることもできる。
【００３３】
また，所望の捻り角を生じさせるには，以下に述べるような手法を使ってもよい。
【００３４】
［定量的操作］
上述の手法では，生じる捻りの総量は曲がりの分布によって変わる。そのため，所望の捻り角を生じさせるような移動ループを予め演算により求めることは困難である（あるいは，計算量が膨大となる）。
【００３５】
そこで以下のように，微小予動作を使って定量的操作を実現する。
（１）微小な移動ループに沿ってエフェクタを動かし，生じた捻り量を調べ，ループ面積と捻り角の比を求める。
（２）この比の値を使って，比例計算により，所望の捻り角を生じさせるループ面積を求める。
（３）得られたループ面積の移動ループを作り，このループに沿ってエフェクタを動かす。
【００３６】
なお，上記（２）におけるループ面積は，球面上の面積であるが，近似的にループを含む平面の面積に置き換えて処理をすることも可能である。なお，ループを含む平面を用いる場合には，捻りの軸に略垂直の平面を用いることにより，捻り軸回りの捻りが発生しやすくなる。
【００３７】
また，上記（１）の微少な移動ループによるエフェクタの捻れをオペレータに表示させ，その後，オペレータの指示に基づいて，同様の微少操作を連続して実行する。オペレータが，所望の捻り量に達したと判断した時点で，オペレータからの指示を受け付け，微少量の操作を停止させる。この一連の操作によって，所望の捻り量を得ることができる。
【００３８】
［複数固定点に対する捻り軸の決定］
複数個定点に対する捻りの手法については，既に概略を述べたが，以下に，更に詳しく述べる。
【００３９】
図８のように，２個の固定点Ｐｒ１，Ｐｒ２が，エフェクタから見てほぼ同方向にある場合は，前述のようにＰｒ１，Ｐｒ２の重心位置Ｐｒｍを使うことで良好な挙動が得られる。
【００４０】
しかし，図１１（ａ）のように，エフェクタＰｅから見てＰｒ１，Ｐｒ２が互いにほぼ反対方向にある場合は，図１１（ｂ）のようにＰｒ１，Ｐｒ２を結ぶ直線を捻り軸の方向とし，この捻り軸に垂直な平面内でエフェクタを動かすほうが自然な操作感になる。
【００４１】
固定点の個数が２個の場合には，同方向・反対方向の判定は比較的容易である。エフェクタからＰｒ１，Ｐｒ２それぞれに向かうベクトルの間の角度を使えばよい。固定点が３個以上になる場合には，オペレータからの指示に基づいて，回転軸を決定してもよい。あるいは，以下の慣性主軸を応用して，決定してもよい。
【００４２】
［慣性主軸の応用］
固定点の個数が複数個である場合に，捻り軸方向を一貫して決められる方法について以下に説明する。
【００４３】
剛体の力学において，慣性モーメントを表すテンソル（慣性テンソル）の主軸を求める方法がある。この手法を応用する。固定点の位置に質量１の質点を配置し，エフェクタ回りの慣性モーメントが最小になる回転軸を求め，これを捻り軸の方向とする。慣性モーメントを次式のようにＩとする。
【００４４】
【数１】
0005636303.tif 000002
ｎ個の固定点をＰｒｉ（ｉ＝１，．．．，ｎ）とする。エフェクタを原点としたときの，固定点Ｐｒｉの座標を（ｘｉ，ｙｉ，ｚｉ）とする。慣性モーメントＩは次式により得られる。
【００４５】
【数２】
0005636303.tif 000003
Ｉの固有値Ｉ０，Ｉ１，Ｉ２とこれに対応する固有ベクトルｕ０，ｕ１，ｕ２を求める。ただし｜ｕ０｜＝｜ｕ１｜＝｜ｕ２｜＝１とする。
捻り軸は，次のようにして決定してもよい。Ｉ０，Ｉ１，Ｉ２のうち最小のものをＩａとし，これに対応する固有ベクトルをｕａとする。ｕａを捻り軸の方向としてもよい。
【００４６】
なお，図７の場合は，上述のようにエフェクタからＰｒｍまでの距離が，エフェクタを動かす際の基準距離となった。これに代わる基準距離ｌａを，以下の式によって求めて用いてもよい。ただしｕａ≡（ｘａ，ｙａ，ｚａ）とする。
【００４７】
【数３】
0005636303.tif 000004
［ハードウエア構成］
図１２は，本願発明の実施例の装置構成を示す図である。コンピュータ１２００には，キーボード１２０５，マウス１２０６，ペン１２０８を含むタブレット１２０７，ディスプレイ１２０１が接続されている。ディスプレイ１２０１上には，キャンバス１２０２が表示され，キャンバス１２０２上に図形が描画されている（１２０３）。
【００４８】
また，図１３は，本発明の機能構成図である。固定点特定部１３０１は，前記骨格モデルにおける１つ以上の固定点の各々の位置を特定する。捻り軸決定部１３０３は，エフェクタの位置と１つ以上の固定点の各々の位置とに基づき，前記捻り軸を決定する。第１閉経路移動部１３０５は，前記捻り軸に略垂直な平面上の第１の閉経路に沿って，エフェクタを動かす。第１捻り角度取得部１３０９は，第１閉経路移動部における前記エフェクタの捻り角度を第１の捻り角度として取得する。第２閉経路決定部１３１１は，第１の閉経路の面積と，第１の捻り角度とに基づき，所望の捻り角度を得るために必要な前記平面の第２の閉経路を決定する。第２閉経路移動部１３０７は，第２の閉経路に沿って，前記エフェクタを動かす。そして，メモリ１３１３，入力手段１３１５，表示手段１３１７等を有する。
【００４９】
図１４は，本発明の処理の流れを示した図である。まず，骨格モデルにおける１つ以上の固定点の各々の位置を特定する（Ｓ１４０１）。そして，エフェクタの位置と前記１つ以上の固定点の各々の位置とに基づき，前記捻り軸を決定する（Ｓ１４０３）。捻り軸に略垂直な平面上の第１の閉経路に沿って，前記エフェクタを動かす（Ｓ１４０５）。そして，捻りを有する骨格モデルが表示される（Ｓ１５０７）。
【００５０】
以上，本発明について，実施例を説明したが，複数の実施例は，排他的なものではない点に留意すべきである。また，請求項に係る本発明は，上述の実施例に限定されるものではない。
【図１】
0005636303.tif 000005
【図２】
0005636303.tif 000006
【図３】
0005636303.tif 000007
【図４】
0005636303.tif 000008
【図５】
0005636303.tif 000009
【図６】
0005636303.tif 000010
【図７】
0005636303.tif 000011
【図８】
0005636303.tif 000012
【図９】
0005636303.tif 000013
【図１０】
0005636303.tif 000014
【図１１】
0005636303.tif 000015
【図１２】
0005636303.tif 000016
【図１３】
0005636303.tif 000017
【図１４】
0005636303.tif 000018