(57)【要約】【課題】自由度の高い関節の可動範囲を十分に確保して滑らかなキャラクタの動作表現を可能とする骨格動作制御システム、プログラムおよび情報記憶媒体を提供する。【解決手段】親骨と子骨とが関節によって連結された骨格モデルの動作を制御する骨格動作制御システムである。可動範囲設定部１１２Ａは、関節を中心点とする球面上の所与の点を焦点とし、関節に対応する中心点と焦点とを結ぶ軸に直交する平面を射影面とし、関節の可動範囲を、射影面上において設定する。座標変換部１１２Ｂは、球面上において子骨の向きを表す点を焦点に基づいて射影面上に射影する。骨格動作演算部１１２Ｃは、射影面上に射影された点の位置に基づいて、可動範囲設定部１１２Ａにより設定された可動範囲の制限下で、親骨に対する子骨の向きを演算する。【選択図】図１
2010170279.tif 000002
【特許請求の範囲】
【請求項１】
親骨と子骨とが関節によって連結された骨格モデルの動作を制御するためのプログラムであって、
関節を中心点とする球面上の所与の点を焦点とし、該中心点と該焦点とを結ぶ軸に直交する平面を射影面とし、前記関節の可動範囲を、前記射影面上において設定する可動範囲設定部と、
前記球面上において前記子骨の向きを表す点を前記焦点に基づいて前記射影面上に射影する座標変換部と、
前記射影面上に射影された点の位置に基づいて、前記可動範囲の制限下で、前記親骨に対する前記子骨の向きを演算する骨格動作演算部として、
コンピュータを機能させることを特徴とするプログラム。
【請求項２】
請求項１において、
前記可動範囲設定部が、
前記射影面上で矩形を成すように前記可動範囲を設定することを特徴とするプログラム。
【請求項３】
請求項１において、
前記可動範囲設定部が、
前記射影面上で楕円形を成すように前記可動範囲を設定することを特徴とするプログラム。
【請求項４】
請求項１において、
前記可動範囲設定部が、
前記射影面上で小判形を成すように前記可動範囲を設定することを特徴とするプログラム。
【請求項５】
請求項１〜４のいずれかにおいて、
前記親骨に沿った軸が、ｘ軸として設定され、前記親骨に直交し、かつ互いに直交する２つの軸が、それぞれｙ軸およびｚ軸として設定されており、
前記射影面上に、互いに直交する座標軸が、それぞれｓ軸およびｔ軸として設定されており、
前記座標変換部が、
前記焦点を基準として、
ｓ＝−ｚ／（ｘ＋１）およびｔ＝ｙ／（ｘ＋１）｛ただし、ｘ２＋ｙ２＋ｚ２＝１｝
による射影を行うことによって、前記球面上の点（ｘ，ｙ，ｚ）を、前記射影面上の点（ｓ，ｔ）へ変換することを特徴とするプログラム。
【請求項６】
請求項５において、
前記骨格モデルの関節に関して、前記射影面上で成す可動範囲の形状として矩形、楕円形、または小判形のいずれかが予め設定されているとともに、該関節におけるｙ軸回りの子骨の回転角およびｚ軸回りの子骨の回転角の許容範囲が予め設定されており、
前記可動範囲設定部が、
前記射影面上で成す前記可動範囲の形状と、前記関節におけるｙ軸回りの子骨の回転角およびｚ軸回りの子骨の回転角の許容範囲とに基づいて、前記関節の可動範囲を前記射影面上において設定することを特徴とするプログラム。
【請求項７】
請求項１〜６のいずれかにおいて、
前記骨格動作演算部が、
前記親骨の動作に対応する前記子骨の動作を演算して得られた前記親骨に対する前記子骨の向きが前記可動範囲内に収まっているか否かを判定し、前記親骨に対する前記子骨の向きが前記可動範囲内に収まっていない場合には、前記可動範囲の形状に応じた条件を満たすように、前記親骨に対する前記子骨の向きを補正することを特徴とするプログラム。
【請求項８】
請求項１〜６のいずれかにおいて、
前記骨格動作演算部が、
前記親骨の動作に対応する前記子骨の動作を演算して得られた前記親骨に対する前記子骨の向きが前記可動範囲内に収まっているか否かを判定し、前記親骨に対する前記子骨の向きが前記可動範囲内に収まっていない場合には、前記射影面上において、前記射影された点が、前記射影面上で成す可動範囲の境界と衝突する際の反発挙動を演算し、前記親骨に対する前記子骨の向きを補正することを特徴とするプログラム。
【請求項９】
請求項８において、
前記骨格動作演算部が、
前記射影面上における前記射影された点の反発挙動が繰返し発生する場合に、前記射影された点の反発挙動が収束するまでに要する時間を求め、当該時間が所定時間以下となる場合に、前記射影された点の反発挙動を終了させることを特徴とするプログラム。
【請求項１０】
請求項８または９において、
前記骨格動作演算部が、
前記可動範囲の境界における前記射影された点の反発挙動を演算して得られた前記射影面上の点が前記可動範囲内に収まっていない場合には、前記可動範囲の形状に応じた条件を満たすように、前記親骨に対する前記子骨の向きを補正することを特徴とするプログラム。
【請求項１１】
コンピュータにより読み取り可能な情報記憶媒体であって、請求項１〜１０のいずれかに記載のプログラムを記憶していることを特徴とする情報記憶媒体。
【請求項１２】
親骨と子骨とが関節によって連結された骨格モデルの動作を制御する骨格動作制御システムであって、
関節を中心点とする球面上の所与の点を焦点とし、該中心点と該焦点とを結ぶ軸に直交する平面を射影面とし、前記関節の可動範囲を、前記射影面上において設定する可動範囲設定部と、
前記球面上において前記子骨の向きを表す点を前記焦点に基づいて前記射影面上に射影する座標変換部と、
前記射影面上に射影された点の位置に基づいて、前記可動範囲の制限下で、前記親骨に対する前記子骨の向きを演算する骨格動作演算部と、
を含むことを特徴とする骨格動作制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、骨格動作制御システム、プログラムおよび情報記憶媒体に関する。
【背景技術】
【０００２】
従来より、仮想３次元空間（オブジェクト空間）におけるキャラクタ（例えば、人、動物）、ロープ、布などの動作を、骨格モデル（スケルトンモデル）を用いて演算する手法が知られている。骨格モデルは、複数の骨を関節で連結することにより構成されており、一般的に骨同士に親子関係が設定され、親骨の動作に追従するように子骨の動作を決定する演算を行っている。
【０００３】
そして、このような骨格モデルでは、関節毎に自由度が異なっていたり、関節毎に可動範囲が異なっていたりする。例えば、人体モデルにおける肘や膝に相当する関節では自由度が低く、可動範囲が狭くなりやすい傾向にあり、肩などに相当する関節では自由度が高く、可動範囲が広くなりやすい傾向にある。
【０００４】
また親骨の動作に対応する子骨の動作を演算する際には、関節における親骨に対する子骨の曲げ状態や親骨に対する子骨の捻り状態といった回転情報を演算する処理が行われており、従来の手法では、親骨に対する子骨の向きを親骨の座標系を基準とした３軸（ｘ，ｙ，ｚ）の各軸周りの回転角度で表現するようにしていた。
【特許文献１】特開２０００−３０６１１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の手法を単純に適用して骨格モデルの動作を設計した場合、関節の可動範囲を広い範囲で設定しようとすると、動作設計者の意図とはかけ離れたいびつな範囲で関節の可動範囲が設定されてしまうという現状があり、滑らかなキャラクタの動作を表現することが難しいという課題があった。
【０００６】
本発明は上記事情に鑑みてなされたものであり、その目的は、関節の可動範囲を十分に確保して滑らかなキャラクタの動作表現を可能とする骨格動作制御システム、プログラムおよび情報記憶媒体を提供することにある。
【課題を解決するための手段】
【０００７】
（１）本発明は、親骨と子骨とが関節によって連結された骨格モデルの動作を制御するためのプログラムであって、関節を中心点とする球面上の所与の点を焦点とし、該中心点と該焦点とを結ぶ軸に直交する平面を射影面とし、前記関節の可動範囲を、前記射影面上において設定する可動範囲設定部と、前記球面上において前記子骨の向きを表す点を前記焦点に基づいて前記射影面上に射影する座標変換部と、前記射影面上に射影された点の位置に基づいて、前記可動範囲の制限下で、前記親骨に対する前記子骨の向きを演算する骨格動作演算部と、を含む骨格動作制御システムに関するものである。また本発明は、上記各部としてコンピュータを機能させるプログラム及びそのようなプログラムを記憶するコンピュータに読み取り可能な情報記憶媒体に関するものである。
【０００８】
本発明における「球面上において子骨の向きを表す点」は、例えば、子骨あるいは子骨の延長線と球面の交点とすることができる。
【０００９】
本発明によれば、射影を用いて球面上の点を射影面上に座標変換して可動範囲を設定することによって、従来における関節の可動範囲を設定する手法に比べて、関節の可動範囲を広範囲かつ整然とした範囲で設定することができ、滑らかに骨格モデルを動作させる演算を実現することができるようになる。例えば、可動範囲の狭い関節については、従来から慣用されてきた方式と同等の制限によって骨格モデルを動作させることができ、可動範囲の広い関節については、従来から慣用されてきた方式よりも自然で滑らかな骨格モデルの動作を表現できる。
【００１０】
（２）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記可動範囲設定部が、前記射影面上で矩形を成すように前記可動範囲を設定するようにしてもよい。
【００１１】
このようにすれば、関節の可動範囲が把握しやすく、かつ従来から慣用されてきた方式と同等の感覚で骨格モデルの動作設計をすることができるため、骨格モデルの動作設計の環境を向上させることができる。
【００１２】
（３）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記可動範囲設定部が、前記射影面上で楕円形を成すように前記可動範囲を設定するようにしてもよい。
【００１３】
このようにすれば、関節の可動範囲が把握しやすく、かつ従来から慣用されてきた方式と同等の感覚で骨格モデルの動作設計をすることができるため、骨格モデルの動作設計の環境を向上させることができる。
【００１４】
（４）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記可動範囲設定部が、前記射影面上で小判形を成すように前記可動範囲を設定するようにしてもよい。
【００１５】
このようにすれば、関節の可動範囲が把握しやすく、かつ従来から慣用されてきた方式と同等の感覚で骨格モデルの動作設計をすることができるため、骨格モデルの動作設計の環境を向上させることができる。
【００１６】
（５）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記親骨に沿った軸が、ｘ軸として設定され、前記親骨に直交し、かつ互いに直交する２つの軸が、それぞれｙ軸およびｚ軸として設定されており、前記射影面上に、互いに直交する座標軸が、それぞれｓ軸およびｔ軸として設定されており、前記座標変換部が、前記焦点を基準として、ｓ＝−ｚ／（ｘ＋１）およびｔ＝ｙ／（ｘ＋１）｛ただし、ｘ２＋ｙ２＋ｚ２＝１｝による射影を行うことによって、前記球面上の点（ｘ，ｙ，ｚ）を、前記射影面上の点（ｓ，ｔ）へ変換するようにしてもよい。
【００１７】
このようにすれば、射影による変換が、四則演算のみで構成されるので、計算負荷が小さい。
【００１８】
（６）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記骨格モデルの関節に関して、前記射影面上で成す可動範囲の形状として矩形、楕円形、または小判形のいずれかが予め設定されているとともに、該関節におけるｙ軸回りの子骨の回転角およびｚ軸回りの子骨の回転角の許容範囲が予め設定されており、前記可動範囲設定部が、前記射影面上で成す前記可動範囲の形状と、前記関節におけるｙ軸回りの子骨の回転角およびｚ軸回りの子骨の回転角の許容範囲とに基づいて、前記関節の可動範囲を前記射影面上において設定するようにしてもよい。
【００１９】
このようにすれば、従来方式を適用した骨格モデルの動作設計の資産を有効に活用して、簡便に関節の可動範囲を設定することができるようになる。
【００２０】
（７）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記骨格動作演算部が、前記親骨の動作に対応する前記子骨の動作を演算して得られた前記親骨に対する前記子骨の向きが前記可動範囲内に収まっているか否かを判定し、前記親骨に対する前記子骨の向きが前記可動範囲内に収まっていない場合には、前記可動範囲の形状に応じた条件を満たすように、前記親骨に対する前記子骨の向きを補正するようにしてもよい。
【００２１】
このようにすれば、演算負荷を抑えつつ、自然な動きを表現できる骨の向きを求めることができる。
【００２２】
（８）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記骨格動作演算部が、前記親骨の動作に対応する前記子骨の動作を演算して得られた前記親骨に対する前記子骨の向きが前記可動範囲内に収まっているか否かを判定し、前記親骨に対する前記子骨の向きが前記可動範囲内に収まっていない場合には、前記射影面上において、前記射影された点が、前記射影面上で成す可動範囲の境界と衝突する際の反発挙動を演算し、前記親骨に対する前記子骨の向きを補正するようにしてもよい。
【００２３】
このようにすれば、演算負荷を抑えつつ、自然な動きを表現できる骨の向きを求めることができる。
【００２４】
（９）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記骨格動作演算部が、前記射影面上における前記射影された点の反発挙動が繰返し発生する場合に、前記射影された点の反発挙動が収束するまでに要する時間を求め、当該時間が所定時間以下となる場合に、前記射影された点の反発挙動を終了させるようにしてもよい。
【００２５】
このようにすれば、子骨の反発挙動が収束せずに不自然な動きになることを回避できる。
【００２６】
（１０）本発明の骨格動作制御システム、プログラムおよび情報記憶媒体では、前記骨格動作演算部が、前記可動範囲の境界における前記射影された点の反発挙動を演算して得られた前記射影面上の点が前記可動範囲内に収まっていない場合には、前記可動範囲の形状に応じた条件を満たすように、前記親骨に対する前記子骨の向きを補正するようにしてもよい。
【００２７】
このようにすれば、反発挙動計算を繰返すことによる計算負荷の増大を軽減することができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の実施の形態について説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下において説明する実施の形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【００２９】
１．構成
図１に本実施形態のゲームシステム（骨格動作制御システムの一例）の機能ブロック図の例を示す。なお本実施形態のゲームシステムは図１の構成要素（各部）の一部を省略した構成としてもよい。
【００３０】
操作部１６０は、プレーヤがキャラクタ（人、動物、ロボットなどの多関節モデル）の操作データを入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。記憶部１７０は、処理部１００や通信部１９６などのワーク領域となるもので、その機能はＲＡＭ、ＶＲＡＭなどにより実現できる。
【００３１】
情報記憶媒体１８０（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）などにより実現できる。処理部１００は、情報記憶媒体１８０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体１８０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００３２】
表示部１９０は、本実施形態により生成された画像を出力するものであり、その機能は、ＣＲＴ、ＬＣＤ、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などにより実現できる。音出力部１９２は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
【００３３】
携帯型情報記憶装置１９４は、プレーヤの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶装置１９４としては、メモリカードや携帯型ゲーム装置などがある。通信部１９６は外部（例えばホスト装置や他の画像生成システム）との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ＡＳＩＣなどのハードウェアや、プログラムなどにより実現できる。
【００３４】
なお本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）は、ホスト装置（サーバー）が有する情報記憶媒体からネットワーク及び通信部１９６を介して情報記憶媒体１８０や記憶部１７０に配信してもよい。このようなホスト装置（サーバー）の情報記憶媒体の使用も本発明の範囲内に含めることができる。
【００３５】
処理部１００は、操作部１６０からの操作データやプログラムなどに基づいて、ゲーム処理、画像生成処理、或いは音生成処理などの処理を行う。ここでゲーム処理としては、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。この処理部１００は記憶部１７０をワーク領域として各種処理を行う。処理部１００の機能は各種プロセッサ（ＣＰＵ、ＧＰＵ、ＤＳＰ等）、ＡＳＩＣ（ゲートアレイ等）などのハードウェアや、プログラムにより実現できる。
【００３６】
処理部１００は、オブジェクト空間設定部１１０、移動・動作処理部１１２、仮想カメラ制御部１１４、描画部１２０、音生成部１３０を含む。なおこれらの一部を省略する構成としてもよい。
【００３７】
オブジェクト空間設定部１１０は、メインメモリ１７２のオブジェクト情報記憶部１７２Ａに記憶されているオブジェクト情報に基づいて、車、キャラクタ、建物、球場、樹木、柱、壁、コース（道路）、マップ（地形）などの表示物を表す各種オブジェクト（ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト）をオブジェクト空間に配置設定する処理を行う。具体的には、後述する移動・動作処理部１１２の処理結果に基づいて、ワールド座標系でのオブジェクトの位置や回転角度（向き、方向と同義）を決定し、決定された位置（Ｘ，Ｙ，Ｚ）に決定された回転角度（Ｘ軸回り、Ｙ軸回り、およびＺ軸回りでの回転角度）でオブジェクトを配置する。
【００３８】
移動・動作処理部１１２は、オブジェクト（キャラクタ等）の移動・動作演算（移動・動作シミュレーション）を行う。すなわち操作部１６０によりプレーヤが入力した操作データや、プログラム（移動・動作アルゴリズム）や、各種データ（モーションデータ）などに基づいて、オブジェクトをオブジェクト空間内で移動させたり、オブジェクトを動作（モーション、アニメーション）させたりする処理を行う。具体的には、オブジェクトの移動情報（位置、回転角度、速度、或いは加速度）や動作情報（オブジェクトを構成する各パーツの位置、或いは回転角度）を、１フレーム（１／６０秒）毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理（シミュレーション処理）や画像生成処理を行う時間の単位である。
【００３９】
特に本実施の形態では、図２に示すように、複数の骨が関節によって連結されており、関節で連結されている一の骨を親骨とし、親骨と同一の関節で連結されている他の骨を子骨として、親骨の動きに子骨が追従するように各骨の動きが決定される骨格モデルを用いてオブジェクトの動作を決定する処理を行っている。図２に示す骨格モデルの例では、関節Ａにおいて骨Ａが親骨に相当するとともに、骨Ｂが子骨に相当する。そして、移動・動作処理部１１２は、可動範囲設定部１１２Ａと、座標変換部１１２Ｂと、骨格動作演算部１１２Ｃとを含む。
【００４０】
可動範囲設定部１１２Ａは、関節を中心点とする球面上の所与の点を焦点とし、該中心点と該焦点とを結ぶ軸に直交する平面を射影面とし、関節の可動範囲を、射影面上において設定する。このとき可動範囲は、射影面上で矩形、楕円形、あるいは小判形を成すように設定することができる。
【００４１】
また本実施形態では、骨格モデルの関節に関して、射影面上で成す可動範囲の形状として矩形、楕円形、または小判形のいずれかが予め設定されているとともに、関節におけるｙ軸回りの子骨の回転角（ｙ軸回転角）およびｚ軸回りの子骨の回転角（ｚ軸回転角）の許容範囲が予め設定されている。具体的には、関節毎の可動範囲の形状を示す形状パターン情報と、関節毎のｙ軸回転角の許容範囲およびｚ軸回転角の許容範囲を示す許容範囲情報とがメインメモリ１７２のモーション制御情報記憶部１７２Ｂに記憶されている。そして可動範囲設定部１１２Ａは、形状パターン情報により得られる射影面上で成す演算対象の関節の可動範囲の形状と、許容範囲情報により得られる演算対象の関節のｙ軸回転角およびｚ軸回転角の許容範囲とに基づいて、関節の可動範囲を射影面上において設定する。
【００４２】
座標変換部１１２Ｂは、関節を中心点とする球面上において子骨の向きを表す点を焦点に基づいて射影面上に射影する。本実施形態では、親骨に沿った軸が、ｘ軸として設定され、親骨に直交し、かつ互いに直交する２つの軸が、それぞれｙ軸およびｚ軸として設定されており、射影面上に、互いに直交する座標軸が、それぞれｓ軸およびｔ軸として設定されており、座標変換部１１２Ｂは、焦点を基準として、ｓ＝−ｚ／（ｘ＋１）およびｔ＝ｙ／（ｘ＋１）｛ただし、ｘ２＋ｙ２＋ｚ２＝１｝による射影を行うことによって、球面上の点（ｘ，ｙ，ｚ）を、射影面上の点（ｓ，ｔ）へ変換する。
【００４３】
骨格動作演算部１１２Ｃは、射影面上に射影された点の位置に基づいて、可動範囲設定部１１２Ａにより設定された可動範囲の制限下で、親骨に対する子骨の向きを演算する。このとき骨格動作演算部１１２Ｃは、プレーヤの入力情報、オブジェクト同士の衝突（ヒット）による外力情報や、その他の動作影響情報（例えば、重力情報、風力情報等）などに基づいて、親骨の動作に対応する子骨の動作を演算して得られた親骨に対する子骨の向きが可動範囲内に収まっているか否かを判定する。そして、親骨に対する子骨の向きが可動範囲内に収まっていない場合には、射影面上における可動範囲の形状に応じた条件を満たすように親骨に対する子骨の向きを補正して、演算対象の関節の可動範囲に収まるように子骨の向きを決定する。
【００４４】
また骨格動作演算部１１２Ｃは、演算対象の関節に対して子骨の反発挙動が許容されていることを条件として、親骨に対する子骨の向きが可動範囲内に収まっていない場合に、前記射影面上において、前記射影された点が、前記射影面上で成す可動範囲の境界と衝突する際の反発挙動を演算し、前記親骨に対する前記子骨の向きを補正する。本実施の形態では、１フレーム（例えば、１／６０秒）あたりの射影面上における点の動きを等速直線運動で近似して反発挙動を演算する。なお射影面上における射影された点の反発挙動が繰返し発生する場合には、射影された点の反発挙動が収束するまでに要する時間を求め、当該時間が所定時間以下となる場合に、射影された点の反発挙動を終了させる。
【００４５】
そして移動・動作処理部１１２では、骨格動作演算部１１２Ｃの演算結果に基づいて、オブジェクトの表面を構成するポリゴン等（表面形状）を変形させることによってオブジェクトを動作させる演算を行う。
【００４６】
仮想カメラ制御部１１４は、オブジェクト空間内の所与（任意）の視点から見える画像を生成するための仮想カメラ（視点）の制御処理を行う。具体的には、仮想カメラの位置（Ｘ，Ｙ，Ｚ）又は回転角度（Ｘ軸回り、Ｙ軸回り、およびＺ軸回りでの回転角度）を制御する処理（視点位置、視線方向あるいは画角を制御する処理）を行う。
【００４７】
例えば仮想カメラによりオブジェクト（例えば車、キャラクタ、ボール）を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度（仮想カメラの向き）を制御する。この場合には、移動・動作処理部１１２で得られたオブジェクトの位置、回転角度又は速度などの情報（所定の制御情報の一例）に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させたりする制御を行ってもよい。この場合には、仮想カメラの位置（移動経路）又は回転角度を特定するための仮想カメラデータ（所定の制御情報の一例）に基づいて仮想カメラを制御する。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
【００４８】
描画部１２０は、処理部１００で行われる種々の処理（ゲーム処理）の結果に基づいて描画処理を行い、これにより画像を生成し、表示部１９０に出力する。いわゆる３次元ゲーム画像を生成する場合には、まずオブジェクト（モデル）の各頂点の頂点データ（頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等）を含むオブジェクト情報（モデル情報）がメインメモリ１７２のオブジェクト情報記憶部１７２Ａから入力され、入力されたオブジェクト情報に含まれる頂点情報に基づいて、頂点処理（頂点シェーダによるシェーディング）が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理（テッセレーション、曲面分割、ポリゴン分割）を行うようにしてもよい。頂点処理では、頂点処理プログラム（頂点シェーダプログラム、第１のシェーダプログラム）に従って、頂点の移動処理や、座標変換（ワールド座標変換、カメラ座標変換）、クリッピング処理、あるいは透視変換等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点情報を変更（更新、調整）する。そして、頂点処理後の頂点情報に基づいてラスタライズ（走査変換）が行われ、ポリゴン（プリミティブ）の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル（表示画面を構成するフラグメント）を描画するピクセル処理（ピクセルシェーダによるシェーディング、フラグメント処理）が行われる。ピクセル処理では、ピクセル処理プログラム（ピクセルシェーダプログラム、第２のシェーダプログラム）に従って、テクスチャの読出し（テクスチャマッピング）、色情報の設定／変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色をレンダリングターゲットであるビデオメモリ１７４のフレームバッファ１７４Ｃ（ピクセル単位で画像情報を記憶できるバッファ。）に出力（描画）する。すなわち、ピクセル処理では、画像情報（色、法線、輝度、α値等）をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内において仮想カメラ（所与の視点）から見える画像が生成される。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として１画面に表示できるように画像を生成することができる。
【００４９】
なお頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン（プリミティブ）の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ（頂点シェーダやピクセルシェーダ）により実現される。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、従来のハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【００５０】
そして描画部１２０は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【００５１】
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後（透視投影変換後）のオブジェクト情報（オブジェクトの頂点の位置座標、テクスチャ座標、色データ（輝度データ）、法線ベクトル、或いはα値等）は、メインメモリ１７２のオブジェクト情報記憶部１７２Ａに保存される。
【００５２】
テクスチャマッピングは、ビデオメモリ１７４のテクスチャ記憶部１７４Ａに記憶されるテクスチャ（テクセル値）をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定（付与）されるテクスチャ座標等を用いてテクスチャ記憶部１７４Ａからテクスチャ（色（ＲＧＢ）、α値などの表面プロパティ）を読み出す。そして、２次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間、トライリニア補間などを行う。
【００５３】
隠面消去処理としては、描画ピクセルのＺ値（奥行き情報）が格納されるＺバッファ１７４Ｂ（奥行きバッファ）を用いたＺバッファ法（奥行き比較法、Ｚテスト）による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Ｚバッファ１７４Ｂに格納されるＺ値を参照する。そして参照されたＺバッファのＺ値と、プリミティブの描画ピクセルでのＺ値とを比較し、描画ピクセルでのＺ値が、仮想カメラから見て手前側となるＺ値（例えば小さなＺ値）である場合には、その描画ピクセルの描画処理を行うとともにＺバッファ１７４ＢのＺ値を新たなＺ値に更新する。
【００５４】
αブレンディングとしては、α値（Ａ値）に基づく半透明合成処理（通常αブレンディング、加算αブレンディング又は減算αブレンディング等）を行う。例えば通常αブレンディングの場合には下式（α１）〜（α３）の処理を行う。
【００５５】
ＲＱ＝（１−α）×Ｒ１＋α×Ｒ２    （α１）
ＧＱ＝（１−α）×Ｇ１＋α×Ｇ２    （α２）
ＢＱ＝（１−α）×Ｂ１＋α×Ｂ２    （α３）
【００５６】
また、加算αブレンディングの場合には下式（α４）〜（α６）の処理を行う。なお単純加算の場合はα＝１として下式（α４）〜（α６）の処理を行う。
【００５７】
ＲＱ＝Ｒ１＋α×Ｒ２                （α４）
ＧＱ＝Ｇ１＋α×Ｇ２                （α５）
ＢＱ＝Ｂ１＋α×Ｂ２                （α６）
【００５８】
また、減算αブレンディングの場合には下式（α７）〜（α９）の処理を行う。なお単純減算の場合はα＝１として下式（α７）〜（α９）の処理を行う。
【００５９】
ＲＱ＝Ｒ１−α×Ｒ２                （α７）
ＧＱ＝Ｇ１−α×Ｇ２                （α８）
ＢＱ＝Ｂ１−α×Ｂ２                （α９）
【００６０】
ここで、Ｒ１、Ｇ１、Ｂ１は、ビデオメモリ１７４のフレームバッファ１７４Ｃに既に描画されている画像（原画像）のＲＧＢ成分であり、Ｒ２、Ｇ２、Ｂ２は、フレームバッファ１７４Ｃに描画すべき画像のＲＧＢ成分である。また、ＲＱ、ＧＱ、ＢＱは、αブレンディングにより得られる画像のＲＧＢ成分である。なお、α値は、各ピクセル（テクセル、ドット）に関連づけて記憶できる情報であり、例えば色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度（透明度、不透明度と等価）、バンプ情報などとして使用できる。
【００６１】
音生成部１３０は、処理部１００で行われる種々の処理の結果に基づいて音処理（サウンド処理）を行い、ＢＧＭ、効果音、又は音声などのゲーム音を生成し、音出力部１９２（スピーカ）に出力する。
【００６２】
なお、本実施形態の画像生成システムは、１人のプレーヤのみがプレイできるシングルプレーヤモード専用のシステムにしてもよいし、複数のプレーヤがプレイできるマルチプレーヤモードも備えるシステムにしてもよい。また複数のプレーヤがプレイする場合に、これらの複数のプレーヤに提供するゲーム画像やゲーム音を、１つの端末を用いて生成してもよいし、ネットワーク（伝送ライン、通信回線）などで接続された複数の端末（ゲーム機、携帯電話）を用いて分散処理により生成してもよい。
【００６３】
２．本実施形態の手法
以下では、従来の手法と対比しながら、本実施形態の手法を説明する。
【００６４】
２−１．従来の手法（３軸回転角方式）
２−１−１．座標系
所与の関節の両側の骨のうち一方を親骨、他方を子骨と呼ぶことにする。関節の回転（曲げ、捻り）の状態は、親骨を基準とした子骨の向きで表すことができる。骨の向きを表すために、各骨に対して図３のように座標系を定める。
【００６５】
２−１−２．３軸回転角度による表現
従来の手法では、親骨に対する子骨の向きをｘｙｚ座標系の３軸の回転角度（それぞれｒｘ、ｒｙ、ｒｚとする）で表し、各軸の回転角度の取り得る範囲によって可動範囲を設定する。子骨を回転させる順序は種々考えられるが、以下の例では、親骨の座標系を基準としてｘ軸回転、ｚ軸回転、ｙ軸回転の順序とする。
【００６６】
ここで、関節を中心点とする半径１の球面Ｓを作り、子骨のｘ軸と球面Ｓとの交点をＰとすると、関節の曲げ状態は、点Ｐの位置で表すことができる。３軸に関する回転角度と点Ｐの位置との関係を図示すると、図４のように地球儀の緯度、経度と同様の形態となる。なお、図４では、回転角度を１０°間隔で表しており、ｒｙが経度、ｒｚが緯度に相当し、ｒｘはその位置での捻りに相当することになる。
【００６７】
２−１−３．可動範囲の設定
従来の手法において、関節の曲げ角度に関する可動範囲を設定することは、球面Ｓ上に可動範囲に相当する領域（以下、単に可動領域という）を設定することに相当する。例えば、ｙ軸回転が−４０°〜２０°、ｚ軸回転が−１０°〜３０°の場合、球面Ｓ上に設定される可動領域は図５のようになる。球面Ｓの中心と可動領域の境界とを結んで、可動領域らしく表示すると図６のようになる。
【００６８】
この例のように関節の曲げ角度に関する可動範囲が比較的狭い場合は問題ないが、ｚ軸回転の可動範囲が±９０°を超える設定をしようとすると、問題が生じる。一般的に、経度の値は−１８０°〜１８０°の範囲で取り得るのに対して、緯度の値は−９０°〜９０°の範囲を超えられないからである。敢えて工夫をすれば可動領域の設定自体は可能であり、例えば、ｒｙが−４０°〜２０°、ｒｚが−１０°〜１１０°の場合、図７〜図９に示すような可動領域が設定される。しかし、図７〜図９に示す各設定例において、いずれも可動領域の形状がいびつになったり、可動領域の設定作業が繁雑になったりするという実使用上の問題が残り採用しがたい。
【００６９】
２−２．射影方式による本実施形態の手法
２−２−１．球面Ｓから平面λへの射影
本実施形態の手法では、図１０に示すように、座標（−１，０，０）の点を点Ｐ０とし、ｘ＝０の平面を平面λ（射影面）としたとき、球面Ｓ上の任意の点Ｐについて、点Ｐ０を焦点（光源）として平面λに射影することによって、点Ｑを得る。本実施形態では、前述の射影をｆとし、球面Ｓ上の点Ｐから平面λ上の点Ｑへの変換をＱ＝ｆ（Ｐ）と表す。また本実施形態では、平面λ上の点Ｑから球面Ｓ上の点Ｐへの射影をｆ−１とし、平面λ上の点Ｑから球面Ｓ上の点Ｐへの変換をＰ＝ｆ−１（Ｑ）と表す。また本実施形態では、点Ｐ０を球面Ｓの極と呼ぶこととする。
【００７０】
上記のような前提では、射影ｆにより、球面Ｓ上の点（ただし点Ｐ０を除く）と平面λ上の点は、１対１の対応関係（１対１写像）となり、ｆ（Ｐ０）は平面λ上の無限遠点となる。そして本実施形態の手法では、平面λ上において点Ｑの可動領域を設定することによって、球面Ｓ上の点Ｐの取り得る位置を制限して、関節の曲げ角度を制限する可動範囲を設定する。
【００７１】
まず、平面λ上に互いに直交するｓ軸とｔ軸とからなるｓｔ座標系をとり、点Ｑの位置をｓｔ座標系で表す。このとき球面Ｓ上の座標（１，０，０）となる点Ｐ１を変換したｆ（Ｐ１）をｓｔ座標系の原点とすると、ｆ（Ｐ１）は球面Ｓを定義するｘｙｚ座標系の原点に一致する。
【００７２】
なお、本実施形態では、ｓ軸の正方向（＋ｓ）は、ｚ軸の負方向（−ｚ）とし、ｔ軸の正方向（＋ｔ）は、ｙ軸の正方向（＋ｙ）とする。このような設定により、ｚｘ平面内で点Ｐにｙ軸回転を掛けたときの点Ｑの移動方向がｓ方向になり、ｘｙ平面内で点Ｐにｚ軸回転を掛けたときの点Ｑの移動方向がｔ方向になる。
【００７３】
そして射影ｆによる点Ｐ（ｘ，ｙ，ｚ）から点Ｑ（ｓ，ｔ）への変換は式（１）のようになる。ただし、ｘ２＋ｙ２＋ｚ２＝１である。
【００７４】
【数１】
2010170279.tif 000003
【００７５】
また射影ｆ−１による点Ｑから点Ｐへの変換は式（２）のようになる。このとき、射影ｆ−１による変換によって得られる結果はｘ２＋ｙ２＋ｚ２＝１を満たすので、座標値の正規化のための処理は不要となる。
【００７６】
【数２】
2010170279.tif 000004
【００７７】
２−２−２．関節の曲げ角度との対応関係
まず、図１０に示したように角φおよび角θをとると、点Ｑの座標（ｓ，ｔ）と、角φおよび角θとの対応関係は、式（３）によって表すことができる。なお、角φおよび角θの範囲は、それぞれ−９０°＜φ＜９０°、−９０°＜θ＜９０°である。
【００７８】
【数３】
2010170279.tif 000005
【００７９】
ここで、角φおよび角θを−８５°から８５°まで５°間隔で変えて平面λ上にグリッド（格子線）を作り、これをｆ−１で球面Ｓに射影すると、図１１に示すような直交グリッドが得られる。
【００８０】
次に、従来の３軸回転角方式と本実施形態の射影方式との対応関係について説明する。ｚ軸回転角ｒｚ＝０の場合におけるｙ軸回転角ｒｙと角φとの対応関係は図１２に示すようになり、式（４）で表すことができる。
【００８１】
【数４】
2010170279.tif 000006
【００８２】
同様に、ｙ軸回転角ｒｙ＝０の場合におけるｚ軸回転角ｒｚと角θとの対応関係は、θ＝ｒｚ／２となる。そこで、可動範囲を設定する際に式（５）のようにｓ、ｔとｒｙ、ｒｚとを対応させれば、図４および図１１に示すように、ｙ軸回転角ｒｙおよびｚ軸回転角ｒｚの絶対値が小さい領域では、従来の３軸回転角方式による可動領域と本実施形態の射影方式による可動領域は概ね同形状になる。
【００８３】
【数５】
2010170279.tif 000007
【００８４】
次に、図１３に示すように、球面Ｓ上の点Ｐの位置を角度座標αで表す場合を考える。角度座標αが球面Ｓ上の緯度に対応する場合、即ち角度座標αが従来の３軸回転角方式におけるｚ軸回転角ｒｚに対応する場合には、点Ｐの座標はα１となる。また角度座標αが球面Ｓ上の経度に対応する場合、即ち角度座標αが従来の３軸回転角方式におけるｙ軸回転角ｒｙに対応する場合には、点Ｐの座標はα３となる。これに対して、本実施形態の射影方式では、点Ｐの座標はα２となる。このように、射影方式による関節角度表現は、従来の３軸回転角方式による緯度表現と経度表現との中間の値をとる。そのため本実施形態の射影方式では、従来の３軸回転角方式による関節角度表現から大きく乖離することがなく方式の移行がスムーズに行えるという利点がある。
【００８５】
２−２−３．従来の３軸回転角方式と本実施形態の射影方式との比較
本実施形態の射影方式でｓの範囲をｔａｎ−２０°〜ｔａｎ１０°とし、ｔの範囲をｔａｎ−５°〜ｔａｎ１５°として、可動領域を矩形制限した場合を図１４に示す（図６と比較されたい）。矩形制限の詳細については、「２−３−１．矩形制限による領域設定手法」で後述する。
【００８６】
次に、ｚ軸回転角ｒｚが±９０°を超える場合に相当する例を挙げる。本実施形態の射影方式でｓの範囲をｔａｎ−２０°〜ｔａｎ１０°とし、ｔの範囲をｔａｎ−５°〜ｔａｎ５５°とし、可動領域を矩形制限した場合を図１５に示す（図７および図８と比較されたい）。
【００８７】
また上記と同様の範囲で、可動領域を楕円制限した場合は図１６に示すようになり、可動領域を小判形制限した場合は図１７に示すようになる（図９と比較されたい）。楕円制限、および小判形制限の詳細については、それぞれ「２−３−２．楕円制限による領域設定手法」、および「２−３−３．小判形制限による領域設定手法」で後述する。
【００８８】
以上のように、本実施形態の射影方式を使えば、図１５〜図１７に示すように、従来の３軸回転角方式では扱えなかった±９０°を超える広い可動領域を設定しても、関節を滑らかに動かす表現が可能となる。また、図６および図１４に示すように、ｙ軸回転角ｒｙや、ｚ軸回転角ｒｚが０°〜±５０°程度の比較的狭い可動領域を設定する場合には、従来の３軸回転角方式とほぼ同形状の可動領域が得られるので、従来方式からの方式移行が容易であり、式（５）を使って両者の対応関係を容易に設定することができる。
【００８９】
２−３．可動領域の形状に応じた設定手法
本実施形態の射影方式による可動領域の設定手法は、平面λ上のｓ、ｔの範囲を制限することにより、関節の曲げ角度に関する可動領域を設定する。以下、特に断りのない限りｓ、ｔの取り得る範囲は式（６）のように設定されているものとして説明する。
【００９０】
【数６】
2010170279.tif 000008
【００９１】
２−３−１．矩形制限による領域設定手法
矩形制限とは、平面λ上で図１８に示すように矩形の可動領域を設定する手法である。すなわち、ｓ、ｔがともに式（６）を満たす領域が可動領域となる。実際の関節の可動領域は、図１４や、図１５に示すように設定される。
【００９２】
２−３−２．楕円制限による領域設定手法
楕円制限とは、平面λ上で図１９に示すように楕円形（ellipse）の可動領域を設定する手法である。すなわち、式（６）で設定されたｓ、ｔの領域に内接する楕円（楕円の軸はｓ軸、ｔ軸に平行）の内部が可動領域となる。実際の関節の可動領域は図１６や、図２０に示すようになる。
【００９３】
ここで楕円制限を数式で表すと式（７）のようになる。
【００９４】
【数７】
2010170279.tif 000009
【００９５】
ただし、ｓａ、ｓｂ、ｔａ、ｔｂは式（８）のとおりである。
【００９６】
【数８】
2010170279.tif 000010
【００９７】
なお、楕円制限は、領域の内外判定が容易であるが、可動領域を超えた場合の補正に関して矩形制限を採用した場合とは異なる工夫が必要となり、後述にて詳細に説明する。
【００９８】
２−３−３．小判形制限による領域設定手法
小判形制限とは、平面λ上で図２１に示すように小判形（oval）の可動領域を設定する手法である。可動領域の境界は半円と直線とで構成される。図２１はｓａ＞ｔａの場合で、ｔ＝ｔ０、ｔ＝ｔ１の直線部を持つ横長の形状となっている（ｓａ、ｔａは式（８）のとおり）。ｓａ＜ｔａの場合は、図２１に示す可動領域を９０°回転させた縦長の形状になり、ｓａ＝ｔａの場合は、直線部の長さが０になるため、可動領域の形状は円となる。
【００９９】
なお実際の関節の可動領域は、図１７や、図２２に示すような形状になり、その境界は４つの小円から構成される（詳しくは後述の「２−４−２．射影ｆの特徴」参照）。なお小円とは、球面上の円を分類した呼称で、球面と、その球の中心を通らない平面とが交差してできる円のことであり、地球に例えれば赤道以外の緯線は小円に相当する。
【０１００】
２−３−４．超楕円制限による領域設定手法
本実施形態の手法によれば、上述の楕円制限を一般化し、超楕円制限とすることも可能である。楕円制限が２乗和で表されるのに対し、超楕円制限はｍ乗ｎ乗和で表され、式（９）のようになる。
【０１０１】
【数９】
2010170279.tif 000011
【０１０２】
式（９）において、例えば、ｍ＝ｎ＝４（４乗和）の場合、可動領域は図２３に示すようになる（図２０や、図２２と比較されたい）。なお、上述した楕円制限は式（９）においてｍ＝ｎ＝２の場合に相当し、上述した矩形制限は式（９）においてｍ＝ｎ＝∞の場合に相当する。
【０１０３】
２−３−５．円弧と直線の組合せによる領域設定手法
上述した超楕円制限や更に複雑な形状の代わりに、円弧と直線を組み合わせて平面λに可動領域を設定することも可能である。可動領域外の値が得られた場合に値を補正する際に、超楕円制限では、最適解を代数的に求めることができないが、円弧と直線の組合せによる領域形状ならば最適解を代数的に求めることが可能である。
【０１０４】
２−４．可動領域を超えた場合の補正手法
関節の曲げ状態が、設定された可動領域を超えた場合には、これを可動領域内に戻すための補正が必要となるため、その補正手法について説明する。
【０１０５】
２−４−１．球面垂線と最適解
球面Ｓ上に可動領域Ａが設定され、領域Ａ外の点Ｐが与えられたとき、点Ｐの位置を領域Ａ内（境界を含む）に補正した点を点Ｐｍとする。領域Ａ内の点のうち、点Ｐからの距離（球面Ｓ上での距離）が最小となる点を点Ｐｍとするのが最良であると考えられ、この条件を満たす点Ｐｍを最適解と呼ぶことにする。
【０１０６】
ここで、説明の便宜上「球面垂線」という用語を次のように定義する。球面Ｓ上において点Ｐと曲線Ｌが与えられたとき、点Ｐを通り曲線Ｌに直交する大円を、点Ｐから曲線Ｌに下ろした球面垂線と呼び、曲線Ｌと球面垂線との交点を球面垂線の足とする。なお大円とは、球面上の円を分類した呼称で、球面と、その球の中心を通る平面とが交差してできる円のことをいい、地球に例えれば赤道や経線が大円に相当する。
【０１０７】
図２４に示すように、点Ｐｍの最適解は、点Ｐから可動領域の境界に下ろした球面垂線の足となる。ただし、矩形制限のように領域形状が頂点を持つ場合には、この頂点が点Ｐｍの最適解になることがある。
【０１０８】
２−４−２．射影ｆの特徴
球面Ｓから平面λへの射影ｆには、次の（Ａ１）および（Ａ２）ような特徴がある。
【０１０９】
（Ａ１）２本の線が交わる角度は、射影ｆによって変わらない（ｆは等角写像）。
【０１１０】
（Ａ２）球面Ｓ上の円は、平面λ上の円または直線に射影され、その逆も成り立つ。互いに射影関係にある、球面Ｓ上の円と、平面λの円または直線との間の詳細な対応関係は下表のようになる。表１中の条件Ｃ１とは、図２５に示すように円の半径をｒ、原点（０，０）から円の中心までの距離をｄとするとき、式（１０）が成立することである。
【０１１１】
【表１】
2010170279.tif 000012
【０１１２】
【数１０】
2010170279.tif 000013
【０１１３】
したがって、球面Ｓ上で点Ｐから可動領域の境界に下ろした球面垂線は、平面λ上では次の（Ｂ１）および（Ｂ２）のいずれかになる。
【０１１４】
（Ｂ１）可動領域境界に直交する円（条件Ｃ１を満たす。）
（Ｂ２）可動領域境界に直交する直線（原点（０，０）を通る。）
この性質を利用すれば、可動領域の形状によっては、Ｐｍの最適解を求めることが可能となる。
【０１１５】
２−４−３．矩形制限に対する最適解
矩形制限では、平面λ上に図１８に示すような長方形の可動領域が設定される。まず、球面Ｓ上で、可動領域の１辺（例としてｓ＝ｓ０に相当する辺）に点Ｐから球面垂線ＰＰｆを下ろすことを考える。ｆ（Ｐ）の座標を（ｓｐ，ｔｐ）とする（ｆ（Ｐ）は点Ｐを平面λ上に射影した点である）。
【０１１６】
ここでｔｐ≠０の場合には、球面垂線ＰＰｆを求めることは、平面λ上で次の３条件（Ｄ１）〜（Ｄ３）を満たす円を求めることに相当する。
【０１１７】
（Ｄ１）点ｆ（Ｐ）を通る。
【０１１８】
（Ｄ２）直線ｓ＝ｓ０に直交する。
【０１１９】
（Ｄ３）式（１０）を満たす。
【０１２０】
そして図２６に示すように、求める円の中心座標を（ｓｃ，ｔｃ）、半径をｒｃとすると、これらは式（１１）で得られる。
【０１２１】
【数１１】
2010170279.tif 000014
【０１２２】
図２６において、点ｆ（Ｐｆ）は、式（１１）により得られた円と直線ｓ＝ｓ０との交点であって、点ｆ（Ｐｆ）の座標を（ｓｆ，ｔｆ）とする（必然的にｓｆ＝ｓ０である）。このとき、ｔ０≦ｔｆ≦ｔ１であれば、矩形に設定された可動領域の境界となる辺に対して球面垂線を下ろせたことになる。ただし、図２７に示すように球面垂線は必ずしも可動領域の境界となる辺への最短距離とはならない。図２７に示す例では、点Ｐａから辺Ｂ１Ｂ２に下ろした球面垂線ＰａＰｆは、点Ｐａから辺Ｂ１Ｂ２への最短距離である。しかし、点Ｐｂから辺Ｂ１Ｂ２への最短距離は、球面垂線ＰｂＰｆではなく大円ＰｂＢ２である。
【０１２３】
ここで、辺Ｂ１Ｂ２（小円Ｂ１Ｂ２）の球面上の中心を点Ｐｚとする。球面上の点Ｐから辺Ｂ１Ｂ２に下ろした球面垂線が辺Ｂ１Ｂ２への最短距離となるのは、点Ｐが領域ＰｚＢ１Ｂ２の内部に位置する場合のみである。また、点Ｐが領域ＰｚＢ１Ｂ２の内部にあれば、必ず点Ｐから辺Ｂ１Ｂ２に球面垂線を下ろすことができる。本実施形態では、領域ＰｚＢ１Ｂ２を辺Ｂ１Ｂ２の最近点領域と呼ぶことにする。平面λ上での、可動領域の４辺に対する最近点領域の例を図２８に示す。
【０１２４】
ここで図２６において、点ｆ（Ｐｆ）のｔ座標はｔｆ＝ｔｃ±ｒｃとなるが、複号±のうち有効となるのはｔｐの正負と同じものだけである。そうでなければｆ（Ｐ）は最近点領域外となるからである。この有効なｔｆがｔ０≦ｔｆ≦ｔ１であれば、Ｐｆを最適解としてよいことになる。
【０１２５】
またｔｐ＝０の場合は、球面垂線ＰＰｆの平面λへの射影（の延長）は、ｆ（Ｐ）と原点（０，０）を結ぶ直線になる。したがって、ｔ０≦０≦ｔ１であれば、球面垂線を下ろせたことになる。さらにｓ０−（ｓ０２＋１）１／２≦ｓｐ≦ｓ０の場合に限り、点Ｐが最近点領域に含まれ、この球面垂線の足（ｓｆ＝ｓ０，ｔｆ＝０）が最適解となる。この判定式は式（１２）のように書き換えることができる。
【０１２６】
【数１２】
2010170279.tif 000015
【０１２７】
またｓ＝ｓ１の辺を対象とする場合には、上記判定式（式（１２））の替わりに式（１３）を用いる。
【０１２８】
【数１３】
2010170279.tif 000016
【０１２９】
点ｆ（Ｐ）が矩形に設定された可動領域の４辺のそれぞれに対応する最近点領域のいずれにも含まれない場合は、点Ｐから可動領域の境界に対して球面垂線を下ろせないことを意味する。この場合、最適解Ｐｍは可動領域の４頂点のいずれかになるため、球面Ｓ上で点Ｐと可動領域の４頂点との距離を求め、求めた距離が最小となる頂点が最適解Ｐｍである。
【０１３０】
２−４−４．矩形制限に対する簡易解
矩形制限における補正手法には、以下に述べるような簡易解が考えられる。これは、平面λ上で、点ｆ（Ｐ）からの距離が最小となるような可動領域内の点を解とする手法である。点ｆ（Ｐ）のｓ座標をｓｐとし、補正後のｓ座標をｓｍとすると、式（１４）のようになる。ｔ座標についても同様である。
【０１３１】
【数１４】
2010170279.tif 000017
【０１３２】
ただし、この簡易解が最適解に対する近似解として使えるのは、可動領域が狭い（ｓ０、ｓ１、ｔ０、ｔ１の絶対値が小さい）場合または補正量が小さい場合に限られる。この条件に該当しない場合には、図２９に示す例のように不具合を生じる。図２９に示す例では、点Ｐａに対する最適解が点Ｐｍａであるのに対して、簡易解は点Ｐｍａ´となる。また、点Ｐｂに対する最適解がＰｍｂであるのに対して、簡易解は球面Ｓの反対側から回って点Ｐｍｂ´となってしまう。
【０１３３】
２−４−５．楕円制限
楕円制限の場合、最適解を求めることは、平面λ上で楕円形の可動領域の境界に直交する円を求めることに相当する。しかし、その解を求める式は高次方程式となり、代数的に解くことができない。
【０１３４】
最適解の近似解として、平面λ上で楕円形の可動領域の境界に下ろした垂線の足を解とする方法が考えられる。この場合、解くべき式は４次方程式となり代数的に解を得ることが可能となる。数式処理ソフトウェア等を用いれば、実際に解の式が得られるが、非常に繁雑な式となり実用的でない。なお、類似の問題として、楕円体への垂線を求める方法が「John C. Hart, Distance to an Ellipsoid. Graphics Gems IV,pp113-119,Academic Press Inc.,1994」に記されている。
【０１３５】
そこで本実施形態では、解としては全く不正確であるが、図３０に示すように、ｆ（Ｐ）を楕円の中心に向かって補正し簡易解ｆ（Ｐｍ）を得る手法を採用している。
【０１３６】
点ｆ（Ｐｍ）の座標（ｓｍ，ｔｍ）は次式（１５）のように容易に求められる。ただし、ｓａ、ｓｂ、ｔａ、ｔｂは式（８）のとおりである。
【０１３７】
【数１５】
2010170279.tif 000018
【０１３８】
式（１５）により得られる本実施形態の楕円制限における簡易解は一般的には全く不正確であるが、ｓ０＝−ｓ１＝ｔ０＝−ｔ１の場合には、可動領域が、ｘ軸を中心とする円になるので最適解に一致する。そのため、可動領域がこの条件に合う場合、あるいはこの条件に近い場合には、簡易解を用いても問題はない。
【０１３９】
逆に、簡易解が明確に不具合を生じるのは、次のような場合である。３次元空間での関節の可動領域を模式的に図３１に示すように表し、関節は図の下方向に外力（重力等）を受けているものとする。この場合関節はＡ０の位置（最も低い位置）に落ち着くべきであるが、簡易解を用いて補正を行うとＡｎの位置になる。例えば、一旦Ａ０の位置にあったとしても、外力によりＡ０´に移動、簡易解Ａ１に補正、外力によりＡ１´に移動、簡易解Ａ２に補正、という段階を経て、最終的にＡｎの位置に落ち着く。
【０１４０】
２−４−６．小判形制限
小判形制限では、平面λ上に図２１に示すような小判形の可動領域が設定される。可動領域境界の直線部を「辺」、半円部を「弧」と呼ぶこととする。また、これらを球面Ｓに射影したものも同様の呼び方とする。弧の中心座標を（ｓｅ，ｔｅ）、半径をｒｅとする。このときｓａ≦ｔａ（可動領域の形状が平面λ上で縦長）の場合には、式（１６）のようになる。なお、式（１６）において、ｔｅに関する２つの値は、順に下側の弧および上側の弧に対するものである。
【０１４１】
【数１６】
2010170279.tif 000019
【０１４２】
次に、ｓａ≧ｔａ（可動領域の形状が平面λ上で横長）の場合には、式（１７）のようになる。なお、式（１７）において、ｓｅに関する２つの値は、順に左側の弧および右側の弧に対するものである。
【０１４３】
【数１７】
2010170279.tif 000020
【０１４４】
続いて、ｓａ≦ｔａの場合における補正方法を説明する。まず、球面Ｓ上で、可動領域の境界の辺に点Ｐから球面垂線ＰＰｆを下ろすことを考える。これは、矩形制限における可動領域の境界の１辺に球面垂線を下ろす場合と全く同じである。したがって、球面垂線が下ろせるかどうか、下ろした球面垂線が可動領域への最短距離になるかどうかは、矩形制限の場合と同様の手法で判定できる。可動領域の２辺の上に最適解が存在しない場合は、可動領域の弧に下ろした球面垂線の足Ｐｆが最適解となる。２本の弧に対して点Ｐｆを求め、球面Ｓ上での点Ｐとの距離が最小となるものを最適解とする。
【０１４５】
以下では、小判形制限の可動領域（ｓａ≦ｔａの場合）の２本の弧のうち下側の弧を例にとって、球面垂線の足を求める方法を述べる。前述のように、球面Ｓ上の大円は平面λ上では円または直線になる。
【０１４６】
まず、球面垂線ＰＰｆが平面λ上で円になる場合を考える。この球面垂線を求めることは、平面λ上で次の３条件（Ｅ１）〜（Ｅ３）を満たす円を求めることに相当する。
【０１４７】
（Ｅ１）点ｆ（Ｐ）を通る。
【０１４８】
（Ｅ２）可動領域の弧に直交する。
【０１４９】
（Ｅ３）式（１０）を満たす。
【０１５０】
ここで、求める円の中心座標を（ｓｃ，ｔｃ）、半径をｒｃとすると、点ｆ（Ｐｆ）の座標（ｓｆ，ｔｆ）は以下の手順で求めることができる。
【０１５１】
まず、式（１８）によりｓｃ、ｔｃを求める。なお、式（１８）でｋ２＝０となるのは、点ｆ（Ｐ）、弧の中心点（ｓｅ，ｔｅ）、原点（０，０）の３点が一直線上に存在する場合で、これは球面垂線ＰＰｆが平面λ上で直線になる場合である。したがって、ここではｋ２≠０としてよい。
【０１５２】
【数１８】
2010170279.tif 000021
【０１５３】
続いて、式（１９）によりｒｃを求める。
【０１５４】
【数１９】
2010170279.tif 000022
【０１５５】
続いて、式（２０）によりｋ４を求める。
【０１５６】
【数２０】
2010170279.tif 000023
【０１５７】
【数２１】
2010170279.tif 000024
【０１５８】
ここで式（２０）で求めたｋ４が式（２１）を満たす場合のみ、式（２２）によって得られるｓｆ、ｔｆが有効となる。ｋ４＞０の場合は、弧ではなくその延長（可動領域の内部）に球面垂線を下ろすことを意味するので、解として無効なものだからである。
【０１５９】
【数２２】
2010170279.tif 000025
【０１６０】
ただし、式（２０）、式（２２）は複号同順である。また、条件ｋ４≦０は、式（２０）の複号の両方に対して同時に成り立つ場合があるので注意が必要である。これは、可動領域の一方の弧に対して点Ｐから２本の球面垂線が下ろせることを意味する。なぜなら平面λ上では可動領域の弧は半円（中心角１８０°）であるが、球面Ｓ上では中心角が１８０°を超えることがあるので、２本の球面垂線が存在し得るからである。
【０１６１】
以上の説明は、可動領域の下側の弧に球面垂線を下ろす場合である。上側の弧の場合には、式（２１）がｋ４≧０となる。
【０１６２】
次に、球面垂線ＰＰｆが平面λ上で直線になる場合を考える。これは、式（１８）でｋ２＝０となる場合である。この球面垂線を求めることは、平面λ上で次の３条件（Ｆ１）〜（Ｆ３）を満たす直線を求めることに相当する。
【０１６３】
（Ｆ１）点ｆ（Ｐ）を通る。
【０１６４】
（Ｆ２）可動領域の弧に直交する（これは点（ｓｅ，ｔｅ）を通ることと同値である）。
【０１６５】
（Ｆ３）原点（０，０）を通る。
【０１６６】
このとき最適解Ｐｆの座標（ｓｆ，ｔｆ）は式（２３）により得られる。ただし、複号±のうち有効となるのは、上側の弧の場合はｔｉの正負と同じもの、下側の弧の場合はｔｉの正負と反対のものだけである。そうでなければ、弧ではなくその延長（可動領域の内部）に球面垂線を下ろすことを意味するので、解として無効である。
【０１６７】
【数２３】
2010170279.tif 000026
【０１６８】
また小判型制限における補正手法には、以下に述べるような簡易解が考えられる。これは、平面λ上で、ｆ（Ｐ）からの距離が最小となるような可動領域内の点を解とする手法である。
【０１６９】
以下の例では、ｓａ≧ｔａ（可動領域形状が横長）の場合を扱う。
【０１７０】
可動領域境界の左側の弧（半円部）の中心座標（ｓｅ０，ｔｅ）と、可動領域境界の右側の弧の中心座標（ｓｅ１，ｔｅ）と、半径ｒｅは、式（２４）により得られる。
【０１７１】
【数２４】
2010170279.tif 000027
【０１７２】
ｆ（Ｐ）が可動領域外に位置する場合に、その座標を（ｓｐ，ｔｐ）とすると、補正後の座標（ｓｍ，ｔｍ）は式（２５）〜式（２７）により得られる。
【０１７３】
１）ｓｐ＜ｓｅ０の場合
【数２５】
2010170279.tif 000028
【０１７４】
２）ｓｅ０≦ｓｐ≦ｓｅ１の場合
【数２６】
2010170279.tif 000029
【０１７５】
３）ｓｅ１＜ｓｐの場合
【数２７】
2010170279.tif 000030
【０１７６】
なお、ｓａ＜ｔａの場合の処理は、上記のｓａ≧ｔａの場合の処理に対して、ｓとｔを入れ替えたものとなる。
【０１７７】
ただし、この簡易解が近似解として使えるのは、矩形制限の簡易解と同様に、可動領域が狭い場合（ｓ０，ｓ１，ｔ０，ｔ１の絶対値が小さい場合）、または補正量が小さい場合に限られる。
【０１７８】
２−４−７．超楕円制限
超楕円制限の場合は、楕円制限の場合と同様に、最適解を求めるには高次方程式を解くことが必要となり、現実的でない。楕円制限における簡易解と同様に、平面λ上で超楕円形の可動領域の中心に向かって補正をすれば、簡易解を得ることができる。ただし、楕円制限の場合とは異なり、ｓ０＝−ｓ１＝ｔ０＝−ｔ１の場合でも、簡易解は最適解に一致しないので注意を要する。
【０１７９】
２−４−８．円弧と直線の組合せによる制限
超楕円制限の替わりに、図３２に示すように円弧と直線の組合せで可動領域を設定すれば、小判形制限の場合とほぼ同様の補正手法により最適解を求めることができる。
【０１８０】
２−５．捻り角の扱い
２−５−１．捻り角の定義
既に述べたように、関節の曲げ状態は、球面Ｓ上の点Ｐの位置で表すことができる。これに対して捻りは、軸ＯＰ回りの回転として表される（Ｏは球面Ｓの中心）。捻り角を扱うには、曲げ状態が与えられたとき、その曲げ状態における捻り角０°の向きを予め定義する必要がある。
【０１８１】
まず、親骨と子骨の座標軸の向きが一致（３軸とも一致）している状態を基準状態とし、この状態の捻り角を０°と定義する。これは、図１０に示す球面Ｓ上において曲げ状態を示す点が点Ｐ１（座標（１，０，０）の点）に存在する場合おける捻り角０°の状態である。
【０１８２】
また本実施形態では、以下のように「単純回転」を定義する。
【０１８３】
具体的には、始点を共有する任意の単位ベクトルｖ１、ｖ２に対して、次の条件（Ｇ１）、（Ｇ２）を満たす回転を、ｖ１からｖ２への単純回転と定める。なおｖ１＝ｖ２の場合は無回転とし（回転マトリクスで表すと単位行列）、ｖ１＝−ｖ２の場合は定義不能とする。
【０１８４】
（Ｇ１）ｖ１、ｖ２のなす平面に垂直な軸の回りの回転。
【０１８５】
（Ｇ２）回転によりｖ１はｖ２に一致する。
【０１８６】
基準状態に対してＯＰ１からＯＰへの単純回転を施した状態を、曲げ状態Ｐにおける捻り角０°状態と定義する。捻り角０°状態の子骨のｙ軸、ｚ軸の向きは、図１１のグリッドと同じ向きになる。なおＰ＝Ｐ０の場合は、捻り角０°の向きは定義不能である。
【０１８７】
以上のように関節の捻り角を定義すると、式（２８）に示す関節の回転マトリクスＭは、式（２９）〜式（３１）に示すように曲げマトリクスＭｂと捻りマトリクスＭｔとに分解できる。ただし、マトリクスのタイプ（掛ける順序、要素の並び等）は、列ベクトルを掛けるタイプとする。
【０１８８】
【数２８】
2010170279.tif 000031
【０１８９】
【数２９】
2010170279.tif 000032
【０１９０】
【数３０】
2010170279.tif 000033
【０１９１】
【数３１】
2010170279.tif 000034
【０１９２】
ただし、式（３０）および式（３１）におけるｄ０は式（３２）に示すとおりである。なお、式（３２）はｄ０＝１／（ｍ００＋１）としても等価であるが、ｍ００≒−１（Ｐ≒Ｐ０に相当）の場合の桁落ちを避けるためには式（３２）を用いるほうが良い。
【０１９３】
【数３２】
2010170279.tif 000035
【０１９４】
２−５−２．捻り角の０°固定
関節の曲げを可動範囲内に補正しつつ、関節の捻り角は常に０°とする場合について説明する。与えられた関節の回転状態を表すマトリクスを式（２８）のＭとし、これを可動範囲内に補正することによって得られるマトリクスをＭ１とする。
【０１９５】
このとき、与えられた曲げ状態を表す球面Ｓ上の点を点Ｐとすると、点Ｐの座標（ｘ，ｙ，ｚ）は式（３３）で得られる。
【０１９６】
【数３３】
2010170279.tif 000036
【０１９７】
この点Ｐを前述の方法により可動領域内に補正する。この補正結果に対応する球面Ｓ上の点を点Ｐｍとし、その座標を（ｘｍ，ｙｍ，ｚｍ）とすると、Ｍ１は式（３４）、式（３５）により得られる。
【０１９８】
【数３４】
2010170279.tif 000037
【０１９９】
【数３５】
2010170279.tif 000038
【０２００】
また点ｆ（Ｐｍ）のｓｔ座標（ｓｍ，ｔｍ）を使ってＭ１を表すと式（３６）、式（３７）のようになる。
【０２０１】
【数３６】
2010170279.tif 000039
【０２０２】
【数３７】
2010170279.tif 000040
【０２０３】
式（３６）、式（３７）を使えば、平面λ上で曲げ状態を補正した後、点Ｐｍに対応する座標（ｘｍ，ｙｍ，ｚｍ）を求める計算を介することなく直接Ｍ１を求められるので、計算量を減らすことができる。
【０２０４】
２−５−３．捻り角の可動範囲の設定手法
関節の曲げ・捻りともに、設定された可動範囲内に補正する場合について説明する。与えられた回転状態を表すマトリクスを式（２８）のＭとし、これを可動範囲内に補正することによって得られるマトリクスをＭ２とする。
【０２０５】
ここで、Ｍは、式（２９）、式（３０）、式（３１）、式（３２）のように曲げと捻りに分解できる。曲げについては、式（３３）、式（３４）、式（３５）を使って補正される。
【０２０６】
補正前の捻り角をψとすると、ψは式（３８）から求めることができる。
【０２０７】
【数３８】
2010170279.tif 000041
【０２０８】
この捻り角ψが可動範囲外の場合は、これを補正しψｍとする。ψｍによる捻りマトリクスＭｔ２は式（３９）のようになり、Ｍ２は式（４０）により得られる。
【０２０９】
【数３９】
2010170279.tif 000042
【０２１０】
【数４０】
2010170279.tif 000043
【０２１１】
２−６．四元数による表現
２−６−１．曲げ・捻りの分解
関節の回転を表すのに四元数を用いる場合について考える。前述のマトリクスを使う場合と同様に、四元数も曲げと捻りに分解することができる。関節の回転を表す四元数ｑは、次のように曲げ四元数ｑｂと捻り四元数ｑｔとに分解される。
【０２１２】
【数４１】
2010170279.tif 000044
【０２１３】
ｑの要素を（ｑｘ，ｑｙ，ｑｚ，ｑｗ）とすると、曲げ四元数ｑｂの要素（ｑｂｘ，ｑｂｙ，ｑｂｚ，ｑｂｗ）は次のようになる。
【０２１４】
【数４２】
2010170279.tif 000045
【０２１５】
また捻り四元数ｑｔの要素（ｑｔｘ，ｑｔｙ，ｑｔｚ，ｑｔｗ）は次のようになる。
【０２１６】
【数４３】
2010170279.tif 000046
【０２１７】
２−６−２．曲げと捻りの補正手法
与えられた曲げ状態を表す球面Ｓ上の点を点Ｐとすると、点Ｐの座標（ｘ，ｙ，ｚ）は式（４４）で得られる。
【０２１８】
【数４４】
2010170279.tif 000047
【０２１９】
この点Ｐを前述の方法により可動領域内に補正する。この補正結果に対応する球面Ｓ上の点を点Ｐｍとし、その座標を（ｘｍ，ｙｍ，ｚｍ）とすると、補正後の曲げ四元数ｑ１＝（ｑ１ｘ，ｑ１ｙ，ｑ１ｚ，ｑ１ｗ）は式（４５）により得られる。
【０２２０】
【数４５】
2010170279.tif 000048
【０２２１】
なお点Ｐの座標（ｘ，ｙ，ｚ）を使わず、点ｆ（Ｐ）の座標（ｓ，ｔ）を使って表すと式（４６）、式（４７）のようになる。
【０２２２】
【数４６】
2010170279.tif 000049
【０２２３】
【数４７】
2010170279.tif 000050
【０２２４】
また補正前の捻り角をψとすると、ψは式（４８）から求めることができる。
【０２２５】
【数４８】
2010170279.tif 000051
【０２２６】
このψが可動範囲外の場合は、これを補正しψｍとする。ψｍによる捻り四元数ｑ２＝（ｑ２ｘ，ｑ２ｙ，ｑ２ｚ，ｑ２ｗ）は式（４９）のようになる。
【０２２７】
【数４９】
2010170279.tif 000052
【０２２８】
こうして、曲げ・捻りとも補正された四元数ｑ３は式（５０）により得られる。
【０２２９】
【数５０】
2010170279.tif 000053
【０２３０】
２−６−３．四元数を使った曲げ角度制限
上述した式（４２）の四元数は関節の曲げを表すので、その要素ｑｂｙ、ｑｂｚに関して可動範囲を設定することによって、曲げ角度を制限する手法が考えられる。しかし、以下に述べるように、この手法には射影を使う手法に比べて劣る点がある。
【０２３１】
ｑｂｙ＝ｓｉｎ（η／２）、ｑｂｚ＝ｓｉｎ（ζ／２）とし、η、ζの値を−１８０°から１８０°まで１０°間隔で変えて球面Ｓ上にグリッド（格子線）を作ると、図３３に示すようになる。ただしｑｂｙ、ｑｂｚの範囲は、ｑｂｙ２＋ｑｂｚ２≦１である。
【０２３２】
ここで、図３３に示す四元数を採用した場合と図１１に示す射影方式を採用した場合とを比較すると、曲げ角が小さい領域では、両者は似た形状となっている。しかし、射影方式では、グリッドが直交しているのに対して、ｑｂｙ、ｑｂｚによる角度制限ではグリッドが直交しない。特に極側の半球では、図３４に示すように、四元数（ｑｂｙ，ｑｂｚ）による角度制限ではグリッドの交角が直角から大きく離れた状態になり、可動領域の設定には適さない。ただし、ｘ軸に関して軸対象な円形の可動領域を設定する場合には、ｑｂｙ、ｑｂｚを２乗和制限とすることで、可動領域を正確に設定することができる。
【０２３３】
２−７．可動領域境界による衝突反発
上記では、関節の曲げ状態が可動領域を超えた場合に、境界上まで戻す補正処理を行った。これに対して、以下では、可動領域境界に衝突して反発する（跳ね返る）挙動を実現する手法を説明する。
【０２３４】
関節の曲げ状態は、球面Ｓ上の点Ｐの位置によって表される。関節の曲げ状態が変化すると、球面Ｓ上で点Ｐが移動し、これに伴って平面λ上で点ｆ（Ｐ）が移動する。本実施形態では、関節の曲げ状態の計算のステップ時間は十分短い（例えば、１／６０秒）として、この時間内の点ｆ（Ｐ）の動きを等速直線運動で近似する手法を採用している。
【０２３５】
射影ｆは等角写像なので、球面Ｓ上での入射角、および反射角は平面λ上でも維持される。そのため、平面λ上において、通常どおりの方法で反発挙動を計算することができる。
【０２３６】
以下では、図３５に示すように、平面λ上における可動領域外の点ｆ（Ｐ）の位置を（ｓｐ，ｔｐ）、平面λ上における１ステップ時間前の可動領域内の点ｆ（Ｐ）の位置を（ｓｑ，ｔｑ）、平面λ上における可動領域境界上の衝突位置を（ｓｈ，ｔｈ）、平面λ上における反発後の位置を（ｓｒ，ｔｒ）、平面λ上の衝突位置における法線の方向を（ｎｓ，ｎｔ）として説明を進める。
【０２３７】
２−７−１．速度、加速度の変換式
まず、球面Ｓ上と平面λ上での速度および加速度の変換式を求める。時間による１階微分を「’」で表し、２階微分を「煤vで表すことにする。上記の式（１）を時間で微分すると、以下の式（５１）、式（５２）が得られる。式（５１）、式（５２）を用いることにより、球面Ｓ上における点Ｐの速度と加速度から、平面λ上における点ｆ（Ｐ）の速度と加速度を求めることができる。
【０２３８】
【数５１】
2010170279.tif 000054
【０２３９】
【数５２】
2010170279.tif 000055
【０２４０】
また、上記の式（２）を時間で微分すると、以下の式（５３）が得られる。式（５３）を用いることにより、平面λ上における点ｆ（Ｐ）の速度から、球面Ｓ上における点Ｐの速度を求めることができる。
【０２４１】
【数５３】
2010170279.tif 000056
【０２４２】
２−７−２．平面λ上での衝突反発
可動領域境界に衝突した際の反発挙動を、平面λ上で計算する。図３６のように、衝突前の速度ベクトルをｖ、衝突後の速度ベクトルをｖｒ、衝突位置における境界の法線ベクトルをｎとする。ただし、｜ｎ｜＝１とする。また、衝突時の反発係数をｅ、摩擦係数をμとする。０≦ｅ≦１、０≦μである。
【０２４３】
衝突前の速度ベクトルｖの法線成分ベクトルをｖ１、接線成分ベクトルをｖ２とすると、ｖ１、ｖ２は、式（５４）により得られる。
【０２４４】
【数５４】
2010170279.tif 000057
【０２４５】
衝突後の速度ベクトルｖｒの法線成分ベクトルをｖｒ１、接線成分ベクトルをｖｒ２とすると、ｖｒは、式（５５）により得られる。ただし、式（５５）において｜ｖｒ２｜が負となる場合は、ｖｒ２＝０とする。
【０２４６】
【数５５】
2010170279.tif 000058
【０２４７】
２−７−３．反復反発の収束
図３７のように一定加速度ａのもとで衝突反発する場合、本来ならば、距離Ｌは時間Ｔの経過とともに図３８のように変化する。反発の周期は、反発係数ｅを公比とする等比数列となり、有限の時間内に０に収束する。
【０２４８】
一方、衝突反発の計算の処理は、上述したように１ステップ時間中は速度一定としている。そのため、反発の周期がステップ時間と同等あるいはそれ以下に短くなると、反発挙動を正しく扱うことができなくなる。そこで、本実施形態では、以下の手法を用いて、反復反発を収束させる。
【０２４９】
速度ｖ、および距離Ｌの初期値を、それぞれｖ０、Ｌ０とする。収束までに要する時間Ｔｃは、無限等比級数（無限等比数列の和）となり、これを求めると、式（５６）のようになる。なお、式（５６）により得られたＴｃが所定の値（例えば、ステップ時間の数倍〜数十倍）以下であれば、ｖ＝０、Ｌ＝０とする。
【０２５０】
【数５６】
2010170279.tif 000059
【０２５１】
２−７−４．矩形制限における反発挙動
衝突時刻を求めるために、時間を表すパラメータτを導入する。
【０２５２】
ステップ時間の開始時点をτ＝０、終了時点をτ＝１とする。
【０２５３】
言い換えれば、時刻τ＝０におけるｆ（Ｐ）の位置は、１ステップ時間前の可動領域内の点（ｓｑ，ｔｑ）であり、衝突を無視した場合の時刻τ＝１におけるｆ（Ｐ）の位置は、可動領域外の点（ｓｐ，ｔｐ）である。
【０２５４】
矩形制限だけでなく、他の制限（楕円制限、小判形制限）においても、このτを使用する。
【０２５５】
まず、可動領域外の点ｆ（Ｐ）の位置（ｓｐ，ｔｐ）におけるｓｐの値によって以下の３通りの場合に分けて、τｓの値を求める。
【０２５６】
１）ｓｐ＜ｓ０の場合
【数５７】
2010170279.tif 000060
【０２５７】
２）ｓ０≦ｓｐ≦ｓ１の場合
【数５８】
2010170279.tif 000061
【０２５８】
３）ｓ１＜ｓｐの場合
【数５９】
2010170279.tif 000062
【０２５９】
次に、可動領域外の点ｆ（Ｐ）の位置（ｓｐ，ｔｐ）におけるｔｐの値によって以下の３通りの場合に分けて、τｔの値を求める。
【０２６０】
１）ｔｐ＜ｔ０の場合
【数６０】
2010170279.tif 000063
【０２６１】
２）ｔ０≦ｔｐ≦ｔ１の場合
【数６１】
2010170279.tif 000064
【０２６２】
３）ｔ１＜ｔｐの場合
【数６２】
2010170279.tif 000065
【０２６３】
式（５８）および式（６１）の右辺は、「２」となっているが、「１」よりも大きい値であればよい。本実施形態では、式（５７）〜式（５９）によって求められるτｓと、式（６０）〜式（６２）によって求められるτｔとを比較し、いずれか小さい（大きくない）方の値をτとして決定する。
【０２６４】
【数６３】
2010170279.tif 000066
【０２６５】
式（６３）に示されるτは、衝突時刻を表す。
【０２６６】
そして可動領域の境界上における衝突位置（ｓｈ，ｔｈ）は、式（６４）により得ることができる。
【０２６７】
【数６４】
2010170279.tif 000067
【０２６８】
また上記の衝突位置における可動領域の境界上の法線（ｎｓ，ｎｔ）は以下のようになる。
【０２６９】
１）τｓ≧τｔの場合
【数６５】
2010170279.tif 000068
【０２７０】
２）τｓ＜τｔの場合
【数６６】
2010170279.tif 000069
【０２７１】
最後に、ベクトル（ｓｐ−ｓｑ，ｔｐ−ｔｑ）を衝突前の速度ベクトルとして、「２−７−２．平面λ上での衝突反発」において説明した手法で、衝突による反発挙動を計算する。衝突後の速度ベクトルを（ｖｒｓ，ｖｒｔ）とすると、反発後の位置は式（６７）により得られる。
【０２７２】
【数６７】
2010170279.tif 000070
【０２７３】
２−７−５．楕円制限における反発挙動
楕円制限における衝突位置座標は、以下の連立方程式の解（ｓ，ｔ）である（ｓａ，ｓｂ，ｔａ，ｔｂについては式（８）を参照）。
【０２７４】
【数６８】
2010170279.tif 000071
【０２７５】
次に、パラメータτを使って、ｓ，ｔを変換すると、以下のようにτの２次方程式が得られる。
【０２７６】
【数６９】
2010170279.tif 000072
【０２７７】
ただし、式（６９）において、係数ｋ１，ｋ２，ｋ３は以下の通りである。
【０２７８】
【数７０】
2010170279.tif 000073
【０２７９】
τの解、すなわち衝突時刻は、以下のようにして得られる。
【０２８０】
【数７１】
2010170279.tif 000074
【０２８１】
式（７１）において、ｋ２の値による場合分けを行っているのは、桁落ちによる精度劣化を防ぐためである。
【０２８２】
そして可動領域の境界上における衝突位置（ｓｈ，ｔｈ）は、式（７２）により得ることができる。
【０２８３】
【数７２】
2010170279.tif 000075
【０２８４】
また上記の衝突位置における可動領域の境界上の法線（ｎｓ，ｎｔ）は以下のようになる。
【０２８５】
【数７３】
2010170279.tif 000076
【０２８６】
最後に、ベクトル（ｓｐ−ｓｑ，ｔｐ−ｔｑ）を衝突前の速度ベクトルとして、「２−７−２．平面λ上での衝突反発」において説明した手法で、衝突による反発挙動を計算する。衝突後の速度ベクトルを（ｖｒｓ，ｖｒｔ）とすると、反発後の位置は式（７４）により得られる。
【０２８７】
【数７４】
2010170279.tif 000077
【０２８８】
２−７−６．小判形制限における反発挙動
以下の例では、ｓａ≧ｔａ（可動領域形状が横長）の場合を扱う。可動領域境界の左側の弧（半円部）の中心座標を（ｓｅ０，ｔｅ）、可動領域境界の右側の弧の中心座標を（ｓｅ１，ｔｅ）とし、半径をｒｅとする。
【０２８９】
可動領域境界の辺との衝突判定：
まず、可動領域境界の辺（直線部）に対する衝突を調べる。ｔｐの値によって以下の３通りの場合に分ける。
【０２９０】
１）ｔｐ＜ｔ０の場合
【数７５】
2010170279.tif 000078
【０２９１】
式（７５）において、ｓｅ０≦ｓｈ≦ｓｅ１の場合には、下側の辺と衝突するのでτを解として確定し、以降の可動領域境界の弧との衝突判定は行わない。そうでない場合には、解が無効なので破棄し、可動領域境界の弧との衝突判定を行う。
【０２９２】
２）ｔ１＜ｔｐの場合
【数７６】
2010170279.tif 000079
【０２９３】
式（７６）において、ｓｅ０≦ｓｈ≦ｓｅ１の場合には、上側の辺と衝突するのでτを解として確定し、以降の可動領域境界の弧との衝突判定は行わない。そうでない場合には、解が無効なので破棄し、可動領域境界の弧との衝突判定を行う。
【０２９４】
３）ｔ０≦ｔｐ≦ｔ１の場合
この場合には、可動領域境界の辺との衝突は発生しないため、可動領域境界の弧との衝突判定を行う。
【０２９５】
可動領域の弧との衝突判定：
次に、τの解が未確定の場合は、可動領域境界の弧（円弧部）に対する衝突を調べる。まず、左側の弧について調べる。衝突位置座標は、次の連立方程式の解（ｓ，ｔ）である。
【０２９６】
【数７７】
2010170279.tif 000080
【０２９７】
パラメータτを使って式（７７）のｓ、ｔを変換すると、以下のようにτの２次方程式が得られる。
【０２９８】
【数７８】
2010170279.tif 000081
【０２９９】
ただし、式（７８）において、係数ｋ１，ｋ２，ｋ３は以下の通りである。
【０３００】
【数７９】
2010170279.tif 000082
【０３０１】
上記の係数ｋ１，ｋ２，ｋ３に関して、判別式Ｄ＝ｋ２２−ｋ１ｋ３が負の場合は、左側の弧には衝突しない。Ｄ≧０の場合には、式（８０）によりτを求めることができる。
【０３０２】
【数８０】
2010170279.tif 000083
【０３０３】
式（８０）において、ｋ２の値による場合分けを行っているのは、桁落ちによる精度劣化を防ぐためである。τ≧０かつｓｈ＝τ（ｓｐ−ｓｑ）＋ｓｑ≦ｓｅ０の場合には、左側の弧と衝突するので、τを解として確定し、以降の衝突判定は行わない。そうでない場合には、解が無効なので破棄する。
【０３０４】
ここまでの計算の結果、τの解が未確定の場合は、必ず可動領域境界の右側の弧に衝突する。左側の弧の場合と同様の手法で、ｓｅ０の代わりにｓｅ１を用いて計算し、τを得ることができる。
【０３０５】
そして可動領域の境界上における衝突位置（ｓｈ，ｔｈ）は、式（８１）により得ることができる。
【０３０６】
【数８１】
2010170279.tif 000084
【０３０７】
また上記の衝突位置における可動領域の境界上の法線（ｎｓ，ｎｔ）は以下のようになる。
【０３０８】
【数８２】
2010170279.tif 000085
【０３０９】
最後に、ベクトル（ｓｐ−ｓｑ，ｔｐ−ｔｑ）を衝突前の速度ベクトルとして、「２−７−２．平面λ上での衝突反発」において説明した手法で、衝突による反発挙動を計算する。衝突後の速度ベクトルを（ｖｒｓ，ｖｒｔ）とすると、反発後の位置は式（８３）により得られる。
【０３１０】
【数８３】
2010170279.tif 000086
【０３１１】
なお、ｓａ＜ｔａの場合の処理は、上記のｓａ≧ｔａの場合の処理に対して、ｓとｔを入れ替えたものとなる。
【０３１２】
２−７−７．複数回の衝突
以上の衝突反発計算で得られた結果（ｓｒ，ｔｒ）が、図３９のように可動領域外となる場合がある。このような場合の対処として、次の２通りの手法が考えられる。
【０３１３】
１）再度反発計算を行う。
【０３１４】
２）「２−４．可動領域を超えた場合の補正手法」で述べた手法を使って境界上に戻す。
【０３１５】
ただし、再度反発計算を行った場合、その結果が再び可動領域外となることが起こり得る。その場合は、反発計算を所定の回数で打ち切り、「２−４．可動領域を超えた場合の補正手法」で述べた手法を使って境界上に戻すことが好ましい。
【０３１６】
２−８．本実施形態の手法による効果
本実施形態の射影方式によれば、射影による変換およびその逆変換は、四則演算のみで構成されるので、計算負荷が小さい。
【０３１７】
また本実施形態の射影方式の補正処理（矩形制限、小判形制限）によれば、最適解を実用的な計算量で求めることができる。
【０３１８】
また本実施形態の射影方式の補正処理（矩形制限、小判形制限）は、ごく一部の平方根計算を除けば、四則演算のみで構成されるので、計算負荷が小さく、ベクトル演算器（あるいはＳＩＭＤ）を用いた計算の高速化が可能である。
【０３１９】
また本実施形態の射影方式による計算では、立体的な関節の反発挙動を、平面上の反発挙動に置き換えて計算するので、より単純な計算で反発挙動を求めることができる。
【０３２０】
なお、本実施形態の射影方式による関節の可動領域の設定手法では、関節毎に個別の可動領域を設定することができ、関節毎に可動領域を制限する方式が違っていてもよい。例えば、ある関節では、矩形制限によって関節の可動領域を設定し、別の関節では小判形制限によって関節を可動領域を設定するなど、関節の動きに応じた可動領域を設定することができる。
【０３２１】
また子骨の向きが可動領域を超えるような演算結果が得られた場合において、可動領域の境界上に補正するように子骨の向きが補正される関節と、可動領域の境界において反発する挙動を示すように子骨の向きが計算される関節とを、関節毎に設定するようにしてもよい。
【０３２２】
また関節の可動領域を制限する方式や、子骨の向きが可動領域を超えるような演算結果が得られた場合の対処方式については、キャラクタの種類（例えば、人、ロボット、動物等）に応じて設定するようにしてもよい。
【０３２３】
３．本実施形態の処理
次に、本実施形態の手法を実現する処理例について図４０および図４１のフローチャートを用いて説明する。以下では、本実施形態の手法をゲームプログラムに適用した場合について説明する。
【０３２４】
まず初期設定として、関節毎に予め与えられている可動範囲の形状と曲げ角度の許容範囲とに基づいて、骨格モデルを構成する各関節の可動範囲を、平面λ上に設定する（ステップＳ１０）。
【０３２５】
そして、フレーム更新タイミング（例えば、前フレームから１／６０秒が経過した時点）が到来すると（ステップＳ１１でＹ）、プレーヤの入力情報を検出する（ステップＳ１２）。
【０３２６】
次に、プレーヤの操作対象のキャラクタに関する骨格モデルに含まれる複数の関節のなかから、計算対象の関節を選択し（ステップＳ１３）、プレーヤの入力情報、オブジェクト同士のヒットによる外力情報や、その他の動作影響情報に基づいて、計算対象の関節の曲げ・捻りを演算する（ステップＳ１４）。
【０３２７】
次に、計算対象の関節において連結されている親骨と子骨とに関して、親骨に対する子骨の向きを示す、関節を中心点とする球面Ｓ上の点Ｐを、射影ｆによって平面λに射影して点ｆ（Ｐ）を求め（ステップＳ１５）、平面λ上の点ｆ（Ｐ）が可動範囲内に収まっているか否かを判定する（ステップＳ１６）。
【０３２８】
そして、点ｆ（Ｐ）が可動範囲外に存在する場合には（ステップＳ１６でＮ）、点ｆ（Ｐ）を可動範囲内に戻すために、反発および補正の計算を行う（ステップＳ１７）。
【０３２９】
反発および補正の計算は、図４１に示すフローチャートに従って行われる。
【０３３０】
まず計算対象の関節が、可動範囲の境界における反発挙動が許可された関節であるか否かを判定する（ステップＳ２１）。
【０３３１】
計算対象の関節が反発挙動が許可された関節であると判断される場合には（ステップＳ２１でＹ）、平面λ上における点ｆ（Ｐ）の可動範囲の境界との衝突位置を求めてから（ステップＳ２２）、点ｆ（Ｐ）の可動範囲の境界に衝突する前の速度ベクトルｖと、可動範囲の境界上の衝突位置における法線ベクトルｎとに基づいて、点ｆ（Ｐ）の動きを等速直線運動で近似した場合における点ｆ（Ｐ）の衝突後の速度ベクトルｖｒを求め、可動範囲の境界上で反発した点ｆ（Ｐ）の位置を求める（ステップＳ２３）。
【０３３２】
次に、反発後の点ｆ（Ｐ）が可動範囲内に存在するか否かを判定し（ステップＳ２４）、反発後の点ｆ（Ｐ）が可動範囲内に存在する場合には（ステップＳ２４でＹ）、反発後の点ｆ（Ｐ）を点ｆ（Ｐｍ）として（ステップＳ２５）、点ｆ（Ｐｍ）を射影ｆ−１によって球面Ｓ上に逆変換して球面Ｓ上の点Ｐｍを求めることによって補正後の子骨の向きを演算する（ステップＳ２７）。
【０３３３】
また反発後の点ｆ（Ｐ）が可動範囲内に存在しない場合には（ステップＳ２４でＮ）、可動範囲の境界上の位置に点ｆ（Ｐ）を補正するべく、計算対象の関節の可動範囲の形状に応じた補正式によって最適解ｆ（Ｐｍ）を求める（ステップＳ２６）。
【０３３４】
そして点ｆ（Ｐｍ）を射影ｆ−１によって球面Ｓ上に逆変換して球面Ｓ上の点Ｐｍを求めることによって補正後の子骨の向きを演算する（ステップＳ２７）。なお本実施の形態では、計算対象の関節が反発挙動の計算を行う関節でないと判断された場合にも（ステップＳ２１でＮ）、ステップＳ２６およびステップＳ２７の処理が実行される。
【０３３５】
そして、骨格モデルを構成する全ての関節に関する計算が完了すると（ステップＳ１８でＹ）、骨格モデルの各骨の動き（向きの変化）に応じてプレーヤの操作対象のキャラクタを動作させる（ステップＳ１９）。
【０３３６】
図４０に示す例では、ゲームを終了する契機が訪れるまで、ステップＳ１１〜ステップＳ１９に示す処理が繰返し行われ、ゲームを終了する契機が訪れると（ステップＳ２０でＹ）、一連の処理を終了する。
【０３３７】
４．ハードウェア構成例
本実施形態のゲームシステムを実現するハードウェアの構成の一例について図４２を用いて説明する。なお図４１では、主要な構成のみを図示しており、図４１に示されていないハードウェア（メモリコントローラやスピーカなど）を必要に応じて設けることができる。
【０３３８】
メインプロセッサ１０は、光ディスク７２（ＣＤ、ＤＶＤ、ブルーレイディスク等の情報記憶媒体）に格納されたプログラム、通信インターフェース８０を介して転送されたプログラム、或いはハードディスク６０に格納されたプログラムなどに基づき動作し、内部バスｂ４を介してアクセス可能なメインメモリ４０を作業領域（ワーク領域）としてゲーム処理、画像処理、音処理などの種々の処理を実行する。
【０３３９】
メインプロセッサ１０は、１基のプロセッサ１２と複数のベクトルプロセッサ１４で構成される。プロセッサ１２は、ＯＳの実行、ハードウェアリソースの管理、ゲーム処理、ベクトルプロセッサ１４の動作管理などの種々の処理を実行する。またベクトルプロセッサ１４は、ベクトル演算に特化したプロセッサであり、主にジオメトリ処理、画像データや音データのコーデック処理などの処理を実行する。
【０３４０】
描画プロセッサ２０は、内部バスｂ１を介してビデオメモリ３０にアクセス可能に形成されている。また描画プロセッサ２０は、描画プロセッサ２０とメインプロセッサ１０を接続する内部バスｂ２と、メインプロセッサ１０内部のバスｂ３と、メインプロセッサ１０とメインメモリ４０を接続する内部バスｂ４を介してメインメモリ４０にもアクセス可能に形成されている。すなわち本実施形態のゲームシステムでは、描画プロセッサ２０がビデオメモリ３０を原則的なレンダリングターゲットとして利用しつつ、必要に応じてメインメモリ４０とを例外的なレンダリングターゲットとして利用することもできるようになっている。
【０３４１】
描画プロセッサ２０は、座標変換、透視変換、光源計算、曲面生成などのジオメトリ処理を行うものであり、高速並列演算が可能な積和算器や除算器を有し、マトリクス演算（ベクトル演算）を高速に実行する。例えば、座標変換、透視変換、光源計算などの処理を行う場合には、メインプロセッサ１０で動作するプログラムが、その処理を描画プロセッサ２０に指示する。
【０３４２】
また描画プロセッサ２０は、ジオメトリ処理後のオブジェクト（ポリゴンや曲面などのプリミティブ面で構成されるオブジェクト）の画像のレンダリング処理を高速に実行するものである。マルチパスレンダリング処理の際には、描画プロセッサ２０は、描画情報（頂点情報や他のパラメータ）等に基づいて、Ｚバッファ３４を利用した陰面消去やテクスチャ記憶部３６を利用したテクスチャマッピングを行いながら、画像をビデオメモリ３０のフレームバッファ３２にレンダリングする。このとき描画プロセッサ２０は、マルチパスレンダリング処理として、グレアフィルタ処理、モーションブラー処理、被写界深度処理、フォグ処理等のフィルタ処理を行うことができる。そして、最後のレンダリングパスで画像がビデオメモリ３０に設けられたフレームバッファ３２にレンダリングされると、その画像をディスプレイ５０に出力する。
【０３４３】
ハードディスク６０にはシステムプログラム、セーブデータ、個人データなどが格納される。
【０３４４】
光学ドライブ７０は、プログラム、画像データ、或いは音データなどが格納される光ディスク７２（情報記憶媒体）を駆動し、これらのプログラム、データへのアクセスを可能にする。
【０３４５】
通信インターフェース８０は、ネットワークを介して外部との間でデータ転送を行うためのインターフェースである。この場合に、通信インターフェース８０に接続されるネットワークとしては、通信回線（アナログ電話回線、ＩＳＤＮ）、高速シリアルバスなどを考えることができる。そして、通信回線を利用することでインターネットを介したデータ転送が可能になる。また、高速シリアルバスを利用することで、他の画像生成システムとの間でのデータ転送が可能になる。
【０３４６】
上述したように本実施形態のゲームシステム（コンピュータ）は、メインプロセッサ１０に座標変換、可動範囲設定、骨格動作演算を行わせるプログラムが光ディスク７２（情報記憶媒体の一例）あるいはハードディスク６０（情報記憶媒体の一例）に格納されている。
【０３４７】
なお、本実施形態の各部（各手段）は、その全てを、ハードウェアのみにより実現してもよいし、情報記憶媒体に格納されるプログラムや通信インターフェースを介して配信されるプログラムのみにより実現してもよい。或いは、ハードウェアとプログラムの両方により実現してもよい。
【０３４８】
そして、本実施形態の各部をハードウェアとプログラムの両方により実現する場合には、情報記憶媒体には、ハードウェア（コンピュータ）を本実施形態の各部として機能させるためのプログラムが格納されることになる。より具体的には、上記プログラムが、ハードウェアである各プロセッサ１０、２０等に処理を指示すると共に、必要であればデータを渡す。そして、各プロセッサ１０、２０等は、その指示と渡されたデータとに基づいて、本発明の各部を実現することになる。
【０３４９】
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語として引用された用語は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。また骨格モデルを動作させる手法は、本実施形態で説明したものに限定されず、これらと均等な手法も本発明の範囲に含まれる。
【０３５０】
また本発明は種々のゲーム（格闘ゲーム、シューティングゲーム、ロボット対戦ゲーム、スポーツゲーム、競争ゲーム、ロールプレイングゲーム、音楽演奏ゲーム、ダンスゲーム等）に適用できる。また本発明は、業務用ゲームシステム、家庭用ゲームシステム、多数のプレーヤが参加する大型アトラクションシステム、シミュレータ、マルチメディア端末、ゲーム画像を生成するシステムボード、携帯電話等の種々のゲームシステムに適用できる。
【図面の簡単な説明】
【０３５１】
【図１】本実施形態のゲームシステムの機能ブロック図。
【図２】骨格モデルの構成を模式的に示す図。
【図３】親骨および子骨に設定される座標系を示す図。
【図４】３軸回転角方式によるｒｙ、ｒｚと球面Ｓ上の位置との関係を示す図。
【図５】３軸回転角方式により設定された関節の可動領域を示す図。
【図６】３軸回転角方式により設定された関節の可動領域を示す図。
【図７】３軸回転角方式により設定された関節の可動領域を示す図。
【図８】３軸回転角方式により設定された関節の可動領域を示す図。
【図９】３軸回転角方式により設定された関節の可動領域を示す図。
【図１０】球面Ｓ上の点Ｐから平面λ上の点Ｑへの射影を説明するための図。
【図１１】平面λ上のグリッドを球面Ｓに射影した結果を説明するための図。
【図１２】ｙ軸回転角ｒｙと角度φとの関係を示す図。
【図１３】射影方式と緯度・経度表現との比較図。
【図１４】射影方式により設定された関節の可動領域を示す図。
【図１５】射影方式により設定された関節の可動領域を示す図。
【図１６】射影方式により設定された関節の可動領域を示す図。
【図１７】射影方式により設定された関節の可動領域を示す図。
【図１８】平面λ上において矩形制限された可動領域を示す図。
【図１９】平面λ上において楕円形制限された可動領域を示す図。
【図２０】射影方式により設定された関節の可動領域を示す図。
【図２１】平面λ上において小判形制限された可動領域を示す図。
【図２２】射影方式により設定された関節の可動領域を示す図。
【図２３】射影方式により設定された関節の可動領域を示す図。
【図２４】点Ｐから可動領域の境界に下ろした球面垂線の足Ｐｍを示す図。
【図２５】平面λ上の円が球面Ｓ上で大円となる条件を示す図。
【図２６】球面垂線を平面λに射影して得られる円を示す図。
【図２７】矩形領域の辺に下ろした球面垂線を示す図。
【図２８】矩形領域の各辺に対する最近点領域を示す図。
【図２９】矩形制限における簡易解による補正手法で発生する不具合を示す図。
【図３０】楕円形制限に対する簡易解を示す図。
【図３１】楕円形制限における簡易解による補正手法で発生する不具合を示す図。
【図３２】円弧と直線の組合せによる可動領域の設定例を示す図。
【図３３】ｑｂｙ、ｑｂｚの値を変えて球面Ｓ上に作ったグリッドを示す図。
【図３４】射影方式左と四元数方式右の極側の様子を比較する図。
【図３５】可動領域の境界での衝突の発生を説明するための図。
【図３６】可動領域の境界での衝突の発生を説明するための図。
【図３７】一定加速度が作用した状態での衝突の発生を説明するための図。
【図３８】反復反発の収束を説明するための図。
【図３９】複数回の衝突を説明するための図。
【図４０】本実施形態の具体的な処理例を示すフローチャート。
【図４１】本実施形態の具体的な処理例を示すフローチャート。
【図４２】ハードウェア構成例。
【符号の説明】
【０３５２】
１００  処理部、
１１０  オブジェクト空間設定部、１１２  移動・動作処理部、
１１２Ａ  可動範囲設定部、１１２Ｂ  座標変換部、１１２Ｃ  骨格動作演算部、
１１４  仮想カメラ制御部、
１２０  描画部、１３０  音生成部、
１６０  操作部、１７０  記憶部、
１７２  メインメモリ、
１７２Ａ  オブジェクト情報記憶部、１７２Ｂ  モーション制御情報記憶部、
１７４  ビデオメモリ、
１７４Ａ  テクスチャ記憶部、１７４Ｂ  Ｚバッファ、１７４Ｃ  フレームバッファ、
１８０  情報記憶媒体、１９０  表示部、１９２  音出力部、
１９４  携帯型情報記憶装置、１９６  通信部
【図１】
2010170279.tif 000087
【図２】
2010170279.tif 000088
【図３】
2010170279.tif 000089
【図１０】
2010170279.tif 000090
【図１２】
2010170279.tif 000091
【図１３】
2010170279.tif 000092
【図１８】
2010170279.tif 000093
【図１９】
2010170279.tif 000094
【図２１】
2010170279.tif 000095
【図２４】
2010170279.tif 000096
【図２５】
2010170279.tif 000097
【図２６】
2010170279.tif 000098
【図２７】
2010170279.tif 000099
【図３０】
2010170279.tif 000100
【図３１】
2010170279.tif 000101
【図３２】
2010170279.tif 000102
【図３５】
2010170279.tif 000103
【図３６】
2010170279.tif 000104
【図３７】
2010170279.tif 000105
【図３８】
2010170279.tif 000106
【図３９】
2010170279.tif 000107
【図４０】
2010170279.tif 000108
【図４１】
2010170279.tif 000109
【図４２】
2010170279.tif 000110
【図４】
2010170279.tif 000111
【図５】
2010170279.tif 000112
【図６】
2010170279.tif 000113
【図７】
2010170279.tif 000114
【図８】
2010170279.tif 000115
【図９】
2010170279.tif 000116
【図１１】
2010170279.tif 000117
【図１４】
2010170279.tif 000118
【図１５】
2010170279.tif 000119
【図１６】
2010170279.tif 000120
【図１７】
2010170279.tif 000121
【図２０】
2010170279.tif 000122
【図２２】
2010170279.tif 000123
【図２３】
2010170279.tif 000124
【図２８】
2010170279.tif 000125
【図２９】
2010170279.tif 000126
【図３３】
2010170279.tif 000127
【図３４】
2010170279.tif 000128