"関節角度制御情報を持つ標準スケルトンモデルの各々の部位と制御対象スケルトンモデルの各々の部位との間の部位間対応関係が定義されたスケルトンモデルにおいて,前記制御対象スケルトンモデルのポーズ又は動きをコンピュータが制御する方法であって,前記標準スケルトンモデルに対するポーズ又は動きの変更の指示を受け入れるステップと,前記指示に基づいて,前記関節角度制御情報を適用して,前記標準スケルトンモデルのポーズ又は動きを決定するステップと,前記部位間対応関係を用いることによって,前記決定された標準スケルトンモデルのポーズ又は動きに前記制御対象モデルのポーズ又は動きを追従させるステップと,を有する方法。前記指示を受け入れるステップは,オペレータからの前記制御対象モデルに対するポーズ又は動きの変更の指示を前記標準モデルへのポーズ又は動きの変更の指示として受け入れるか,又は,前記標準モデルへのポーズ又は動きの変更の指示に変換するステップ,を有する請求項1記載の方法。前記スケルトンモデルは,関節により接続された複数のボーンを含み,前記部位は,1つ以上のボーンを有する,請求項1又は2記載の方法。前記追従させるステップは,ボーンのグループの向きを複写するステップと,前記ボーンのグループに含まれる前記1個以上の各々のボーンの向きを複写するステップと,を有する請求項1ないし3のうちいずれか1項記載の方法。前期関節角度制御情報は,関節の可動範囲を設定する情報,又は関節の曲がりにくさの情報を含む,請求項1ないし4のうちいずれか1項記載の方法。前記制御対象モデルの初期状態におけるポーズ又は動きに基づいて,前記標準モデルのポーズ又は動きを変更するステップ,を更に有する請求項1ないし5のうちいずれか1項記載の方法。前記部位が複数のボーンを有する場合,前記複数のボーンの初端と終端に存在する関節の角度情報に基づいて,前記複数のボーンの各々を接続する関節の角度情報を決定する,請求項1ないし6のうちいずれか1項記載の方法。前記標準スケルトンモデルと,前記制御対象スケルトンモデルの,スケルトン構造を探索し,又はオペレータから該対応関係の指定を受け取り,前記部位間対応関係を作成するステップ,を更に有する,請求項1ないし7のうちいずれか1項記載の方法。前記探索は,パターン認識の手法を用いる請求項8記載の方法。制御入力スケルトンモデルの各々のボーングループと制御対象スケルトンモデルの各々のボーングループとの間の対応が定義されたスケルトンモデルにおいて,前記制御対象スケルトンモデルのポーズ又は動きをコンピュータが決定する方法であって,前記ボーングループは1つ以上のボーンを含み,前記制御入力スケルトンモデルの前記ボーングループの向きに基づいて,対応する前記制御対象スケルトンモデルのボーングループの向き決定するステップと,前記向きが決定されたボーングループの向きに基づいて,前記向きが決定されたボーングループに含まれる各々のボーンの向きを決定するステップと,を有する方法。請求項1ないし10のうちいずれか1項記載の方法をコンピュータに実行させるプログラム。本発明の実施例に係る方法は,作成した個々のスケルトンモデルにおける,関節の角度制限や,関節の曲がりにくさ等の設定に対する煩雑さを軽減させることを目的とする。本実施例の方法は,関節角度制御情報を持つ標準スケルトンモデルの各々の部位と,制御対象スケルトンモデルの各々の部位との間の部位間対応関係が定義されたスケルトンモデルにおいて,前記制御対象スケルトンモデルのポーズ又は動きをコンピュータが制御する方法であって,前記標準スケルトンモデルに対するポーズ又は動きの変更の指示を受け入れるステップと,前記指示に基づいて,前記関節角度制御情報を適用して,前記標準スケルトンモデルのポーズ又は動きを決定するステップと,前記部位間対応関係を用いることによって,前記決定された標準スケルトンモデルの前記ポーズ又は動きから前記制御対象モデルのポーズ又は動きを決定するステップと,を有する方法を提供する。スケルトンモデルのポーズ又は動きを,簡便な手法で制御することができる。本明細書,特許請求の範囲,及び図面においては,以下の用語を用いる。これらの詳細は後述する。1スケルトン:骨格を意味する。2ノード:モデルを構成する各部位を意味する。3ボーン:親子関係にある2個のノードの原点どうしを結んだ線分,またはノードそのものを意味する。4オブジェクト:ポーズ又は動きの指示の対処となっているスケルトンモデルを意味する。最も親のノードルートノードの座標系をオブジェクト座標系と呼ぶ。5ローカル座標系:親ボーンまたは親ボーングループの座標系に関して用いる。6テンプレート:関節角度制御情報を有するスケルトンモデル標準モデルを意味する。7キャラクタ:関節角度制御情報を持たないスケルトンモデルを意味する。8ボーングループ:直鎖状に繋がった1本以上のボーンの集合を意味する。その他の用語については,その用語を用いているところで定義する。図2は,本発明の一実施例に係るテンプレートとキャラクタを示した図である。図2aは,テンプレートであり,スケルトンモデルに関節の制御情報が既に設定されている。本明細書において,テンプレート標準モデルは,予め用意されたスケルトンモデルであり,図2bに示されるキャラクタのポーズ又は動きに制限を加え,不自然なポーズや動きを抑制する機能を果たす。図2bは,上述のようにキャラクタ制御対象モデルと呼ばれるものであり,スケルトン構造ボーンは有するが,関節の制御情報を含まないモデルである。オペレータは,キャラクタ図2bに関して,ユーザインターフェースを介して,ポーズ又は動きの指示を与える。本発明の実施例においては,その指示を図2aのテンプレートに対して適用する。テンプレートには,上述のように関節の制御情報が含まれているために,不自然なポーズや動きをとることがない。そして,テンプレートのポーズ又は動きをキャラクタにコピーする。そして,キャラクタに対する新たなポーズ又は動きが表示される。以上の一連の動作において,画面上には,テンプレートは表示しなくてもよい。すなわち,オペレータは,キャラクタの画像だけを見ながら,ポーズ又は動きの指示を与えてもよい。このようなユーザインターフェースとすることによって,オペレータは,テンプレートの存在を意識することなく,キャラクタの自然なポーズ又は動きを指示することができる。なお,本発明は,上記の構成に限定されるものではなく,テンプレートを表示させるようにしてもよい。また,オペレータが,テンプレートを操作するようなユーザインターフェースとしてもよい。図3は,本発明の一実施例に従ったボーングループの対応付けを示す図である。図3aは,図2aで示したテンプレートのスケルトンモデルの複数のボーンの接続状況を示している。図3bは,図2bで示したキャラクタのスケルトンモデルを示している。そして,図3aのボーングループAと,図3bのボーングループAが対応している。また,図3aのボーングループBと,図3bのボーングループBが対応している。このように,ボーングループどうしを対応付ける理由は,それぞれのスケルトンモデルにおいて,構成されるボーンの数が必ずしも一致しないためである。この対応付けは,既知のパターン認識の技術を用いて,両者のスケルトンモデルから対応するボーングループのペアを見つけ出してもよい。あるいは,オペレータが予めボーングループの対応付けを指定してもよい。または,パターン認識で対応付けられたボーングループのペアに対して,オペレータが修正を行ってもよい。図3aのテンプレートは,予め複数用意されていてもよい。そして,人間,動物など複数の異なる対象物のテンプレートが用意されていてもよい。複数のテンプレートから,オペレータが適切なまたは,類似したテンプレートを選択してもよい。あるいは,既知のパターン認識技術を用いて,与えられたキャラクタに基づいて,最適なテンプレートを選択してもよい。このようにしてテンプレートの選択と,ボーングループの対応付けがなされる。そして,オペレータは,適切なユーザインターフェースを用いて,キャラクタのポーズ又は動きを変更する指示を行う。システムは,その指示を受けて,キャラクタではなく,テンプレートのポーズ又は動きを変更する。テンプレートには関節の制御情報が設定されているため,不自然なポーズや動きになることがない。そして,システムは,テンプレートのポーズ又は動きをキャラクタにコピーする。そして,適切な時間間隔で,キャラクタのポーズ又は動きを表示する。なお,キャラクタのスケルトンに複数ボーンからなるボーングループが含まれている場合には,ボーングループの前後のノードの状態に基づいて,ボーングループを構成している複数のボーンが滑らかな形で曲がるようにしてもよい。本発明の更に詳細な実施例は,以下に述べる。[ボーンの対応付け]まず,オペレータがキャラクタを作成し,そのキャラクタに対応するテンプレートが指定されたとする。この場合,まず必要な操作は,キャラクタとテンプレートにおけるボーングループの作成と対応付けである。ボーングループのペアを決定する処理は,例えば以下の通りである。図4は,一実施例におけるボーングループの対応付けを示している。S402において,テンプレートのボーンの各々と,キャラクタのボーンの各々から,既知のパターン認識の技術を用いて,1対1の対応関係を見つけ,それぞれのボーンからボーングループを作り,ボーングループどうしを対応付ける。S404において,テンプレートとキャラクタのボーンの全てがボーングループに属しているかをチェックする。全てがボーングループに属していれば,対応付けは終了する。ボーングループに属していないボーンがある場合には,S406に移る。S406において,ボーングループに属していないボーンの1つを選択する。S408において,連結する前後にボーングループがあるかチェックする。ボーングループが隣にある場合には,そのボーンをボーングループに加える。両隣にボーンにグループがある場合には,いずれのボーンにグループに加えるかを,既知のパターン認識技術を用いて選択してもよい。両隣のいずれにもボーンにグループがない場合には,このボーンのグループ化は,一時的に保留する。そしてS404に戻る。以上の処理を行うことにより,ボーングループの作成と対応付けが完了し,全てのボーンが対応付けられる。なお,この対応付けに対して,オペレータが修正を加えてもよい。あるいは,オペレータが全てのボーンの対応付けを指示してもよい。なお,本発明は,ボーングループの対応付けに関し,上記の実施例に限定されるものではない。[マトリクスによる座標系の計算について]図5は,ボーンの回転を示している。三次元座標系xyzにおいて,原点Pを中心として,ボーンPAの長さを変えずボーンの一端AをA’の位置に回転する場合,Aの座標をx0,y0,z0とし,A’の座標をx0y0,z0とすると,以下のようにマトリクスMを用いることにより,ボーンの回転を一般的に表現できる。上記の例では,ボーンの回転を例に挙げたが,2つの座標系の相対的な関係をマトリクスMで表現することもできる。ボーン毎に固有の座標系を持たせてもよい。本発明の実施例では,ボーン毎に別個の座標系が存在する図1b参照。例えば,一方の座標系のx軸,y軸,z軸方向の単位ベクトルを,それぞれ他方の座標系のx軸,y軸,z軸方向の単位ベクトルに変換するマトリクスMaを求めれば,Maは,両者の座標系の関係を表現するマトリクスとなる。本明細書では,これを座標変換マトリクスと呼ぶ。さらに一般的に,ボーンPAの長さを変えつつボーンの一端AをAの位置に回転する場合を考える。この場合,Aの座標をx0,y0,z0とし,Aの座標をx0y0,z0とすると,以下のようにマトリクスMtを用いることにより,ボーンの長さを変えつつ回転を行うことを,以下の式によって一般的に表現できる。本明細書では,上記の式のabcを,マトリクスMtのtrans部と呼ぶ。trans部は,ボーンの移動量を意味する。マトリクスがローカルマトリクスの場合,親からの移動量,すなわちボーンの長さを表す。これに対して,m00ないしm22は,ボーンの回転のみに寄与する部分であり,本明細書では,rotate部と呼ぶ。[ポーズのコピー]ポーズのコピーは,対応するボーングループどうしで行う。そして,本明細書では,ポーズのコピーに関し2つの実施例を挙げて説明するが,本発明はこの実施例に限定されるものではない。ポーズのコピーの詳細については,後述するが,その概要は以下の通りである。1座標系調整マトリクスの算出ボーングループの座標系はボーンの座標系と同様に,テンプレートとキャラクタとで異なっている。そのため,まず,初期状態のキャラクタボーングループとテンプレートボーングループの情報から,両者の座標系の関係を表す座標系調整マトリクスを求める。この処理は最初に1回だけ行えばよい。この操作の手順の概要は以下の通りである。図6は,座標系調整マトリクスの算出手順を示している。a重なり状態の作成座標系調整マトリクスを求めるためには,キャラクタとテンプレートのボーングループ軸を一旦同じ向きにする必要がある。そのために,以下にようにして重なり状態を作る。ボーングループの始点から終点に向かう有向線分を,ボーングループの軸とする。まず,初期状態のキャラクタとテンプレートを使って,キャラクタのボーングループ軸をテンプレートのボーングループ軸に合わせる。図6aは,テンプレートの一部を示しており,図6bは,キャラクタの一部を示している。図においては,ボーングループBとB’がペアを組んでいる。ボーングループBは,軸α,座標系eを持っている。ボーングループB’は,軸β,座標系e’を持っている。まず,軸βを軸αの向きに合わせるためのマトリクスM1を求める。そして,実際にボーングループB’を図6b’に示すように回転させる。これによって,軸αとβ’の方向が一致した。b座標系調整マトリクスの導出キャラクタボーンの重なり状態とテンプレートボーンの初期状態では,ボーングループの軸の向きはそろったが,ボーングループの座標系すなわち座標系eと座標系e’’は違っている。そこで,これらの座標系の違いを変換するマトリクスM2を求める。これらの操作で求めたマトリクスM2が,座標系調整マトリクスである。この求め方の詳細については後述する。2ポーズ又は動きの指定とそのコピーまず,キャラクタのポーズ又は動きを変化させるオペレータからの指示を受け取る。そして,システムは,テンプレートのポーズ又は動きを変化させる。テンプレートのポーズに対して,座標系調整マトリクスを用いて,キャラクタのポーズを決定する。必要に応じて,ボーングループ内の状態を調整する。以上の処理によって,キャラクタにテンプレートのポーズ又は動きがコピーされる。[処理フローの概要]図7は,一実施例の方法のフローを示している。S702において,関節角度制御情報を持つテンプレートの各々のボーングループと,キャラクタの各々のボーングループとの間の部位間対応関係を探索する。又は,オペレータから部位間対応関係の指定を受け取る。S704において,テンプレートに対するポーズ又は動きの変更の指示を受け入れる。S706において,指示に基づいて,前記関節角度制御情報を適用して,テンプレートのポーズ又は動きを決定するS708において,部位間対応関係を用いて,決定されたテンプレートのポーズ又は動きからキャラクタのポーズ又は動きを決定する以上の処理において,所定のポーズ又は動きを持つキャラクタが最終的に表示される。図8は,一実施例のハードウエア構成図を示す。一実施例では,CPU801,メモリ802,入出力装置803,表示装置804,プリンタ805を備えている。[第1の実施例及び第2実施例の概要]第1の実施例と第2の実施例を比較すると,以下の通りである。1第1の実施例テンプレートとキャラクタがどの状態で同一ポーズなのかという情報は与えられない。そのため,キャラクタのボーンおよびボーングループの軸の向きとテンプレートのボーンおよびボーングループの軸の向きを一致させた状態が,両者が同一ポーズとなった状態である,として扱うことにより,キャラクタのポーズをテンプレートに合わせる操作を行う。2第2の実施例テンプレートとキャラクタが同一ポーズとなっている状態が,初期状態として与えられる。そこで,初期状態におけるキャラクタのボーンおよびボーングループの軸の向きとテンプレートのボーンおよびボーングループの軸の向きの相対的な関係を維持しながら,キャラクタのポーズをテンプレートに合わせる操作を行う。[第1の実施例及び第2の実施例の詳細]以下詳細に,第1実施例と第2実施例とを説明するが,以下の点に留意すべきである。モデルの身体の各部位は,親子関係で繋がっている。この各部位をノードと呼ぶ。親子関係にある2個のノードの原点どうしを結んだものが1本のボーンとなる。親側を始点,子側を終点と呼ぶことにする。例えば,ノードnの子がノードn1で,この2つを結んで作られたボーンがボーンmであるとする。このとき,ボーンmの始点ノードはノードnで,終点ノードはノードn1である。始点から終点に向かう有向線分を,ボーンの軸とする。ノードの親子関係と同様に,ボーンにも親子関係を付ける。上記の例では,ノードnを終点とするボーンは,ボーンmの親になる。ノードn1を始点とするボーンは,ボーンmの子になる。実施例1では,ボーンの終点ノードの座標系をボーンの座標系とする。これに対して,第2実施例では,ボーンの始点ノードの座標系をボーンの座標系とする。図20aは,ある基準となる座標系Oと,その子ノードの座標系C1,さらにその子ノードの座標系C2を示したものである。ノードが2個あるので,ボーンも2本存在することになる。2本のボーンの座標系はそれぞれC1C2である。第1実施例では,図20aのように親側から順に1本目,2本目と,2本のボーンを捉える。ボーンの座標系は,そのボーンの終点位置にある。図20bは,図20aと全く同じ状態であるが,ノードの座標系だけでなくノードの実体を重ねて表示したものである。ノード1の座標系がC1で,ノード2の座標系がC2である。第2実施例では,ノードの実体に沿った見方をし,図20cのように親側から順に1本目,2本目と,2本のボーンを捉える。ボーンの座標系は,そのボーンの始点位置にある。両者の違いがどのように表れるかを,モデルの腕を例にとって示したものが図21である。上腕ノードの原点は肩,前腕ノードの原点は肘,手ノードの原点は手首となっている。図のように肩~肘をボーン1,肘~手首をボーン2とする。実施例1では,ボーン1の座標系は,肘を原点とする前腕ノードの座標系となり,ボーン2の座標系は,手首を原点とする手ノードの座標系となる。実施例2では,ボーン1の座標系は,肩を原点とする上腕ノードの座標系となり,ボーン2の座標系は,肘を原点とする前腕ノードの座標系となる。以下の第1の実施例と第2の実施例の詳細な説明を理解する際には,上記の点に留意すべきである。1.第1の実施例の詳細1.1.ノードとボーン,ボーングループ1.1.1.ノードとボーン上述のように,ボーンの終点ノードの座標系をボーンの座標系とする。1.1.2.ボーングループ直鎖状に連なる1本以上のボーンの集合をボーングループとする。ただし,2本のボーンのボーンどうしの接続部は,一方のボーンの始点でかつ他方のボーンの終点となっていなければならない。ボーングループの両端のうち,親側の端をボーングループの始点,子側の端をボーングループの終点とする。ボーンの親子関係を使って,ボーングループにも親子関係を付ける。ボーングループの座標系は,終点ボーンの座標系を使うことにする。テンプレートのn番目ボーングループとキャラクタのn番目のボーングループは,相互に対応する部位となっている。このキャラクタボーングループとテンプレートボーングループの対をボーングループペアと呼ぶ。1.2.記号,基本式等の定義1.2.1.共通記号付きはテンプレートボーンに関するもの,なしはキャラクタボーンに関するものを表す。付きはボーンの初期状態に関するもの,なしはカレントに関するものを表す。G付きはボーングループに関するものを表す。1.2.2.キャラクタおよびテンプレートのボーンについてキャラクタのn番目のボーンをCBnとし,CBnの親ボーンがCBn1であるとする。Ln:CBnのローカルマトリクス。CBn1座標系における,CBnの位置,回転を表すマトリクス。Mn:CBnのオブジェクトマトリクス。オブジェクト座標系における,CBnの位置,回転を表すマトリクス。MnLnLn1...L1LnMn1Ln:キャラクタ初期ポーズにおけるLn。Mn:キャラクタ初期ポーズにおけるMn。MnLnLn1...L1LnMn1テンプレートのn番目のボーンをTBnとし,TBnの親ボーンがTBn1であるとする。Ln:TBnのローカルマトリクス。TBn1座標系における,TBnの位置,回転を表すマトリクス。Mn:TBnのオブジェクトマトリクス。オブジェクト座標系における,TBnの位置,回転を表すマトリクス。MnLnLn1...L1LnMn1Ln:テンプレート初期ポーズにおけるLn。Mn:テンプレート初期ポーズにおけるMn。MnLnLn1...L1LnMn11.2.3.キャラクタおよびテンプレートのボーングループについてキャラクタのn番目のボーングループをCBGnとし,CBGnの親ボーングループがCBGn1であるとし,以下のように定義する。LGn:CBGnのローカルマトリクス。CBGn1座標系における,CBGnの終点の位置,回転を表すマトリクス。CBGnを構成するボーンを親側から順にCBm...CBm1CBmとすると,次式のようになる。LGnLmLm1...LmMGn:CBGnのオブジェクトマトリクス。オブジェクト座標系における,CBGnの終点の位置,回転を表すマトリクス。MGnLGnLGn1...LG1LGnMGn1LmLm1...LmMm1MmLGn:キャラクタ初期ポーズにおけるLGn。LGnLmLm1...LmMGn:キャラクタ初期ポーズにおけるMGn。MGnLGnLGn1...LG1LGnMGn1LmLm1...LmMm1Mmテンプレートのn番目のボーングループをTBGnとし,TBGnの親ボーングループがTBGn1であるとする。LGn:TBGnのローカルマトリクス。TBGn1座標系における,TBGnの終点の位置,回転を表すマトリクス。TBGnを構成するボーンを親側から順にTBk...TBk1TBkとすると,次式のようになる。LGnLkLk1...LkMGn:TBGnのオブジェクトマトリクス。オブジェクト座標系における,TBGnの終点の位置,回転を表すマトリクス。MGnLGnLGn1...LG1LGnMGn1LkLk1...LkMk1MkLGn:テンプレート初期ポーズにおけるLGn。LGnLkLk1...LkMGn:テンプレート初期ポーズにおけるMGn。MGnLGnLGn1...LG1LGnMGn1LkLk1...LkMk1Mk図9に,キャラクタとテンプレートの対応する2つのボーングループを示す。1.3.ポーズコピーの概要ポーズコピー処理では,最初に以下の情報が与えられる。キャラクタボーンの初期ポーズテンプレートボーンの初期ポーズただし両者の初期ポーズは同じポーズとは限らない。その後,テンプレートボーンのポーズが逐次与えられ,これと同じポーズのキャラクタの状態を求める。手順としては,まず,テンプレートのボーングループの向きを元に,キャラクタのボーングループの向きを求める。次に,ボーングループ内のボーンの向きを求める。1.4.座標系調整マトリクスボーングループの座標系は,テンプレートとキャラクタとで異なっている。そのため,まず,初期状態のキャラクタボーングループとテンプレートボーングループの情報から,両者の座標系の関係を表す座標系調整マトリクスを求める。この処理は最初に1回だけ行えばよい。なお,座標系調整マトリクスは,ボーンの長さ位置を変更しない回転マトリクスである。1.4.1.重なり状態の作成座標系調整マトリクスを求めるためには,キャラクタとテンプレートを一旦同じポーズにする必要がある。そのために,以下のようにして重なり状態を作る。ボーングループの始点から終点に向かう有向線分を,ボーングループの軸とする。まず,初期状態のキャラクタとテンプレートを使って,キャラクタのポーズをテンプレートのポーズに合わせる。ボーングループごとに,CBGnの軸が初期状態TBGnの軸と同じ向きになるように,初期状態CBGnを回転させる。この処理によりテンプレート初期状態と同じポーズになったキャラクタの状態を重なり状態とよび,このときのボーングループのローカルおよびオブジェクトマトリクスをそれぞれLGn,MGnと表わすことにする。重なり状態は以下のように再帰的に求めることができる。いま,グループのn1番目までLGn1,MGn1が求まっているとする。このとき,CBGn座標系において,キャラクタボーンCBGn1の軸のベクトルをvecとする。また,同様にCBGn座標系において,テンプレートボーンTBGn1の軸のベクトルをvecToTemplateとすると,以下のように書ける。ベクトルvec:LGn1のtrans部...ベクトルvecToTemplate:‐MGnMGn11のtrans部...ここで以下のように単純回転を定義する。始点を共有する任意の単位ベクトルvavbに対して,次の条件を満たす回転を,vaからvbへの単純回転と定める。vavbのなす平面に垂直な軸の回りの回転。回転によりvaはvbに重なる。vaとvbが同じ向きの場合は無回転とする。vaとvbが反対向きの場合は定義不能とする。これを用いて,ボーングループペアBGn1の重なり状態を得るための回転マトリクスHnを次のように作る。Hn:vecからvecToTemplateへの単純回転。...HnはCBGn座標系における回転マトリクスである。Hnを使うことにより,次式のようにLGnが求まる。LGnHnの回転のtransHnLGn...さらに,MGnは以下のようになる。MG1LG1...MGnLGnLGn1...LG1...これで重なり状態LGn,MGnが得られた。1.4.2.座標系調整マトリクスの算出図11に座標系を比較する2つの座標系を示す。キャラクタボーンの重なり状態LGn,MGnとテンプレートボーンの初期状態LGnMGnでは,ボーングループの軸の向きはそろったが,ボーングループの座標系は違っている。そこで,これらの座標系の違いを変換するマトリクスRnを求める。このRnが座標系調整マトリクスである。なお,このセクションの式のマトリクスはすべてtrans部を削除した行列とする。MGnRnMGn...このとき,式の右辺の積算部を一つ分解すると次式が得られる。MGnRnLGnMGn1...また,式のnにn1を代入しMGn1を求めると次式が得られる。MGn11MGn1...式より,MGnRnLGn1MGn1...一方で,MGnは積算行列を一つ分解してMGnLGnMGn1であるので,次式が得られる。LGnRnLGn1...このことから,Rnは以下のように再帰的に求めることができる。R1の回転1...RnRn1の回転1...1.5.キャラクタの状態の決定以上の処理によって,キャラクタとテンプレートの関係を表す座標系調整マトリクスが得られた。そこで,これを用いて,逐次与えられるテンプレートボーンのポーズに対して,これと同じポーズになるキャラクタボーンの状態を求める。まず,ボーングループの状態を求め,次にボーングループ内のボーンの状態を求める。1.5.1.CBGnのカレント状態決定処理まず,ボーングループごとにキャラクタのカレント状態を求める。その際に,座標系調整マトリクスRnを用いる。カレントのCBGnのローカルマトリクスは,カレントのTBGnのローカルマトリクスを使って,以下のように求められる。LGnの回転1Rn1...1.5.2.CBGn内のキャラクタボーンのカレント状態決定処理キャラクタのボーングループのカレント状態が決定されたので,次はボーングループ内でのボーンの状態を決定する。図12にボーングループ内でのボーンの状態の決定を示す。この処理には,各ボーンの長さの比を利用する。このため,初期状態における,ボーングループ内でのキャラクタボーン,テンプレートボーンの位置換算用の係数dm,および積算長を計算しておく。グループのボーンの長さの総和が1になるように正規化した,キャラクタボーンCBmの長さをlm,テンプレートボーンTBkの長さをlkとする。テンプレートボーンの積算長からキャラクタボーンの積算長が容易に計算できるように,以下のように長さの端数の比dmを求めておく。ΣliΣlidmlk...図13に,ボーングループ座標系における,カレントのキャラクタボーンの配置を示す。次に,積算長に関する端数の比dmを用いて,カレントのテンプレートボーンの全長をキャラクタボーンの長さの比に分割していく。ボーングループ座標系における,カレントのキャラクタボーンの位置がこれにより求まる。ボーングループ内の,テンプレートボーンの長さの総和と,キャラクタボーンの長さの総和との比をratioとする。Lkのtrans部にratioを乗算したものをあらたにLkとする。前述のように,グループ単位でのマトリクスにはLGnの回転1Rn1...の関係があるので,この関係を使って,次のようにLGnを求める。LGn1LkLk1...Rn1...さらにキャラクタボーンの終点位置を一旦配置するために,まず,Lkを以下のように定める。LkLkLk1...Rn1...Lk1Lk1...Rn1...このとき,ボーングループ座標系におけるカレントのキャラクタボーンCBmの終点位置Pntmは,Lk1とLkのtransをdmで補間して,以下のようになる。PntmLk1dmLkのtrans...図13に,CBmを確定する処理を示す。以上の処理により,CBmの軸の方向は確定したが,軸まわりのひねりは未定である。そこで,初期状態の軸方向から,確定した軸方向への単純回転Qmを使って,CBmを確定する。つまりCBm1座標系において表すと次のようになる。ベクトルinitVec:のtransの回転...ベクトルcurrentVec:1のtrans...ただしWmは以下のようなボーングループ内の積算行列である。WmLmLm1...Lm...WmLmWm1となるので,Lmから順に再帰的に求めることができる。ただし,グループ内の最後部のボーンLmだけは,LGnLmLm1...Lmが成り立つように,LGnから逆算して求める。L1回転はL1Q1でtransはPnt1...W1L1...Lm回転はLmQnでtransはPntm1...WmLmWm1...ただし,mmの場合のみ,LmLGn1...以上により,キャラクタの各ボーンのローカルマトリクスが得られ,キャラクタのポーズが確定する。図14に,キャラクタのポーズが確定する処理を示す。2.第2の実施例の詳細2.1.モデルの構成2.1.1.ノード,ボーンモデルの身体の各部位は,親子関係で繋がっている。この各部位をノードと呼ぶ。ボーンとはノードのことであり,そのノードの原点をボーンの始点,子ノードの原点をボーンの終点と呼ぶことにする。始点から終点へ向かう有向線分を,ボーンの軸とする。ボーンの軸を表すベクトルをボーンの軸ベクトルとし,このベクトルを大きさ1に正規化したものを,ボーンの単位軸ベクトルとする。ボーンの軸ベクトルの大きさを,ボーンの長さとする。2.1.2.テンプレートとキャラクタあるモデルから別のモデルにポーズをコピーする際に,コピー元のモデルをテンプレート,コピー先のモデルをキャラクタと呼ぶ。テンプレートを構成するノードの個数と,キャラクタを構成するノードの個数とは,一般に異なったものになっている。また,ノードが持つ座標系の向きについても特にルールはなく,それぞれ異なる方向を向いている。2.1.3.ボーングループ1本以上のボーンが親子関係で直鎖状に繋がったものをボーングループとする。ただし,ボーングループを一方の端から他方の端へと辿ると,全て親→子となっていなければならない。ボーングループの両端のうち,親側を始点,子側を終点とする。より正確に表現すると,ボーングループの最も親側のボーンの始点が,ボーングループの始点である。同様に,ボーングループの最も子側のボーンの終点が,ボーングループの終点である。ボーングループの始点から終点へ向かう有向線分を,ボーングループの軸とする。ボーングループの軸を表すベクトルを,ボーングループの軸ベクトルとし,このベクトルを大きさ1に正規化したものを,ボーングループの単位軸ベクトルとする。モデルを構成するボーンを,複数のボーングループに分ける。ただし,ボーングループがボーンを共有してはならない。ボーングループの親子関係は,ボーンの親子関係に準ずる。テンプレートからキャラクタにポーズをコピーする際に,前もってそれぞれのモデルにボーングループを構成し,両モデルの似通った部位にあるボーングループどうしに,1対1の対応関係を付けておく。ポーズをコピーする際には,まずテンプレートのボーングループの向きに基づいて,キャラクタのボーングループの向きを決定し,次にボーングループ内のボーンの向きを決める。2.2.座標系2.2.1.ボーンの座標系ノードはそれぞれ自分の座標系を持っている。ボーンの座標系は,そのボーンに相当するノードの座標系とする。前述のように,ボーンの座標系の向きについてはルールがない。そのため,ボーン軸の方向をそのボーンの座標系で表したベクトルも,ボーン毎に違ったものになる。例えば,あるボーンでは,ボーン軸がそのボーンのx軸方向となっているが,別のあるボーンでは,ボーン軸がそのボーンのy軸方向になっていることがある。2.2.2.ボーングループの座標系ボーングループの1本目のボーンの座標系に対して,1本目のボーンの軸からボーングループの軸への単純回転を掛けたものを,ボーングループの座標系とする。単純回転については付録Aを参照。2.2.3.オブジェクト座標系ボーンの座標系の向きについてはルールがないが,最も親のボーンだけは例外とする。それぞれのモデルの最も親のノードを,そのモデルのルートノードと呼ぶ。ルートノードの座標系だけは,モデルによらず同じ方向を向いている。例えば,z軸がモデルの正面方向,y軸がモデルの上方向といった具合である。ルートノードの座標系をオブジェクト座標系と呼ぶ。2.2.4.オブジェクトマトリクス,ローカルマトリクスボーンの向きをマトリクスで表すには,ボーン自身の座標系だけでなく,基準となる座標系が必要である。基準座標系としてオブジェクト座標系を使った場合のマトリクスを,そのボーンのオブジェクトマトリクスという。基準座標系として親ボーンの座標系を使った場合のマトリクスを,そのボーンのローカルマトリクスという。ボーングループについても同様の呼び方をする。2.3.記号,基本式以下のように記号を定義する。TBGn:n番のテンプレートボーングループ。CBGn:n番のキャラクタボーングループ。BGn:n番のボーングループ。TBGnとCBGnを合わせたものを表す。ボーングループペア。MGn:TBGnのオブジェクトマトリクス。LGn:TBGnのローカルマトリクス。MGn:CBGnのオブジェクトマトリクス。LGn:CBGnのローカルマトリクス。TBk:k番のテンプレートボーン。Mk:TBkのオブジェクトマトリクス。Lk:TBkのローカルマトリクス。CBm:m番のキャラクタボーン。Mm:CBmのオブジェクトマトリクス。Lm:CBmのローカルマトリクス。以上のように,テンプレートに関するものにはを付ける。また,初期状態に関するものにはを付ける。特に断りのない限り,番号は親から子へと進むごとに1ずつ増えるものとする。なお,マトリクスは3行3列とし,要素の並びは行ベクトルに右からマトリクスを掛ける方式によるものとする。オブジェクトマトリクスとローカルマトリクスの間には,次のような関係がある。MGnLGnLGn1LGn2...LGnMGn1...テンプレートボーングループについても,同様の関係が成り立つ。また,ボーンのオブジェクトマトリクスとローカルマトリクスについても同様である。2.4.ポーズコピー処理の概要2.4.1.初期状態予めテンプレートモデルとキャラクタモデルの初期状態が与えられ,この初期状態では,両モデルが同じポーズになっているものとする。ただし,同じポーズとは,両モデルのボーンの向きが同じという意味ではないので,注意が必要である。図15は,テンプレートモデルとキャラクタモデルの初期状態の例である。両モデルは同じポーズをとっているが,両者の鎖骨の向きを比べると,明らかに異なっている。2.4.2.ポーズのコピーポーズのコピーとは,テンプレートのあるポーズが与えられ,これと同じキャラクタのポーズを求めることである。与えられる情報はテンプレートの全ボーンのオブジェクトマトリクスMkで,求めるべき値はキャラクタの全ボーンのオブジェクトマトリクスMmである。ポーズをコピーする際には,まずテンプレートのボーングループの向きに基づいて,キャラクタのボーングループの向きを決定し,次にボーングループ内のボーンの向きを決める。2.4.3.向き決めの手順ボーンの座標系がボーン毎に異なるのと同様に,ボーングループの座標系もボーングループ毎に異なる。そこで,テンプレートボーングループの座標系から,対応するキャラクタボーングループの座標系への変換を行なう座標系調整マトリクスを,最初に求めておく。カレントのテンプレートのボーングループの向きから,キャラクタのボーングループの向きを決める際には,上記の座標系調整マトリクスを使う。それだけでなく,初期ポーズにおけるテンプレートとキャラクタのボーングループの向きの違いを考慮する必要がある。以下,向き決め手順の詳細について述べる。2.5.座標系調整マトリクスまず,座標系調整マトリクスを求める。この計算は,テンプレートとキャラクタの初期ポーズが与えられた時点で,1回だけ行なえば良い。2.5.1.補正初期状態図16は,軸合わせ単純回転を示す。TBGnの初期軸方向からCBGnの初期軸方向への単純回転を,BGnの軸合わせ単純回転と呼ぶことにする。TBGnの初期状態に対して軸合わせ単純回転を施した状態を,TBGnの補正初期状態とする。以下のようにして,TBGn1座標系で,補正初期状態の向きを表すマトリクスを求める。BGnの軸合わせ単純回転を,オブジェクト座標系で表したマトリクスをSGnとし,同回転をTBGn初期座標系で表したものをSGnとする。SGnMGnSGnMGn1...TBGnの補正初期状態の向きをTBGn1の初期座標系で表したものをLGnとする。LGnSGnLGn...MGnSGnMGn1LGn...MGnSGnMGn11...LGnは以下のようにして求めることもできる。BGnの軸合わせ単純回転を,TBGn1初期座標系で表したものをSGn1とする。SGn1MGn1SGnMGn11...LGnLGnSGn1...LGnMGn1SGnMGn11...MGnSGnMGn11...2.5.2.座標系調整マトリクスの算出TBGnの補正初期状態とCBGnの初期状態との間の,座標軸の違いを調整するマトリクスを求める。オブジェクト座標系で表すと,前者の向きはLGnMGn1で,後者の向きはMGnである。両者の間の変換をTBGn補正初期座標系で表したマトリクスをAGnとする。これが,求めるべき座標系調整マトリクスである。AGnは,次式により得られる。AGnMGnMGn11...MGnMGn11LGn1...MGnMGn11MGn1SGn1MGn1...MGnSGn1MGn1...AGnは以下のようにして求めることもできる。まず,オブジェクト座標系での変換マトリクスAGnを,次式のようにして求める。LGnMGn1AGnMGn...∴AGnMGn11LGn1MGn...AGnをTBGnの補正初期座標系に変換し,AGnを求める。AGnMGn1AGnMGn11...LGnMGn1MGn11LGn1MGnMGn11LGn1...MGnMGn11LGn1...MGnSGn1MGn1...2.6.ボーングループの向き決め与えられたテンプレートのカレントポーズから,キャラクタのポーズを求めるために,最初にキャラクタのボーングループの向きを求める。まず,LGnからLGnへの回転を求める。これは,テンプレートのカレント状態全体をまとめて動かして,TBGn1の向きが合うように初期状態に重ね,その状態でTBGnの向きを比較することに相当する。TBGnの,初期状態からカレント状態への回転を,TBGnの初期座標系で表したマトリクスをDnとする。Dnは次式により得られる。DnLGnLGn1...Dnを曲げマトリクスDBnと捻りマトリクスDTnに分解する。DnDTnDBn...曲げマトリクスDBnには,必要に応じて曲げ量にスケールを掛けて,DBnとし,これを使って次式のようにDnを再合成する。DnDTnDBn...この回転をTBGnの補正初期状態に対して掛けて,その向きLGnを求める。LGnDnLGn...DnMGnSGnMGn11...MGn1を掛けて,TBGn1座標系からオブジェクト座標系に変換する。MGnLGnMGn1...DnMGnSGnMGn11MGn1...AGnを掛けて,TBGnとCBGnの座標系の違いを調整して,MGnを求める。MGnAGnMGn...AGnDnMGnSGnMGn11MGn1...なお,右辺中のMGnSGnMGn11の部分は,初期ポーズだけから求められるので,最初に1回だけ計算しておけば良い。参考曲げ量の調整をしない場合は,以下のようになる。MGnAGnLGnLGn1MGnSGnMGn11MGn1...AGnLGnMGn1SGnMGn11MGn1...2.7.曲げ捻り分解と曲げ量調整2.7.1.曲げ量の調整の必要性テンプレートからキャラクタにポーズをコピーする際に,ボーングループの向きよりも両端の相対位置を重視したい場合がある。このような場合には,ボーンの長さに応じた調整が必要となる。例えばTBGnの両端距離に比べてCBGnの両端距離が長い場合,TBGnとの回転と同じ角度だけCBGnを回転させると,両端点の相対変位量はCBGnのほうが大きくなってしまう。これを調整するには,CBGnの回転のうち,曲げ成分だけを小さくし,捻り成分の大きさは維持する必要がある。2.7.2.曲げ捻りの分解TBGnの,初期状態からカレント状態への回転を,TBGnの初期座標系で表したマトリクスをDnとする。このDnを次式のように,曲げマトリクスDBnと捻りマトリクスDTnに分解するものとする。DnDTnDBn...カレント状態のTBGn軸を,オブジェクト座標系で表したベクトルをvGnとし,これをTBGnの初期座標系に変換したベクトルをvGnとする。vGnからvGnを求める式は次のようになる。vGnvGnMGn1LGn1...一方,TBGn軸を,自分自身の座標系で表したベクトルをvGnとする。前述の曲げマトリクスDBnはvGnからvGnへの単純回転として得られる。このDBnを使って,捻りマトリクスDTnは次式により得られる。DTnDnDBn1...2.73.曲げの調整と曲げ捻り再合成TBGnの両端距離とCBGnの両端距離との比をrnとする。曲げマトリクスDBnの曲げ角をrn倍にしたマトリクスをDBnとする。これを使って,次式のように曲げと捻りを再合成し,調整済みのマトリクスDnを得る。DnDTnDBn...2.8.ボーングループ内のボーンの向き決めテンプレートボーングループTBG内のテンプレートボーンの配置状態から,対応するキャラクタボーングループCBG内のキャラクタボーンの配置を求める。2.8.1.共通化座標系既に述べたように,TBGの座標系は,TB1の座標系に対して,TB1軸からTBG軸への単純回転を掛けたものである。ここで新たに,各ボーンTBkの共通化座標系を以下のように設定する。テンプレートの初期状態において,TBG座標系に対して,TBG軸からTBk軸への単純回転を掛けたものをTBkの共通化座標系とする。TB1の共通化座標系は,TB1本来の座標系に一致する。キャラクタのボーンについても,テンプレートのボーンと同様にして共通化座標系を設定するが,前述のボーングループどうしの座標系調整マトリクスAGによる調整を加える。キャラクタの初期状態において,CBG座標系をAGで調整したものに対して,CBG軸からCBm軸への単純回転を掛けたものをCBmの共通化座標系とする。ボーンの共通化座標系には次のような特長がある。各ボーンが持っている本来の座標系の向きは,ボーン毎にさまざまである。そのため,TBkの軸をTBk座標系で表した単位軸ベクトルは,一般にボーン毎に異なった値になる。一方,TBkの軸をTBk共通化座標系で表した単位軸ベクトルは,そのボーングループ内のボーンについては,全て同じ値になる。同様に,ボーンTBkの捻り回転をTBk座標系で表すと,ボーン毎に異なるマトリクスになるが,TBk共通化座標系で表すと全て同じマトリクスになる。キャラクタボーンについても同様である。ボーンの向きを補間する際に,この特長が生かされる。ボーンの共通化座標系の向きをオブジェクト座標系で表したマトリクスをΩjとする。また,ボーンの共通化座標系の向きをボーングループ座標系で表したマトリクスをΛjとする。添え字jはボーンの番号である。テンプレートボーンについてはを付け,初期状態についてはを付けて区別する。2.8.1.1.テンプレートボーンの共通化座標系テンプレートの初期状態を使って,以下の方法で,各ボーンの本来の座標系と共通化座標系との間の変換マトリクスを求めておく。TBGの軸をオブジェクト座標系で表したベクトルをvGとする。また,TBkの軸をオブジェクト座標系で表したベクトルをvkとする。vGからvkへの単純回転をSkとする。TBkの共通化座標系の向きを,オブジェクト座標系で表したマトリクスを,Ωkとする。TBGの向きをオブジェクト座標系で表したマトリクスがMGなので,これにSkを掛けることにより,次式のようにΩkが得られる。ΩkMGSk...一方,TBkの本来の座標系の向きをオブジェクト座標系で表したマトリクスはMkである。両者の間の変換マトリクスを求めておく。具体的には,MkからΩkへの変換を,TBk本来の座標系で表したマトリクスをΦkとする。これは次式により得られる。ΦkΩkMk1...MGSkMk1...TBkの共通化座標系の向きを,TBG座標系で表したマトリクスを,Λkとする。これは次式により得られる。ΛkΩkMG1...MGSkMG1...ΦkとΛkは,初期ポーズだけから求められるので,最初に1回だけ計算しておけば良い。2.8.1.2.キャラクタボーンの共通化座標系キャラクタの初期状態を使って,以下のような方法で,各ボーンの本来の座標系と共通化座標系との間の変換マトリクスを求めておく。CBGの軸をオブジェクト座標系で表したベクトルをvGとする。また,CBmの軸をオブジェクト座標系で表したベクトルをvmとする。vGからvmへの単純回転をSmとする。CBmの共通化座標系の向きを,オブジェクト座標系で表したマトリクスを,Ωmとする。CBGの向きをオブジェクト座標系で表したマトリクスがMGなので,これをTBG座標系に変換し,更にSmを掛けることにより,次式のようにΩmが得られる。ΩmAG1MGSm...一方,CBmの本来の座標系の向きをオブジェクト座標系で表したマトリクスはMmである。両者の間の変換マトリクスを求めておく。具体的には,MmからΩmへの変換を,CBm本来の座標系で表したマトリクスをΦmとする。これは次式により得られる。ΦmΩmMm1...AG1MGSmMm1...CBmの共通化座標系の向きを,CBG座標系で表したマトリクスを,Λmとする。これは次式により得られる。ΛmΩmMG1...AG1MGSnMG1...ΦmとΛmは,初期ポーズだけから求められるので,最初に1回だけ計算しておけば良い。2.8.2.初期状態からの向きの変化テンプレートのカレント状態からキャラクタのカレント状態を求める。まず,以下のようにして,カレント状態におけるTBk共通化座標系の向きを求める。TBkの共通化座標系の向きを,オブジェクト座標系で表したマトリクスを,Ωkとする。Ωkは,変換マトリクスΦkを使って,次式のように得られる。ΩkΦkMk...TBkの共通化座標系の向きをTBG座標系で表したマトリクスをΛkとする。これは次式により得られる。ΛkΩkMG1...ΦkMkMG1...TBkの向きの,初期状態からの変化を,次式のようにUkで表す。UkΛkΛk1...2.8.3.向き変化量の補間一般に,テンプレートとキャラクタでは,ボーングループ内のボーンの数が異なる。また,ボーングループ内の個々のボーンの長さも,同じ長さとは限らない。そのため,テンプレートボーンについて求めた前述のUkを,そのままキャラクタボーンの向き変化として使うことはできない。そこで,Ukを補間したものを,キャラクタボーンの向き変化量Umとする。図17に補間の方法を示す。この図17は,ある1つのボーングループのペアを表したもので,テンプレートボーングループはTB1TB2TB3の3本のボーンで構成され,キャラクタボーングループはCB1CB2CB3CB4の4本のボーンで構成されている。テンプレートとキャラクタのそれぞれについて,ボーングループを構成するボーンを一直線に並べて,更にボーングループの全長が1になるようにスケールを掛けてある。テンプレートボーンの中点を使って,全長をA1~A4の4つの領域に分ける。Umは,CBmの中点がどの領域に位置するかによって変える。位置する領域がAkであれば,UmはUk1とUkを補間して求める。ただし,領域A1ではUmU1とし,領域A4ではUmU3とする。補間方法としては,以下のように幾つかの方法が挙げられる。マトリクスから四元数に変換し,球面線形補間し,再びマトリクスに戻す。マトリクスの要素を補間し,GramSchmidtの直交化を使ってマトリクスの歪みを除去する。マトリクスを曲げと捻りに分解し,それぞれを補間し,再合成する。また,両端の領域A1A4で,隣接するボーンの捻りを使って捻り回転を補間すれば,ボーングループ境界で捻りの連続性を実現できる。2.8.4.キャラクタボーンの向き決定補間によって得られた各Umを使って,以下の手順で各CBmの向きを決める。まず,CBmの共通化座標系の向きをCBG座標系で表したマトリクスΛmを,次式により求める。ΛmUmΛm...次に,CBmの共通化座標系の向きをオブジェクト座標系で表したマトリクスΩmを,次式により求める。ΩmΛmMG...UmΛmMG...最後に,Φmを使って,CBmの共通化座標系からCBm本来の座標系に変換し,次式のようにMmを得る。MmΦm1Ωm...Φm1UmΛmMG...2.8.5.ボーングループの向き修正以上の方法でボーングループ内のボーンの向きを決めると,ボーングループの軸方向が変わってしまう。そこで最後に,変化後のボーングループ軸から変化前のボーングループ軸への単純回転を使って,ボーングループ全体を回転させ,ボーングループ軸の方向を元に戻す。2.9.長さ0のボーンへの対応2.9.1.ボーン長さと単純回転以上で述べたポーズコピー手法では,計算の随所でボーン軸を使った単純回転を利用している。そのため,長さが0のボーンがあると,単純回転を定義不能となり処理を実行できなくなる。また,ボーン長さが0でなくとも極端に短い場合には,計算精度上の問題が起こり得る。そこでボーン長さの最小値ebを決め,これよりも短いボーンは計算時にボーンの長さを調整する。最小値ebの値としては,ポーズに与える影響が外観上問題ない程度に小さく,かつ計算精度上問題を生じない程度に大きい値であればよい。2.9.2.ボーン軸ベクトルの調整ボーンの長さ調整は以下のように行なう。初期状態において,ボーングループ及び各ボーンを親から子へと順に辿りボーン長さを調べ,eb未満のボーンBが見つかった場合,以下のように処理する。まず,同一ボーングループ内のボーンを子側に辿り長さeb以上のボーンを探し,最初に見つかったボーンをBとする。Bの軸ベクトルを,長さはebにし,方向はBの軸方向に修正する。なお,ボーンの座標系については元のままとする。図18にボーン軸ベクトルの調整を示す。例えば図18のように,ボーンB2の長さがeb未満であった場合,この修正により図18のようになる。子側に辿っても長さeb以上のボーンが見つからなかった場合は,同一ボーングループ内の親ボーンを上記Bとして使う。ボーングループ内の全ボーンの長さがeb未満の場合は,上記B軸の替わりに,親ボーングループの軸を使う。親ボーングループが存在しない場合は,予め決めておいた既定のベクトルを使う。ただし,この修正されたボーン軸は,一連の向き決め処理で使うだけで,最終的にキャラクタのポーズを更新する際には,各ノードの向きのみを更新し,ボーンの長さは一切変更しない。2.10.付録A単純回転図19に単純回転を示す。以下のように単純回転を定義する。始点を共有する任意の2つのベクトルvavbに対して,次の条件を満たす回転を,vaからvbへの単純回転と定める。vavbのなす平面に垂直な軸の回りの回転。回転によりvaはvbに重なる。vaとvbが同じ向きの場合は無回転とする。vaとvbが反対向きの場合は定義不能とする。"