(57)【要約】【課題】  親子構造を有するモデル群の内の、親のモデルと子のモデルの相対的な姿勢関係を正確に維持するように、「子」の姿勢データを更新する技術を提供すること。【解決手段】  予め作成された親のモデルのモーションデータにおいてｆフレーム目をＭｐｆ、子モデルの予め作成されたモーションデータにおいてｆフレーム目をＭｃｆ、補間処理で求めた親のモデルのｆフレーム目をＭ’ｐｆ、ｆフレーム目の子モデルの更新姿勢データが示すマトリックスがＭ’ｐｆの場合、Ｍ’ｃｆ＝ＭｃｆＭｐｆＩｎｖ（Ｍ’ｐｆ）を計算し、Ｍ’ｃｆが示す姿勢データを、ｆフレーム目における子モデルの更新姿勢データとして求める（Ｓ６０４）。【選択図】  図６
2005128775.tif 000002
【特許請求の範囲】
【請求項１】
連続フレームの各フレームにおける第１のモデル、第２のモデルの姿勢を示すデータがメモリに保持されており、且つ前記第２のモデルの姿勢データは絶対座標系における前記第２のモデルの姿勢を示すデータであり、且つ前記第１のモデルの姿勢データは前記第２のモデルの姿勢に対して相対的な姿勢を示すデータであり、且つ連続フレームの各フレームにおける前記第２のモデルの姿勢データのうち、キーフレームにおける姿勢データが決定している場合に、前記第１のモデルのキーフレームを特定する為の処理を行うデータ処理装置であって、
前記第２のモデルのキーフレーム間のフレームの姿勢データを補間により求める補間手段と、
前記補間手段が求めた注目フレームにおける前記第２のモデルの姿勢データが示す姿勢との相対的な姿勢関係が、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルと前記第２のモデルとの相対的な姿勢関係となるような前記第１のモデルの姿勢を示すデータを、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルの姿勢データ、前記第２のモデルの姿勢データ、前記補間手段による前記注目フレームにおける前記第２のモデルの姿勢データを用いて求める生成手段と、
前記メモリに保持されている前記第１のモデルの姿勢データのうち、前記注目フレームにおける姿勢データを、前記生成手段が求めた前記注目フレームにおける前記第１のモデルの姿勢データに更新する更新手段とを備え、
前記更新手段がキーフレーム間の各フレームについて前記第１のモデルの姿勢データを更新した後に、前記第１のモデルのキーフレームを特定することを特徴とするデータ処理装置。
【請求項２】
前記生成手段は、前記補間手段が求めた前記注目フレームにおける前記第２のモデルの姿勢データが示す姿勢をマトリクスＭ２’、前記メモリに保持されている前記注目フレームにおける前記第１のモデルの姿勢データが示す姿勢、前記第２のモデルの姿勢データに基づく姿勢を夫々マトリクスＭ１，Ｍ２で表すとすると、Ｍ１・Ｍ２・Ｉｎｖ（Ｍ２’）（Ｍ・ＮはマトリクスＭとＮの積算を表し、Ｉｎｖ（Ｍ）はマトリックスＭの逆行列を示す）の演算を行い、
前記更新手段は、前記メモリに保持されている前記第１のモデルの姿勢データのうち、前記注目フレームにおける姿勢データを、前記演算により得られるマトリックスが示すデータに更新することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記更新手段は、前記生成手段が全てのフレームについて前記第１のモデルの姿勢データを生成した後に、前記メモリに保持されている前記第１のモデルの各フレームの姿勢データを、前記生成手段が生成した前記全てのフレームについての前記第１のモデルの姿勢データに更新することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
連続フレームの各フレームにおける第１のモデル、第２のモデルの姿勢を示すデータがメモリに保持されており、且つ前記第２のモデルの姿勢データは絶対座標系における前記第２のモデルの姿勢を示すデータであり、且つ前記第１のモデルの姿勢データは前記第２のモデルの姿勢に対して相対的な姿勢を示すデータであり、且つ連続フレームの各フレームにおける前記第２のモデルの姿勢データのうち、キーフレームにおける姿勢データが決定している場合に、前記第１のモデルのキーフレームを特定する為の処理を行うデータ処理方法であって、
前記第２のモデルのキーフレーム間のフレームの姿勢データを補間により求める補間工程と、
前記補間工程で求めた注目フレームにおける前記第２のモデルの姿勢データが示す姿勢との相対的な姿勢関係が、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルと前記第２のモデルとの相対的な姿勢関係となるような前記第１のモデルの姿勢を示すデータを、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルの姿勢データ、前記第２のモデルの姿勢データ、前記補間工程による前記注目フレームにおける前記第２のモデルの姿勢データを用いて求める生成工程と、
前記メモリに保持されている前記第１のモデルの姿勢データのうち、前記注目フレームにおける姿勢データを、前記生成工程で求めた前記注目フレームにおける前記第１のモデルの姿勢データに更新する更新工程とを備え、
前記更新工程でキーフレーム間の各フレームについて前記第１のモデルの姿勢データを更新した後に、前記第１のモデルのキーフレームを特定することを特徴とするデータ処理方法。
【請求項５】
コンピュータに請求項４に記載のデータ処理方法を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キーフレームの姿勢データを特定する為の技術に関するものである。
【背景技術】
【０００２】
３次元画像空間（ゲーム空間）内に配置するための人間のオブジェクトは、図１に示すように、各部分毎にモデルを作成することが多い。このように作成すると、各モデル毎に姿勢を変更することができ、これにより、この人間のオブジェクトに様々なポーズをとらせることができる。図１は、３次元画像空間（ゲーム空間）内に配置するための人間のオブジェクトの一例を示す図である。
【０００３】
このように、人間のオブジェクトに関わらず、複数のモデルにより構成されているオブジェクトは、各モデルの姿勢を変更させることで、様々なポーズを取らせることができる。
【０００４】
一方、このようなオブジェクトに対して、所定フレーム数で所定のモーションを与えるための「モーションデータ」というものがある。例えば図１に示すようなオブジェクトに対するモーションデータは、図１に示すオブジェクトを構成する各部分のモデルの各フレームにおける姿勢を示すデータである。即ち、各フレームにおける各モデルの姿勢を示すデータがこのオブジェクトに対するモーションデータである。
【０００５】
一方、図１に示すようなオブジェクトの場合、各モデルには親子関係が予め設定されていることが多い。即ち、「子」のモデルの姿勢のデータは、「親」のモデルの姿勢に対する相対的な姿勢を示すデータである。そしてまた、この「親」（第１の親）にとっての「親」（第２の親）が更にある場合、第１の親の姿勢のデータは、第２の親の姿勢に対する相対的な姿勢を示すデータとなる。
【０００６】
このように、各モデルが親子構造を有していると、例えばモデル１０７を最も最上位の親（この親にとっての親は存在しない）のモデルとする場合、モデル１０７の姿勢データは、絶対座標系（ゲーム空間中の１点を原点とし、この原点から互いに直交する３軸を夫々ｘ、ｙ、ｚ軸とする座標系）における姿勢を示すものとなる。そしてモデル１０８，１１１の姿勢データは、モデル１０７の姿勢に対して相対的な姿勢を示すデータとなる。
【０００７】
そしてモーション再生のために、例えばモデル１０８の絶対座標系における姿勢を求めたい場合、モデル１０７の姿勢を示すマトリクスをＭ（モデル１０７の姿勢データが示すマトリクス）、モデル１０８の姿勢を示すマトリクスをＮ（モデル１０８の姿勢データが示すマトリクス）とすると、Ｎ・Ｍ（Ｘ・ＹはマトリクスＸとマトリクスＹとの積算を示す）の演算結果が、即ち、モデル１０８の絶対座標系における姿勢を示すマトリクスとなり、このマトリクスに従った姿勢をモデル１０８に与えれば良いことになる。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
オブジェクトのモーションデータ、即ち、オブジェクトを構成する各部分の各フレームにおける姿勢データを全て保存すると、オブジェクトの数、モデルの数、フレーム数などの増加により、保存すべきデータ量は増大する。そこで各モデル毎に、各フレームの内、キーフレームとなるフレームの姿勢データのみを保存することで、保存すべきデータの量を少なくする技術が従来からある。
【０００９】
そして、実際に保存したデータを用いて、モーションを再生する場合、キーフレーム間のフレームにおける姿勢データは、周知の補間技術でデータを補間して生成する。これにより、キーフレームの姿勢データのみを保存しても、再生時にはキーフレーム間の姿勢データは生成できるので、保存すべきデータの量を少なくすることができるし、モーションの再生を行うことができる。
【００１０】
しかし、あくまでキーフレーム間のフレームの姿勢データは補間により生成するので、元々キーフレーム間に存在した姿勢データとは誤差が生じることになる。そもそも「子」の姿勢データは「親」の姿勢データが示す姿勢に対して相対的な姿勢を示すものであるので、キーフレーム間のフレームにおける親の姿勢データに誤差が生じると、「子」のモデルの姿勢データを計算する場合、この誤差を含んだ「親」の姿勢データを参照するので、当然その誤差は「子」に伝搬することになる。また、その誤差は、「「親」の姿勢データを参照して「子」の姿勢データを決定する処理」を繰り返す毎に増大し、末端の「子」のモデルの姿勢は、最初に作成したものとは大きくかけ離れてしまう。
【００１１】
本発明はこのような点を考慮して成されたものであり、親子構造を有するモデル群の内の、親のモデルと子のモデルの相対的な姿勢関係を正確に維持するように、「子」の姿勢データを更新する技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の目的を達成するために、例えば本発明のデータ処理装置は以下の構成を備える。
【００１３】
即ち、連続フレームの各フレームにおける第１のモデル、第２のモデルの姿勢を示すデータがメモリに保持されており、且つ前記第２のモデルの姿勢データは絶対座標系における前記第２のモデルの姿勢を示すデータであり、且つ前記第１のモデルの姿勢データは前記第２のモデルの姿勢に対して相対的な姿勢を示すデータであり、且つ連続フレームの各フレームにおける前記第２のモデルの姿勢データのうち、キーフレームにおける姿勢データが決定している場合に、前記第１のモデルのキーフレームを特定する為の処理を行うデータ処理装置であって、
前記第２のモデルのキーフレーム間のフレームの姿勢データを補間により求める補間手段と、
前記補間手段が求めた注目フレームにおける前記第２のモデルの姿勢データが示す姿勢との相対的な姿勢関係が、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルと前記第２のモデルとの相対的な姿勢関係となるような前記第１のモデルの姿勢を示すデータを、前記メモリに保持されているデータが示す前記注目フレームにおける前記第１のモデルの姿勢データ、前記第２のモデルの姿勢データ、前記補間手段による前記注目フレームにおける前記第２のモデルの姿勢データを用いて求める生成手段と、
前記メモリに保持されている前記第１のモデルの姿勢データのうち、前記注目フレームにおける姿勢データを、前記生成手段が求めた前記注目フレームにおける前記第１のモデルの姿勢データに更新する更新手段とを備え、
前記更新手段がキーフレーム間の各フレームについて前記第１のモデルの姿勢データを更新した後に、前記第１のモデルのキーフレームを特定することを特徴とする。
【００１４】
これにより、補間手段が求めた注目フレームにおける第２のモデルの姿勢データが示す姿勢との相対的な姿勢関係が、メモリに保持されているデータが示す注目フレームにおける第１のモデルと第２のモデルとの相対的な姿勢関係となるような第１のモデルの姿勢を示すデータを求めることができ、親子構造を有するモデル群の内の、親のモデルと子のモデルの相対的な姿勢関係を正確に維持するように、「子」の姿勢データを更新することができる。
【００１５】
このような、第１のモデルの注目フレームにおける姿勢データを生成するためには、生成手段は、補間手段が求めた注目フレームにおける第２のモデルの姿勢データが示す姿勢をマトリクスＭ２’、メモリに保持されている注目フレームにおける第１のモデルの姿勢データが示す姿勢、第２のモデルの姿勢データに基づく姿勢を夫々マトリクスＭ１，Ｍ２で表すとすると、Ｍ１・Ｍ２・Ｉｎｖ（Ｍ２’）（Ｍ・ＮはマトリクスＭとＮの積算を表し、Ｉｎｖ（Ｍ）はマトリックスＭの逆行列を示す）の演算を行い、更新手段は、メモリに保持されている第１のモデルの姿勢データのうち、注目フレームにおける姿勢データを、上記演算により得られるマトリックスが示すデータに更新することを特徴とする。
【００１６】
また、更新手段による更新のタイミングは、生成手段が全てのフレームについて第１のモデルの姿勢データを生成した後に、メモリに保持されている前記第１のモデルの各フレームの姿勢データを、生成手段が生成した前記全てのフレームについての前記第１のモデルの姿勢データに更新することを特徴とする。
【００１７】
また、以上の構成を方法、プログラムに適用しても、同様の効果が得られることは明白である。
【発明の効果】
【００１８】
本発明の構成によって、親子構造を有するモデル群の内の、親のモデルと子のモデルの相対的な姿勢関係を正確に維持することができる。
【発明を実施するための最良の形態】
【００１９】
以下添付図面を参照して、本発明の好適な実施形態について詳細に説明する。
【００２０】
［第１の実施形態］
本実施形態では、「夫々が親子構造を有するモデル群」により構成され、ゲーム空間中に配置されるオブジェクト（親子構造を有さないモデル群が含まれていても良い）に対してモーションデータが与えられた場合（即ち、連続フレームの各フレームにおける各モデルの姿勢を示すデータが与えられた場合）、且つ親のモデルの姿勢データは絶対座標系（ゲーム空間中の１点を原点とし、この原点から互いに直交する３軸を夫々ｘ、ｙ、ｚ軸とする座標系）における親のモデルの姿勢を示すデータであり、且つ子のモデルの姿勢データは親のモデルの姿勢に対して相対的な姿勢を示すデータであり、且つ連続フレームの各フレームにおける親のモデルの姿勢データのうち、キーフレームにおける姿勢データが決定している場合に、子のモデルについてもキーフレームを求めるために、親子構造を有するモデル群の内の、親のモデルと子のモデルの相対的な姿勢関係を正確に維持するように、「子」の姿勢データを更新する為の処理について説明する。
【００２１】
図５は本実施形態に係る上記「姿勢データの更新処理」を実行するデータ処理装置として機能するコンピュータの基本構成を示すブロック図である。
【００２２】
１０１はＣＰＵで、ＲＡＭ１０２やＲＯＭ１０３に記憶されているプログラムやデータを用いて本装置全体の制御を行うと共に、本実施形態に係る上記「姿勢データの更新処理」を実行する。
【００２３】
１０２はＲＡＭで、外部記憶装置１０７や記憶媒体ドライブ装置１０８からロードされたプログラムやデータを一時的に記憶するためのエリアを備えると共に、ＣＰＵ１０１が各種の処理を実行するために用いるワークエリアを備える。
【００２４】
１０３はＲＯＭで、ブートプログラムや本装置の設定に係るデータなどが格納されている。
【００２５】
１０４，１０５は夫々キーボード、マウスで、ＣＰＵ１０１に各種の指示を入力するために使用されるものである。なお、ＣＰＵ１０１に各種の指示を入力することができるデバイスとしてはこれ以外にも、例えばジョイスティックやゲームパッドなどの他のデバイスを用いることもできる。
【００２６】
１０６は表示部で、ＣＲＴや液晶画面などにより構成されており、ＣＰＵ１０１による処理結果を画像や文字などの情報により表示することができる。
【００２７】
１０７は外部記憶装置で、ハードディスクドライブ装置などの大容量情報記憶装置として機能するものであり、ここにＯＳ（オペレーティングシステム）や、ＣＰＵ１０１に後述する本実施形態に係る上記「姿勢データの更新処理」を実行させるためのプログラムやデータ、姿勢を制御する対象のモデル（夫々が親子構造を有しており、このモデル群により１つのオブジェクトを構成する）のデータ（モデルがポリゴンにより表現されるものである場合には、モデルを構成する各ポリゴンの各頂点座標位置、各ポリゴンの法線ベクトルを示すデータ、そしてこのモデルにテクスチャをマッピングする場合には、このテクスチャのデータ等）、そして上記モーションデータ等が保存されており、これらはＣＰＵ１０１による制御により、必要に応じてＲＡＭ１０２に読み出される。
【００２８】
１０８は記憶媒体ドライブ装置で、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなどの記憶媒体に記録されているプログラムやデータを読み出し、ＲＡＭ１０２や外部記憶装置１０７に出力するものである。なおＣＰＵ１０１に後述する本実施形態に係る「姿勢データの更新処理」を実行させるためのプログラムやデータ、上記モデルのデータ、上記モーションデータ等をこの記憶媒体に記録させておいても良く、その場合には、これらプログラムやデータは、ＣＰＵ１０１による制御の下、記憶媒体ドライブ装置１０８によって記憶媒体から読み出され、ＲＡＭ１０２に出力される。
【００２９】
また、記憶媒体がＣＤ−ＲやＤＶＤ−ＲＡＭなどの書き込み可能なものである場合には、記憶媒体ドライブ装置１０８はＣＰＵ１０１の制御により、この記憶媒体にプログラムやデータを書き込む処理を行う。
【００３０】
１０９は上記各部を繋ぐバスである。
【００３１】
次に、以上の構成を備えるコンピュータが行う、本実施形態に係る「姿勢データの更新処理」について説明する。本実施形態では、３次元仮想空間（ゲーム空間）に配置されるオブジェクトを構成する各部のモデル（例えばオブジェクトが人を表す場合、「各部のモデル」とは、図１の１０１〜１１３に示す各部の３次元形状を有するモデルを示す）の、各フレームにおける姿勢を示すデータがこのオブジェクトに対するモーションデータとしてＲＡＭ５０２に格納されているものとする。このモーションデータについては上述の通りである。
【００３２】
また、各モデルには親子関係が予め設定されている。即ち上述の通り、「子」のモデルの姿勢のデータは、「親」のモデルの姿勢に対する相対的な姿勢を示すデータとなる。そしてまた、この「親」（第１の親）にとっての「親」（第２の親）が更にある場合、第１の親の姿勢のデータは、第２の親の姿勢に対する相対的な姿勢を示すデータとなる。
【００３３】
従って、オブジェクトに対するモーションデータ、即ち、各フレームにおける各モデルの姿勢を示すデータは、より詳しくは、最上位の親のモデル（即ち、このモデルには親が存在しない）については、各フレームにおける最上位の親のモデルの絶対座標系における姿勢データである。
【００３４】
また、この最上位の親のモデルを親とする子のモデル（第１の子モデル）については、各フレームにおける最上位の親のモデルの姿勢に対する相対的な姿勢を示すデータである。即ち、第１の子モデルのｆフレーム目における姿勢データは、ｆフレーム目における最上位の親のモデルの姿勢に対して相対的な姿勢を示すデータとなる。
【００３５】
また、この第１の子モデルを親とする子のモデル（第２の子モデル）については、各フレームにおける第１の子モデルの姿勢に対する相対的な姿勢を示すデータである。即ち、第２の子モデルのｆフレーム目における姿勢データは、ｆフレーム目における第１の子モデルの姿勢に対して相対的な姿勢を示すデータとなる。
【００３６】
このように、各モデルが階層的になっている（即ち親子構造になっている）場合、一般には、第ｎの子モデル（ｎ≧１で、ｎ＝１の場合、最上位の親のモデルを示す）のｆフレーム目における姿勢データは、ｆフレーム目における第（ｎ−１）の子モデルの姿勢に対して相対的な姿勢を示すデータとなる。
【００３７】
例えば最上位の親のモデルを図１に示した各モデルにおいてモデル１０７であるとすると、第１の子モデルはモデル１０８（もしくはモデル１１１）、第２の子モデルはモデル１０９（もしくはモデル１１２）、第３の子モデルはモデル１１０（もしくはモデル１１３）に相当する。
【００３８】
また、ゲーム空間中に第ｎの子モデルを配置する場合、当然、このモデルの絶対座標系における姿勢が必要となるが、例えばｆフレーム目における第ｎの子モデルの絶対座標系における姿勢を得る場合、ｆフレーム目における第（ｎ−１）の子モデルのｆフレーム目における姿勢データが示すマトリックスＭ（ｎ−１）、ｆフレーム目における第（ｎ−２）の子モデルのｆフレーム目における姿勢データが示すマトリックスＭ（ｎ−２）、、、ｆフレーム目における第１の子モデル（即ち最上位の親のモデル）のｆフレーム目における姿勢データが示すマトリックスＭ１の全てを積算した結果が、第ｎの子モデルの絶対座標系における姿勢を示すマトリックスとなり、このマトリクスを示すデータが、第ｎの子モデルの絶対座標系における姿勢を示すデータとなる。
【００３９】
以上のようにして、本実施形態では、親子構造となった各モデルには各フレームにおける姿勢データが作成されており、夫々のモデルの姿勢データは以上のように、親のモデルの姿勢データが示す姿勢に対して相対的な姿勢を示すデータとなっている。
【００４０】
ここで、最上位の親のモデルに対するモーションデータにはキーフレームが特定されているものとする。キーフレームについては周知のものであるので簡単に説明すると、各モデルについて、各フレームの姿勢データを管理すると、モデル数、フレーム数などの増加に伴い、そのデータ量は膨大なものとなる。そこで、各フレームの姿勢データのうち、主要となるフレームの姿勢データだけを保持しておき、その他のフレームの姿勢データについては破棄する。これにより、管理すべきデータの量は少なくなる。
【００４１】
そして、実際に保存したキーフレームの姿勢データを用いて、モーションを再生する場合、キーフレーム間のフレームにおける姿勢データは、周知の補間技術でデータを補間して生成する。これにより、キーフレームの姿勢データのみを保存しても、再生時にはキーフレーム間の姿勢データは生成できるので、全てのフレームの姿勢データは得られ、モーションの再生を行うことができる。また、これにより、保存すべきデータの量を少なくすることができる。
【００４２】
このように、最上位の親のモデルについては、各フレームのうち、キーフレームにおける姿勢データのみが選択され、管理されているものとする。なお、あるモデルについて所定フレームの姿勢データが与えられた場合に、この各フレームの内、キーフレームの姿勢データを選択する方法については周知の技術であるので、これについての説明は省略する。本実施形態では、最上位の親のモデルのキーフレームは、周知の技術でもって選択されたものであるとする。
【００４３】
図２は、最上位の親のモデルのフレームデータと、この最上位の親のモデルを親とする子のモデルの各フレームにおける姿勢データ（即ち、最上位の親のモデルに対するモーションデータ）を模式的に示す図である。同図において、各「ます」が各フレームにおける姿勢データ部分を示す。よって同図ではモーションデータは、１２フレーム分の各フレームにおける姿勢データにより構成されているが、以下の説明はこのフレーム数に限定されるものではない。
【００４４】
同図において２０１は、最上位の親のモデルに対して作成されたモーションデータで、各ますにおいて、グレーで塗りつぶされた「ます」の部分がキーフレームを示す。２０２は、最上位の親のモデルを親とする子モデルに対して作成されたモーションデータで、モーションデータ２０１と同様に、１２フレームの各フレームが、各ますで表されている。
【００４５】
また、各モデルの姿勢の表現方法として、本実施形態では、クオータニオンを用いるものとする。ここでクオータニオンについては周知であるので簡単に説明すると、クオータニオンとは３次元仮想空間上において任意の軸周りの回転を記述するためのもので、例えば任意の方向ベクトルＡ＝（ＸＡ、ＹＡ、ＺＡ）周りに角度θだけ回転することを表現するクオータニオンＱは、
Ｑ＝（ｘ、ｙ、ｚ、ｗ）
＝（ｓＸＡ，ｓＹＡ，ｓＺＡ，ｃ）
ｓ＝ｓｉｎ（θ／２）
ｃ＝ｃｏｓ（θ／２）
として表現される。
【００４６】
クオータニオンの典型的な使用法は、姿勢データを行列で表現する場合に、この行列をクオータニオンとして保持することである。そしてこの行列の演算を行う場合に、この行列の演算をクオータニオンの計算に置き換え、クオータニオンの計算を行った後、計算後のクオータニオンを行列の形式に変換するという処理を行う。
【００４７】
従って本実施形態では、元々行列の形式で格納されていた姿勢データをクオータニオンの形式（もしくは適宜マトリックスの形式）で扱い、以下説明する「子モデルの姿勢データの更新処理」を行う。
【００４８】
このように、クオータニオンを用いれば、所謂ジンバルロックで苦しむことがない。３つの角度（リール、ピッチ、ヨー）でもって姿勢を表現する方法では常に、ある特定の向きにおいて、単純なローカルの回転を３つの値の単純な変更で表すことができなくなってしまう。この種の回転は、ローカルのヨーを左右に動かそうとする際に９０度まで「ピッチが上がってしまっている」場合にしばしば見られるものである。
【００４９】
なお、このようなクオータニオンを用いたモデルの姿勢の計算については周知の技術であるので、ここでの説明は省略する。
【００５０】
このように、本実施形態ではｘ、ｙ、ｚ、ｗの４変数でもって定義されるクオータニオンによって各フレームのモデルの姿勢を示す姿勢データを表現するものとする。
【００５１】
図３は、図２に示したモーションデータ２０１の各フレーム（１フレーム目から１２フレーム目まで）の姿勢データをプロットすることで得られるグラフを示す図である。
【００５２】
同図において３００は、モーションデータ２０１の各フレーム（１フレーム目から１２フレーム目まで）の姿勢データをプロットすることで得られる曲線である。なお、同図のグラフが示す座標系は、モーションデータ２０１の各フレーム（１フレーム目から１２フレーム目まで）の姿勢データの集合を曲線でもって表現することができる座標系である。また、曲線３００上の３０１〜３０４は、キーフレームにおける姿勢データの位置を示す。
【００５３】
ここで、図３に示す曲線３００は、上述の通り、モーションデータ２０１の各フレーム（１フレーム目から１２フレーム目まで）の姿勢データをプロットすることで得られるものであるから、キーフレームの姿勢データだけを保存しておいて、後で、キーフレーム間の姿勢データを補間処理によって生成し、全てのフレームにおける姿勢データが用意された時点でこれらの姿勢データを同図のグラフ上にプロットすると、曲線３００とは若干異なる形状を有するものとなる。この形状のずれが、すなわち、補間によるキーフレーム間の姿勢データが示す位置と、モーションデータ２０１が示すキーフレーム間の姿勢データが示す位置とのずれである。
【００５４】
図４は、モーションデータ２０１を用いてあるキーフレーム間（例えば図３において、３０２示す位置のフレームと、３０２で示す位置のフレームとの間）の各フレームの姿勢データをプロットすることで得られる曲線４０４と、このキーフレーム間の各フレームの姿勢データを補間して求め、求めた姿勢データをプロットすることで得られる曲線４０３との誤差の一例を示す図である（従って、補間により、常に同図に示すような形態の誤差が生じるわけではない）。
【００５５】
同図に示すように、曲線４０４と曲線４０３とでは、補間により上記誤差が生じ、夫々曲線の形状が異なるので、例えばキーフレーム間の任意のｆフレーム目では、本来では４０５で示す位置を示す姿勢データであるのが、補間では、４０６で示す位置を示す姿勢データとなる。
【００５６】
ここで、モーションデータ２０１において最上位の親のモデルのｆフレーム目における姿勢を示すマトリックス（モーションデータ２０１においてｆフレーム目における姿勢データにより表現されるマトリックス）をＭｐｆ、補間により求めた最上位の親のモデルのｆフレーム目における姿勢を示すマトリックス（補間により求めた最上位の親のモデルのｆフレーム目における姿勢データにより表現されるマトリックス）をＭ’ｐｆ、モーションデータ２０２において子モデルのｆフレーム目における姿勢を示すマトリックス（モーションデータ２０２においてｆフレーム目における姿勢データにより表現されるマトリックス）をＭｃｆとすると、上記補間により上記誤差が生じなければ、
ＭｃｆＭ’ｐｆ＝ＭｃｆＭｐｆ
なる等式が成立する。しかし、上記誤差は生じるので、この等式な成り立たない。そこで本実施形態では、この等式が成り立つように、子モデルの姿勢データを変更する。即ち、最上位の親のモデルの補間によるｆフレーム目の姿勢データを用いて子モデルのｆフレーム目における絶対座標系における姿勢を求めても、求めた姿勢と最上位の親のモデルの補間によるｆフレーム目の姿勢との姿勢関係が、モーションデータ２０１、モーションデータ２０２の夫々ｆフレーム目における姿勢データが示す姿勢の関係と同じになるように、モーションデータ２０２のｆフレーム目の姿勢データ（更新姿勢データ）を求めて更新する。
【００５７】
従って、更新後の子モデルのｆフレーム目における姿勢データが示すマトリックスをＭ’ｃｆとすると、
Ｍ’ｃｆＭ’ｐｆ＝ＭｃｆＭｐｆ
が成り立つようにすることが本実施形態における更新処理の目的である。
【００５８】
この式より、最上位の親のモデルの補間によるｆフレーム目の姿勢データを用いても、モーションデータ２０１、モーションデータ２０２の夫々ｆフレーム目における姿勢データが示す姿勢の関係が維持されるような、子モデルのｆフレーム目における姿勢データは、以下の式に基づいて求めることができる。
【００５９】
Ｍ’ｃｆ＝ＭｃｆＭｐｆＩｎｖ（Ｍ’ｐｆ）
ここでＩｎｖ（Ｍ）はマトリックスＭの逆行列を示す。よって、マトリックスＭ’ｃｆが示す姿勢データを求めるためには、モーションデータ２０１、モーションデータ２０２のｆフレーム目の姿勢データを参照し、夫々の姿勢データが示すマトリックスの積を計算する。
【００６０】
そして、モーションデータ２０２においてｆフレーム目における姿勢データを、求めたマトリックスＭ’ｃｆが示す姿勢データに更新する。
【００６１】
以上の処理をｆが取りうる全てのフレーム（全てのキーフレーム間におけるフレーム）について行うことで、子モデルのモーションデータ２０２のうち、キーフレーム間におけるフレームの姿勢データは更新され、以降、子モデルの絶対座標系における姿勢を求めるために、補間された最上位の親のモデルの姿勢データが示すマトリックスと、更新されたモーションデータ２０２の姿勢データが示すマトリックスとを積算した結果を用いても、得られた子モデルの姿勢と最上位の親のモデルの姿勢との姿勢関係は、モーションデータ２０１が示す最上位の親のモデルの姿勢と、更新前のモーションデータ２０２が示す子モデルの姿勢との姿勢関係とほぼ同じになるので、最上位の親のモデルから子モデルへの補間による誤算伝搬を軽減することができる。
【００６２】
また、保持すべきデータの量を削減するために、子モデルのモーションデータ２０２についてもキーフレームを選択し、キーフレームの姿勢データのみを保存するようにする。上述のとおり、更新後のモーションデータ２０２の各フレームの姿勢データが示す姿勢と、補間された最上位の親のモデルの姿勢データが示す姿勢との姿勢関係は、更新前のモーションデータ２０２の各フレームの姿勢データが示す姿勢と、モーションデータ２０１が示す最上位の親のモデルの姿勢データが示す姿勢との姿勢関係とほぼ同じであるので、子モデルのモーションデータ２０２のうちキーフレームの姿勢データのみを保存し、キーフレーム間の姿勢データを補間で生成しても、最上位の親のモデルと子モデルとで同じアルゴリズムの補間処理を行えば、補間後の最上位の親のモデルの姿勢データが示す姿勢と、補間後の子モデルの姿勢データが示す姿勢との姿勢関係は、更新前のモーションデータ２０２の各フレームの姿勢データが示す姿勢と、モーションデータ２０１が示す最上位の親のモデルの姿勢データが示す姿勢との姿勢関係とほぼ同じとなる。
【００６３】
なお当然、以上説明した本実施形態に係る「姿勢データの更新処理」は、上記子モデルを親とするモデルが更に存在する場合（即ち、上記子モデルに更に「子」のモデルが存在する場合）には、上記子モデルを上記最上位の親のモデル、上記子モデルを親とするモデルを上記子モデルとして読み替えて、以上説明したモーションデータの更新処理を行えば良く、即ち、上記モーションデータの更新処理は、親子構造を有するオブジェクトにおいて、最上位の親のモデルから順々に最下位の子モデルへと、全ての親子間で行えば、オブジェクトを構成するモデル全体で、子モデルへの誤算伝搬を軽減することができる。
【００６４】
図６は、以上説明した、本実施形態に係る「姿勢データの更新処理」のフローチャートである。なお、図６に示したフローチャートに従ったプログラムは、外部記憶装置５０７や記憶媒体ドライブ装置５０８からＲＡＭ５０２に読み出され、ＣＰＵ５０１がこれを実行することで、本実施形態に係るデータ処理装置は、以上説明した本実施形態に係る「姿勢データの更新処理」を実行することになる。尚、各ステップにおける処理については以上説明したとおりであるので、ここでは簡単に説明する。
【００６５】
先ずステップＳ６００で、フレーム数をカウントするための変数ｆを１に初期化する。
【００６６】
次に、ステップＳ６０１では、予め作成された最上位の親のモデルのモーションデータ（Ｆフレーム分の各フレームにおける最上位の親のモデルの姿勢データ）において、ｆ（１≦ｆ≦Ｆ）フレーム目（キーフレーム間のフレーム）の姿勢データをＲＡＭ５０２中の所定のエリアに読み出す。
【００６７】
次に、ステップＳ６０２では、最上位の親のモデルを親とする子モデルの予め作成されたモーションデータ（Ｆフレーム分の各フレームにおける子モデルの姿勢データ）において、ｆ（１≦ｆ≦Ｆ）フレーム目の姿勢データをＲＡＭ５０２中の所定のエリアに読み出す。
【００６８】
次に、ステップＳ６０３では、最上位の親のモデルのｆフレーム目の姿勢データを、補間処理により求める。
【００６９】
そしてステップＳ６０４では、ステップＳ６０１で読み出された姿勢データが示すマトリックスをＭｐｆ、ステップＳ６０２で読み出された姿勢データが示すマトリックスをＭｃｆ、そしてステップＳ６０３で求めた姿勢データが示すマトリックスをＭ’ｐｆ、ｆフレーム目における、子モデルの更新姿勢データが示すマトリックスがＭ’ｐｆである場合に、
Ｍ’ｃｆ＝ＭｃｆＭｐｆＩｎｖ（Ｍ’ｐｆ）
を計算し、計算したマトリックスＭ’ｃｆが示す姿勢データを、ｆフレーム目における、子モデルの更新姿勢データとして求める。求めた更新姿勢データは、求められた順にＲＡＭ５０２中の所定のエリアに順次記録される。
【００７０】
そしてステップＳ６０５では、全てのフレームについて子モデルのＦフレーム分の更新姿勢データを求めたか否か（即ち、ｆがＦに達したか否か）を判断し、全てのフレームについて子モデルのＦフレーム分の更新姿勢データを求めた場合には、処理をステップＳ６０６に進め、予め作成された子モデルの各フレームの姿勢データを、ＲＡＭ５０２中の所定のエリアに１フレーム目からＦフレーム目まで順番に記録された「子モデルのＦフレーム分の更新姿勢データ」に更新する処理を行い、本処理を終了する。
【００７１】
一方、全てのフレームについて子モデルのＦフレーム分の更新姿勢データを求めていない場合には、処理をステップＳ６０７に進め、変数ｆの値を１つカウントアップし、ステップＳ６０１以降の処理を、（ｆ＋１）フレーム目について行う。
【００７２】
［第２の実施形態］
第１の実施形態で説明した、子モデルのモーションデータを更新して保存するという処理、をコンピュータのＣＰＵに実行させるプログラムを、例えばＣＧ作成用ソフトウェアの一機能としてこのソフトウェアに含めても良い。
【００７３】
その場合、このソフトウェアをコンピュータにインストールし、このソフトウェアを用いてオブジェクトにモーションを付け、そしてこのモーションデータを保存する場合に、このプログラムをこのコンピュータのＣＰＵが実行することで、この子モデルのモーションデータを更新して保存するという機能をこのソフトウェアに与えることができる。
【００７４】
これにより、作成したモーションデータを保存する（各モデルについてキーフレームの姿勢データのみを保存する）場合に、親のモデルと子のモデルとの相対的な姿勢関係が正確に維持されたモーションデータを保存するというソフトウェアを実現することができる。
【００７５】
［第３の実施形態］
また、以上の処理（例えば図６に示したフローチャートの一部、もしくは全部に従った処理）をプログラムとしてＣＤ−Ｒ、ＲＯＭやＤＶＤ−ＲＯＭ、ＭＯ、ゲームカートリッジ等の記憶媒体に記憶させ、この記憶媒体に記憶されているプログラムをコンピュータに読み込ませ（インストール、もしくはコピーさせる）、このコンピュータのＣＰＵ又はＭＰＵがこれを実行することでこのコンピュータに以上の処理を実現させることができる。従って、このプログラムを記憶した記憶媒体もまた本発明を実施可能なものにするので、この記憶媒体も本発明の範疇にあることは明白である。
【００７６】
また、サーバ装置に以上の処理（例えば図６に示したフローチャートの一部、もしくは全部に従った処理）のプログラムを保持させておき、周知の技術によりネットワークを介してコンピュータにこれらを供給することができる。そしてこれらプログラムやデータを供給されたコンピュータのＣＰＵ又はＭＰＵはこれを用いて以上の処理を実現させることができるので、このサーバ装置もまた上記記憶媒体として解釈することができるので、このサーバ装置も本発明の範疇にあることは明白である。
【００７７】
またこの記憶媒体は外部からコンピュータにプログラムやデータを提供するもの以外であっても良く、コンピュータに内蔵されたメモリチップなどであっても良いし、この記憶媒体成る文言の定義はより広く解釈されるべきである。
【図面の簡単な説明】
【００７８】
【図１】３次元画像空間（ゲーム空間）内に配置するための人間のオブジェクトの一例を示す図である。
【図２】最上位の親のモデルのフレームデータと、この最上位の親のモデルを親とする子のモデルの各フレームにおける姿勢データ（即ち、最上位の親のモデルに対するモーションデータ）を模式的に示す図である。
【図３】図２に示したモーションデータ２０１の各フレーム（１フレーム目から１２フレーム目まで）の姿勢データをプロットすることで得られるグラフを示す図である。
【図４】モーションデータ２０１を用いてあるキーフレーム間の各フレームの姿勢データをプロットすることで得られる曲線４０４と、このキーフレーム間の各フレームの姿勢データを補間して求め、求めた姿勢データをプロットすることで得られる曲線４０３との誤差の一例を示す図である。
【図５】本発明の第１の実施形態に係る「姿勢データの更新処理」を実行するデータ処理装置として機能するコンピュータの基本構成を示すブロック図である。
【図６】本発明の第１の実施形態に係る「姿勢データの更新処理」のフローチャートである。
【図１】
2005128775.tif 000003
【図２】
2005128775.tif 000004
【図３】
2005128775.tif 000005
【図４】
2005128775.tif 000006
【図５】
2005128775.tif 000007
【図６】
2005128775.tif 000008