(57)【特許請求の範囲】
【請求項１】
画面上に表示された対象物の動きを定義する連続回転マトリクスデータから連続回転角度データを導出する方法であって、
処理対象フレームのマトリクスデータの要素に対して得られる複数の方程式のうち任意のものを用いて、角度データの複数の解を求めるステップと、
求めた複数の解の角度が連続回転角度か否かを判定する判定ステップと、
前記判定ステップで連続回転角度でなかった場合は、フレームを遡って、選択ミスを行なったと思われるフレームを探索し、該フレームで前に選択した値ではない値を解として選択し、該フレームから再度処理を開始するステップと
を備えたことを特徴とする連続回転マトリクスから連続回転角度を導出する方法。
【請求項２】
前記判定ステップは、求めた複数の解の角度が何れも前フレームから所定値以上の変化をしているか否かを判定することにより連続回転角度か否かを判定するものである請求項１に記載の連続回転マトリクスから連続回転角度を導出する方法。
【請求項３】
前記解を求めるステップにおいて処理対象の最初のフレームの解が特異点であるときは、適当な値でダミーの解を求めておき、２番目以降のフレームで特異点でなくなるフレームが出現したとき、該フレームから最初のフレームまで遡って解を計算し直すステップを、さらに備えたことを特徴とする請求項１に記載の連続回転マトリクスから連続回転角度を導出する方法。
【請求項４】
画面上に表示された対象物の動きを定義する連続回転マトリクスデータから連続回転角度データを導出する方法に係るプログラムを記憶した記憶媒体であって、該プログラムは、
処理対象フレームのマトリクスデータの要素に対して得られる複数の方程式のうち任意のものを用いて、角度データの複数の解を求めるステップと、
求めた複数の解の角度が連続回転角度か否かを判定する判定ステップと、
前記判定ステップで連続回転角度でなかった場合は、フレームを遡って、選択ミスを行なったと思われるフレームを探索し、該フレームで前に選択した値ではない値を解として選択し、該フレームから再度処理を開始するステップと
を備えたことを特徴とする記憶媒体。
【請求項５】
前記判定ステップは、求めた複数の解の角度が何れも前フレームから所定値以上の変化をしているか否かを判定することにより連続回転角度か否かを判定するものである請求項４に記載の記憶媒体。
【請求項６】
前記プログラムは、前記解を求めるステップにおいて処理対象の最初のフレームの解が特異点であるときは、適当な値でダミーの解を求めておき、２番目以降のフレームで特異点でなくなるフレームが出現したとき、該フレームから最初のフレームまで遡って解を計算し直すステップを、さらに備えたことを特徴とする請求項４に記載の記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、連続回転マトリクスから連続回転角度を導出する方法、および該方法に係るプログラムを記憶した記憶媒体に関し、例えばコンピュータ・グラフィックス（ＣＧ）の映像製作におけるモーション・データ生成などに適用する座標変換技術に関する。
【０００２】
【従来の技術】
コンピュータグラフィックス（ＣＧ）の映像製作、ゲーム製作、あるいはパソコンソフトのＣＧ映像製作などにおいては、複数の関節構造よりなるスケルトンモデルを設定し、該スケルトンモデルの各関節の時間的な変化を表す時系列データを作成することで、該スケルトンモデルの動きを表現するモーション・データを作成する手法がよく使われる。各関節の動きは、例えば人間の肘の関節では１つの関節で複雑な動きが可能であるが、データとして表現するときにはスケルトンモデルの肘の部分にｘ軸回りに回転する関節、ｙ軸回りに回転する関節、およびｚ軸回りに回転する関節を設定し、それら３軸の回転の順序を決め、各軸の回りの回転角度の時系列データで動きを表現する。動きをデザインする際には、このようにｘｙｚの３つの軸に分けて表現する方がデザインし易い。また、デザイナは、近接する位置にさらに多くの関節を設定し、複数階層の各関節の動きをデザインして、一連のモーション・データを作成することもある。
【０００３】
一方、そのような順序を決めたｘｙｚ軸回りの角度データでの表現はデータ量が多量になるため、それらをまとめる演算が行なわれる。具体的には、それぞれの軸回りの回転をマトリクス（行列）表現で表し、そのマトリクスを乗算することにより１つのマトリクスにまとめる。以下、そのまとめ方について簡単に説明する。
【０００４】
図４は、始めにｘ軸回りに角度θx回転し、その回転後のｙ′軸回りに角度θy回転し、その回転後のｚ″軸回りに角度θz回転する様子を示すｘｙｚ局部座標軸である。ｘ軸回りに角度θxだけ回転させる事象をR(x,θx)、ｙ′軸回りに角度θyだけ回転させる事象をR(y′,θy)、ｚ″軸回りに角度θzだけ回転させる事象をR(z″,θz)と表す。Ｒは回転を表す演算子である。
【０００５】
図４に示す局部座標軸による回転は次の式（１）で表現される。
[x1,y1,z1]=[x0,y0,z0]R(x,θx)R(y′,θy)R(z″,θz)  （１）
【０００６】
（１）式は、下記（２）式のような絶対座標軸による回転で表現することができる。
[x2,y2,z2]=[x0,y0,z0]R(z,θz)R(y,θy)R(x,θx)      （２）
【０００７】
ただし（２）式において、R(z,θz)はｚ軸回りに角度θzだけ回転させる事象、R(y,θy)はｙ軸回りに角度θyだけ回転させる事象、R(x,θx)はｘ軸回りに角度θxだけ回転させる事象をそれぞれ示し、次の数１の（３）〜（５）式で与えられる。なお、sin（θx）＝Sx  ，sin（θy）＝Sy  ，sin（θz）＝Sz  ，cos（θx）＝Cx  ，cos（θy）＝Cy  ，cos（θz）＝Czで表す。
【０００８】
【数１】
0004162798.tif 000002
【０００９】
（７）式が絶対座標軸による表現である。この（７）式を次の数２の（８）式のように書き直す。
【００１０】
【数２】
0004162798.tif 000003
【００１１】
以上により、スケルトンモデルの任意の個所にｘｙｚの各軸回りの関節を設定しても、それら各軸回りの回転をマトリクス表現して上述したように演算することで、（８）式のような１つのマトリクス（すなわち、該マトリクスの９つの要素データ）で表現できるようになる。さらに関節の階層を増やしたとしても、同様にして隣接する関節についてはマトリクス表現での演算で１つにまとめることができる。
【００１２】
【発明が解決しようとする課題】
一方、上述したようにマトリクス表現で複数の関節を１つにまとめたとしても、（８）式には９つの要素があるためデータ量としては未だ多い。特に、実際にゲームソフトとしてＣＤ−ＲＯＭに実装し、ゲーム機で実行することを考えると、さらにデータ量を減少させる必要がある。そこで、（８）式のマトリクス表現を再びｘｙｚの各軸回りの回転角度θx,θy,θzに戻す（ｘｙｚの回転の順序はあらかじめ決めておく）ことが行なわれる。これにより、ゲームソフトとしてＣＤ−ＲＯＭに実装する際には、回転角度θx,θy,θzのみを格納すればよく、データ量が少なくて済む。
【００１３】
ところが、上記（８）式のマトリクス表現を角度表現に変換する場合、そのマトリクスを生成するｘｙｚの角度データは、通常２組存在する。そのため、連続的なキャラクタの動きを表現するマトリクス表現の時系列データが連続的に変化していくものであったとしても、そのマトリクス表現を角度データに変換したものは不連続になることがある。最終的にレンダリング画像のようにそのコマを表現できればよい、という場合は角度データが連続的である必要はない。しかし、ゲームのように、前もって制作したアニメーションをゲーム実行時にスローモーションで見せたりする場合、連続していない角度データを用いることによりアニメーションが連続しないという問題が起こる。この問題を解決するために、連続的な動きを生成する連続マトリクスから、連続的な動きを生成する連続回転角度を求める手法が必要である。
【００１４】
なお、特開平１０−１３４２０７号には、ポーズＡを与える第１の角度セットＡとポーズＢを与える第２の角度セットＢを入力し、角度セットＢから該角度セットＢと見かけ上同一回転変換となる他の角度セットＢ′を求め、該求めた角度セットＢ′と元の角度セットＢのうちより角度セットＡに最も距離が近い角度セット（ＢまたはＢ′）を選択し、該選択した角度セットＢ／Ｂ′と角度セットＡに基づいてポーズＡ，Ｂ間を滑らかに補間する第３の角度セットＣを求めるアニメーションデータの生成方法が開示されている。この公報に開示の方法を用いて、連続的なマトリクス表現の時系列データから各フレームの角度データを決定していくこともできる。しかし、この公報に開示の方法では、前フレームの角度セットに最も近い角度セットを選択していく方法を採っているので、後に図２や図３で説明するような解の取り違えが発生する場合がある。
【００１５】
本発明は、上述の従来形における問題点に鑑み、ゲーム機やパソコンなどにおけるＣＧ映像製作において用いるための、連続的な動きを生成する連続マトリクスデータから連続的な動きを生成する連続回転角度データを導出する方法を提供することを目的とする。また、本発明は、該方法に係るプログラムを記憶した記憶媒体を提供することを目的とする。
【００１６】
【課題を解決するための手段】
上記目的を達成するため、請求項１に係る発明は、画面上に表示された対象物の動きを定義する連続回転マトリクスデータから連続回転角度データを導出する方法であって、処理対象フレームのマトリクスデータの要素に対して得られる複数の方程式のうち任意のものを用いて、角度データの複数の解を求めるステップと、求めた複数の解の角度が連続回転角度か否かを判定する判定ステップと、前記判定ステップで連続回転角度でなかった場合は、フレームを遡って、選択ミスを行なったと思われるフレームを探索し、該フレームで前に選択した値ではない値を解として選択し、該フレームから再度処理を開始するステップとを備えたことを特徴とする。
【００１７】
請求項２に係る発明は、請求項１において、前記判定ステップは、求めた複数の解の角度が何れも前フレームから所定値以上の変化をしているか否かを判定することにより連続回転角度か否かを判定することを特徴とする。
【００１８】
請求項３に係る発明は、請求項１において、前記解を求めるステップにおいて処理対象の最初のフレームの解が特異点であるときは、適当な値でダミーの解を求めておき、２番目以降のフレームで特異点でなくなるフレームが出現したとき、該フレームから最初のフレームまで遡って解を計算し直すステップを、さらに備えたことを特徴とする。
【００１９】
請求項４に係る発明は、画面上に表示された対象物の動きを定義する連続回転マトリクスデータから連続回転角度データを導出する方法に係るプログラムを記憶した記憶媒体であって、該プログラムは、処理対象フレームのマトリクスデータの要素に対して得られる複数の方程式のうち任意のものを用いて、角度データの複数の解を求めるステップと、求めた複数の解の角度が連続回転角度か否かを判定する判定ステップと、前記判定ステップで連続回転角度でなかった場合は、フレームを遡って、選択ミスを行なったと思われるフレームを探索し、該フレームで前に選択した値ではない値を解として選択し、該フレームから再度処理を開始するステップとを備えたことを特徴とする。
【００２０】
請求項５に係る発明は、請求項４において、前記判定ステップは、求めた複数の解の角度が何れも前フレームから所定値以上の変化をしているか否かを判定することにより連続回転角度か否かを判定することを特徴とする。
【００２１】
請求項６に係る発明は、請求項４において、前記プログラムは、前記解を求めるステップにおいて処理対象の最初のフレームの解が特異点であるときは、適当な値でダミーの解を求めておき、２番目以降のフレームで特異点でなくなるフレームが出現したとき、該フレームから最初のフレームまで遡って解を計算し直すステップを、さらに備えたことを特徴とする。
【００２２】
【発明の実施の形態】
以下、図面を用いて本発明の実施の形態を説明する。
【００２３】
本発明に係る連続回転マトリクスから連続回転角度を導出する方法は、例えばパソコン上で動作するプログラムで具現化できる。ここでは、本発明の実施の形態として、本発明の方法に係るプログラムについて説明するものとする。このプログラムは、連続回転マトリクスデータを入力し、連続回転角度データを出力するプログラムである。連続回転マトリクスデータとは、上述の（８）式のようなマトリクスデータ（９つの要素ｍ00〜ｍ22）を１フレームデータとし、複数のフレームデータを時系列に連続的に変化するように並べたデータである。フレームとは所定間隔（例えば１／６０秒）ごとに表示する１画面を言い、フレームデータとはその１画面におけるデータを言う。連続回転マトリクスデータにより、例えばゲームのキャラクタの関節の連続的な動きが表現できる。連続回転角度データとは、ｘｙｚ軸回りの各回転角度データ（θx,θy,θz）を１フレームのデータとし、複数のフレームデータを時系列に連続的に変化するように並べたデータである。
【００２４】
なお、この発明では「連続」を以下のように定義する。先に述べたようにマトリクスデータを表すｘｙｚの角度データの組み合わせは、通常２組ある。２組のどちらを使用しても同じマトリクスデータとなるが、角度データを補間して中間のフレームを作成する場合、角度データが連続でないときは非常に不自然なアニメーションになる。これより、角度データを補間しても自然な動きのマトリクスを作成できる角度データを「連続」と捉えるものとする。一般的に考えると、連続角度データは「前フレームとの変化量の少ない方が連続」と思われるが、動きによっては変化量の大きい方が正しい場合もある。これらを考慮し、角度データを補間しても滑らかな動きを作れる角度データ列を連続と定義する。
【００２５】
次に、本実施の形態における角度データの求め方について説明する。上記（８）式から、マトリクスの９つの要素ｍ00〜ｍ22と回転角度θx,θy,θzとの関係を示す方程式が９つ得られる。本実施の形態では、ｍ20＝Syからθyを求め、求めたθyを用いて、ｍ00＝CzCy，ｍ10＝-SzCy，ｍ21＝-CySx，ｍ22＝CyCxよりθx，θzを求める。
【００２６】
ここでｍ20＝Syからθyの解は２つ求められる。このとき、Syが１または-1のときはCy＝0となるため、θx，θzの組み合わせは無限に存在する。このような場合、本実施の形態のプログラムでは、θx，θyの値として前フレームの値を採用する。なお、このようなSyが１または-1となる点を特異点と呼ぶものとする。
【００２７】
また、ｍ20＝Syから求められるθyの２つの解のうち、始めにどちらを使用するかについては、▲１▼２つの解からそれぞれ連続解を求め、その連続角度データ列を評価して最初の値を決める方法、または、▲２▼ユーザがオプションやフラグで指定する方法、の何れかをとるものとする。
【００２８】
次に、本実施の形態における連続角度デ−タの求め方について説明する。連続的に角度データを求めていくときも、上述した２つの解のうちのどちらを選ぶかの問題がある。この実施の形態では、角度データの前フレームからの変位方向を求め、これを連続化の手がかりとする。すなわち、本実施の形態のプログラムでは、連続的にθyを求めていく際には、前フレームのθyの値からの変位方向を求め、今回フレームのθyの２つの解が同じ方向に存在するよう変換する。同じ方向にある２つの答えから移動量の少ないほうを解とする方法をとる。
【００２９】
連続的に角度データを求めるときの具体的な解法を説明する。
【００３０】
まず、上述の（８）式のｍ20の項であるSyの変位の方向（符号）を求めるためにθyの微少変化を考える。θyがΔθyだけ微少変化したとき、ｍ20の変化量がΔｍ20であるとする。
m20＋Δm20＝sin（θy＋Δθy）                               （９）
【００３１】
加法定理より
Δm20＝sin(θy)cos(Δθy)＋cos(θy)sin(Δθy)−m20        （１０）
Δm20＝sin(θy)cos(Δθy)＋cos(θy)sin(Δθy)−sin(θy)   （１１）
Δm20＝sin(θy)(cos(Δθy)−1)＋cos(θy)sin(Δθy)        （１２）
【００３２】
ここで、十分にΔθyが小さいときは
sin(Δθy)≡Δθy                                         （１３）
cos(Δθy)≡１                                            （１４）
と近似できる。これより
Δm20＝Δθycos(θy)                                      （１５）
となる。これよりΔθyは
Δθy＝Δm20/cos(θy)                                     （１６）
で求められる。しかし、式（１３）および式（１４）で近似式を使用しており精度が悪いため、式（１６）は変位方向のみを求めるために使用する。この式（１６）で求めた変位方向を使用し、２つの解から移動量が少ない方を選択し解を求めていく。
【００３３】
次に、上記変位方向の求め方において符号を取り違える問題点について説明する。上記変位方向の求め方において、ｍ20とｍ20＋Δｍ20の値との間にπ／２または３π／４を挟む場合は式（１６）で求めた符号は逆になる。図２は、符号の取り違えが起こる一例を示す。図２において、ｐ２＝ｍ20，ｐ４＝ｍ20＋Δｍ20とした場合、Δｍ20＜０となる。ｐ２が第１象現（０〜π／２）にあることから、Δθyは式（１６）より負方向になるが、ｐ２の正方向にあるｐ４も解といえる。m20＋Δm20からはｐ１がθの解として求められるため、通常の処理ではｐ１が解となる。
【００３４】
通常は、以上のように求めた変位方向を使用し、２つの解から移動量が少ないほうを選択して解を求める。しかし、動きによっては、移動量の大きな方が解である場合があり、移動量だけでは解を決定できない。例えば、図３において、ｐ１をm20とした場合、m20＋Δm20の点はp2とp3となる。通常は移動量の少ないp2が解として選択されるが、p3も決しておかしな値でない場合もある。このようなときに選択ミスが起こる。
【００３５】
そこで、本実施の形態では、以下のようにしてこの問題を解決する。まず、図２で説明した符号の取り違えや図３で説明した解の選択ミス（以下では、これらの「符号の取り違え」および「解の選択ミス」をまとめて、単に「解の選択ミス」という）が起こった場合に、どのような問題が発生するかを確認する。解の選択ミスが起こった場合は、
・解の選択ミスを起こしたフレームから後で連続性が崩れる。これは選択ミスを起こした軸とは異なる軸で起こる場合もある。ただし、最後まで連続であるときもある。
という事がおこる。そこで、このような問題が起こった場合は、そのフレーム以前に解の選択ミスが起こっているとし、そのフレームより前に取り違えたと思われるフレームを探し、以前選択した値の逆を選択する。ただし、どちらの値をとっても連続性が保てない場合は、その連続性が保てないフレームは非常に無理な動きではあるが、この動きが正しい値である事とする。
【００３６】
なお、上述したように特異点については、前フレームの角度データを特異点における角度データとするが、最初のフレーム（フレーム０）では前フレームがないため問題である。そこで、最初のフレームについては、１回目の計算時は適当な値（プログラム中はθxを０とする）でダミーの解を求める。２番目以降のフレームで特異点でなくなるデータが現れたら、そのフレームから最初のフレームまで逆に解を計算し直す。これにより、特異点のフレームとそうでないフレームとの間の連続性が保たれる事となる。
【００３７】
次に、図１を参照して、本実施の形態のプログラムの処理の流れについて説明する。まず、ステップ１０１でワーク領域frameに初期値startをセットする。ワーク領域frameは、処理対象のフレームを特定するフレーム番号をセットする領域である。フレーム番号は、時間が進む順に０，１，２，３，…と数えるものとする。
【００３８】
次に、ステップ１０２で、frameの値をフレーム番号とするマトリクスデータを読み込み、それが特異点か否かを判別する。具体的には、上述したようにｍ20＝sinθyが１または-1であるかをチェックする処理である。特異点でないときは、ステップ１０３で、ｍ20＝sinθyの解として２つのθyの値を求める。ステップ１０４では上述した（１６）式を用いてθyの変位方向を求め、ステップ１０５では求めた変位方向を用いて２つの解（ステップ１０３で求めたもの）から移動量が少ないほうを選択して解とする。
【００３９】
次にステップ１０６で、求めたθyを用いて、方程式ｍ00＝CzCy，ｍ10＝-SzCy，ｍ21＝-CySx，ｍ22＝CyCxよりθx，θzを求める。なお、ステップ１０６では、ステップ１０５で解としたθyからθx，θzを求めるほか、解とされなかったθyについてもθx，θzを求めておく。ステップ１０７では、求めた２組のθx,θy，θzについてあらかじめ指定した角度以上に値が変化していないか判定し、変化しているときはステップ１１５に、そうでないときはステップ１０８に、それぞれ進む。ステップ１０８では、前フレーム以前がすべて特異点か否かを判定し、そうであるときは遡りモードに入る。ステップ１０９では遡りモードか否か判定し、そうであるときはステップ１１０に、そうでないときはステップ１１２に、それぞれ進む。
【００４０】
遡りモードであるときは、ステップ１１０でいま処理しているフレームが最初のフレームか否かを判定し、最初のフレームであるときは、ステップ１１１で遡りモードを解除して、ステップ１１３に進む。ステップ１１０で最初のフレームでないときは、ステップ１１４でフレーム番号frameをデクリメントして、ステップ１０２に戻る。ステップ１０９で遡りモードでないときは、ステップ１１２で最後のフレームか否かを判定し、最後のフレームであるときは処理を終了する。ステップ１１２で最後のフレームでないときは、ステップ１１３に進む。ステップ１１３では、フレーム番号frameをインクリメントして、ステップ１０２に戻る。
【００４１】
ステップ１０７で指定角度以上に値が変化していると判定された場合は、以前のフレームで解の選択ミスをしていると考えられるから、ステップ１１５で、フレームを遡り、図２および図３で説明した解の選択ミスをしたと考えられるフレームBadFrameを求め、θyを再計算する。これは解の選択ミスが行なわれたフレームから解を変えて再計算するものである。次に、ステップ１１６で、BadFrameの値をframeに代入し、ステップ１０６に戻る。
【００４２】
ステップ１０２で処理対象のフレーム番号frameが特異点であるときは、ステップ１１７で遡りモードであるか否か判定し、そうであるときはステップ１１９に、そうでないときはステップ１１８に、それぞれ進む。ステップ１１９では、前フレームを参考にθx,θy,θzを求め、ステップ１０９に進む。ステップ１１８では、最初のフレームか否かを判定し、最初のフレームでないときはステップ１１９に進む。最初のフレームであるときは、ステップ１２０でダミーのθx,θy,θzを求めて、ステップ１０９に進む。
【００４３】
以上の手順で、フレーム順に処理していき、連続マトリクスデータを連続回転角度データに変換する。
【００４４】
【発明の効果】
以上説明したように、本発明によれば、連続回転マトリクスデータから連続回転角度データを導出する際に、角度データの複数の解が求められた場合、それらが何れも前フレームから所定値以上の変化をしているか否か（すなわち、不連続か否か）を判定し、変化していたときにはフレームを遡って、選択ミスを行なったと思われるフレームを探索し、該フレームで前に選択した値ではない値を解として選択し、該フレームから再度処理を開始するようにしているので、連続性が保てないときには遡って、連続性が保てるような解を選択して再度の処理を行なっていける。したがって、例えば、πあるいは３π／４付近の移動方向の取り違えがあっても、後のフレームで連続性が保てなくなったことを検出し、遡って正しい移動方向の解を選択して再度の処理を行なうようにできる。また、初期フレームが特異点であった場合でも、とりあえずはダミーで解を求めておき、２番目以降のフレームで特異点でなくなるフレームが出現したとき、該フレームから最初のフレームまで遡って解を計算し直すようにしているので、初期フレームが特異点である場合でも、連続的な解を求めることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る連続回転マトリクスから連続回転角度を導出する方法に係るプログラムの処理の流れを示す図
【図２】符号の取り違えが起こる一例を示す図
【図３】選択ミスが起こる一例を示す図
【図４】回転の様子を示すｘｙｚ局部座標軸の図
【符号の説明】
１０２…特異点判定ステップ、１０３…θy算出ステップ、１０４…θy移動方向算出ステップ、１０５…解選択ステップ、１０６…θx，θz算出ステップ、１０７…指定角度以上の変化か否か判定ステップ、１０８…遡りモードに入るステップ、１０９…遡りモード判定ステップ、１１５…フレームを遡り取り違えたフレームを再計算するステップ。
【図１】
0004162798.tif 000004
【図２】
0004162798.tif 000005
【図３】
0004162798.tif 000006
【図４】
0004162798.tif 000007