(57)【特許請求の範囲】
【請求項１】
仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理システムとしてコンピュータを機能させるプログラムであって、
第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段、
前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段、として前記コンピュータを機能させ、
前記第１制御手段は、前記第１のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている受動物理量情報と、前記第２のオブジェクトの質量又は慣性モーメントに対応付けられる物理量を表す相手方物理量情報と、に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させ、
前記第２制御手段は、前記第２のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記受動物理量情報の値とは異なる、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている能動物理量情報と、前記相手方物理量情報と、に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させる、
ことを特徴とするプログラム。
【請求項２】
前記受動領域の少なくとも一部と、前記判定領域の少なくとも一部と、が重なる場合に、前記第１制御手段が、前記第１のオブジェクトの位置又は向きを変化させ、
前記能動領域の少なくとも一部と、前記判定領域の少なくとも一部と、が重なる場合に、前記第２制御手段が、前記第２のオブジェクトの位置又は向きを変化させる、
ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記第２のオブジェクトの属性に応じて、前記受動物理量情報の値を設定する設定手段、として前記コンピュータをさらに機能させ、
前記第１制御手段は、前記設定手段により値が設定された受動物理量情報に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させる、
ことを特徴とする請求項１に記載のプログラム。
【請求項４】
前記第１のオブジェクト及び前記第２のオブジェクトが配置されている仮想空間を、前記仮想空間内に設定された視点から見た様子を表す画像を生成する画像生成手段、をさらに含む、
ことを特徴とする請求項１から３のいずれか一項に記載のプログラム。
【請求項５】
仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理システムとしてコンピュータを機能させるプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体であって、
第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段、
前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段、として前記コンピュータを機能させ、
前記第１制御手段は、前記第１のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている受動物理量情報と、前記第２のオブジェクトの質量又は慣性モーメントに対応付けられる物理量を表す相手方物理量情報と、に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させ、
前記第２制御手段は、前記第２のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記受動物理量情報の値とは異なる、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている能動物理量情報と、前記相手方物理量情報と、に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させる、
ことを特徴とするプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体。
【請求項６】
仮想空間内に配置されたオブジェクト同士が衝突する様子の表現を支援する情報処理システムであって、
第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段と、
前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段と、を含み、
前記第１制御手段は、前記第１のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている受動物理量情報と、前記第２のオブジェクトの質量又は慣性モーメントに対応付けられる物理量を表す相手方物理量情報と、に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させ、
前記第２制御手段は、前記第２のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記受動物理量情報の値とは異なる、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている能動物理量情報と、前記相手方物理量情報と、に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させる、
ことを特徴とする情報処理システム。
【請求項７】
仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理方法であって、
第１制御手段が、第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１の制御ステップと、
第２制御手段が、前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２の制御ステップと、を含み、
前記第１の制御ステップでは、前記第１制御手段は、前記第１のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている受動物理量情報と、前記第２のオブジェクトの質量又は慣性モーメントに対応付けられる物理量を表す相手方物理量情報と、に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させ、
前記第２の制御ステップでは、前記第２制御手段は、前記第２のオブジェクトの位置又は向きを変化させる場合に、前記第１のオブジェクトと前記第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記受動物理量情報の値とは異なる、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている能動物理量情報と、前記相手方物理量情報と、に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させる、
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報記憶媒体、情報処理システム及び情報処理方法に関する。
【背景技術】
【０００２】
仮想空間内に配置されたオブジェクトを、仮想空間内に配置された視点位置及び視線方向から見た様子を表すフレーム画像を順次生成し、表示装置に表示させる情報処理システムがある。また、古典力学の法則等の物理法則をシミュレートするソフトウェアである物理エンジンを活用することで、仮想空間内に配置されたオブジェクトの動きのリアリティを高めた情報処理システムもある。
【０００３】
物理エンジンは、一般的に、ある時点における各オブジェクトに設定された物理量（例えば、位置、向き、質量、慣性モーメント、速度、角速度、など）を表すパラメータの値、仮想空間全体に関わる物理量（例えば、風速）を表すパラメータの値、などに基づいて、所定時間が経過した後における各オブジェクトの位置や向きを決定している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
仮想空間内に配置されたオブジェクト同士の衝突を物理エンジンによりシミュレートする場面で、質量として設定されている値の比や慣性モーメントとして設定されている値の比が大きい場合に、物理エンジンが各オブジェクトの物理量の変化（例えば、速度、角速度、変位、回転量などの変化）を計算する過程において、ゼロに非常に近い値が算出されることがある。そうすると、丸め誤差の影響で、物理エンジンによる算出結果が不安定になるおそれがある。このことは、例えば、質量として設定されている値の小さなオブジェクトが質量として設定されている値の大きなオブジェクト（例えば、壁を表すオブジェクト）を突き抜けてしまう、あるいは、質量として設定されている値の小さなオブジェクトが質量として設定されている値の大きなオブジェクトと衝突して想定以上に吹っ飛んでしまう、などといった、仮想空間内に配置されたオブジェクト同士が衝突する様子の表現におけるリアリティがなくなってしまう事態を引き起こすおそれがある。
【０００５】
このとき、例えば、質量や慣性モーメントとして設定されている値が小さい方のオブジェクトについて、その値を大きくすることで、物理エンジンによる算出結果を安定させることが考えられる。しかし、そうすると、例えば、衝突相手のオブジェクトが想定以上に動いてしまうなど、結局、仮想空間内に配置されたオブジェクト同士が衝突する様子の表現におけるリアリティがなくなってしまうおそれがある。
【０００６】
ここで、衝突相手の移動速度や変位を計算する基礎になる、自らに関する物理量（ここでは、能動物理量と呼ぶ）の値を変えずに、自らの移動速度や変位を計算する基礎になる、自らに関する物理量（ここでは、受動物理量と呼ぶ）の値を大きくすることを考える。また、衝突相手の位置や向きを変化させるか否かを判定するための能動領域と、自らの位置や向きを変化させるか否かを判定するための受動領域と、を別に設定することを考える。このとき、衝突相手に設定された判定領域と、能動領域と、が重なった際に、能動物理量に基づいて衝突相手の移動速度や変位を決定するようにし、判定領域と、受動領域と、が重なった際に、受動物理量に基づいて自らの移動速度や変位を決定するようにすると、物理エンジンによる算出結果が安定するとともに、衝突相手のオブジェクトが想定以上に動かないようになると思われる。
【０００７】
そして、能動領域と受動領域とを別に設定することによって、仮想空間内に配置されたオブジェクト同士が衝突する様子の表現におけるリアリティがなくなってしまう可能性が低減する場面は、上述の場面に限られない。
【０００８】
本発明は上記課題に鑑みてなされたものであって、その目的の１つは、情報処理システムによって行われる仮想空間内に配置されたオブジェクト同士が衝突する様子の表現のリアリティがなくなってしまう可能性を低減させることにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明に係るプログラムは、仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理システムとしてコンピュータを機能させるプログラムであって、第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段、前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段、として前記コンピュータを機能させることを特徴とする。
【００１０】
また、本発明に係る情報記憶媒体は、仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理システムとしてコンピュータを機能させるプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体であって、第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段、前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段、として前記コンピュータを機能させることを特徴とするプログラムを記憶した情報記憶媒体である。
【００１１】
また、本発明に係る情報処理システムは、仮想空間内に配置されたオブジェクト同士が衝突する様子の表現を支援する情報処理システムであって、第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１制御手段と、前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２制御手段と、を含むことを特徴とする。
【００１２】
また、本発明に係る情報処理方法は、仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理方法であって、仮想空間内に配置されたオブジェクト同士の衝突をシミュレートする情報処理システムとしてコンピュータを機能させるプログラムであって、第１のオブジェクトの位置に基づいて決定される受動領域と、第２のオブジェクトの位置に基づいて決定される判定領域と、の位置関係に応じて、前記第１のオブジェクトの位置又は向きを変化させるか否かを制御する第１の制御ステップと、前記第１のオブジェクトの位置に基づいて決定される領域であって前記受動領域とは異なる領域である能動領域と、前記判定領域と、の位置関係に応じて、前記第２のオブジェクトの位置又は向きを変化させるか否かを制御する第２の制御ステップと、を含むことを特徴とする。
【００１３】
本発明によれば、第１のオブジェクトの位置又は向きを変化させるか否かを制御する基礎となる受動領域と、第２のオブジェクトの位置又は向きを変化させるか否かを制御する基礎となる能動領域と、が別に設定されているので、情報処理システムによって行われる仮想空間内に配置されたオブジェクト同士が衝突する様子の表現のリアリティがなくなってしまう可能性が低減することとなる。
【００１４】
本発明の一態様では、前記受動領域の少なくとも一部と、前記判定領域の少なくとも一部と、が重なる場合に、前記第１制御手段が、前記第１のオブジェクトの位置又は向きを変化させ、前記能動領域の少なくとも一部と、前記判定領域の少なくとも一部と、が重なる場合に、前記第２制御手段が、前記第２のオブジェクトの位置又は向きを変化させることを特徴とする。
【００１５】
また、本発明の一態様では、前記第１制御手段は、前記第１のオブジェクトの位置又は向きを変化させる場合に、第１のオブジェクトと第２のオブジェクトとが衝突した際の前記第１のオブジェクトの移動速度と前記第２のオブジェクトの移動速度との関係に関する移動速度情報と、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている受動物理量情報と、前記第２のオブジェクトの質量又は慣性モーメントに対応付けられる物理量を表す相手方物理量情報と、に基づいて決定される量だけ前記第１のオブジェクトの位置又は向きを変化させ、前記第２制御手段は、前記受動物理量情報の値とは異なる、前記第１のオブジェクトの質量又は慣性モーメントに対応付けられる値が設定されている能動物理量情報と、前記相手方物理量情報と、に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させることを特徴とする。
【００１６】
また、本発明の一態様では、前記第２のオブジェクトの属性に応じて、前記能動物理量情報の値を設定する設定手段、として前記コンピュータをさらに機能させ、前記第２制御手段は、前記設定手段により値が設定された能動物理量情報に基づいて決定される量だけ前記第２のオブジェクトの位置又は向きを変化させることを特徴とする。
【００１７】
また、本発明の一態様では、前記第１のオブジェクト及び前記第２のオブジェクトが配置されている仮想空間を、前記仮想空間内に設定された視点から見た様子を表す画像を生成する画像生成手段、をさらに含むことを特徴とする。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施形態に係るゲーム装置の構成図である。
【図２】本発明の一実施形態に係るゲーム装置により構築される仮想空間の一例を示す図である。
【図３】本発明の一実施形態に係るゲーム装置で実現される機能の一例を示す機能ブロック図である。
【図４】スケルトンデータの一例を示す図である。
【図５】ラグドールデータの一例を示す図である。
【図６Ａ】本発明の一実施形態に係るゲーム装置で毎フレーム行われる処理の流れの一例を示すフロー図である。
【図６Ｂ】本発明の一実施形態に係るゲーム装置で毎フレーム行われる処理の流れの一例を示すフロー図である。
【図７】仮想空間内に衝突判定用剛体オブジェクト、及び、５つのプロキシオブジェクトが配置されている様子の一例を示す図である。
【図８】レイキャスト始点とレイキャスト終点とをつなぐ７つの線分の一例を示す図である。
【図９】樽オブジェクトと衝突判定用剛体オブジェクト、及び、樽オブジェクトとプロキシオブジェクトが衝突する様子の一例を示す図である。
【図１０】物理エンジンにおける速度パラメータの値の算出手法の一例を説明するための説明図である。
【図１１】衝突判定用オブジェクトやプロキシオブジェクトなどをプレイヤオブジェクトの上方から見た様子の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の一実施形態について図面に基づき詳細に説明する。
【００２０】
図１は、本発明の一実施形態に係る情報処理システムとして機能するゲーム装置１０の構成図である。本実施形態に係るゲーム装置１０は、例えば、ゲームコンソール、携帯型ゲーム端末、パーソナルコンピュータ等である。図１に示すように、本実施形態に係るゲーム装置１０は、制御部１２、記憶部１４、操作部１６、表示部１８、を含んでいる。
【００２１】
制御部１２は、ゲーム装置１０にインストールされるプログラムに従って動作するＣＰＵ等のプログラム制御デバイスである。記憶部１４は、ＲＯＭやＲＡＭ等の記憶素子やハードディスクドライブなどである。操作部１６は、キーボードやマウス、あるいは家庭用ゲーム機のコントローラ等であって、ユーザの操作入力を受け付けて、その内容を示す信号を制御部１２に出力する。表示部１８は、液晶ディスプレイ等の表示デバイスであって、制御部１２の指示に従って各種の画像を表示する。
【００２２】
なお、ゲーム装置１０は、ネットワークボードなどの通信インタフェース、ＤＶＤ−ＲＯＭやＢｌｕ−ｒａｙ（登録商標）ディスクなどの光ディスクを読み取る光ディスクドライブ、ＵＳＢ（Universal Serial Bus）ポートなどを含んでいてもよい。
【００２３】
本実施形態に係るゲーム装置１０は、本発明を適用したプログラムを実行することにより、メモリ上に、図２に例示する仮想空間２０を構築するようになっている。同図に示すように、本実施形態に係る仮想空間２０は、仮想３次元空間であり、プレイヤオブジェクト２２、床オブジェクト２４、壁オブジェクト２６、樽オブジェクト２８、槍オブジェクト３０、などの仮想オブジェクトが視点３２とともに配置されている。
【００２４】
本実施形態では、仮想オブジェクトは複数のポリゴンにより構成されている。各ポリゴンにはテクスチャがマッピングされている。本実施形態では、ゲーム装置１０のユーザは、操作部１６を操作することによって、仮想空間２０内においてプレイヤオブジェクト２２を移動させることができるようになっている。
【００２５】
また、本実施形態に係るゲーム装置１０で実行されるプログラムでは、古典力学の法則等の物理法則をシミュレートする物理エンジンの機能が実現されている。
【００２６】
図３は、本実施形態に係るゲーム装置１０の機能ブロック図である。図３に示すように、ゲーム装置１０は、機能的に、データ記憶部４０、操作状態取得部４２、オブジェクト配置管理部４４、空間画像生成出力部４６を含んでいる。データ記憶部４０は、記憶部１４を主として実現され、その他の要素は制御部１２を主として実現される。
【００２７】
これらの機能は、情報処理システムであるゲーム装置１０で、本実施形態に係るプログラムが実行されることにより実現される。このプログラムは、コンピュータ通信ネットワーク経由で通信インタフェースを介して他のコンピュータからダウンロードされてもよいし、光ディスク（例えば、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭなど）、ＵＳＢメモリ等のコンピュータ読み取り可能な情報記憶媒体に格納され、そこから光ディスクドライブやＵＳＢ（Universal Serial Bus）ポートなどを介してゲーム装置１０にインストールされてもよい。
【００２８】
本実施形態では、予め、データ記憶部４０に、仮想空間２０の構築に必要な各種データが記憶されている。データ記憶部４０には、例えば、仮想空間２０に配置されている仮想オブジェクトに関するポリゴンデータやテクスチャデータなどが記憶されている。
【００２９】
また、データ記憶部４０には、例えば、図４に示すような、プレイヤオブジェクト２２の仮想的なスケルトンを表すスケルトンデータ５０が記憶されている。スケルトンデータ５０には、例えば、木構造におけるノードに対応するボーン５２と、木構造におけるリンクに対応するジョイント５４と、が含まれている。すなわち、本実施形態では、ジョイント５４は、ボーン５２同士を接続するとともに、ボーン５２間の親子関係を定義している。また、本実施形態に係るスケルトンデータ５０では、例えば、胴体に対応付けられるボーン５２が、木構造におけるルートノードとして設定されている。以下、胴体に対応付けられるボーン５２をルートボーン５２ａと呼ぶこととする。そして、本実施形態では、プレイヤオブジェクト２２の姿勢は、複数のボーン５２によって表されるスケルトンの姿勢に基づいて一意に定まるようになっている。そのため、本実施形態では、各ボーン５２の位置及び向きが定まると、各ボーン５２の位置及び向きに応じたプレイヤオブジェクト２２のポリゴンモデルを生成することができるようになっている。また、本実施形態では、ボーン５２及びジョイント５４は、不可視の仮想オブジェクトである。
【００３０】
また、本実施形態では、予め、データ記憶部４０に、図５に例示するラグドールデータ５６も記憶されている。ラグドールデータ５６は、物理エンジンによる物理シミュレーション処理の対象となるオブジェクトであるラグドールを示すデータである。また、ラグドールデータ５６には、ラグドールパーツ５８と、ラグドールパーツ５８同士を接続するジョイント６０と、を含んでいる。本実施形態では、２つのラグドールパーツ５８の間は、２つのジョイント６０（物理ジョイント６０ａ及びアニメーションジョイント６０ｂ）で接続されている。また、本実施形態では、個々のラグドールパーツ５８は、例えば、柱形状、カプセル形状、球形状、あるいは、これらを組み合わせた形状のいずれかをしている。また、本実施形態では、ラグドールパーツ５８及びジョイント６０は、不可視の仮想オブジェクトである。
【００３１】
また、データ記憶部４０には、各ラグドールパーツ５８についての物理量（例えば、大きさ、質量、慣性モーメント（本実施形態では、慣性テンソル）、重力をかける程度、摩擦係数、風の影響を受ける程度、速度、角速度、最大速度、最大角速度、インパルス値（力積を表す値）など）を表すパラメータの値、及び、各ラグドールパーツ５８の移動タイプの値も記憶されている。そして、これらの値はゲームの進行状況に応じて変更することが可能になっている。ラグドールパーツ５８の移動タイプについては後述する。
【００３２】
また、本実施形態では、データ記憶部４０に、ラグドールパーツ５８間を接続する一対のジョイント６０（物理ジョイント６０ａ及びアニメーションジョイント６０ｂの組合せ）に対応付けられる物理量（例えば、力みなど）を表すパラメータの値も記憶されている。これらの値もゲームの進行状況に応じて変更することが可能になっている。
【００３３】
また、本実施形態では、データ記憶部４０に、仮想空間２０全体に関わる物理量を表すパラメータの値も記憶されている。データ記憶部４０には、例えば、仮想空間２０内の位置座標に対応付けて、その位置の風速を表すパラメータの値が記憶されている。また、本実施形態では、仮想空間２０全体に関わる物理量を表すパラメータの値は、所定の規則に従って、時間経過とともに変化するようになっている。
【００３４】
また、本実施形態では、予め、データ記憶部４０に、ボーン５２とラグドールパーツ５８との対応関係、並びに、スケルトンデータ５０に含まれるジョイント５４とラグドールデータ５６に含まれる一対のジョイント６０との対応関係を示すデータも記憶されている。図５に示すように、本実施形態では、ボーン５２には、ラグドールパーツ５８に対応付けられているものも、対応付けられていないものもある。図５の例では、左上腕、右上腕、左太もも、右太もものそれぞれを表すボーン５２に対応付けられるラグドールパーツ５８が存在しない。本実施形態では、ルートボーン５２ａに対応付けられるラグドールパーツ５８をルートラグドールパーツ５８ａと呼ぶこととする。そして、本実施形態では、ラグドールデータ５６には、ルートラグドールパーツ５８ａが必ず含まれている。
【００３５】
また、本実施形態では、図５に示すように、スケルトンデータ５０に含まれるジョイント５４には、ラグドールデータ５６に含まれる一対のジョイント６０に対応付けられているものも、対応付けられていないものもある。
【００３６】
また、本実施形態では、予め、データ記憶部４０に、スケルトンデータ５０をラグドールデータ５６に変換する規則を示す変換規則データや、ラグドールデータ５６をスケルトンデータ５０に変換する規則を示す逆変換規則データも記憶されている。本実施形態では、例えば、データ記憶部４０に変換行列Ｔｉを表すデータが記憶されており、変換行列Ｔｉを変換規則データとして用い、変換行列Ｔｉの逆行列を逆変換規則データとして用いる。
【００３７】
また、本実施形態では、予め、データ記憶部４０に、ラグドールパーツ５８に対応付けられていないボーン５２について、その親のボーン５２の位置及び向きに基づいて自らの位置及び向きを決定する規則を示すデータ（例えば、その親のボーン５２の位置及び向きに対する相対的な位置及び向きを示すデータ）が記憶されている。本実施形態では、このデータは、ボーン５２と親のボーン５２との親子関係に対応付けられる規則を示していている。なお、このデータは、ボーン５２の親子関係について共通にあてはめる規則を示していてもよいし、ボーン５２の親子関係毎に異なる規則を示していてもよい。
【００３８】
また、本実施形態では、予め、データ記憶部４０に、複数のモーション（例えば、歩く、走る、落下するなど）のそれぞれに対応付けられる、スケルトンの姿勢の変化態様を示すモーションデータも記憶されている。本実施形態では、モーションデータには、例えば、予め設定された複数のキーフレームについての、フレーム番号と、そのフレーム番号に対応付けられる、スケルトンデータ５０により表されるスケルトンの姿勢（例えば、各ボーン５２のローカル座標系における位置及び向き）との組合せが含まれている。また、本実施形態では、モーションデータには、モーションの識別子、及び、そのモーションに対応付けられる状態（本実施形態では、モーション駆動状態、又は、完全ラグドール状態）を示すデータも含まれている。モーション駆動状態、及び、完全ラグドール状態については後述する。また、本実施形態では、プレイヤオブジェクト２２の現在のモーションを示すデータも記憶されている。
【００３９】
また、本実施形態では、予め、データ記憶部４０に、例えば、コントローラの入力量が所定値を超えた場合に、「歩く」から「走る」にモーションが変化する、あるいは、プレイヤオブジェクト２２に足場がない場合は、現在のモーションがどのモーションであっても「落下する」にモーションが変化する、などといった、モーションが遷移する条件を示す遷移条件データが記憶されている。また、本実施形態では、遷移条件データには、モーションが遷移する際に用いられる設定を示すデータ（例えば、遷移時に遷移前のモーションと遷移後のモーションをどのように補間するかを示すデータ、ダンピング係数（低減率）及びその発動条件を示すデータなど）が関連付けられている。ダンピング係数及びその発動条件については後述する。
【００４０】
本実施形態では、空間画像生成出力部４６が、仮想空間２０内に配置された視点３２から視線方向を見た様子を表す画像（以下、空間フレーム画像と呼ぶ。）を所定時間（例えば、１／６０秒）間隔で生成し、表示部１８に表示出力する。
【００４１】
ここで、前フレームにおいてプレイヤオブジェクト２２のモーションが遷移しなかった場合における、本実施形態に係るゲーム装置１０で毎フレーム行われる（例えば、１／６０秒間隔で行われる）処理の流れの一例を、図６Ａ及び図６Ｂに例示するフロー図を参照しながら説明する。なお、本処理例では、予め、実行されているゲームにおけるプレイヤの現在位置（必ずしもプレイヤオブジェクト２２が配置されている位置と一致していなくてもよい）と現在の向きが設定されていることとする。
【００４２】
まず、操作状態取得部４２が、操作部１６の操作状態（具体的には、例えば、押下されているボタンの種類、及び、ボタンの押下量）を取得する（Ｓ１０１）。そして、オブジェクト配置管理部４４が、本処理の開始時点におけるスケルトンの姿勢（モーション及びフレーム番号など）、Ｓ１０１に示す処理で取得した操作状態、及び、プレイヤの現在位置及び現在の向き、に基づいて、プレイヤオブジェクト２２の仮想空間２０内における変化の記述に用いられる各種パラメータの値を決定する（Ｓ１０２）。Ｓ１０２に示す処理では、オブジェクト配置管理部４４は、例えば、モーションを再生すべきフレーム番号、プレイヤオブジェクト２２のワールド座標系における移動量並びに回転量、及び、発生したイベントの種類、などを決定する。
【００４３】
そして、オブジェクト配置管理部４４が、Ｓ１０２に示す処理でイベントが発生していると決定された場合には、そのイベントの種類に応じた処理を実行する（Ｓ１０３）。この処理の詳細については後述する。
【００４４】
また、オブジェクト配置管理部４４は、プレイヤオブジェクト２２の現在のモーション、及び、Ｓ１０２に示す処理で決定されたフレーム番号に基づいて、各ボーン５２のローカル座標系における位置及び向き（すなわち、スケルトンの姿勢）を決定して、その決定に従うよう各ボーン５２を配置する（Ｓ１０４）。
【００４５】
オブジェクト配置管理部４４は、具体的には、例えば、ルートボーン５２ａを、プレイヤの現在位置をＳ１０２に示す処理で決定された移動量だけ移動させた位置に、プレイヤの現在の向きをＳ１０２に示す処理で決定された回転量だけ回転させた向きで配置する。なお、このとき、オブジェクト配置管理部４４が、ルートボーン５２ａの鉛直方向が、床オブジェクト２４に対する法線方向に沿うように、各ボーン５２の位置や向きを調整するようにしてもよい。そして、オブジェクト配置管理部４４は、決定されたフレーム番号の直前、直後のキーフレームのフレーム番号に対応付けられる姿勢データを補間してなるデータに従って各ボーン５２のローカル座標系における位置及び向きを決定する。そして、オブジェクト配置管理部４４は、決定されるローカル座標系における位置及び向きに従うよう残りのボーン５２を配置する。
【００４６】
そして、オブジェクト配置管理部４４は、データ記憶部４０に記憶されている変換規則データを取得して、配置されたスケルトンと、変換規則データと、に基づいて、ラグドールパーツ５８に対応付けられているボーン５２について、そのボーン５２に対応するラグドールパーツ５８に位置及び向きを決定して、その決定に従うよう各ラグドールパーツ５８を配置する（Ｓ１０５）。オブジェクト配置管理部４４は、具体的には、例えば、配置された各ボーン５２の位置及び向きを表す値に対して変換行列Ｔｉを乗じることにより、対応するラグドールパーツ５８の位置及び向きの値を決定する。
【００４７】
そして、オブジェクト配置管理部４４が、Ｓ１０２に示す処理で決定されたパラメータの値に基づいて基準位置Ｐｂ及び基準向きＤｂを決定する（Ｓ１０６）。このとき、オブジェクト配置管理部４４は、例えば、プレイヤの現在位置をＳ１０２に示す処理で決定された移動量だけ移動させた位置に対してさらにＳ１０２に示す処理で決定されたモーションの種類に基づいて決定されるオフセットだけずらした位置を基準位置Ｐｂとして決定し、プレイヤオブジェクト２２の現在の向きをＳ１０２に示す処理で決定された回転量だけ回転させた向きに対してさらにＳ１０２に示す処理で決定されたモーションの種類に基づいて決定されるオフセットだけずらした向きを基準向きＤｂとして決定する。
【００４８】
そして、オブジェクト配置管理部４４は、代表点の位置が基準位置Ｐｂに一致し、予め設定された前方の向きが基準向きＤｂに一致するよう、衝突判定用剛体オブジェクト６２を仮想空間２０内に配置する（Ｓ１０７）。そして、オブジェクト配置管理部４４は、それぞれの代表点が基準位置Ｐｂ、及び、基準位置Ｐｂに対して上、下、左、右にずらした位置に一致する５つのプロキシオブジェクト６４を仮想空間２０内に配置する（Ｓ１０８）。図７に、仮想空間２０内に衝突判定用剛体オブジェクト６２、及び、５つのプロキシオブジェクト６４が配置されている様子の一例を示す。図７には、基準位置Ｐｂ及び基準向きＤｂも示されている。この段階で配置されるプロキシオブジェクト６４は、あくまでも本処理例におけるプロキシオブジェクト６４の候補であり、後述する処理によりこれらのうちの１つが本処理例におけるプロキシオブジェクト６４として決定されることとなる。本実施形態では、５つのプロキシオブジェクト６４の向きはすべて基準向きＤｂに一致している。本実施形態では、衝突判定用剛体オブジェクト６２、並びに、プロキシオブジェクト６４は、仮想空間２０内に配置される楕円体形状の不可視の仮想オブジェクトである。また、本実施形態では、衝突判定用剛体オブジェクト６２の重心の位置と基準位置Ｐｂに配置されたプロキシオブジェクト６４の重心の位置とは一致し、衝突判定用剛体オブジェクト６２とプロキシオブジェクト６４とは相似形であり、衝突判定用剛体オブジェクト６２はプロキシオブジェクト６４よりも大きい。
【００４９】
そして、オブジェクト配置管理部４４が、プロキシオブジェクト６４、衝突判定用剛体オブジェクト６２、並びに、ラグドールに対して物理シミュレーション処理を実行する（Ｓ１０９）。このことにより、プロキシオブジェクト６４、ラグドール、ラグドールや衝突判定用剛体オブジェクト６２に接触している仮想オブジェクトについては、位置や向き、並びに、速度パラメータの値（本実施形態では、速度パラメータの値は３次元ベクトルで表されている。）が変化することがある。例えば、壁オブジェクト２６にめりこんでいるプロキシオブジェクト６４は、壁オブジェクト２６の外に押し戻されることとなる。物理シミュレーション処理の詳細については後述する。
【００５０】
そして、オブジェクト配置管理部４４は、プレイヤオブジェクト２２の現在のモーションに対応付けられる状態を判定する（Ｓ１１０）。本実施形態では、例えば、「歩く」、「走る」などのモーションはモーション駆動状態に設定され、「落下する」などのモーションは完全ラグドール状態に設定されている。
【００５１】
そして、モーション駆動状態である場合は、オブジェクト配置管理部４４は、物理シミュレーション処理の実行後の５つのプロキシオブジェクト６４の位置のうち、基準位置Ｐｂまでの距離が最も短いプロキシオブジェクト６４を、本処理例におけるプロキシオブジェクト６４として決定する（Ｓ１１１）。この時点で、オブジェクト配置管理部４４は、残りのプロキシオブジェクト６４は仮想空間２０から消去する。そして、図８に示すように、前フレームにおいて決定されたレイキャスト始点Ｒｓと、プロキシオブジェクト６４の代表点（例えば、重心）の位置、及び、代表点に対して所定の長さだけ前、後、左、右、上、下、にずらした位置に一致する７つのレイキャスト終点Ｒｅのそれぞれと、をつなぐ７つの線分上に、壁オブジェクト２６等の他の仮想オブジェクトが存在しているか否かを判定する（Ｓ１１２）。７つの線分のすべてが他の仮想オブジェクトと交差する場合は（Ｓ１１２：Ｙ）、プロキシオブジェクト６４の位置及び向きを、前フレームにおいて決定されたプロキシオブジェクト６４の位置及び向きに変更する（Ｓ１１３）。すなわち、プロキシオブジェクト６４の位置及び向きは、前フレームにおいて決定されたプロキシオブジェクト６４の位置及び向きに戻ることとなる。よって、プロキシオブジェクト６４の位置及び向きは、前フレームにおいて決定されたプロキシオブジェクト６４の位置及び向きのまま変更されない。また、この場合は、次フレームにおいてもレイキャスト始点Ｒｓの位置は変わらない。
【００５２】
一方、他の仮想オブジェクトと交差しない線分が存在する場合は（Ｓ１１２：Ｎ）、所定の優先順位に関する規則に従って決定されるいずれかのレイキャスト終点Ｒｅを、次フレームにおけるレイキャスト始点Ｒｓとして決定する（Ｓ１１４）。この場合は、プロキシオブジェクト６４の位置及び向きは、Ｓ１１１に示す処理で決定された位置及び向きのままである。
【００５３】
そして、Ｓ１１３に示す処理又はＳ１１４に示す処理が終了すると、オブジェクト配置管理部４４は、プロキシオブジェクト６４の位置及び向きを、次フレームにおけるプレイヤの現在位置及び現在の向きとして決定する（Ｓ１１５）。
【００５４】
一方、Ｓ１１０に示す処理で完全ラグドール状態であると判定された場合は、物理シミュレーション処理の実行後のルートラグドールパーツ５８ａの位置及び向きを、次フレームにおけるプレイヤの現在位置及び現在の向きとして決定する（Ｓ１１６）。
【００５５】
そして、Ｓ１１５に示す処理又はＳ１１６に示す処理が終了すると、オブジェクト配置管理部４４は、物理シミュレーション処理の実行後のラグドールに基づいて、各ラグドールパーツ５８に対応するボーン５２の位置及び向きを決定して、その決定に従うよう各ボーン５２を配置する（Ｓ１１７）。ここで、オブジェクト配置管理部４４は、ルートボーン５２ａから、親のボーン５２から子のボーン５２への順序で、Ｓ１１７に示す処理を実行する。そして、オブジェクト配置管理部４４は、データ記憶部４０に記憶されている逆変換規則データを取得して、ラグドールパーツ５８が対応付けられているボーン５２については、物理シミュレーション処理の実行後のラグドールパーツ５８の位置及び向きと、逆変換規則データと、に基づいて、ボーン５２の位置及び向きを決定する。オブジェクト配置管理部４４は、具体的には、例えば、ラグドールパーツ５８の位置及び向きを表す値に対して変換行列Ｔｉの逆行列を乗じることにより、対応するボーン５２の位置及び向きの値を決定する。
【００５６】
一方、オブジェクト配置管理部４４は、ラグドールパーツ５８が対応付けられていないボーン５２については、親のボーン５２の位置及び向きに対する相対的な位置及び向きを示すデータと、Ｓ１１７に示す処理で決定された親のボーン５２の位置及び向きと、に基づいて、ラグドールパーツ５８に対応付けられていないボーン５２の位置及び向きを決定する。このようにして、ラグドールパーツ５８が対応付けられていないボーン５２については、親のボーン５２の位置又は向きの変化に応じて、自らの位置又は向きが変化することとなる。
【００５７】
そして、オブジェクト配置管理部４４は、Ｓ１１７に示す処理で決定された各ボーン５２の位置及び向きに基づいて、描画の対象となるプレイヤオブジェクト２２を仮想空間２０内に配置する（Ｓ１１８）。そして、オブジェクト配置管理部４４は、配置後のプレイヤオブジェクト２２、及び、Ｓ１０１に示す処理で取得した操作部１６の操作状態に基づいて、次フレームにおけるモーションを決定する（Ｓ１１９）。ここでは、例えば、配置後のプレイヤオブジェクト２２に基づいて決定される、足場があるか否かを示す情報、足場の傾斜角、各ラグドールに設定されているインパルス値、及び、遷移条件データに基づいて、次フレームにおけるモーションを決定する。
【００５８】
そして、空間画像生成出力部４６が、視点３２から視線方向を見た様子を表す空間フレーム画像を生成し、表示部１８に表示出力する（Ｓ１２０）。
【００５９】
ここで、図９に示す、樽オブジェクト２８と衝突判定用剛体オブジェクト６２、及び、樽オブジェクト２８とプロキシオブジェクト６４が衝突する様子を例に、Ｓ１０９に示す物理シミュレーション処理について説明する。
【００６０】
まず、オブジェクト配置管理部４４は、衝突していると判定される仮想オブジェクト対を特定する。本実施形態では、図９に示すように、各仮想オブジェクトには、仮想オブジェクトを覆う不可視の衝突判定領域６６が設定されており、オブジェクト配置管理部４４は、衝突判定領域６６が接触している、あるいは、重なっている仮想オブジェクト対を衝突している仮想オブジェクト対として特定する。図９の例では、プロキシオブジェクト６４と、樽オブジェクト２８と、が衝突しており、衝突判定用剛体オブジェクト６２と、樽オブジェクト２８と、が衝突していると判定される。なお、本実施形態では、予め、衝突判定用剛体オブジェクト６２とプロキシオブジェクト６４との衝突判定は行われないように設定されている。
【００６１】
そして、オブジェクト配置管理部４４は、図９に示す樽オブジェクト２８とプロキシオブジェクト６４のそれぞれに設定されている質量パラメータの値、及び、速度パラメータの値、を取得する。そして、オブジェクト配置管理部４４は、取得した値、及び、プロキシオブジェクト６４が樽オブジェクト２８と接触している程度（めりこんでいる程度）を表す指標、に基づいて、プロキシオブジェクト６４の速度パラメータの値の変化量を算出する。そして、オブジェクト配置管理部４４は、算出された変化量だけ速度パラメータの値を変化させた上で、変化後の速度パラメータの値に基づいて特定される移動量（例えば、変化後の速度パラメータの値を所定倍した移動量）だけプロキシオブジェクト６４を移動させる。また、オブジェクト配置管理部４４は、図９に示す樽オブジェクト２８とプロキシオブジェクト６４のそれぞれに設定されている慣性テンソルパラメータの値、角速度パラメータの値を取得する。そして、オブジェクト配置管理部４４は、取得した値、及び、プロキシオブジェクト６４が樽オブジェクト２８に接触している程度（めりこんでいる程度）を表す指標、に基づいて、プロキシオブジェクト６４の角速度パラメータの値の変化量を算出する。そして、オブジェクト配置管理部４４は、算出された変化量だけ角速度パラメータの値を変化させた上で、変化後の角速度パラメータの値に基づいて特定される回転量（例えば、変化後の角速度パラメータの値を所定倍した回転量）だけプロキシオブジェクト６４を回転させる。
【００６２】
また、オブジェクト配置管理部４４は、図９に示す樽オブジェクト２８と衝突判定用剛体オブジェクト６２のそれぞれに設定されている質量パラメータの値、及び、速度パラメータの値を取得する。そして、オブジェクト配置管理部４４は、取得した値、及び、衝突判定用剛体オブジェクト６２が樽オブジェクト２８に接触している程度（めりこんでいる程度）を表す指標、に基づいて、樽オブジェクト２８の速度パラメータの値の変化量を算出する。そして、オブジェクト配置管理部４４は、算出された変化量だけ速度パラメータの値を変化させた上で、変化後の速度パラメータの値に基づいて特定される移動量（例えば、変化後の速度パラメータの値を所定倍した移動量）だけ樽オブジェクト２８を移動させる。また、オブジェクト配置管理部４４は、樽オブジェクト２８と衝突判定用剛体オブジェクト６２のそれぞれに設定されている慣性テンソルパラメータの値、角速度パラメータの値を取得する。そして、オブジェクト配置管理部４４は、取得した値、及び、衝突判定用剛体オブジェクト６２が樽オブジェクト２８に接触している程度（めりこんでいる程度）を表す指標、に基づいて、樽オブジェクト２８の角速度パラメータの値の変化量を算出する。そして、オブジェクト配置管理部４４は、算出された変化量だけ角速度パラメータの値を変化させた上で、変化後の角速度パラメータの値に基づいて特定される回転量（例えば、変化後の角速度パラメータの値を所定倍した回転量）だけ樽オブジェクト２８を回転させる。
【００６３】
本実施形態では、公知の物理エンジンの機能を用いて、上述の変化量の算出を行っている。図１０を参照しながら、物理エンジンにおける速度パラメータの値の算出手法の一例を説明する。ここでは、図１０に示すように、左の仮想オブジェクト（質量パラメータの値：ｍＡ、速度パラメータの値：ｖＡ（右向きを正））と、右の仮想オブジェクト（質量パラメータの値：ｍＢ、速度パラメータの値：ｖＢ（右向きを正））とが衝突した場合を考える。ここでは、仮想オブジェクト同士が接触している程度（めりこんでいる程度）を表す指標として、仮想オブジェクトの重心をつなぐ直線に沿った方向での、仮想オブジェクトが重なっている長さｄを用いることとする。
【００６４】
すると、衝突後の左の仮想オブジェクトの速度ｖＡ’は、ｖＡ’＝ｖＡ−（ｍＢ／（ｍＡ＋ｍＢ））×（α（ｖＡ−ｖＢ）＋βｄ）という数式により算出され、衝突後の右の仮想オブジェクトの速度ｖＢ’は、ｖＢ’＝ｖＢ＋（ｍＡ／（ｍＡ＋ｍＢ））×（α（ｖＡ−ｖＢ）＋βｄ）という数式により算出される。ここで、α、βは所定の調整値を表している。
【００６５】
このように、物理エンジンでは、衝突した仮想オブジェクトそれぞれの速度パラメータの値の変化量は、質量パラメータの値の比（質量パラメータの値の和に対する衝突相手の質量パラメータの値の割合）や、相対速度や、仮想オブジェクト同士が接触している程度（めりこんでいる程度）などに基づいて決定されることとなる。同様に、物理エンジンでは、衝突した仮想オブジェクトそれぞれの角速度パラメータの値の変化量は、仮想オブジェクトそれぞれの慣性テンソルの値や、相対角速度や、仮想オブジェクト同士が接触している程度（めりこんでいる程度）などに基づいて決定されることとなる。
【００６６】
図９における仮想オブジェクト同士が接触している程度（めりこんでいる程度）としては、例えば、所定の投影面に投影した際における、仮想オブジェクトの重心の投影点をつなぐ直線に沿った方向での、衝突判定領域６６が重なっている長さを用いることが考えられる。そして、本実施形態では、この長さが長ければ長いほど上述の変化量が大きくなるようになっている。例えば、衝突判定用剛体オブジェクト６２と樽オブジェクト２８との衝突における物理シミュレーション処理では、図９に示されている長さｄ１が用いられ、プロキシオブジェクト６４と樽オブジェクト２８との衝突における物理シミュレーション処理では図９に示されている長さｄ２が用いられる。
【００６７】
また、本実施形態では、衝突判定用剛体オブジェクト６２には、ゲームにおいて他の仮想オブジェクトとの関係でプレイヤオブジェクト２２として設定するのに妥当な質量パラメータや慣性テンソルパラメータの値が設定される。具体的には、例えば、プレイヤオブジェクト２２と他の仮想オブジェクトとの質量比や慣性テンソル比が、ゲームにおけるプレイヤと他のオブジェクトとの質量比や慣性テンソル比と整合する値が設定される。一方、プロキシオブジェクト６４には、ゲームにおいて他の仮想オブジェクトとの関係でプレイヤオブジェクト２２として設定するのに妥当な質量パラメータや慣性テンソルパラメータの値よりも充分大きな値が質量パラメータや慣性テンソルパラメータの値として設定される。
【００６８】
また、本実施形態では、プロキシオブジェクト６４に設定される質量パラメータや慣性テンソルパラメータの値が衝突相手となる仮想オブジェクトの属性に基づいて決定される。本実施形態では、例えば、衝突相手となる仮想オブジェクトに設定されている質量パラメータや慣性テンソルパラメータの値が大きくなればなるほど、質量パラメータや慣性テンソルパラメータの値が大きくなるよう、プロキシオブジェクト６４の質量パラメータや慣性テンソルパラメータの値が設定される。例えば、衝突相手となる仮想オブジェクトに設定されている質量パラメータや慣性テンソルパラメータの値に比例した値がプロキシオブジェクト６４の質量パラメータや慣性テンソルパラメータの値として設定される。また、例えば、衝突相手となる仮想オブジェクトの種別（例えば、壁オブジェクト２６であるのか樽オブジェクト２８であるのか、など）に応じて、プロキシオブジェクト６４に設定される質量パラメータや慣性テンソルパラメータの値が決定されるようにしてもよい。
【００６９】
本実施形態では、衝突相手の仮想オブジェクトの物理量（速度等）の変化を算出する基礎となる、プレイヤオブジェクト２２に対応付けられるパラメータの値（ここでは、衝突判定用剛体オブジェクト６２に設定されている質量パラメータや慣性テンソルパラメータの値）と、プレイヤオブジェクト２２の物理量（速度等）の変化を算出する基礎となる、プレイヤオブジェクト２２に対応付けられるパラメータの値（ここでは、プロキシオブジェクト６４に設定されている質量パラメータや慣性テンソルパラメータの値）が異なる。そのため、丸め誤差等の影響によって物理エンジンによる算出結果が不安定にならないよう、パラメータの値を設定することで、物理エンジンによる算出結果を安定させることができることとなり、その結果、衝突する様子の表現のリアリティがなくなってしまう可能性が低減することとなる。
【００７０】
また、本実施形態では、衝突判定用剛体オブジェクト６２が、プロキシオブジェクト６４よりも大きくなるよう設定されるため、衝突相手の仮想オブジェクトが、衝突判定用剛体オブジェクト６２とは衝突するが、プロキシオブジェクト６４とは衝突しないということが起こりうる。そして、衝突判定用剛体オブジェクト６２には、ゲームにおいて他の仮想オブジェクトとの関係でプレイヤオブジェクト２２として設定するのに妥当な質量パラメータや慣性テンソルパラメータの値が設定されるので、衝突相手の仮想オブジェクトが移動する際の表現（例えば、吹き飛ぶような表現）が的確なものとなることが期待される。また、プロキシオブジェクト６４には、妥当な質量パラメータや慣性テンソルパラメータの値よりも充分大きな値（例えば、衝突相手の仮想オブジェクトに設定されている質量パラメータや慣性テンソルパラメータの値に比例した値）が質量パラメータや慣性テンソルパラメータの値として設定されるので、質量パラメータや慣性テンソルパラメータの値が大きな仮想オブジェクト（例えば、壁オブジェクト２６）とプロキシオブジェクト６４が衝突したと判定された場合に、丸め誤差の影響を受けずにプロキシオブジェクト６４がきちんと停止するようになることも期待される。
【００７１】
また、本実施形態では、衝突相手となる仮想オブジェクトの属性に応じた、プロキシオブジェクト６４の質量パラメータや慣性テンソルパラメータの値が可能であるので、パラメータの値の設定のバリエーションが広がり、仮想空間２０内における仮想オブジェクト同士が衝突する様子の表現のバリエーションを広げることができる。
【００７２】
また、本実施形態では、Ｓ１１１に示す処理で、複数のプロキシオブジェクト６４の候補のうち、基準位置Ｐｂまでの距離が最も短いプロキシオブジェクト６４が、本処理例におけるプロキシオブジェクト６４として決定されるので、プレイヤオブジェクト２２を進めようとしているところ付近にプレイヤオブジェクト２２を進めることができ、細かい凹凸のある壁オブジェクト２６にひっかかる、床オブジェクト２４に設けられている小さな段差の影響を受け、プレイヤオブジェクト２２が思いの外高く飛んでしまう、などといった、リアリティのない画像表現となるおそれを低減することができることとなる。また、さらに、Ｓ１１２〜Ｓ１１４に示す処理で、Ｓ１１１に示す処理で決定されたプロキシオブジェクト６４内の所定数の点のそれぞれと、前フレームのプロキシオブジェクト６４内の点と、をつなぐ線分上に仮想オブジェクトが存在している場合には、プロキシオブジェクト６４が移動しないこととなるので、プロキシオブジェクト６４が仮想オブジェクトをすり抜けてしまうおそれを低減することができることとなる。
【００７３】
また、本実施形態では、オブジェクト配置管理部４４は、各仮想オブジェクトに設定されている、風の影響を受ける程度を示すパラメータの値と、仮想オブジェクトが配置されている位置に対応付けられている風速パラメータの値と、に基づいて、仮想オブジェクトの位置や向きをさらも変化させる。
【００７４】
ラグドールパーツ５８と他の仮想オブジェクトとの衝突についても、ただし、ジョイント６０による拘束条件があるなどといった相違点はあるが、基本的には上述と同様の物理シミュレーション処理が行われる。なお、本実施形態では、モーションの種類に基づいて、各ラグドールパーツ５８の移動タイプの値が決定される。移動タイプの値としては、例えば、キーフレーム、位置制御、速度制御、ジョイント制御、位置制御（ワンウェイ）、速度制御（ワンウェイ）、ジョイント制御（ワンウェイ）などが挙げられる。移動タイプの値がキーフレームであるラグドールパーツ５８は、他の仮想オブジェクトと衝突しても物理シミュレーション処理の結果位置が変化することはない。移動タイプの値が位置制御であるラグドールパーツ５８は、モーションの種類とフレーム番号との組合せに基づいて決定される位置に配置された上で物理シミュレーション処理が実行されることとなる。移動タイプの値が速度制御であるラグドールパーツ５８は、モーションの種類とフレーム番号との組合せに基づいて決定される位置と現在位置との差分に基づいてラグドールパーツ５８の速度パラメータの値が設定された上で物理シミュレーション処理が実行されることとなる。また、移動タイプが上述のワンウェイに該当するものについては、衝突相手から影響を受けるが、衝突相手に影響を与えないこととなる。
【００７５】
移動タイプの値がジョイント制御であるラグドールパーツ５８は、モーションの種類とフレーム番号との組合せに基づいて決定される、親のラグドールパーツ５８との間の角度がアニメーションジョイント６０ｂの角度として設定される。また、移動タイプの値がジョイント制御であるラグドールパーツ５８は、所定の物理的制約条件が物理ジョイント６０ａに設定される。そして、このようなジョイント６０の設定がされた上で、物理シミュレーション処理が実行されることとなる。ここで、物理シミュレーション処理では、アニメーションジョイント６０ｂの角度は変化せず、物理ジョイント６０ａの角度は物理的制約条件を満たす範囲で可変となる。そして、本実施形態では、ジョイント６０に設定されている力みパラメータの値に応じた比率でアニメーションジョイント６０ｂでの物理シミュレーション処理の結果と物理ジョイント６０ａでの物理シミュレーション処理の結果とがブレンド（例えば、力みパラメータの値が１００％であれば、アニメーションジョイント６０ｂの比率が１００％となり、力みパラメータの値が０％であれば、物理ジョイント６０ａの比率が１００％となる。）された結果が、物理シミュレーション処理の最終結果として取り扱われることとなる。
【００７６】
そして、上述のＳ１１７の示す処理で説明したように、本実施形態では、物理シミュレーション処理の実行後のラグドールパーツ５８については、逆変換規則データに基づいて対応するボーン５２に変換される。一方、一部のボーン５２については、対応するラグドールパーツ５８が設定されておらず、親のボーン５２の位置及び向きに応じてボーン５２の位置及び向きが設定される。このように、本実施形態では、物理シミュレーション処理の対象となるラグドールパーツ５８の総数は、ボーン５２の総数よりも少なくなっている。よって、すべてのボーン５２について対応するラグドールパーツ５８が存在する場合と比較して、本実施形態では、Ｓ１０９に示す物理シミュレーション処理でのゲーム装置１０の計算負荷を低減することができることとなる。
【００７７】
また、例えば、Ｓ１１９に示す処理でモーションが変化した際に、データ記憶部４０に記憶されているデータが示す設定に従って、プレイヤオブジェクト２２の位置や向きの決定が行われるようにしてもよい。具体的には、例えば、遷移前のモーションにおける上述のＳ１１８に示す処理の結果と、遷移前のモーションにおける上述のＳ１１８に示す処理の結果と、を補間することによって得られる結果が、描画の対象となるプレイヤオブジェクト２２の配置が決定されるようにしてもよい。
【００７８】
本実施形態では、モーションが遷移した場合には、遷移条件データに関連付けられているデータが示す設定に応じた修正が、上述のＳ１０１〜Ｓ１２０に示す処理に加えられることとなる。例えば、数フレームにわたって、遷移前のモーションでの処理の結果と、遷移後のモーションでの処理の結果とを、遷移条件データに関連付けられているデータが示す設定に応じたブレンド比率で補間した処理結果が、最終的な処理結果として取り扱われる。また、本実施形態では、数フレームの間に、徐々に、遷移前のモーションでの処理の結果が占めるブレンド比率が低くなり、遷移後のモーションでの処理の結果が占めるブレンド比率が高くなるようになっている。
【００７９】
また、本実施形態では、前フレームまでモーション駆動状態であった仮想オブジェクトが、完全ラグドール状態に遷移するということが考えられる。この場合、本実施形態では、オブジェクト配置管理部４４は、モーション駆動状態での処理結果の速度パラメータの値を用いて、完全ラグドール状態での物理シミュレーション処理を行うこととなる。このとき、本実施形態では、モーションの遷移に対応付けられている上述の発動条件を満足する場合（例えば、速度パラメータの値の、仮想空間２０に設定された鉛直方向上向きの成分が所定値以上である場合）には、完全ラグドール状態になった際の物理シミュレーション処理後の速度パラメータの値に対して、さらに、予め、仮想空間２０に設定された鉛直方向上向き成分について、モーションの遷移に対応付けられている上述のダンピング係数の値（例えば、設定されている値は０から１までの間のいずれかの実数）を乗じることで、最終的な速度パラメータの値を決定する。こうすれば、最終的な速度パラメータの値であるベクトルの向きが、ダンピング係数の値が乗じられる前の速度パラメータの値であるベクトルの向きに対して鉛直方向下向きにずれることととなる。例えば、２つ前のフレームにおけるプレイヤの現在位置から１つ前のフレームにおけるプレイヤの現在位置に向かう向きに速度パラメータが表す速度ベクトルが設定されている場合に、その向きよりも鉛直方向下向きに速度パラメータが表す速度ベクトルが変更されることとなる。そのため、完全ラグドール状態に遷移した際に、リアリティがない事態が発生すること（例えば、プレイヤオブジェクト２２が上方に吹っ飛んでしまうこと）を防ぐことができることとなる。
【００８０】
ここで、上述のＳ１０３に示す処理における、発生したイベントの種類に応じた処理の一例について図１１を参照しながら説明する。ここでは、例えば、プレイヤオブジェクト２２が槍オブジェクト３０を所持するというイベントが発生したこととする。そして、図１１は、上述のイベントが発生した際の、衝突判定用剛体オブジェクト６２やプロキシオブジェクト６４などをプレイヤオブジェクト２２の上方から見た様子の一例を示す図である。
【００８１】
図１１に示すように、上述のイベントが発生した際には、オブジェクト配置管理部４４は、プロキシオブジェクト６４の大きさを、プレイヤオブジェクト２２と槍オブジェクト３０の両方を包含する形状になるよう大きくするとともに、槍オブジェクト３０に設定されていた衝突判定領域６６を消去する。そして、オブジェクト配置管理部４４は、大きくなったプロキシオブジェクト６４を覆う衝突判定領域６６を、プロキシオブジェクト６４と槍オブジェクト３０の両方に対応付けられる衝突判定領域６６として設定する。このようにして、プレイヤオブジェクト２２と槍オブジェクト３０の両方を包含する閉領域が、プロキシオブジェクト６４と槍オブジェクト３０の両方に対応付けられる衝突判定領域６６として設定されることとなる。また、本実施形態では、図１１に示すように、プロキシオブジェクト６４の形状の変化に伴い、変化後のプロキシオブジェクト６４を包含する形状となるよう衝突判定用剛体オブジェクト６２、及び、衝突判定用剛体オブジェクト６２を覆う衝突判定領域６６の形状も変化する。
【００８２】
そして、本実施形態では、プロキシオブジェクト６４を覆う衝突判定領域６６が、他の仮想オブジェクトの衝突判定領域６６と接触した（あるいは、重なった）際には、他の仮想オブジェクトと、プロキシオブジェクト６４と、が衝突したと判定される。また、衝突判定用剛体オブジェクト６２を覆う衝突判定領域６６が、他の仮想オブジェクトの衝突判定領域６６と接触した（あるいは、重なった）際には、他の仮想オブジェクトと、衝突判定用剛体オブジェクト６２と、が衝突したと判定される。なお、ここでは、プロキシオブジェクト６４や衝突判定用剛体オブジェクト６２の衝突判定領域６６が、他の仮想オブジェクトの衝突判定領域６６と接触した（あるいは、重なった）際に、プロキシオブジェクト６４や衝突判定用剛体オブジェクト６２が、他の仮想オブジェクトと衝突したと判定される代わりに、他の仮想オブジェクトと槍オブジェクト３０とが衝突したと判定されるようにしても、他の仮想オブジェクトとプレイヤオブジェクト２２とが衝突したと判定されるようにしてもよい。
【００８３】
このようにして、本実施形態では、プレイヤオブジェクト２２が槍オブジェクト３０を所持するというイベントが発生した時期以降については、プレイヤオブジェクト２２と槍オブジェクト３０との間での衝突判定処理が実行されないようにすることができる。
【００８４】
また、オブジェクト配置管理部４４は、図１１に示すように、プロキシオブジェクト６４を、その一部に扇形柱を含む形状となるようにしてもよい。オブジェクト配置管理部４４は、この扇形柱の断面の扇形の中心角θをプレイヤオブジェクト２２に設定されている角速度パラメータの値に基づいて決定する。具体的には、例えば、角速度パラメータの値に１フレームの時間間隔を乗じた値が扇形の中心角θの値として設定される。図１１の例では２つの扇形柱が示されており、それぞれの扇形柱の断面の扇形の中心は、プレイヤオブジェクト２２と槍オブジェクト３０位置関係に基づいて決定される位置（例えば、プレイヤオブジェクト２２の近傍）に設定されている。また、それぞれの扇形柱の断面の扇形について、扇形の中心と槍オブジェクト３０の先端までの線分と、その線分をプレイヤオブジェクト２２の回転方向後方だけ上述の回転角θだけ回転させた線分と、が扇形の半径となっている。
【００８５】
このようにして、例えば、槍オブジェクト３０のような細長い仮想オブジェクトを振り回すような動作が仮想空間２０内で行われるような場面でも、図１１に示すように、１フレームで移動する槍オブジェクト３０の軌跡上に壁オブジェクト２６等の仮想オブジェクトが存在するような場面でも、プロキシオブジェクト６４と壁オブジェクト２６とが衝突し、衝突判定用剛体オブジェクト６２と壁オブジェクト２６とが衝突したと判定することができることとなる。
【００８６】
なお、オブジェクト配置管理部４４は、プロキシオブジェクト６４を、仮想空間２０内をプレイヤオブジェクト２２及び槍オブジェクト３０が所定時間内に移動する長さ（例えば、１フレームにおいて移動する長さ）を奥行きとする、その一部に直方体を含むその一部に含む形状となるようにしてもよい。
【００８７】
また、オブジェクト配置管理部４４は、例えば、プレイヤオブジェクト２２が槍オブジェクト３０を所持するというイベントの発生以降、プロキシオブジェクト６４、及び、プロキシオブジェクト６４を覆う衝突判定領域６６の形状を徐々に大きくするようにしてもよい。
【００８８】
なお、本発明は上述の実施形態に限定されるものではない。
【００８９】
例えば、オブジェクト配置管理部４４は、モーションの遷移に対応付けられている上述の発動条件を満足する場合に、仮想空間２０に設定された鉛直方向上向き成分以外の速度成分についても、速度パラメータの値に、所定の値を乗じることで、最終的な速度パラメータの値を低減したり、角速度パラメータの値に所定の値を乗じることで、最終的な角速度パラメータの値を低減したりするようにしてもよい。
【００９０】
また、例えば、上述のＳ１１２に示す処理において、前フレームにおいて決定されたレイキャスト始点Ｒｓと、プロキシオブジェクト６４の代表点に対して所定の長さだけ前、又は、上にずらした位置に一致するレイキャスト終点のそれぞれと、をつなぐ２つの線分については、線分上に他の仮想オブジェクトが存在しているか否かの判定を行わないようにしてもよい。
【００９１】
また、例えば、衝突判定用剛体オブジェクト６２の大きさが、衝突していると判定される仮想オブジェクトの種別に応じて変わるようにしてもよい。例えば、衝突相手の仮想オブジェクトが吹き飛ばした方がよりよい仮想オブジェクトであればあるほど、衝突判定用剛体オブジェクト６２の大きさを大きくするようにしてもよい。
【００９２】
また、上述のＳ１１１に示す処理において、物理シミュレーション処理の実行後の５つのプロキシオブジェクト６４の位置のうち、特定方向の座標値（例えば、鉛直方向の座標値）が、基準位置Ｐｂの特定方向の座標値（例えば、鉛直方向の座標値）に最も近いプロキシオブジェクト６４を、上述の処理例におけるプロキシオブジェクト６４として決定してもよい。
【００９３】
また、本実施形態では、衝突した仮想オブジェクトそれぞれの速度パラメータの値を用いて、物理シミュレーション処理を実行しているが、衝突した仮想オブジェクトそれぞれの速度パラメータの値の代わりに、一方の仮想オブジェクトに対する他方の仮想オブジェクトの相対速度、などのような、２つの仮想オブジェクトの移動速度の関係に関する他の情報を用いて、物理シミュレーション処理を実行しても構わない。
【００９４】
また、本実施形態をゲーム装置１０以外の情報処理システム（例えば、シミュレーションシステムや画像処理システムなど）に応用してもよい。また、上記の具体的な数値や文字列や図面中の具体的な数値や文字列は例示であり、これらの数値や文字列には限定されない。
【符号の説明】
【００９５】
１０  ゲーム装置、１２  制御部、１４  記憶部、１６  操作部、１８  表示部、２０  仮想空間、２２  プレイヤオブジェクト、２４  床オブジェクト、２６  壁オブジェクト、２８  樽オブジェクト、３０  槍オブジェクト、３２  視点、４０  データ記憶部、４２  操作状態取得部、４４  オブジェクト配置管理部、４６  空間画像生成出力部、５０  スケルトンデータ、５２  ボーン、５２ａ  ルートボーン、５４  ジョイント、５６  ラグドールデータ、５８  ラグドールパーツ、５８ａ  ルートラグドールパーツ、６０  ジョイント、６０ａ  物理ジョイント、６０ｂ  アニメーションジョイント、６２  衝突判定用剛体オブジェクト、６４  プロキシオブジェクト、６６  衝突判定領域。
【図１】
0005784985.tif 000002
【図２】
0005784985.tif 000003
【図３】
0005784985.tif 000004
【図４】
0005784985.tif 000005
【図５】
0005784985.tif 000006
【図６Ａ】
0005784985.tif 000007
【図６Ｂ】
0005784985.tif 000008
【図７】
0005784985.tif 000009
【図８】
0005784985.tif 000010
【図９】
0005784985.tif 000011
【図１０】
0005784985.tif 000012
【図１１】
0005784985.tif 000013