(57)【要約】【課題】  オブジェクトの姿勢データをより少ないデータ量でもって管理すること。【解決手段】  キーフレーム間を結ぶ線分を求め（Ｓ１２０２）、キーフレーム間の各フレームの姿勢データが示す位置から線分への垂線の長さｌの最大値ｌｍａｘが所定の閾値θ以上のキーフレーム間について、垂線の長さｌの変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う（Ｓ１２０５）。【選択図】  図１２
2005165962.tif 000002
【特許請求の範囲】
【請求項１】
連続した各フレームにおけるオブジェクトの姿勢データを所定フレーム数分メモリ上に記憶している場合に、キーフレームを特定するデータ処理方法であって、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データにおいて、開始フレームと、終了フレームの夫々を、キーフレームとして設定する設定工程と、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データの集合により表現される曲線が存在する座標系において、隣接する夫々のキーフレームの姿勢データが示す位置間を結ぶ線分を求める第１の計算工程と、
前記隣接する夫々のキーフレーム間の各フレームの姿勢データが示す位置から前記線分への垂線の長さを求める第２の計算工程と、
前記第２の計算工程で計算した各フレームにおける垂線の長さを、前記隣接する夫々のキーフレーム間の一端のフレームから他端のフレームまで順に参照した場合の垂線の長さの変化率が、正から負に転じたフレーム近傍のフレームをキーフレームとして特定する特定工程とを備え、
前記第１の計算工程、前記第２の計算工程、及び前記特定工程による処理を隣接するキーフレーム間毎に繰り返し行うことにより、キーフレームとなるフレームを特定することを特徴とするデータ処理方法。
【請求項２】
前記設定工程で設定された姿勢データ、及び前記特定工程で特定されたキーフレームにおける姿勢データを、前記オブジェクトの所定フレーム数分の姿勢データを再生するためのデータとしてメモリに記憶させる記憶制御工程を備えることを特徴とする請求項１に記載のデータ処理方法。
【請求項３】
前記特定工程では、前記第２の計算工程で計算した各フレームにおける垂線の長さを、前記隣接する夫々のキーフレーム間の一端のフレームから他端のフレームまで順に参照し、前記垂線の長さの最大値が所定値以上である場合に、前記隣接する夫々のキーフレーム間におけるキーフレームを特定する処理を行うことを特徴とする請求項１に記載のデータ処理方法。
【請求項４】
前記キーフレーム間のフレームの姿勢データは、球形補間処理によって得ることを特徴とする請求項１に記載のデータ処理方法。
【請求項５】
前記姿勢データは、前記オブジェクトの姿勢をクオータニオンによって表現した場合の、前記姿勢を示すデータであることを特徴とする請求項１乃至４の何れか１項に記載のデータ処理方法。
【請求項６】
前記オブジェクトは、単体として３次元仮想空間に存在するオブジェクト、もしくは、３次元モデルを構成する複数のオブジェクトのうちの１つのオブジェクトであることを特徴とする請求項１に記載のデータ処理方法。
【請求項７】
連続した各フレームにおけるオブジェクトの姿勢データを所定フレーム数分メモリ上に記憶している場合に、キーフレームを特定するデータ処理装置であって、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データにおいて、開始フレームと、終了フレームの夫々を、キーフレームとして設定する設定手段と、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データの集合により表現される曲線が存在する座標系において、隣接する夫々のキーフレームの姿勢データが示す位置間を結ぶ線分を求める第１の計算手段と、
前記隣接する夫々のキーフレーム間の各フレームの姿勢データが示す位置から前記線分への垂線の長さを求める第２の計算手段と、
前記第２の計算手段が計算した各フレームにおける垂線の長さを、前記隣接する夫々のキーフレーム間の一端のフレームから他端のフレームまで順に参照した場合の垂線の長さの変化率が、正から負に転じたフレーム近傍のフレームをキーフレームとして特定する特定手段とを備え、
前記第１の計算手段、前記第２の計算手段、及び前記特定手段による処理を隣接するキーフレーム間毎に繰り返し行うことにより、キーフレームとなるフレームを特定することを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キーフレームの姿勢データを特定する為の技術に関するものである。
【背景技術】
【０００２】
３次元仮想空間中のオブジェクトがフレーム毎にその姿勢を変化させる場合がある。例えばあるオブジェクトの姿勢が６０フレームである規則に従って変化する場合、６０フレームの各フレームにおけるこのオブジェクトの姿勢のデータ（姿勢データ）は予め作成されていることが多い。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、オブジェクトの姿勢が６０フレームである規則に従って変化する場合、従来では上述のように、６０フレームの各フレームにおけるこのオブジェクトの姿勢のデータを予め作成し、メモリに保持しておくので、例えばこの全体フレーム数が６０フレームよりも多い場合や、姿勢データを与えるオブジェクトの数が多くなった場合には、管理すべき姿勢データのデータ量は増大し、当然、これを管理するためのメモリの使用量は増大する。従って、このような姿勢データの容量はより少ないことが好ましい。
【０００４】
本発明はこのような点を考慮して成されたものであり、オブジェクトの姿勢データをより少ないデータ量でもって管理することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の目的を達成するために、例えば本発明のデータ処理方法は以下の構成を備える。
【０００６】
即ち、連続した各フレームにおけるオブジェクトの姿勢データを所定フレーム数分メモリ上に記憶している場合に、キーフレームを特定するデータ処理方法であって、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データにおいて、開始フレームと、終了フレームの夫々を、キーフレームとして設定する設定工程と、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データの集合により表現される曲線が存在する座標系において、隣接する夫々のキーフレームの姿勢データが示す位置間を結ぶ線分を求める第１の計算工程と、
前記隣接する夫々のキーフレーム間の各フレームの姿勢データが示す位置から前記線分への垂線の長さを求める第２の計算工程と、
前記第２の計算工程で計算した各フレームにおける垂線の長さを、前記隣接する夫々のキーフレーム間の一端のフレームから他端のフレームまで順に参照した場合の垂線の長さの変化率が、正から負に転じたフレーム近傍のフレームをキーフレームとして特定する特定工程とを備え、
前記第１の計算工程、前記第２の計算工程、及び前記特定工程による処理を隣接するキーフレーム間毎に繰り返し行うことにより、キーフレームとなるフレームを特定することを特徴とする。
【０００７】
本発明の目的を達成するために、例えば本発明のデータ処理装置は以下の構成を備える。
【０００８】
即ち、連続した各フレームにおけるオブジェクトの姿勢データを所定フレーム数分メモリ上に記憶している場合に、キーフレームを特定するデータ処理装置であって、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データにおいて、開始フレームと、終了フレームの夫々を、キーフレームとして設定する設定手段と、
前記メモリ上に存在する所定フレーム数分の前記オブジェクトの姿勢データの集合により表現される曲線が存在する座標系において、隣接する夫々のキーフレームの姿勢データが示す位置間を結ぶ線分を求める第１の計算手段と、
前記隣接する夫々のキーフレーム間の各フレームの姿勢データが示す位置から前記線分への垂線の長さを求める第２の計算手段と、
前記第２の計算手段が計算した各フレームにおける垂線の長さを、前記隣接する夫々のキーフレーム間の一端のフレームから他端のフレームまで順に参照した場合の垂線の長さの変化率が、正から負に転じたフレーム近傍のフレームをキーフレームとして特定する特定手段とを備え、
前記第１の計算手段、前記第２の計算手段、及び前記特定手段による処理を隣接するキーフレーム間毎に繰り返し行うことにより、キーフレームとなるフレームを特定することを特徴とする。
【発明の効果】
【０００９】
本発明の構成によって、オブジェクトの姿勢データをより少ないデータ量でもって管理することができる。
【発明を実施するための最良の形態】
【００１０】
以下添付図面を参照して、本発明の好適な実施形態について詳細に説明する。
【００１１】
［第１の実施形態］
本実施形態では、３次元仮想空間内に設置するオブジェクトの各フレーム（連続フレーム）の姿勢データを所定フレーム数分予め作成してメモリに保持している場合に、全てのフレームの姿勢データを保存せずに、各フレームのうちのキーフレームを特定し、特定したキーフレームの姿勢データのみを保存し、その他のフレームの姿勢データについては破棄する処理についてより詳細に説明する。
【００１２】
図１は本実施形態に係る「キーフレームを特定する処理」を実行するデータ処理装置として機能するコンピュータの基本構成を示すブロック図である。
【００１３】
１０１はＣＰＵで、ＲＡＭ１０２やＲＯＭ１０３に記憶されているプログラムやデータを用いて本装置全体の制御を行うと共に、本実施形態に係る上記「キーフレームを特定する処理」を実行する。
【００１４】
１０２はＲＡＭで、外部記憶装置１０７や記憶媒体ドライブ装置１０８からロードされたプログラムやデータを一時的に記憶するためのエリアを備えると共に、ＣＰＵ１０１が各種の処理を実行するために用いるワークエリアを備える。
【００１５】
１０３はＲＯＭで、ブートプログラムや本装置の設定に係るデータなどが格納されている。
【００１６】
１０４，１０５は夫々キーボード、マウスで、ＣＰＵ１０１に各種の指示を入力するために使用されるものである。なお、ＣＰＵ１０１に各種の指示を入力することができるデバイスとしてはこれ以外にも、例えばジョイスティックやゲームパッドなどの他のデバイスを用いることもできる。
【００１７】
１０６は表示部で、ＣＲＴや液晶画面などにより構成されており、ＣＰＵ１０１による処理結果を画像や文字などの情報により表示することができる。
【００１８】
１０７は外部記憶装置で、ハードディスクドライブ装置などの大容量情報記憶装置として機能するものであり、ここにＯＳ（オペレーティングシステム）や、ＣＰＵ１０１に後述する本実施形態に係る上記「キーフレームを特定する処理」を実行させるためのプログラムやデータ、姿勢を制御する対象のオブジェクトのデータ（オブジェクトがポリゴンにより表現されるものである場合には、オブジェクトを構成する各ポリゴンの各頂点座標位置、各ポリゴンの法線ベクトルを示すデータ、そしてこのオブジェクトにテクスチャをマッピングする場合には、このテクスチャのデータ等）等が保存されており、これらはＣＰＵ１０１による制御により、必要に応じてＲＡＭ１０２に読み出される。
【００１９】
１０８は記憶媒体ドライブ装置で、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの記憶媒体に記録されているプログラムやデータを読み出し、ＲＡＭ１０２や外部記憶装置１０７に出力するものである。なおＣＰＵ１０１に後述する本実施形態に係る「キーフレームを特定する処理」を実行させるためのプログラムやデータ、上記オブジェクトのデータをこの記憶媒体に記録させておいても良く、その場合には、これらプログラムやデータは、ＣＰＵ１０１による制御の下、記憶媒体ドライブ装置１０８によって記憶媒体から読み出され、ＲＡＭ１０２に出力される。
【００２０】
また、記憶媒体がＣＤ−ＲやＤＶＤ−ＲＡＭなどの書き込み可能なものである場合には、記憶媒体ドライブ装置１０８はＣＰＵ１０１の制御により、この記憶媒体にプログラムやデータを書き込む処理を行う。
【００２１】
１０９は上記各部を繋ぐバスである。
【００２２】
次に、以上の構成を備えるコンピュータが行う、本実施形態に係る「キーフレームを特定する処理」について説明する。ここで「キーフレーム」についてであるが、本実施形態では、オブジェクトの所定フレーム数の各フレームのうち、主要となるフレーム、即ちキーフレームの姿勢データのみを保存しておき、この所定フレーム数分のモーションを再生する場合には、周知の球形補間を用いてキーフレーム間を補間して再生する。従って、補間することで得られるキーフレーム間のフレームにおける姿勢データと、このフレームの基の姿勢データ（上記所定フレーム数分の姿勢データのうち、このフレームの姿勢データ）との誤差が小さくなるように、キーフレームは選択されるべきである。
【００２３】
以下説明する本実施形態に係る「キーフレームを特定する処理」は、この誤差を極力小さく押さえるために行われるものである。
【００２４】
図２は、３次元仮想空間中に設けられた人の３次元モデルを構成する各パーツを示す図である。
【００２５】
一般にゲームなどで３次元仮想空間中に人の３次元モデルを設置する場合、この人の３次元モデルにおける手や足、顔などの部分は稼働する、即ちその姿勢は変化することが多い。従ってこのように姿勢を変化させる部分を含みうる３次元モデルは、その部分毎にその姿勢を管理することになる。
【００２６】
例えば同図に示すように、人の３次元モデルの場合、顔のモデル２０１、左腕のモデル２０５，２０６、右腕のモデル２０３，２０４、胴体のモデル２０２、左足のモデル２１０，２１１，２１２、右足のモデル２０７，２０８，２０９の各部分モデルにより人の３次元モデルが構成されていることが多く、この人の３次元モデルに例えば６０フレームで「走る」モーションを与える場合、このモーションで稼働する手や足といった上記各部分の上記６０フレームにおける各フレームでの姿勢のデータは管理されることになる。
【００２７】
また、人の３次元モデルのように、複数の部分モデルにより構成されたものではなく、１つの３次元モデルでもって表現されるものもある。例えばボールの３次元モデル等がこれに該当する。
【００２８】
本実施形態では、このように、複数の部分モデルのうちの１つ、単体での３次元モデルに関わらず、ある１つの３次元モデル、即ちオブジェクトに所定フレーム数分のモーションが与えられた場合について説明する。以下、この１つの３次元モデル（オブジェクト）を「姿勢制御対象３次元モデル」と呼称する。従って、以下の説明は、人の３次元モデルを構成する各部分モデル、単体での３次元モデルに関わらず適用可能である。
【００２９】
また、この姿勢制御対象３次元モデルにはＦフレームで一連の動きが完了するモーションデータが与えられているとする。ここで、このモーションデータとは、このＦフレームの各フレームにおけるこの姿勢制御対象３次元モデルの姿勢を示すデータである。
【００３０】
なお、Ｆフレームの各フレームにおける姿勢制御対象３次元モデルの姿勢を表すデータ（即ち、モーションデータ）は以下説明する処理の前段で、予めＲＡＭ１０２にロードされているものとする。
【００３１】
また、姿勢制御対象３次元モデルの姿勢の表現方法として、本実施形態では、クオータニオンを用いるものとする。ここでクオータニオンについては周知であるので簡単に説明すると、クオータニオンとは３次元仮想空間上において任意の軸周りの回転を記述するためのもので、例えば任意の方向ベクトルＡ＝（ＸＡ、ＹＡ、ＺＡ）周りに角度θだけ回転することを表現するクオータニオンＱは、
Ｑ＝（ｘ、ｙ、ｚ、ｗ）
＝（ｓＸＡ，ｓＹＡ，ｓＺＡ，ｃ）
ｓ＝ｓｉｎ（θ／２）
ｃ＝ｃｏｓ（θ／２）
として表現される。
【００３２】
クオータニオンの典型的な使用法は、姿勢データを行列で表現する場合に、この行列をクオータニオンとして保持することである。そしてこの行列の演算を行う場合に、この行列の演算をクオータニオンの計算に置き換え、クオータニオンの計算を行った後、計算後のクオータニオンを行列の形式に変換するという処理を行う。
【００３３】
従って本実施形態では、元々行列の形式で格納されていた姿勢データをクオータニオンの形式で計算する場合に、キーフレームの姿勢データを特定する処理に係るものである。
【００３４】
このように、クオータニオンを用いれば、所謂ジンバルロックで苦しむことがない。３つの角度（リール、ピッチ、ヨー）でもって姿勢を表現する方法では常に、ある特定の向きにおいて、単純なローカルの回転を３つの値の単純な変更で表すことができなくなってしまう。この種の回転は、ローカルのヨーを左右に動かそうとする際に９０度まで「ピッチが上がってしまっている」場合にしばしば見られるものである。
【００３５】
なお、このようなクオータニオンを用いた姿勢制御対象３次元モデルの姿勢の計算については周知の技術であるので、ここでの説明は省略する。
【００３６】
このように、本実施形態ではｘ、ｙ、ｚ、ｗの４変数でもって定義されるクオータニオンによって各フレームの姿勢制御対象３次元モデルの姿勢を示す姿勢データを表現するものとする。
【００３７】
図３は、姿勢制御対象３次元モデルの１フレーム目からＦフレーム目までの姿勢データをプロットすることで得られるグラフを示す図である。
【００３８】
同図において３０１は、姿勢制御対象３次元モデルの各フレームの姿勢データをプロットすることで得られる曲線である。なお、同図のグラフが示す座標系は、姿勢制御対象３次元モデルの各フレームの姿勢データの集合を曲線でもって表現することができる座標系である。
【００３９】
以下説明する処理では、この曲線上の各フレームの姿勢データの中から、キーフレームを特定し、特定したキーフレームの姿勢データのみを保存する処理を行う。またこの処理は、ＣＰＵ１０１によって実行されるものである。
【００４０】
先ず、図３に示す曲線３０１の両端の姿勢データ、即ち、開始フレーム（１フレーム目）と、終了フレーム（Ｆフレーム目）とをキーフレームとして設定し、夫々のキーフレームにおける姿勢データをＲＡＭ１０２の所定のバッファ（キーフレーム姿勢データバッファ）に記憶させる。
【００４１】
図４は、この２つのキーフレームを説明する図である。図３と同じ部分については同じ番号を付けており、その説明は省略する。同図において４０１は開始フレームの姿勢データが示す位置、４０２は終了フレームの姿勢データが示す位置を示すものである。
【００４２】
次に、この両端の位置間（キーフレーム間）を結ぶ線分を求める。
【００４３】
図５は、この線分を説明する図である。図３，４と同じ部分については同じ番号を付けており、その説明を省略する。同図において５０１は開始フレームの姿勢データが示す位置４０１と、終了フレームの姿勢データが示す位置４０２とを結ぶ線分である。
【００４４】
そして次に、曲線３０１を構成する各フレームの姿勢データが示す位置からこの線分５０１への垂線の長さを求める処理を行う。
【００４５】
図６は、この垂線の長さを求める処理を説明する図である。同図において、図３，４，５と同じ部分については同じ番号を付けており、その説明は省略する。
【００４６】
同図において６０１はｆ（１≦ｆ≦Ｆ）フレーム目の姿勢データが示す位置（当然、曲線３０１上の位置）で、この位置６０１から線分５０１への垂線の長さｌを求める処理を各フレームについて行う。即ち、１フレーム目の姿勢データが示す位置から線分５０１への垂線の長さｌ１を求め、次に、２フレーム目の姿勢データが示す位置から線分５０１への垂線の長さｌ２を求め、、、ｆフレーム目の姿勢データが示す位置から線分５０１への垂線の長さｌｆを求め、、、Ｆフレーム目の姿勢データが示す位置から線分５０１への垂線の長さｌＦを求める、というようにして各フレームの姿勢データが示す位置から線分５０１への垂線の長さを求める処理を行う。
【００４７】
そして、１フレーム目から、もしくはＦフレームからの何れからでも良いが、一方から順に垂線の長さを参照すると、初めのうちは長さの変化率は正となる。例えば１フレーム目から順に垂線の長さを参照すると、ｌ１＜ｌ２＜ｌ３＜ｌ４、、、となっている。即ち、垂線の長さの変化率は正の値となっていることが分かる。ここで変化率とは、一方側から垂線の長さを順に参照した場合に、現在参照している垂線の長さに対して、次に参照する垂線の長さがどれだけ長くなっているか（短くなっているか）を示すものであり、現在参照している垂線の長さに対して、次に参照する垂線の長さが長い場合には、変化率は正となり、逆に小さくなっている場合には負となる。
【００４８】
このように、初めのうちは変化率は正であるものの、あるフレーム（例えばｆフレーム目）からｌｆ＞ｌ（ｆ＋１）＞ｌ（ｆ＋２）＞ｌ（ｆ＋３）＞、、、ｌＦとなる。即ち、垂線の長さの変化率は負となる。このように、ｆフレーム目から変化率が正から負に転換するということは、ｆフレーム目（もしくは（ｆ−１）フレーム目）における曲線３０１の接線が、線分５０１とほぼ並行であるということになる。そして、ｆフレーム目、もしくは（ｆ−１）フレーム目をキーフレームとして特定し、ｆフレーム目、もしくは（ｆ−１）フレーム目における姿勢データをキーフレームの姿勢データとして上記キーフレーム姿勢データバッファに記録する処理を行う。
【００４９】
なお、垂線の長さを参照する場合に、Ｆフレーム目から参照して、ｆフレーム目で変化率が正から負に転じた場合、キーフレームはｆフレーム目、もしくは（ｆ＋１）フレーム目となる。即ち、何れの側から参照しても、変化率が正から負に転じたフレームの前後１フレームの範囲内の何れかがキーフレームとして特定されることになる。
【００５０】
図７は、図６に示した曲線３０１上において、上記処理により特定したキーフレーム（同図ではｆ１フレーム目、ｆ２フレーム目がキーフレームとして特定されている）の姿勢データが示す位置を示す図である。同図において、図３，４，５と同じ部分については同じ番号を付けており、その説明を省略する。７０１，７０２は夫々、ｆ１フレーム目における姿勢データが示す位置、ｆ２フレーム目における姿勢データが示す位置を示し、曲線３０１上で位置７０１，７０２における接線の傾きは、線分５０１にほぼ同じである。
【００５１】
次に、以上説明した処理をキーフレーム間毎に繰り返し適用する。例えば図７に示すような場合、キーフレームは、４０１，４０２，７０１，７０２で示す４箇所となる。従って、位置４０１と位置７０１との間、位置７０１と位置７０２の間、位置７０２と位置４０２との間について以上説明した処理を適用する。
【００５２】
しかし、夫々のキーフレーム間で上述のように垂線を求め、垂線の長さの最大値が所定値以下のキーフレーム間については新たにキーフレームを求める処理は行わない。例えば位置４０１のフレームから位置７０１のフレームまでの各フレームの姿勢データが示す位置から、位置４０１と位置７０１とを結ぶ線分への垂線の長さを求め、求めた垂線の長さの最大値が所定値以下であれば、位置４０１と位置７０１との間には新たにキーフレームを求める処理は行わない。これは、垂線の長さの最大値が所定値以下のキーフレーム間を結ぶ線分は、このキーフレーム間の曲線に十分近似できていることに起因する。
【００５３】
以下の説明では、位置４０１と位置７０１との間、位置７０１と位置７０２の間、位置７０２と位置４０２との間の何れのキーフレーム間についても、垂線の長さの最大値が所定値以上である場合について説明する。
【００５４】
図８は、位置４０１と位置７０１との間、位置７０１と位置７０２の間、位置７０２と位置４０２との間に対する、以上説明した処理の適用方法について説明する図である。同図において図３，４，７と同じ部分については同じ番号を付けており、その説明を省略する。
【００５５】
同図に示すように、まず、位置４０１と位置７０１とを結ぶ線分８０１，位置７０１と位置７０２とを結ぶ線分８０２，位置７０２と位置４０２とを結ぶ線分８０３とを求める。
【００５６】
そして位置４０１と位置７０１との間について、開始フレーム（位置４０１）からｆ１フレーム目（位置７０１）までの各フレームの姿勢データが示す位置から線分８０１への垂線の長さを求め、開始フレームから、もしくはｆ１フレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００５７】
しかし上述のように、参照した垂線の長さの最大値が所定値以上であれば、位置４０１と位置７０１との間については、キーフレームを求める処理は行わないので、キーフレームを特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理は行わない。
【００５８】
位置７０１と位置７０２との間についても同様に、ｆ１フレーム目（位置７０１）からｆ２フレーム目（位置７０２）までの各フレームの姿勢データが示す位置から線分８０２への垂線の長さを求め、ｆ１フレーム目から、もしくはｆ２フレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００５９】
しかし上述のように、参照した垂線の長さの最大値が所定値以上であれば、位置７０１と位置７０２との間については、キーフレームを求める処理は行わないので、キーフレームを特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理は行わない。
【００６０】
位置７０２と位置４０２との間についても同様に、ｆ２フレーム目（位置７０２）からＦフレーム目（位置４０２）までの各フレームの姿勢データが示す位置から線分８０３への垂線の長さを求め、ｆ２フレーム目から、もしくはＦフレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００６１】
しかし上述のように、参照した垂線の長さの最大値が所定値以上であれば、位置７０２と位置４０２との間については、キーフレームを求める処理は行わないので、キーフレームを特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理は行わない。
【００６２】
図９は、開始フレーム（位置４０１）からｆ１フレーム目（位置７０１）までの各フレームから、キーフレームを特定するための処理を説明する図である。同図において、図３，４，７，８と同じ部分については同じ番号を付けており、その説明を省略する。
【００６３】
同図において９０１はｇ（１≦ｇ≦ｆ１）フレーム目の姿勢データが示す位置（当然、曲線３０１上の位置）で、この位置９０１から線分８０１への垂線の長さｌを求める処理を各フレームについて行う。即ち、１フレーム目の姿勢データが示す位置から線分８０１への垂線の長さｌ１を求め、次に、２フレーム目の姿勢データが示す位置から線分８０１への垂線の長さｌ２を求め、、、ｇフレーム目の姿勢データが示す位置から線分８０１への垂線の長さｌｇを求め、、、ｆ１フレーム目の姿勢データが示す位置から線分８０１への垂線の長さｌｆ１を求める、というようにして、開始フレーム（位置４０１）からｆ１フレーム目（位置７０１）までの各フレームの姿勢データが示す位置から線分８０１への垂線の長さを求める処理を行う。
【００６４】
そして、１フレーム目から、もしくはｆ１フレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００６５】
図１３は、ｆ１フレーム目（位置７０１）からｆ２フレーム目（位置７０２）までの各フレームから、キーフレームを特定するための処理を説明する図である。同図において、図３，７，８と同じ部分については同じ番号を付けており、その説明を省略する。
【００６６】
同図において１３０１はｈ（ｆ１≦ｈ≦ｆ２）フレーム目の姿勢データが示す位置（当然、曲線３０１上の位置）で、この位置１３０１から線分８０２への垂線の長さｌを求める処理を各フレームについて行う。即ち、ｆ１フレーム目の姿勢データが示す位置から線分８０２への垂線の長さｌｆ１を求め、次に、（ｆ１＋１）フレーム目の姿勢データが示す位置から線分８０２への垂線の長さｌ（ｆ１＋１）を求め、、、ｈフレーム目の姿勢データが示す位置から線分８０２への垂線の長さｌｈを求め、、、ｆ２フレーム目の姿勢データが示す位置から線分８０２への垂線の長さｌｆ２を求める、というようにして、ｆ１フレーム目（位置７０１）からｆ２フレーム目（位置７０２）までの各フレームの姿勢データが示す位置から線分８０２への垂線の長さを求める処理を行う。
【００６７】
そして、ｆ１フレーム目から、もしくはｆ２フレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００６８】
図１０は、ｆ２フレーム目（位置７０２）から終了フレーム（位置４０２）までの各フレームから、キーフレームを特定するための処理を説明する図である。同図において、図３，４，７，８と同じ部分については同じ番号を付けており、その説明を省略する。
【００６９】
同図において１００１はｉ（ｆ２≦ｉ≦Ｆ）フレーム目の姿勢データが示す位置（当然、曲線３０１上の位置）で、この位置１００１から線分８０３への垂線の長さｌを求める処理を各フレームについて行う。即ち、ｆ２フレーム目の姿勢データが示す位置から線分８０３への垂線の長さｌｆ２を求め、次に、（ｆ２＋１）フレーム目の姿勢データが示す位置から線分８０３への垂線の長さｌ（ｆ２＋１）を求め、、、ｉフレーム目の姿勢データが示す位置から線分８０３への垂線の長さｌｉを求め、、、Ｆフレーム目の姿勢データが示す位置から線分８０３への垂線の長さｌＦを求める、というようにして、ｆ２フレーム目（位置７０２）からＦフレーム目（位置４０２）までの各フレームの姿勢データが示す位置から線分８０３への垂線の長さを求める処理を行う。
【００７０】
そして、ｆ２フレーム目から、もしくはＦフレーム目からの何れからでも良いが、一方側から順に垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００７１】
図１１は、図８に示した曲線３０１上において、上記処理により特定したキーフレーム（ｆ３，ｆ４，ｆ５，ｆ６の４つのフレーム）の姿勢データが示す位置を示す図である。同図において、図３，４，７，８と同じ部分については同じ番号を付けており、その説明を省略する。１１０１，１１０２，１１０３，１１０４は夫々、ｆ３フレーム目における姿勢データが示す位置、ｆ４フレーム目における姿勢データが示す位置、ｆ５フレーム目における姿勢データが示す位置、ｆ６フレーム目における姿勢データが示す位置を示し、曲線３０１上で位置１１０１における接線の傾きは線分８０１にほぼ同じであり、位置１１０２，１１０３における接線の傾きは線分８０２にほぼ同じであり、位置１１０４における接線の傾きは線分８０３にほぼ同じである。
【００７２】
このようにして、前回求めた各キーフレーム間について同じ処理を繰り返し行い、従前のキーフレーム間に新たに１つ以上のキーフレームを特定する。なお、上述の通り、垂線の長さの最大値が所定値以下となるキーフレーム間が処理対象となる。
【００７３】
そして、この繰り返し処理は、これからキーフレームを特定しようとする全てのキーフレーム間で、上述の垂線の長さの最大値が所定値以下であれば、処理対象とするキーフレーム間が無くなるので、終了する。
【００７４】
なお、「更にキーフレームの姿勢データを特定する処理を行う」か否かの判定処理の判断基準はこれに限定されるものではなく、様々なものが適用可能であるが例えば他にも以下のようなものが考えられる。
【００７５】
即ち、キーフレームの姿勢データを特定するために求めた垂線の長さを、特定したキーフレームの姿勢データ全てについて加算し、その加算結果が所定値以下でない場合に、「更にキーフレームの姿勢データを特定する処理を行う」と判断する。
【００７６】
例えば図７における状態で、「更にキーフレームの姿勢データを特定する処理を行う」と判断するか否かは、位置７０１から線分５０１への垂線の長さと位置７０２から線分５０１への垂線の長さの合計値が所定値以下であるか否かに応じて決まる。即ち、合計値が所定値以下でない場合、更に、位置４０１と位置７０１との間、位置７０１と位置７０２との間、位置７０２と位置４０２との間の夫々について、上記キーフレーム特定処理を行う。そして、以降同様の処理を繰り返す。
【００７７】
なお、キーフレームの姿勢データを求めるために計算した垂線の長さは、この判断処理のために一時的にＲＡＭ１０２に記憶させておく必要がある。
【００７８】
また、その他にも例えば、上記合計値を求める毎に前回の合計値との差分、所謂合計値の変化率がある程度の値以下となった場合に、「更にキーフレームの姿勢データを特定する処理」は行わないと判断するようにしても良い。
【００７９】
そして、以上の処理によってキーフレームを特定し、特定したキーフレームにおける姿勢データをキーフレーム姿勢データバッファに順次記録していき、そして「更にキーフレームの姿勢データを特定する処理を行う」という判断がなされなくなった場合には、キーフレーム姿勢データバッファに記録しているキーフレームの姿勢データ群を、「上記姿勢制御対象３次元モデルに対するモーションデータ」として外部記憶装置１０７に保存する、または、記憶媒体ドライブ１０８によって記憶媒体に記録する処理を行う。
【００８０】
図１２は、以上説明した本実施形態に係る「キーフレームを特定する処理」のフローチャートである。なお、同図のフローチャートに従ったプログラムは外部記憶装置１０７からＲＡＭ１０２に、もしくは記憶媒体から記憶媒体ドライブ装置１０８によってＲＡＭ１０２にロードされるものであり、ＣＰＵ１０１がこれを実行することにより、本実施形態に係るデータ処理装置は同図のフローチャートに従った処理を実行することになる。尚、同図のフローチャートにおいてあるステップによっては上記説明の通りであるのでそのようなステップについては説明は簡単にする。
【００８１】
先ず、姿勢制御対象３次元モデルの各フレームの姿勢データをプロットすることで得られる曲線の両端に位置する姿勢データ、即ち、開始フレームの姿勢データと、終了フレームの姿勢データとをキーフレームの姿勢データとして特定し、特定したこれらのデータをキーフレーム姿勢データバッファに記録する（ステップＳ１２０１）。
【００８２】
そして、キーフレーム間を結ぶ線分を求める（ステップＳ１２０２）。本ステップにおける処理が最初に行われる場合、即ち、ステップＳ１２０１における処理からステップＳ１２０２に進んだ場合には、キーフレームは開始フレームと終了フレームの２つであるので、ステップＳ１２０２では、この開始フレームの姿勢データが示す位置と、終了フレームの姿勢データが示す位置とを結ぶ線分を求めることになる。
【００８３】
また、ステップＳ１２０２における処理が２回目以降行われる場合、即ち、後述するステップＳ１２０７における処理からステップＳ１２０２に進んだ場合には、それまでで求まっている各キーフレーム間を結ぶ線分を求める。
【００８４】
次に、キーフレーム間の各フレームの姿勢データが示す位置から、ステップＳ１２０２で求めた線分への垂線の長さを計算し、一方側から順に垂線の長さを参照する（ステップＳ１２０３）。そして参照した垂線の長さｌの最大値ｌｍａｘが所定の閾値θ以上であるか否かをチェックする（ステップＳ１２０４）。即ち、このキーフレーム間を結ぶ線分が、このキーフレーム間の曲線に十分近似できているか否かをチェックする。
【００８５】
ｌｍａｘ≧θの場合、即ち、このキーフレーム間を結ぶ線分が、このキーフレーム間の曲線に十分近似できていなく、更にキーフレームを特定する必要がある場合には処理をステップＳ１２０５に進め、ステップＳ１２０３で参照した垂線の長さｌの変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う（ステップＳ１２０５）。
【００８６】
本ステップにおける処理が最初に行われる場合、即ち、キーフレームとして特定されたフレームが開始フレームと終了フレームの２つである場合、ステップＳ１２０５では、開始フレームから終了フレームまでの各フレームの姿勢データが示す位置から、この開始フレームの姿勢データが示す位置と、終了フレームの姿勢データが示す位置とを結ぶ線分への垂線の長さを参照し、変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００８７】
また、ステップＳ１２０５における処理が２回目以降行われる場合、即ち、開始フレームから終了フレームまでで、いくつかのキーフレームが特定されている場合、特定した各キーフレーム間の各フレームの姿勢データが示す位置から、キーフレーム間を結ぶ線分への垂線の長さを参照し、ｌｍａｘ≧θのキーフレーム間については、垂線の長さｌの変化率が正から負に転じたフレーム（もしくは参照を開始した側に応じて前後１フレームの何れか）をキーフレームとして特定し、特定したキーフレームの姿勢データをキーフレーム姿勢データバッファに記録する処理を行う。
【００８８】
次に、全てのキーフレーム間について（ステップＳ１２０２で求めた全ての線分の両端のキーフレーム間について）ステップＳ１２０３からステップＳ１２０５までの処理を行ったか否かをチェックし、行っていなければ処理をステップＳ１２０３に戻して、次のキーフレーム間についてステップＳ１２０３以降の処理を行う。
【００８９】
一方、全てのキーフレーム間について（ステップＳ１２０２で求めた全ての線分の両端のキーフレーム間について）ステップＳ１２０３からステップＳ１２０５までの処理を行っている場合には、処理をステップＳ１２０７に進め、全てのキーフレーム間についてｌｍａｘ＜θであるか否かをチェックする（ステップＳ１２０７）。即ち、全てのキーフレーム間の線分が、曲線に十分近似できているか否かをチェックする。そして全てのキーフレーム間についてｌｍａｘ＜θである場合には処理をステップＳ１２０８に進め、これまでに姿勢データバッファに記録したキーフレームの姿勢データ群を外部記憶装置１０７に保存、もしくは記憶媒体ドライブ装置１０８に記憶媒体に記録させる処理を行い、本処理を終了する。
【００９０】
一方、全てのキーフレーム間についてｌｍａｘ＜θではない場合、ｌｍａｘ≧θのキーフレーム間についてステップＳ１２０２以降の処理を繰り返す。
【００９１】
以上の処理によって得られたキーフレームの姿勢データを用いれば、キーフレーム間のフレームの姿勢データを球形補間により求めても、元のデータとの誤差を極力抑えることができるので、Ｆフレーム分のモーションの再生を、Ｆフレーム分の姿勢データを全部を保持しておき、夫々を順次再生するのに比べても、誤差の少ないモーションを再生することができる。
【００９２】
また、Ｆフレーム分全部の姿勢データを管理するわけではなく、キーフレームの姿勢データのみを管理するので、管理するデータの量をよりより小さくすることができ、管理するためのメモリの使用量も少なく押さえることができる。
【００９３】
なお、以上の説明の本質は、図４から図１１、図１３に示したＦフレーム分の姿勢データの集合による曲線の形状等に適用することに限定されるものではなく、所定フレーム数分の姿勢データの集合による任意の曲線の形状に適用できることは、以上の説明により明白である。
【００９４】
［第２の実施形態］
第１の実施形態で説明したキーフレームの姿勢データを特定して保存するという処理、をコンピュータのＣＰＵに実行させるプログラムを、例えばＣＧ作成用ソフトウェアの一機能としてこのソフトウェアに含めても良い。
【００９５】
その場合、このソフトウェアをコンピュータにインストールし、このソフトウェアを用いてオブジェクトにモーションを付け、そしてこのモーションデータを保存する場合に、このプログラムをこのコンピュータのＣＰＵが実行することで、このモーションデータのうちキーフレームの姿勢データのみを特定して保存するという機能をこのソフトウェアに与えることができる。
【００９６】
これにより、作成したモーションを圧縮して保存するというソフトウェアを実現することができる。
【００９７】
［第３の実施形態］
また、以上の処理（例えば図１２に示したフローチャートの一部、もしくは全部に従った処理）をプログラムとしてＣＤ−Ｒ、ＲＯＭやＤＶＤ−ＲＯＭ、ＭＯ、ゲームカートリッジ等の記憶媒体に記憶させ、この記憶媒体に記憶されているプログラムをコンピュータに読み込ませ（インストール、もしくはコピーさせる）、このコンピュータのＣＰＵ又はＭＰＵがこれを実行することでこのコンピュータに以上の処理を実現させることができる。従って、このプログラムを記憶した記憶媒体もまた本発明を実施可能なものにするので、この記憶媒体も本発明の範疇にあることは明白である。
【００９８】
また、サーバ装置に以上の処理（例えば図１２に示したフローチャートの一部、もしくは全部に従った処理）のプログラムを保持させておき、周知の技術によりネットワークを介してコンピュータにこれらを供給することができる。そしてこれらプログラムやデータを供給されたコンピュータのＣＰＵ又はＭＰＵはこれを用いて以上の処理を実現させることができるので、このサーバ装置もまた上記記憶媒体として解釈することができるので、このサーバ装置も本発明の範疇にあることは明白である。
【００９９】
またこの記憶媒体は外部からコンピュータにプログラムやデータを提供するもの以外であっても良く、コンピュータに内蔵されたメモリチップなどであっても良いし、この記憶媒体成る文言の定義はより広く解釈されるべきである。
【図面の簡単な説明】
【０１００】
【図１】本発明の第１の実施形態に係る「キーフレームの姿勢データを特定する処理」を実行するデータ処理装置として機能するコンピュータの基本構成を示すブロック図である。
【図２】３次元仮想空間中に設けられた人の３次元モデルを構成する各パーツを示す図である。
【図３】姿勢制御対象３次元モデルの１フレーム目からＦフレーム目までの姿勢データをプロットすることで得られるグラフを示す図である。
【図４】図３に示す曲線３０１の両端の姿勢データ、即ち、開始フレーム（１フレーム目）と、終了フレーム（Ｆフレーム目）を説明する図である。
【図５】図４に示す開始フレームの姿勢データが示す位置と終了フレームの姿勢データが示す位置との間を結ぶ線分を説明する図である。
【図６】曲線３０１を構成する各フレームの姿勢データが示す位置からこの線分５０１への垂線の長さを求める処理を説明する図である。
【図７】図６に示した曲線３０１上において、上記処理により特定したキーフレームの姿勢データが示す位置を示す図である。
【図８】位置４０１と位置７０１との間、位置７０１と位置７０２の間、位置７０２と位置４０２との間に対する、以上説明した処理の適用方法について説明する図である。
【図９】開始フレーム（位置４０１）からｆ１フレーム目（位置７０１）までの各フレームから、キーフレームを特定するための処理を説明する図である。
【図１０】ｆ２フレーム目（位置７０２）から終了フレーム（位置４０２）までの各フレームから、キーフレームを特定するための処理を説明する図である。
【図１１】図８に示した曲線３０１上において、上記処理により特定したキーフレームの姿勢データが示す位置を示す図である。
【図１２】本実施形態に係る「キーフレームを特定する処理」のフローチャートである。
【図１３】ｆ１フレーム目（位置７０１）からｆ２フレーム目（位置７０２）までの各フレームから、キーフレームを特定するための処理を説明する図である。
【図１】
2005165962.tif 000003
【図２】
2005165962.tif 000004
【図３】
2005165962.tif 000005
【図４】
2005165962.tif 000006
【図５】
2005165962.tif 000007
【図６】
2005165962.tif 000008
【図７】
2005165962.tif 000009
【図８】
2005165962.tif 000010
【図９】
2005165962.tif 000011
【図１０】
2005165962.tif 000012
【図１１】
2005165962.tif 000013
【図１２】
2005165962.tif 000014
【図１３】
2005165962.tif 000015