骨格モデルの捻りの制御装置,方法及びプログラム
【課題】骨格モデルで,骨に対して所望の量の捻りを加える操作を,少ない計算量で高速に実行する。
【解決手段】複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,前記方法は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,を有する。
【解決手段】複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,前記方法は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,を有する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、骨格モデルの捻りの制御に関する。
【背景技術】
【0002】
CGキャラクタ等を動かしてポーズやアニメーションを作る際に,複数の骨を関節で繋いだ骨格モデル(スケルトンモデル)(図1(a))が使われる場合がある。このような骨格モデルは,仮想空間ばかりでなく,ロボット制御等の実空間における対象物を制御する場合にも用いられ得る。
【0003】
本願明細書では,図1(b)のように関節の両側の骨のうち一方を親骨,他方を子骨と呼ぶことにする。関節の回転(曲げ,捻り)の状態は,親骨を基準とした子骨の向きで表すことができる。骨の向きを表すために,各々の骨に対して図1(b)のように座標系が定められる。図1(b)の座標系では,x軸回転が捻り,y軸回転とz軸回転が曲げとなる。子骨の捻りの状態は,y軸(又はz軸)の向きで定義できる。
【0004】
三次元仮想空間又は実空間で人体モデル,動物,構造物等の姿勢(ポーズ,動き等)を制御する際に用いられるこのような骨格モデルにおいては,図1(a)に示す各々の骨および関節の位置,角度,回転(曲げ,捻り)等を意図したとおりに制御することが必要となる。図1(a)に示される骨格モデルでは,各々の骨は関節で結合されており,各々の骨の動きが他の骨の動きに影響を与える。従来から,骨格をモデル化し,骨格モデルを制御する手法として,種々のものが提案されている。
【0005】
骨格モデルを制御する手法の一例として,逆運動学(Inverse Kinematics)のうちのCCD(Cyclic−Coordinate−Descent)法を説明する。なお,本発明はこの手法への適用に限定されるものではない。
【0006】
[CCD(Cyclic−Coordinate−Descent)法]
図2に示すように,複数の関節J1乃至J3と複数の骨B1乃至B3を有する骨格モデルを例にして説明する。関節J3の位置が固定されている場合において,骨格モデルの骨B1の点Aを目標点である点Dに移動させる場合のCCD法の操作を以下に示す。CCD法は,1回の計算ステップで1つの関節(J1)の角度のみを動かして,点Aと点Dとの距離を最小化し,順次この操作を全ての関節(J1乃至J3)について計算する。この操作によって,順次点Aと点Dとの距離が小さくなる。この計算を繰り返す。具体的な計算方法を以下に示す。
(1)図2(b)に示すように,まず,関節J1の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J1を中心として骨B1を角度θ1だけ回転させ,関節J1と目標Dとを結んだ直線h1上に,点Aを移動させる。これによって,点Aは,直線h1上に位置するため,点Aと点Dとの距離が最短になる。
(2)図2(c)に示すように,次に関節J2の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J2を中心として骨B2を角度θ2だけ回転させ,関節J2と目標Dとを結んだ直線h2上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(3)図2(d)に示すように,次に関節J3の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J3を中心として骨B3を角度θ3だけ回転させ,関節J3と目標Dとを結んだ直線h3上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(4)同じ操作を上記(1)から再度繰り返す。
【0007】
点Aと点Dの距離が閾値e以下になること,及び反復回数が上限回数を超えたこと,の少なくともいずれか一方が満たされたときに計算を打ち切ることとしてもよい。
【0008】
上記の例では,点Aは,端点であったが,一般には,骨格の関節である場合もある。以下の説明では,骨格モデルにおける動かす点Aをエフェクタと呼ぶ。
【発明の概要】
【発明が解決しようとする課題】
【0009】
上述のCCD法は,関節を中心とした骨の曲げ操作を行うことができるが,骨の捻りの操作を意図した通りに行うことが困難である。また,CCD法以外にも,捻りの操作を意図した通りに行うことが困難であったり,複雑であったりする手法が存在する。
【0010】
本発明は,このような上述の課題を解決することを目的とする。
【課題を解決するための手段】
【0011】
本発明は,複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,前記方法は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,を有する方法を提供する。
【0012】
また,本発明は,前記第1閉経路移動ステップにおける前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得ステップと,前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面上の第2の閉経路を決定する,第2閉経路決定ステップと,前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動ステップと,を更に有してもよい。
【0013】
また,本発明は,前記エフェクタ及び前記1つ以上の固定点のうち少なくとも1つは,オペレータの指示に基づき決定してもよい。
【0014】
また,本発明は,前記第1の閉経路及び前記第2の閉経路のうち少なくとも一つの閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は,表示画面に表示せず,前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させてもよい。
【0015】
また,本発明は,二つ以上の前記固定点がある場合において,前記固定点の重心位置とエフェクタとを結ぶ直線を,前記捻り軸としてもよい。
【0016】
更に,本発明は,二つの前記固定点がある場合において,前記二つの固定点を結ぶ直線を,前記捻り軸としてもよい。
【0017】
また,二つ以上の前記固定点がある場合において,前記固定点の各々の位置に質点を配置し,前記エフェクタの回りの慣性モーメントが最小となる回転軸を,前記捻り軸としてもよい。
【0018】
さらに,本発明は,上記構成を実行するプログラム,及び,これを実現する装置であってもよい。
【発明の効果】
【0019】
骨格モデルにおいて,所望の捻りを,容易に制御することができる。
【図面の簡単な説明】
【0020】
【図1】骨格モデル,親骨,子骨,及び座標系を示す図。
【図2】CCD法による骨格モデルの制御方法を示す図。
【図3】平面三角形上を移動する場合の,効果を示す図。
【図4】球面三角形上を移動する場合の,球面過剰とその効果を説明する図。
【図5】子骨の関節を中心とした球と子骨の軸x,y,zとの関係を示す図。
【図6】子骨を球面三角形上を移動させた場合の捻りを示す図。
【図7】骨格モデルに捻りを加える操作を示す図。
【図8】二つの固定点を持つ骨格モデルに捻りを加える操作を示す図。
【図9】複数の骨を有する骨格モデルに捻りを加える操作を示す図。
【図10】複数の骨を有する骨格モデルで,骨の曲がり具合が異なる場合を示す図。
【図11】固定点が対向している場合の捻り軸を示す図。
【図12】本発明のハードウエア構成を示す図。
【図13】本発明の機能構成を示す図。
【図14】本発明の処理の流れを示す図。
【発明を実施するための形態】
【0021】
球面過剰の概念を用いて,本発明の基本的原理を以下に説明する。
【0022】
図3に示すように,二次元空間の平面上の三角形A1B1C1の辺に沿って,矢印v1を有する図形を移動させる。まず、図3(a)のように点A1から点B1を経由させ,更に図3(b)のように,点C1を経由させ,点A1に戻す操作を行う。この場合,平面上を移動する矢印v1の向きは常に一定方向を向いている。したがって,矢印v1の向きは,上記の操作を行った前後で変化しない。
【0023】
図4は,球面上に描かれた球面三角形A2B2C2を用いた場合を示している。図4(a)のように矢印v2を有する図形を点A2から点B2を経由させ,更に図4(b)のように,点C2を経由させ,点A2に戻す操作を行う。この場合,球面三角形を移動する矢印v2の向きは,上記の操作を行った前後で,v2からv3に変化している。
【0024】
図4の現象は,球面過剰に起因するものとして,知られている。球面過剰とは,球面多角形の内角の和から,この多角形と同じ辺数を有する平面多角形の内角の和を引いた差のことで,常に正の値であることから,このように呼ばれている。球面過剰の値は,その球面の半径を1とした場合,その球面多角形の面積に等しい。また,これは球の中心から見た球面多角形の立体角に等しい。
【0025】
図5に示すように,関節を中心点とする半径1の球面Sを作り,子骨のx軸と球面Sとの交点をPとする。関節の曲げ状態は,図5のように,点Pの位置で表すことができる。 捻りの状態は,y軸(あるいはz軸)の向きで知ることができる。
【0026】
図6に示すように関節を曲げて(捻りは加えずに)子骨の向きを変え,P1→P2→P3→P1と動かして元の位置に戻すと,球面過剰の効果によりy軸(z軸)の向きが変わり,捻りが発生する。
【実施例】
【0027】
一般に,IKで動かす(位置・向きを所望の状態にする)関節点をエフェクタと呼ぶ。図7に示すように,骨格モデルの固定点の位置をPrとし,エフェクタの初期位置をP0とする。エフェクタをP0→P1→P2→P3→P4→P1→P0とループするように動かす。このとき,エフェクタとPrとの距離が変わらないようにする(即ち,PrP0=PrP1=PrP2=PrP3=PrP4)。球面過剰の効果により捻りが発生する。
【0028】
図8のように,分岐した骨格モデルが複数の固定点を持つ場合は,複数の固定点(Pr1,Pr2,…)の重心Prmを求め,図6のPrの替わりにこのPrmを使う。
【0029】
または,骨格モデルのうちの1本の骨(例えば最も根元の骨,あるいは最も末端の骨等)の方向を捻り軸の方向としてもよい。
【0030】
[曲がり分布の影響]
複数の骨が連結した骨格モデルを上述の手法によって捻る場合,関節の曲がりの分布が結果に影響する点を以下に説明する。
【0031】
エフェクタを図9のようにループ移動させたとする。骨格モデルが図10(a)のように根元のみで曲がった場合と,図10(c)のように先端部のみで曲がった場合とを比較する。図10(a)では根元の関節のみに捻りが生じ,図10(c)では先端の関節のみに捻りが生じる。図10(a)の根元の関節の曲げ角と,図10(c)の先端の関節の曲げ角とを比べると,後者のほうが大きい。そのため,生じる捻り角は,図10(c)のほうが大きくなる。また,図10(b)は,その中間を示しており,曲げが一つの関節に集中せず,全部の関節が同程度に曲がっている。このような,複数の関節の曲がり具合が異なる現象は,骨格モデルを動かすIKアルゴリズムとして何れのアルゴリズムを採用するかに影響される場合がある。あるいは,各々の関節の曲がり具合に異なる抵抗値を設定している場合にも発生する。
【0032】
このように,関節の曲がりの分布によって,生じる捻りの分布だけでなく,捻りの総量にも違いが出る。そのため,均等な捻りが欲しい場合には,曲がりの分布が均等になるようにIKを調整する必要がある。逆に,曲がりを不均等にすることで,敢えて捻りを不均等にすることもできる。
【0033】
また,所望の捻り角を生じさせるには,以下に述べるような手法を使ってもよい。
【0034】
[定量的操作]
上述の手法では,生じる捻りの総量は曲がりの分布によって変わる。そのため,所望の捻り角を生じさせるような移動ループを予め演算により求めることは困難である(あるいは,計算量が膨大となる)。
【0035】
そこで以下のように,微小予動作を使って定量的操作を実現する。
(1)微小な移動ループに沿ってエフェクタを動かし,生じた捻り量を調べ,ループ面積と捻り角の比を求める。
(2)この比の値を使って,比例計算により,所望の捻り角を生じさせるループ面積を求める。
(3)得られたループ面積の移動ループを作り,このループに沿ってエフェクタを動かす。
【0036】
なお,上記(2)におけるループ面積は,球面上の面積であるが,近似的にループを含む平面の面積に置き換えて処理をすることも可能である。なお,ループを含む平面を用いる場合には,捻りの軸に略垂直の平面を用いることにより,捻り軸回りの捻りが発生しやすくなる。
【0037】
また,上記(1)の微少な移動ループによるエフェクタの捻れをオペレータに表示させ,その後,オペレータの指示に基づいて,同様の微少操作を連続して実行する。オペレータが,所望の捻り量に達したと判断した時点で,オペレータからの指示を受け付け,微少量の操作を停止させる。この一連の操作によって,所望の捻り量を得ることができる。
【0038】
[複数固定点に対する捻り軸の決定]
複数個定点に対する捻りの手法については,既に概略を述べたが,以下に,更に詳しく述べる。
【0039】
図8のように,2個の固定点Pr1,Pr2が,エフェクタから見てほぼ同方向にある場合は,前述のようにPr1,Pr2の重心位置Prmを使うことで良好な挙動が得られる。
【0040】
しかし,図11(a)のように,エフェクタPeから見てPr1,Pr2が互いにほぼ反対方向にある場合は,図11(b)のようにPr1,Pr2を結ぶ直線を捻り軸の方向とし,この捻り軸に垂直な平面内でエフェクタを動かすほうが自然な操作感になる。
【0041】
固定点の個数が2個の場合には,同方向・反対方向の判定は比較的容易である。エフェクタからPr1,Pr2それぞれに向かうベクトルの間の角度を使えばよい。固定点が3個以上になる場合には,オペレータからの指示に基づいて,回転軸を決定してもよい。あるいは,以下の慣性主軸を応用して,決定してもよい。
【0042】
[慣性主軸の応用]
固定点の個数が複数個である場合に,捻り軸方向を一貫して決められる方法について以下に説明する。
【0043】
剛体の力学において,慣性モーメントを表すテンソル(慣性テンソル)の主軸を求める方法がある。この手法を応用する。固定点の位置に質量1の質点を配置し,エフェクタ回りの慣性モーメントが最小になる回転軸を求め,これを捻り軸の方向とする。慣性モーメントを次式のようにIとする。
【0044】
【数1】
n個の固定点をPri(i=1,...,n)とする。エフェクタを原点としたときの,固定点Priの座標を(xi,yi,zi)とする。慣性モーメントIは次式により得られる。
【0045】
【数2】
Iの固有値I0,I1,I2とこれに対応する固有ベクトルu0,u1,u2を求める。ただし|u0|=|u1|=|u2|=1とする。
捻り軸は,次のようにして決定してもよい。I0,I1,I2のうち最小のものをIaとし,これに対応する固有ベクトルをuaとする。uaを捻り軸の方向としてもよい。
【0046】
なお,図7の場合は,上述のようにエフェクタからPrmまでの距離が,エフェクタを動かす際の基準距離となった。これに代わる基準距離laを,以下の式によって求めて用いてもよい。ただしua≡(xa,ya,za)とする。
【0047】
【数3】
[ハードウエア構成]
図12は,本願発明の実施例の装置構成を示す図である。コンピュータ1200には,キーボード1205,マウス1206,ペン1208を含むタブレット1207,ディスプレイ1201が接続されている。ディスプレイ1201上には,キャンバス1202が表示され,キャンバス1202上に図形が描画されている(1203)。
【0048】
また,図13は,本発明の機能構成図である。固定点特定部1301は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する。捻り軸決定部1303は,エフェクタの位置と1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する。第1閉経路移動部1305は,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,エフェクタを動かす。第1捻り角度取得部1309は,第1閉経路移動部における前記エフェクタの捻り角度を第1の捻り角度として取得する。第2閉経路決定部1311は,第1の閉経路の面積と,第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面の第2の閉経路を決定する。第2閉経路移動部1307は,第2の閉経路に沿って,前記エフェクタを動かす。そして,メモリ1313,入力手段1315,表示手段1317等を有する。
【0049】
図14は,本発明の処理の流れを示した図である。まず,骨格モデルにおける1つ以上の固定点の各々の位置を特定する(S1401)。そして,エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する(S1403)。捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす(S1405)。そして,捻りを有する骨格モデルが表示される(S1507)。
【0050】
以上,本発明について,実施例を説明したが,複数の実施例は,排他的なものではない点に留意すべきである。また,請求項に係る本発明は,上述の実施例に限定されるものではない。
【技術分野】
【0001】
本発明は、骨格モデルの捻りの制御に関する。
【背景技術】
【0002】
CGキャラクタ等を動かしてポーズやアニメーションを作る際に,複数の骨を関節で繋いだ骨格モデル(スケルトンモデル)(図1(a))が使われる場合がある。このような骨格モデルは,仮想空間ばかりでなく,ロボット制御等の実空間における対象物を制御する場合にも用いられ得る。
【0003】
本願明細書では,図1(b)のように関節の両側の骨のうち一方を親骨,他方を子骨と呼ぶことにする。関節の回転(曲げ,捻り)の状態は,親骨を基準とした子骨の向きで表すことができる。骨の向きを表すために,各々の骨に対して図1(b)のように座標系が定められる。図1(b)の座標系では,x軸回転が捻り,y軸回転とz軸回転が曲げとなる。子骨の捻りの状態は,y軸(又はz軸)の向きで定義できる。
【0004】
三次元仮想空間又は実空間で人体モデル,動物,構造物等の姿勢(ポーズ,動き等)を制御する際に用いられるこのような骨格モデルにおいては,図1(a)に示す各々の骨および関節の位置,角度,回転(曲げ,捻り)等を意図したとおりに制御することが必要となる。図1(a)に示される骨格モデルでは,各々の骨は関節で結合されており,各々の骨の動きが他の骨の動きに影響を与える。従来から,骨格をモデル化し,骨格モデルを制御する手法として,種々のものが提案されている。
【0005】
骨格モデルを制御する手法の一例として,逆運動学(Inverse Kinematics)のうちのCCD(Cyclic−Coordinate−Descent)法を説明する。なお,本発明はこの手法への適用に限定されるものではない。
【0006】
[CCD(Cyclic−Coordinate−Descent)法]
図2に示すように,複数の関節J1乃至J3と複数の骨B1乃至B3を有する骨格モデルを例にして説明する。関節J3の位置が固定されている場合において,骨格モデルの骨B1の点Aを目標点である点Dに移動させる場合のCCD法の操作を以下に示す。CCD法は,1回の計算ステップで1つの関節(J1)の角度のみを動かして,点Aと点Dとの距離を最小化し,順次この操作を全ての関節(J1乃至J3)について計算する。この操作によって,順次点Aと点Dとの距離が小さくなる。この計算を繰り返す。具体的な計算方法を以下に示す。
(1)図2(b)に示すように,まず,関節J1の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J1を中心として骨B1を角度θ1だけ回転させ,関節J1と目標Dとを結んだ直線h1上に,点Aを移動させる。これによって,点Aは,直線h1上に位置するため,点Aと点Dとの距離が最短になる。
(2)図2(c)に示すように,次に関節J2の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J2を中心として骨B2を角度θ2だけ回転させ,関節J2と目標Dとを結んだ直線h2上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(3)図2(d)に示すように,次に関節J3の回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節J3を中心として骨B3を角度θ3だけ回転させ,関節J3と目標Dとを結んだ直線h3上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(4)同じ操作を上記(1)から再度繰り返す。
【0007】
点Aと点Dの距離が閾値e以下になること,及び反復回数が上限回数を超えたこと,の少なくともいずれか一方が満たされたときに計算を打ち切ることとしてもよい。
【0008】
上記の例では,点Aは,端点であったが,一般には,骨格の関節である場合もある。以下の説明では,骨格モデルにおける動かす点Aをエフェクタと呼ぶ。
【発明の概要】
【発明が解決しようとする課題】
【0009】
上述のCCD法は,関節を中心とした骨の曲げ操作を行うことができるが,骨の捻りの操作を意図した通りに行うことが困難である。また,CCD法以外にも,捻りの操作を意図した通りに行うことが困難であったり,複雑であったりする手法が存在する。
【0010】
本発明は,このような上述の課題を解決することを目的とする。
【課題を解決するための手段】
【0011】
本発明は,複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,前記方法は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,を有する方法を提供する。
【0012】
また,本発明は,前記第1閉経路移動ステップにおける前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得ステップと,前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面上の第2の閉経路を決定する,第2閉経路決定ステップと,前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動ステップと,を更に有してもよい。
【0013】
また,本発明は,前記エフェクタ及び前記1つ以上の固定点のうち少なくとも1つは,オペレータの指示に基づき決定してもよい。
【0014】
また,本発明は,前記第1の閉経路及び前記第2の閉経路のうち少なくとも一つの閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は,表示画面に表示せず,前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させてもよい。
【0015】
また,本発明は,二つ以上の前記固定点がある場合において,前記固定点の重心位置とエフェクタとを結ぶ直線を,前記捻り軸としてもよい。
【0016】
更に,本発明は,二つの前記固定点がある場合において,前記二つの固定点を結ぶ直線を,前記捻り軸としてもよい。
【0017】
また,二つ以上の前記固定点がある場合において,前記固定点の各々の位置に質点を配置し,前記エフェクタの回りの慣性モーメントが最小となる回転軸を,前記捻り軸としてもよい。
【0018】
さらに,本発明は,上記構成を実行するプログラム,及び,これを実現する装置であってもよい。
【発明の効果】
【0019】
骨格モデルにおいて,所望の捻りを,容易に制御することができる。
【図面の簡単な説明】
【0020】
【図1】骨格モデル,親骨,子骨,及び座標系を示す図。
【図2】CCD法による骨格モデルの制御方法を示す図。
【図3】平面三角形上を移動する場合の,効果を示す図。
【図4】球面三角形上を移動する場合の,球面過剰とその効果を説明する図。
【図5】子骨の関節を中心とした球と子骨の軸x,y,zとの関係を示す図。
【図6】子骨を球面三角形上を移動させた場合の捻りを示す図。
【図7】骨格モデルに捻りを加える操作を示す図。
【図8】二つの固定点を持つ骨格モデルに捻りを加える操作を示す図。
【図9】複数の骨を有する骨格モデルに捻りを加える操作を示す図。
【図10】複数の骨を有する骨格モデルで,骨の曲がり具合が異なる場合を示す図。
【図11】固定点が対向している場合の捻り軸を示す図。
【図12】本発明のハードウエア構成を示す図。
【図13】本発明の機能構成を示す図。
【図14】本発明の処理の流れを示す図。
【発明を実施するための形態】
【0021】
球面過剰の概念を用いて,本発明の基本的原理を以下に説明する。
【0022】
図3に示すように,二次元空間の平面上の三角形A1B1C1の辺に沿って,矢印v1を有する図形を移動させる。まず、図3(a)のように点A1から点B1を経由させ,更に図3(b)のように,点C1を経由させ,点A1に戻す操作を行う。この場合,平面上を移動する矢印v1の向きは常に一定方向を向いている。したがって,矢印v1の向きは,上記の操作を行った前後で変化しない。
【0023】
図4は,球面上に描かれた球面三角形A2B2C2を用いた場合を示している。図4(a)のように矢印v2を有する図形を点A2から点B2を経由させ,更に図4(b)のように,点C2を経由させ,点A2に戻す操作を行う。この場合,球面三角形を移動する矢印v2の向きは,上記の操作を行った前後で,v2からv3に変化している。
【0024】
図4の現象は,球面過剰に起因するものとして,知られている。球面過剰とは,球面多角形の内角の和から,この多角形と同じ辺数を有する平面多角形の内角の和を引いた差のことで,常に正の値であることから,このように呼ばれている。球面過剰の値は,その球面の半径を1とした場合,その球面多角形の面積に等しい。また,これは球の中心から見た球面多角形の立体角に等しい。
【0025】
図5に示すように,関節を中心点とする半径1の球面Sを作り,子骨のx軸と球面Sとの交点をPとする。関節の曲げ状態は,図5のように,点Pの位置で表すことができる。 捻りの状態は,y軸(あるいはz軸)の向きで知ることができる。
【0026】
図6に示すように関節を曲げて(捻りは加えずに)子骨の向きを変え,P1→P2→P3→P1と動かして元の位置に戻すと,球面過剰の効果によりy軸(z軸)の向きが変わり,捻りが発生する。
【実施例】
【0027】
一般に,IKで動かす(位置・向きを所望の状態にする)関節点をエフェクタと呼ぶ。図7に示すように,骨格モデルの固定点の位置をPrとし,エフェクタの初期位置をP0とする。エフェクタをP0→P1→P2→P3→P4→P1→P0とループするように動かす。このとき,エフェクタとPrとの距離が変わらないようにする(即ち,PrP0=PrP1=PrP2=PrP3=PrP4)。球面過剰の効果により捻りが発生する。
【0028】
図8のように,分岐した骨格モデルが複数の固定点を持つ場合は,複数の固定点(Pr1,Pr2,…)の重心Prmを求め,図6のPrの替わりにこのPrmを使う。
【0029】
または,骨格モデルのうちの1本の骨(例えば最も根元の骨,あるいは最も末端の骨等)の方向を捻り軸の方向としてもよい。
【0030】
[曲がり分布の影響]
複数の骨が連結した骨格モデルを上述の手法によって捻る場合,関節の曲がりの分布が結果に影響する点を以下に説明する。
【0031】
エフェクタを図9のようにループ移動させたとする。骨格モデルが図10(a)のように根元のみで曲がった場合と,図10(c)のように先端部のみで曲がった場合とを比較する。図10(a)では根元の関節のみに捻りが生じ,図10(c)では先端の関節のみに捻りが生じる。図10(a)の根元の関節の曲げ角と,図10(c)の先端の関節の曲げ角とを比べると,後者のほうが大きい。そのため,生じる捻り角は,図10(c)のほうが大きくなる。また,図10(b)は,その中間を示しており,曲げが一つの関節に集中せず,全部の関節が同程度に曲がっている。このような,複数の関節の曲がり具合が異なる現象は,骨格モデルを動かすIKアルゴリズムとして何れのアルゴリズムを採用するかに影響される場合がある。あるいは,各々の関節の曲がり具合に異なる抵抗値を設定している場合にも発生する。
【0032】
このように,関節の曲がりの分布によって,生じる捻りの分布だけでなく,捻りの総量にも違いが出る。そのため,均等な捻りが欲しい場合には,曲がりの分布が均等になるようにIKを調整する必要がある。逆に,曲がりを不均等にすることで,敢えて捻りを不均等にすることもできる。
【0033】
また,所望の捻り角を生じさせるには,以下に述べるような手法を使ってもよい。
【0034】
[定量的操作]
上述の手法では,生じる捻りの総量は曲がりの分布によって変わる。そのため,所望の捻り角を生じさせるような移動ループを予め演算により求めることは困難である(あるいは,計算量が膨大となる)。
【0035】
そこで以下のように,微小予動作を使って定量的操作を実現する。
(1)微小な移動ループに沿ってエフェクタを動かし,生じた捻り量を調べ,ループ面積と捻り角の比を求める。
(2)この比の値を使って,比例計算により,所望の捻り角を生じさせるループ面積を求める。
(3)得られたループ面積の移動ループを作り,このループに沿ってエフェクタを動かす。
【0036】
なお,上記(2)におけるループ面積は,球面上の面積であるが,近似的にループを含む平面の面積に置き換えて処理をすることも可能である。なお,ループを含む平面を用いる場合には,捻りの軸に略垂直の平面を用いることにより,捻り軸回りの捻りが発生しやすくなる。
【0037】
また,上記(1)の微少な移動ループによるエフェクタの捻れをオペレータに表示させ,その後,オペレータの指示に基づいて,同様の微少操作を連続して実行する。オペレータが,所望の捻り量に達したと判断した時点で,オペレータからの指示を受け付け,微少量の操作を停止させる。この一連の操作によって,所望の捻り量を得ることができる。
【0038】
[複数固定点に対する捻り軸の決定]
複数個定点に対する捻りの手法については,既に概略を述べたが,以下に,更に詳しく述べる。
【0039】
図8のように,2個の固定点Pr1,Pr2が,エフェクタから見てほぼ同方向にある場合は,前述のようにPr1,Pr2の重心位置Prmを使うことで良好な挙動が得られる。
【0040】
しかし,図11(a)のように,エフェクタPeから見てPr1,Pr2が互いにほぼ反対方向にある場合は,図11(b)のようにPr1,Pr2を結ぶ直線を捻り軸の方向とし,この捻り軸に垂直な平面内でエフェクタを動かすほうが自然な操作感になる。
【0041】
固定点の個数が2個の場合には,同方向・反対方向の判定は比較的容易である。エフェクタからPr1,Pr2それぞれに向かうベクトルの間の角度を使えばよい。固定点が3個以上になる場合には,オペレータからの指示に基づいて,回転軸を決定してもよい。あるいは,以下の慣性主軸を応用して,決定してもよい。
【0042】
[慣性主軸の応用]
固定点の個数が複数個である場合に,捻り軸方向を一貫して決められる方法について以下に説明する。
【0043】
剛体の力学において,慣性モーメントを表すテンソル(慣性テンソル)の主軸を求める方法がある。この手法を応用する。固定点の位置に質量1の質点を配置し,エフェクタ回りの慣性モーメントが最小になる回転軸を求め,これを捻り軸の方向とする。慣性モーメントを次式のようにIとする。
【0044】
【数1】
n個の固定点をPri(i=1,...,n)とする。エフェクタを原点としたときの,固定点Priの座標を(xi,yi,zi)とする。慣性モーメントIは次式により得られる。
【0045】
【数2】
Iの固有値I0,I1,I2とこれに対応する固有ベクトルu0,u1,u2を求める。ただし|u0|=|u1|=|u2|=1とする。
捻り軸は,次のようにして決定してもよい。I0,I1,I2のうち最小のものをIaとし,これに対応する固有ベクトルをuaとする。uaを捻り軸の方向としてもよい。
【0046】
なお,図7の場合は,上述のようにエフェクタからPrmまでの距離が,エフェクタを動かす際の基準距離となった。これに代わる基準距離laを,以下の式によって求めて用いてもよい。ただしua≡(xa,ya,za)とする。
【0047】
【数3】
[ハードウエア構成]
図12は,本願発明の実施例の装置構成を示す図である。コンピュータ1200には,キーボード1205,マウス1206,ペン1208を含むタブレット1207,ディスプレイ1201が接続されている。ディスプレイ1201上には,キャンバス1202が表示され,キャンバス1202上に図形が描画されている(1203)。
【0048】
また,図13は,本発明の機能構成図である。固定点特定部1301は,前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する。捻り軸決定部1303は,エフェクタの位置と1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する。第1閉経路移動部1305は,前記捻り軸に略垂直な平面上の第1の閉経路に沿って,エフェクタを動かす。第1捻り角度取得部1309は,第1閉経路移動部における前記エフェクタの捻り角度を第1の捻り角度として取得する。第2閉経路決定部1311は,第1の閉経路の面積と,第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面の第2の閉経路を決定する。第2閉経路移動部1307は,第2の閉経路に沿って,前記エフェクタを動かす。そして,メモリ1313,入力手段1315,表示手段1317等を有する。
【0049】
図14は,本発明の処理の流れを示した図である。まず,骨格モデルにおける1つ以上の固定点の各々の位置を特定する(S1401)。そして,エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する(S1403)。捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす(S1405)。そして,捻りを有する骨格モデルが表示される(S1507)。
【0050】
以上,本発明について,実施例を説明したが,複数の実施例は,排他的なものではない点に留意すべきである。また,請求項に係る本発明は,上述の実施例に限定されるものではない。
【特許請求の範囲】
【請求項1】
複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,
前記方法は,
前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,
前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,
前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,
を有する方法。
【請求項2】
前記第1閉経路移動ステップにおける前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得ステップと,
前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面上の第2の閉経路を決定する,第2閉経路決定ステップと,
前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動ステップと,
を更に有する,請求項1記載の方法。
【請求項3】
前記エフェクタ及び前記1つ以上の固定点のうち少なくとも1つは,オペレータの指示に基づき決定される,請求項1乃至2のうちいずれか1項記載の方法。
【請求項4】
前記第1の閉経路及び前記第2の閉経路のうち少なくとも一つの閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は,表示画面に表示せず,前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させる,請求項1乃至3のうちいずれか1項記載の方法。
【請求項5】
二つ以上の前記固定点がある場合において,前記固定点の重心位置とエフェクタとを結ぶ直線を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項6】
二つの前記固定点がある場合において,前記二つの固定点を結ぶ直線を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項7】
二つ以上の前記固定点がある場合において,前記固定点の各々の位置に質点を配置し,前記エフェクタの回りの慣性モーメントが最小となる回転軸を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項8】
前記請求項1乃至7のうちいずれか1項記載の方法をコンピュータに実行させる命令を含む,ソフトウエア。
【請求項9】
複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する装置であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,
前記装置は,
前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定部と,
前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定部と,
前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動部と,
を有する装置。
【請求項10】
前記第1閉経路移動部における前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得部と,
前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面の第2の閉経路を決定する,第2閉経路決定部と,
前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動部と,
を更に有する,請求項9記載の装置。
【請求項1】
複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する方法であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,
前記方法は,
前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定ステップと,
前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定ステップと,
前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動ステップと,
を有する方法。
【請求項2】
前記第1閉経路移動ステップにおける前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得ステップと,
前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面上の第2の閉経路を決定する,第2閉経路決定ステップと,
前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動ステップと,
を更に有する,請求項1記載の方法。
【請求項3】
前記エフェクタ及び前記1つ以上の固定点のうち少なくとも1つは,オペレータの指示に基づき決定される,請求項1乃至2のうちいずれか1項記載の方法。
【請求項4】
前記第1の閉経路及び前記第2の閉経路のうち少なくとも一つの閉経路を前記エフェクタが動く際の前記骨格モデルの挙動は,表示画面に表示せず,前記エフェクタが動いた後の時点における骨格モデルを前記表示画面に表示させる,請求項1乃至3のうちいずれか1項記載の方法。
【請求項5】
二つ以上の前記固定点がある場合において,前記固定点の重心位置とエフェクタとを結ぶ直線を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項6】
二つの前記固定点がある場合において,前記二つの固定点を結ぶ直線を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項7】
二つ以上の前記固定点がある場合において,前記固定点の各々の位置に質点を配置し,前記エフェクタの回りの慣性モーメントが最小となる回転軸を,前記捻り軸とする,請求項1乃至4のうちいずれか1項記載の方法。
【請求項8】
前記請求項1乃至7のうちいずれか1項記載の方法をコンピュータに実行させる命令を含む,ソフトウエア。
【請求項9】
複数の骨が1つ以上の関節によって連結されている骨格モデルにおいて,捻り軸に対するエフェクタの捻りの角度を制御する装置であって,前記エフェクタは,前記関節又は前記骨の端点であり,三次元空間における位置及び向きのうち少なくともいずれか一方を所望の状態に制御する対象であり,
前記装置は,
前記骨格モデルにおける1つ以上の固定点の各々の位置を特定する,固定点特定部と,
前記エフェクタの位置と前記1つ以上の固定点の各々の位置とに基づき,前記捻り軸を決定する,捻り軸決定部と,
前記捻り軸に略垂直な平面上の第1の閉経路に沿って,前記エフェクタを動かす,第1閉経路移動部と,
を有する装置。
【請求項10】
前記第1閉経路移動部における前記エフェクタの捻り角度を第1の捻り角度として取得する,第1捻り角度取得部と,
前記第1の閉経路の面積と,前記第1の捻り角度とに基づき,所望の捻り角度を得るために必要な前記平面の第2の閉経路を決定する,第2閉経路決定部と,
前記第2の閉経路に沿って,前記エフェクタを動かす,第2閉経路移動部と,
を更に有する,請求項9記載の装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2012−164163(P2012−164163A)
【公開日】平成24年8月30日(2012.8.30)
【国際特許分類】
【出願番号】特願2011−24451(P2011−24451)
【出願日】平成23年2月7日(2011.2.7)
【出願人】(596021562)株式会社セルシス (22)
【Fターム(参考)】
【公開日】平成24年8月30日(2012.8.30)
【国際特許分類】
【出願日】平成23年2月7日(2011.2.7)
【出願人】(596021562)株式会社セルシス (22)
【Fターム(参考)】
[ Back to top ]