(57)【要約】 【課題】仮想空間に配置されたオブジェクトの衝突と移動を簡易にシミュレートする技術を提供する。【解決手段】仮想空間には複数のオブジェクトが配置され、シミュレーション装置４００の記憶部４０１は、オブジェクトの位置、速度、モードを記憶し、衝突判定部４０２は、衝突判定モードのオブジェクト同士が衝突するか否かを、判定し、衝突更新部４０３は、衝突するオブジェクト同士のそれぞれの衝突後の速度を計算して計算結果で当該オブジェクトの速度を更新し、そのモードを通過モードに更新し、移動更新部４０４は、複数のオブジェクトのそれぞれの更新間隔時間後の位置および速度を計算して計算結果で当該オブジェクトの位置および速度を更新し、モード更新部４０５は、通過モードのオブジェクトについてモード復帰条件が満たされると、そのモードを衝突判定モードに更新する。【選択図】図４
2008040800.tif 000002
【特許請求の範囲】
【請求項１】
仮想空間に配置される複数のオブジェクトの位置および速度をシミュレートするシミュレーション装置であって、
当該複数のオブジェクトのそれぞれについて、当該オブジェクトの位置および速度と、当該オブジェクトが衝突判定モードと通過モードとのいずれであるかを示す情報と、を記憶する記憶部、
当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを、前記記憶された位置により判定する衝突判定部、
前記衝突すると判定されたオブジェクト同士のそれぞれの衝突後の速度を計算して、前記記憶部に記憶される当該オブジェクトの速度を当該衝突後の速度に更新し、当該オブジェクトのモードを通過モードに更新する衝突更新部、
当該複数のオブジェクトのそれぞれについて、前記記憶された位置および速度により所定の更新間隔時間後の位置および速度を計算して、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新する移動更新部、
当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、所定のモード復帰条件が満たされている場合、前記記憶部に記憶される当該オブジェクトのモードを衝突判定モードに更新するモード更新部
を備えることを特徴とするシミュレーション装置。
【請求項２】
請求項１に記載のシミュレーション装置であって、
前記移動更新部は、当該複数のオブジェクトのうち、
（ａ）モードが、衝突判定モードのオブジェクトのそれぞれについて、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新し、
（ｂ）モードが、通過モードであるオブジェクトのそれぞれについて、前記記憶部に記憶される位置と速度を維持する
ことを特徴とするシミュレーション装置。
【請求項３】
請求項１に記載のシミュレーション装置であって、
前記移動更新部は、当該複数のオブジェクトのうち、
（ａ）モードが、衝突判定モードのオブジェクトのそれぞれについて、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新し、
（ｂ）モードが、前回は衝突判定モードであり、今回は通過モードであるオブジェクトのそれぞれについて、次にモード復帰条件が満たされるまでの経過時間後の位置および速度を計算して、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該経過時間後の位置および速度に更新し、
（ｃ）モードが、前回も今回も通過モードであるオブジェクトのそれぞれについて、前記記憶部に記憶される位置と速度を維持する
ことを特徴とするシミュレーション装置。
【請求項４】
請求項１から３のいずれか１項に記載のシミュレーション装置であって、
前記モード更新部は、当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、当該オブジェクトのモードが、衝突判定モードから通過モードに移行してからの経過時間が、所定の通過維持時間に至ると、当該モード復帰条件が満たされるものとして、当該オブジェクトのモードを衝突判定モードに更新する
ことを特徴とするシミュレーション装置。
【請求項５】
請求項１から３のいずれか１項に記載のシミュレーション装置であって、
前記モード更新部は、当該複数のオブジェクトのうち、通過モードのオブジェクトのすべてについて、当該更新間隔時間の整数倍に等しいリフレッシュ時間おきに、当該モード復帰条件が満たされるものとして、当該通過モードのオブジェクトのそれぞれのモードを衝突判定モードに更新する
ことを特徴とするシミュレーション装置。
【請求項６】
請求項５に記載のシミュレーション装置であって、
当該リフレッシュ時間おきに、当該仮想空間に配置される複数のオブジェクトの画像を、前記記憶された複数のオブジェクトの位置により生成する画像生成部
をさらに備えることを特徴とするシミュレーション装置。
【請求項７】
請求項１から６のいずれか１項に記載のシミュレーション装置であって、
前記衝突判定部は、当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを判定するのにかえて、両方が衝突判定モードであるオブジェクト同士が衝突するか否かを判定する
ことを特徴とするシミュレーション装置。
【請求項８】
請求項１から７のいずれか１項に記載のシミュレーション装置であって、
前記衝突更新部は、前記衝突すると判定されたオブジェクト同士のそれぞれについて、当該オブジェクトが所定のモード維持条件を満たす場合、当該オブジェクトのモードを通過モードに更新するのにかえて、当該オブジェクトのモードを衝突判定モードに維持する
ことを特徴とするシミュレーション装置。
【請求項９】
仮想空間に配置される複数のオブジェクトの位置および速度をシミュレートするシミュレーション方法であって、当該複数のオブジェクトのそれぞれについて、当該オブジェクトの位置および速度と、当該オブジェクトが衝突判定モードと通過モードとのいずれであるかを示す情報と、を記憶する記憶部、衝突判定部、衝突更新部、移動更新部、モード更新部を備えるシミュレーション装置にて実行され、
前記衝突判定部が、当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを、前記記憶された位置により判定する衝突判定工程、
前記衝突更新部が、前記衝突すると判定されたオブジェクト同士のそれぞれの衝突後の速度を計算して、前記記憶部に記憶される当該オブジェクトの速度を当該衝突後の速度に更新し、当該オブジェクトのモードを通過モードに更新する衝突更新工程、
前記移動更新部が、当該複数のオブジェクトのそれぞれについて、前記記憶された位置および速度により所定の更新間隔時間後の位置および速度を計算して、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新する移動更新工程、
前記モード更新部が、当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、所定のモード復帰条件が満たされている場合、前記記憶部に記憶される当該オブジェクトのモードを衝突判定モードに更新するモード更新工程
を備えることを特徴とするシミュレーション方法。
【請求項１０】
仮想空間に配置される複数のオブジェクトの位置と速度をシミュレートさせるため、コンピュータを、
当該複数のオブジェクトのそれぞれについて、当該オブジェクトの位置および速度と、当該オブジェクトが衝突判定モードと通過モードとのいずれであるかを示す情報と、を記憶する記憶部、
当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを、前記記憶された位置により判定する衝突判定部、
前記衝突すると判定されたオブジェクト同士のそれぞれの衝突後の速度を計算して、前記記憶部に記憶される当該オブジェクトの速度を当該衝突後の速度に更新し、当該オブジェクトのモードを通過モードに更新する衝突更新部、
当該複数のオブジェクトのそれぞれについて、前記記憶された位置および速度により所定の更新間隔時間後の位置および速度を計算して、前記記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新する移動更新部、
当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、所定のモード復帰条件が満たされている場合、前記記憶部に記憶される当該オブジェクトのモードを衝突判定モードに更新するモード更新部
として機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想空間に配置されるオブジェクトの移動や衝突を簡易な計算でシミュレートするのに好適なシミュレーション装置、シミュレーション方法、ならびに、これらをコンピュータにて実現するプログラムに関する。
【背景技術】
【０００２】
従来から、コンピュータグラフィックスやシミュレーションの分野では、仮想空間に配置されるオブジェクトの位置や速度を、当該仮想空間内の重力や外力に基づいて更新したり、オブジェクト同士の衝突をシミュレートする技術が提案されている。
【０００３】
このようなオブジェクトの運動および衝突のシミュレーション技術については、たとえば以下の文献に開示されている。
【非特許文献１】Mark Deloura編、川西  裕幸監訳、狩野智英飜訳、Game Programming Gems、２.２  剛体の運動方程式の数値積分（Ｐ.１４６−１５５）、４.５  ３Ｄ衝突検出（Ｐ.３７６−３８７）、株式会社ボーンディジタル、２００１年７月２５日発行
【０００４】
このような技術においては、[非特許文献１]に開示されるように、現実世界の物理法則に基づく微分方程式を所定の時間の刻み幅（「ステップ時間」もしくは「更新間隔時間」と呼ぶことがある。）で数値積分する技術が用いられる。
【０００５】
また、衝突のシミュレーションでは、瞬間的に働く撃力という反発力を想定して、運動量保存則が成立するように、オブジェクトの速度を更新する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
オブジェクトの数が増加したときを考えると、数値積分の計算はオブジェクトの数に比例する計算量が必要となるが、あるオブジェクトと他のオブジェクトとの衝突判定についてはかなりの計算が必要になるとともに、衝突判定についてはオブジェクトの数の自乗に比例する計算量が必要となる。したがって、できるだけシミュレーションとしての自然さを維持したまま衝突判定の計算をできるだけ簡略化する技術が強く求められている。
【０００７】
本発明は、上記のような課題を解決するもので、仮想空間に配置されるオブジェクトの移動や衝突を簡易な計算でシミュレートするのに好適なシミュレーション装置、シミュレーション方法、ならびに、これらをコンピュータにて実現するプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
以上の目的を達成するため、本発明の原理にしたがって、下記の発明を開示する。
【０００９】
本発明の第１の観点に係るシミュレーション装置は、仮想空間に配置される複数のオブジェクトの位置および速度をシミュレートし、記憶部、衝突判定部、衝突更新部、移動更新部、モード更新部を備えるように構成する。
すなわち、当該複数のオブジェクトの衝突と運動とをシミュレートする。仮想空間としては、３次元空間を考えるのが典型的であるが、たとえばピンボールゲームやパチンコゲームを実現するような場合、すなわち、略２次元空間内でのオブジェクトの衝突と運動とをシミュレートする場合にも、本発明の原理を適用することができる。
【００１０】
ここで、記憶部は、当該複数のオブジェクトのそれぞれについて、当該オブジェクトの位置および速度と、当該オブジェクトが衝突判定モードと通過モードとのいずれであるかを示す情報と、を記憶する。
【００１１】
オブジェクトの位置および速度は、仮想空間の次元数に合わせて、３次元ベクトルもしくは２次元ベクトルとして記憶するのが典型的である。また、オブジェクトのモードは、衝突判定モードと通過モードとのいずれかであり、前者の場合は衝突判定の対象とするが、後者の場合は衝突判定の対象としない。このようなモードの分別によって、計算処理の低減化を図る点に、本発明の特徴の一つがある。
【００１２】
一方、衝突判定部は、当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを、記憶された位置により判定する。
【００１３】
上記のように、通過モードのオブジェクトは、衝突判定の対象とされない。したがって、通過モードのオブジェクトの割合が大きくなればなるほど、衝突判定および衝突に伴う処理に要する計算の総量は、少なくなる。
【００１４】
衝突するか否かを判定する対象となるオブジェクト同士の組み合わせについては、以下のような２種類の態様がありうる。
（１）いずれか少なくとも一方が衝突判定モードであるオブジェクト同士については、他方が通過モードであるか衝突判定モードあるか否かにかかわらず、衝突判定を行う。
（２）両方とも衝突判定モードであるオブジェクト同士についてのみ、衝突判定を行う。
【００１５】
前者の場合は、より正確な衝突のシミュレーションが可能であり、後者の場合は、計算量をより抑制したシミュレーションが可能となる。したがって、いずれの態様を採用するか、は、用途に応じて適宜選択が可能である。
【００１６】
さらに、衝突更新部は、衝突すると判定されたオブジェクト同士のそれぞれの衝突後の速度を計算して、記憶部に記憶される当該オブジェクトの速度を当該衝突後の速度に更新し、当該オブジェクトのモードを通過モードに更新する。
【００１７】
衝突のシミュレーションについては、両オブジェクトの位置から衝突の際に両オブジェクトが変形すると想定される衝突平面を考え、衝突後の速度のうち衝突平面に対する法線成分は反発係数を乗じることにより求め、衝突平面に沿う成分は摩擦係数に基づいて求めるのが典型的であるが、その他の各種の衝突にともなう反発のモデルを採用することができる。
【００１８】
また、衝突したオブジェクト同士は、通過モードに移行する。すなわち、本発明では、「あるオブジェクトについての衝突が短時間に連続して生ずるのは極めて稀であるため、これを無視する。」との仮定をするモデル化を行うのである。
【００１９】
そして、移動更新部は、当該複数のオブジェクトのそれぞれについて、記憶された位置および速度により所定の更新間隔時間後の位置および速度を計算して、記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新する。
【００２０】
上記のように、衝突のシミュレーションは、衝突判定モードのオブジェクトについてのみ行うが、移動のシミュレーションは、モードが衝突判定モードか通過モードかにかかわらず、すべてのオブジェクトについて行う。
【００２１】
典型的には、各オブジェクトに印加される仮想空間の重力、各種の抵抗力（風力、摩擦力等。）、オブジェクト同士がバネなどの弾性体で連結されている場合はその弾性力などの総和、すなわち、当該オブジェクトに対する外力の総和を、当該オブジェクトの質量で割ることで、当該オブジェクトの加速度を求めることができる。求められた加速度に更新間隔時間を乗じて現在のオブジェクトの速度に加算すれば、更新間隔時間後のオブジェクトの速度が得られる。また、現在のオブジェクトの速度と更新間隔時間後のオブジェクトの速度の平均に更新間隔時間を乗じて、現在の位置に加算すれば、更新間隔時間後のオブジェクトの位置が得られる。
【００２２】
一方、モード更新部は、当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、所定のモード復帰条件が満たされている場合、記憶部に記憶される当該オブジェクトのモードを衝突判定モードに更新する。
【００２３】
すなわち、通過モードに移行したオブジェクトは、モード復帰条件が満たされると、衝突判定モードに復帰する。本発明では、「あるオブジェクトについての衝突が短時間に連続して生ずるのは極めて稀であるが、ある程度の時間が経過すれば衝突が生じうる」との仮定をするモデル化を行うのである。なお、モード復帰条件の種々に態様については後述する。
【００２４】
本発明によれば、衝突判定の対象となるオブジェクトの数を抑制することによって、オブジェクトの衝突と移動のシミュレーションをできるだけ少ない計算量で行うことができるようになる。
【００２５】
また、本発明のシミュレーション装置において、移動更新部は、当該複数のオブジェクトのうち、
（ａ）モードが、衝突判定モードのオブジェクトのそれぞれについて、記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新し、
（ｂ）モードが、通過モードであるオブジェクトのそれぞれについて、記憶部に記憶される位置と速度を維持する
ように構成することができる。
【００２６】
上記の発明では、移動更新部は、全オブジェクトについて、更新間隔時間おきに位置と速度の更新を行っていたが、本発明では、通過モードのオブジェクトについては、更新間隔時間おきの位置と速度の更新は行わないこととする。
【００２７】
すなわち、本発明では、「衝突が生じてからモード復帰条件が満たされるまでの間」については、オブジェクトは事実上移動しない、とのモデル化を行う。
【００２８】
後述するように、オブジェクトが連続して通過モードとなっている時間の長さはある程度の短時間とするのが典型的であり、この「ある程度の短時間」は、「オブジェクトが互いに接触し合ってから、弾性変形して相手方のオブジェクトと押し合い、反発力によって逆向きに動き始め、相手方のオブジェクトから離れるまでに要する時間」に相当するものと考えることができる。
【００２９】
本発明によれば、上記発明の効果に加え、移動計算の対象となるオブジェクトの数を抑制することによって、オブジェクトの衝突と移動のシミュレーションをできるだけ少ない計算量で行うことができるようになる。
【００３０】
また、本発明のシミュレーション装置において、移動更新部は、当該複数のオブジェクトのうち、
（ａ）モードが、衝突判定モードのオブジェクトのそれぞれについて、記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新し、
（ｂ）モードが、前回は衝突判定モードであり、今回は通過モードであるオブジェクトのそれぞれについて、次にモード復帰条件が満たされるまでの経過時間後の位置および速度を計算して、記憶部に記憶される当該オブジェクトの位置および速度を、当該経過時間後の位置および速度に更新し、
（ｃ）モードが、前回も今回も通過モードであるオブジェクトのそれぞれについて、記憶部に記憶される位置と速度を維持する
ように構成することができる。
【００３１】
上記の発明では、移動更新部は、全オブジェクトについて、更新間隔時間おきに位置と速度の更新を行っていたが、本発明では、通過モードに移行したときに、「衝突が生じてからモード復帰条件が満たされるまでの経過時間」を求め、その間の移動をまとめて計算して、移動更新部におけるオブジェクトの位置と速度の計算の繰り返しの一部をスキップするものである。
【００３２】
すなわち、本発明では、「衝突が生じてからモード復帰条件が満たされるまでの間」については、オブジェクトに加えられる外力は事実上変化しない、とのモデル化を行う。後述するように、オブジェクトが連続して通過モードとなっている時間の長さはある程度の短時間とするのが典型的であるから、上記のモデル化が適当である場合も多いからである。
【００３３】
本発明によれば、上記の発明の効果に加え、移動計算の対象となるオブジェクトの繰り返しの数を抑制することによって、オブジェクトの衝突と移動のシミュレーションをできるだけ少ない計算量で行うことができるようになる。
【００３４】
また、本発明のシミュレーション装置において、モード更新部は、当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、当該オブジェクトのモードが、衝突判定モードから通過モードに移行してからの経過時間が、所定の通過維持時間に至ると、当該モード復帰条件が満たされるものとして、当該オブジェクトのモードを衝突判定モードに更新するように構成することができる。
【００３５】
すなわち、オブジェクトが一旦衝突すると、通過維持時間が経過するまでは、他のオブジェクトとの衝突は生じない、と仮定するモデル化を行うものである。衝突が生じてからの経過時間の計測は、各オブジェクトごとに行うのが典型的であるが、全オブジェクトについてまとめて行うこととしても良い。
【００３６】
本発明は上記発明の好適実施形態に係るもので、通過維持時間という衝突が連続して起きることが極めて珍しい時間を想定することによって、簡易かつ適切にオブジェクトの衝突と移動のシミュレーションを行うことができるようになる。
【００３７】
また、本発明のシミュレーション装置において、モード更新部は、当該複数のオブジェクトのうち、通過モードのオブジェクトのすべてについて、当該更新間隔時間の整数倍に等しいリフレッシュ時間おきに、当該モード復帰条件が満たされるものとして、当該通過モードのオブジェクトのそれぞれのモードを衝突判定モードに更新するように構成することができる。
【００３８】
たとえば、リフレッシュ時間として画面表示の時間間隔である垂直同期割り込みの周期を採用し、更新間隔時間として、当該周期の整数分の１の時間を採用した場合、垂直同期割り込みが生じるごとに全オブジェクトのモードを衝突判定モードに移行するものである。
【００３９】
本発明は、上記発明の好適実施形態に係るもので、全オブジェクトについて、リフレッシュ時間という更新間隔時間の整数倍の時間を想定し、リフレッシュ時間おきに全オブジェクトを衝突判定モードに設定することによって、簡易かつ適切にオブジェクトの衝突と移動のシミュレーションを行うことができるようになる。
【００４０】
また、本発明のシミュレーション装置は、画像生成部をさらに備え、画像生成部は、当該リフレッシュ時間おきに、当該仮想空間に配置される複数のオブジェクトの画像を、記憶された複数のオブジェクトの位置により生成するように構成することができる。
【００４１】
上記のように、リフレッシュ時間として垂直同期割り込みの周期を採用した場合には、リフレッシュ時間（もしくはその２倍〜３倍程度の整数倍）おきに仮想空間のオブジェクト配置から画像を生成し、これを順次表示することによって、オブジェクトの運動の様子をアニメーション表示するのである。
【００４２】
本発明によれば、仮想空間内でオブジェクトが衝突したり運動したりする様子のアニメーション画像を、簡易な計算で生成することができるようになる。
【００４３】
また、本発明のシミュレーション装置において、衝突更新部は、衝突すると判定されたオブジェクト同士のそれぞれについて、当該オブジェクトが所定のモード維持条件を満たす場合、当該オブジェクトのモードを通過モードに更新するのにかえて、当該オブジェクトのモードを衝突判定モードに維持するように構成することができる。
【００４４】
すなわち、モード維持条件を満たすオブジェクトについては、衝突した後も通過モードに移行せずに衝突判定モードのままとする手法である。モード維持条件は、そのオブジェクトの運動が激しい場合や、そのオブジェクトが注目されるべきオブジェクトである場合などに満たされるなどの態様を採用することができる。
【００４５】
本発明によれば、計算量を抑制しつつも、シミュレーションの精度に影響を与えやすいオブジェクトや、注目すべきオブジェクトについては、より正確なシミュレーションができるようになる。
【００４６】
本発明のその他の観点に係るシミュレーション方法は、仮想空間に配置される複数のオブジェクトの位置および速度をシミュレートし、当該複数のオブジェクトのそれぞれについて、当該オブジェクトの位置および速度と、当該オブジェクトが衝突判定モードと通過モードとのいずれであるかを示す情報と、を記憶する記憶部、衝突判定部、衝突更新部、移動更新部、モード更新部を備えるシミュレーション装置にて実行され、衝突判定工程、衝突更新工程、移動更新工程、モード更新工程を備え、以下のように構成する。
【００４７】
すなわち、衝突判定工程では、衝突判定部が、当該複数のオブジェクトのうち、少なくとも一方が衝突判定モードであるオブジェクト同士が衝突するか否かを、記憶された位置により判定する。
【００４８】
一方、衝突更新工程では、衝突更新部が、衝突すると判定されたオブジェクト同士のそれぞれの衝突後の速度を計算して、記憶部に記憶される当該オブジェクトの速度を当該衝突後の速度に更新し、当該オブジェクトのモードを通過モードに更新する。
【００４９】
さらに、移動更新工程では、移動更新部が、当該複数のオブジェクトのそれぞれについて、記憶された位置および速度により所定の更新間隔時間後の位置および速度を計算して、記憶部に記憶される当該オブジェクトの位置および速度を、当該更新間隔時間後の位置および速度に更新する。
【００５０】
そして、モード更新工程では、モード更新部が、当該複数のオブジェクトのうち、通過モードのオブジェクトのそれぞれについて、所定のモード復帰条件が満たされている場合、記憶部に記憶される当該オブジェクトのモードを衝突判定モードに更新する。
【００５１】
本発明のその他の観点に係るプログラムは、コンピュータを上記のシミュレーション装置として機能させ、コンピュータに上記のシミュレーション方法を実行させるように構成する。
【００５２】
また、本発明のプログラムは、コンパクトディスク、フレキシブルディスク、ハードディスク、光磁気ディスク、ディジタルビデオディスク、磁気テープ、半導体メモリ等のコンピュータ読取可能な情報記憶媒体に記録することができる。
【００５３】
上記プログラムは、プログラムが実行されるコンピュータとは独立して、コンピュータ通信網を介して配布・販売することができる。また、上記情報記憶媒体は、コンピュータとは独立して配布・販売することができる。
【発明の効果】
【００５４】
本発明によれば、仮想空間に配置されるオブジェクトの移動や衝突を簡易な計算でシミュレートするのに好適なシミュレーション装置、シミュレーション方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【発明を実施するための最良の形態】
【００５５】
以下に本発明の実施形態を説明する。以下では、理解を容易にするため、ゲーム用の情報処理装置を利用して本発明が実現される実施形態を説明するが、以下に説明する実施形態は説明のためのものであり、本願発明の範囲を制限するものではない。したがって、当業者であればこれらの各要素もしくは全要素をこれと均等なものに置換した実施形態を採用することが可能であるが、これらの実施形態も本発明の範囲に含まれる。
【実施例１】
【００５６】
図１は、プログラムを実行することにより、本発明のシミュレーション装置の機能を果たす典型的な情報処理装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【００５７】
情報処理装置１００は、ＣＰＵ（Central Processing Unit）１０１と、ＲＯＭ（Read Only Memory）  １０２と、ＲＡＭ（Random Access Memory）１０３と、インターフェイス１０４と、コントローラ１０５と、外部メモリ１０６と、画像処理部１０７と、ＤＶＤ−ＲＯＭ（Digital Versatile Disc ROM）ドライブ１０８と、ＮＩＣ（Network Interface Card）１０９と、音声処理部１１０と、マイク１１１と、を備える。
【００５８】
ゲーム用のプログラムおよびデータを記憶したＤＶＤ−ＲＯＭをＤＶＤ−ＲＯＭドライブ１０８に装着して、情報処理装置１００の電源を投入することにより、当該プログラムが実行され、本実施形態のシミュレーション装置が実現される。
【００５９】
ＣＰＵ  １０１は、情報処理装置１００全体の動作を制御し、各構成要素と接続され制御信号やデータをやりとりする。また、ＣＰＵ  １０１は、レジスタ（図示せず）という高速アクセスが可能な記憶域に対してＡＬＵ（Arithmetic Logic Unit）（図示せず）を用いて加減乗除等の算術演算や、論理和、論理積、論理否定等の論理演算、ビット和、ビット積、ビット反転、ビットシフト、ビット回転等のビット演算などを行うことができる。さらに、マルチメディア処理対応のための加減乗除等の飽和演算や、三角関数等、ベクトル演算などを高速に行えるように、ＣＰＵ  １０１自身が構成されているものや、コプロセッサを備えて実現するものがある。
【００６０】
ＲＯＭ  １０２には、電源投入直後に実行されるＩＰＬ（Initial Program Loader）が記録され、これが実行されることにより、ＤＶＤ−ＲＯＭに記録されたプログラムをＲＡＭ  １０３に読み出してＣＰＵ  １０１による実行が開始される。また、ＲＯＭ  １０２には、情報処理装置１００全体の動作制御に必要なオペレーティングシステムのプログラムや各種のデータが記録される。
【００６１】
ＲＡＭ  １０３は、データやプログラムを一時的に記憶するためのもので、ＤＶＤ−ＲＯＭから読み出したプログラムやデータ、その他ゲームの進行やチャット通信に必要なデータが保持される。また、ＣＰＵ  １０１は、ＲＡＭ  １０３に変数領域を設け、当該変数に格納された値に対して直接ＡＬＵを作用させて演算を行ったり、ＲＡＭ  １０３に格納された値を一旦レジスタに格納してからレジスタに対して演算を行い、演算結果をメモリに書き戻す、などの処理を行う。
【００６２】
インターフェイス１０４を介して接続されたコントローラ１０５は、ユーザがゲーム実行の際に行う操作入力を受け付ける。
【００６３】
インターフェイス１０４を介して着脱自在に接続された外部メモリ１０６には、ゲーム等のプレイ状況（過去の成績等）を示すデータ、ゲームの進行状態を示すデータ、ネットワーク対戦の場合のチャット通信のログ（記録）のデータなどが書き換え可能に記憶される。ユーザは、コントローラ１０５を介して指示入力を行うことにより、これらのデータを適宜外部メモリ１０６に記録することができる。
【００６４】
ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭには、ゲームを実現するためのプログラムとゲームに付随する画像データや音声データが記録される。ＣＰＵ  １０１の制御によって、ＤＶＤ−ＲＯＭドライブ１０８は、これに装着されたＤＶＤ−ＲＯＭに対する読み出し処理を行って、必要なプログラムやデータを読み出し、これらはＲＡＭ  １０３等に一時的に記憶される。
【００６５】
画像処理部１０７は、ＤＶＤ−ＲＯＭから読み出されたデータをＣＰＵ  １０１や画像処理部１０７が備える画像演算プロセッサ（図示せず）によって加工処理した後、これを画像処理部１０７が備えるフレームメモリ（図示せず）に記録する。フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部１０７に接続されるモニタ（図示せず）へ出力される。これにより、各種の画像表示が可能となる。
【００６６】
画像演算プロセッサは、２次元の画像の重ね合わせ演算やαブレンディング等の透過演算、各種の飽和演算を高速に実行できる。
【００６７】
また、仮想３次元空間に配置され、各種のテクスチャ情報が付加されたポリゴン情報を、Ｚバッファ法によりレンダリングして、所定の視点位置から仮想３次元空間に配置されたポリゴンを所定の視線の方向へ俯瞰したレンダリング画像を得る演算の高速実行も可能である。
【００６８】
さらに、ＣＰＵ  １０１と画像演算プロセッサが協調動作することにより、文字の形状を定義するフォント情報にしたがって、文字列を２次元画像としてフレームメモリへ描画したり、各ポリゴン表面へ描画することが可能である。
【００６９】
ＮＩＣ  １０９は、情報処理装置１００をインターネット等のコンピュータ通信網（図示せず）に接続するためのものであり、ＬＡＮ（Local Area Network）を構成する際に用いられる１０ＢＡＳＥ−Ｔ／１００ＢＡＳＥ−Ｔ規格にしたがうものや、電話回線を用いてインターネットに接続するためのアナログモデム、ＩＳＤＮ（Integrated Services Digital Network）モデム、ＡＤＳＬ（Asymmetric Digital Subscriber Line）モデム、ケーブルテレビジョン回線を用いてインターネットに接続するためのケーブルモデム等と、これらとＣＰＵ  １０１との仲立ちを行うインターフェース（図示せず）により構成される。
【００７０】
音声処理部１１０は、ＤＶＤ−ＲＯＭから読み出した音声データをアナログ音声信号に変換し、これに接続されたスピーカ（図示せず）から出力させる。また、ＣＰＵ  １０１の制御の下、ゲームの進行の中で発生させるべき効果音や楽曲データを生成し、これに対応した音声をスピーカから出力させる。
【００７１】
音声処理部１１０では、ＤＶＤ−ＲＯＭに記録された音声データがＭＩＤＩデータである場合には、これが有する音源データを参照して、ＭＩＤＩデータをＰＣＭデータに変換する。また、ADPCM形式やOgg Vorbis形式等の圧縮済音声データである場合には、これを展開してＰＣＭデータに変換する。ＰＣＭデータは、そのサンプリング周波数に応じたタイミングでＤ／Ａ（Digital/Analog）変換を行って、スピーカに出力することにより、音声出力が可能となる。
【００７２】
さらに、情報処理装置１００には、インターフェイス１０４を介してマイク１１１を接続することができる。この場合、マイク１１１からのアナログ信号に対しては、適当なサンプリング周波数でＡ／Ｄ変換を行い、ＰＣＭ形式のディジタル信号として、音声処理部１１０でのミキシング等の処理ができるようにする。
【００７３】
このほか、情報処理装置１００は、ハードディスク等の大容量外部記憶装置を用いて、ＲＯＭ  １０２、ＲＡＭ  １０３、外部メモリ１０６、ＤＶＤ−ＲＯＭドライブ１０８に装着されるＤＶＤ−ＲＯＭ等と同じ機能を果たすように構成してもよい。
【００７４】
以上で説明した情報処理装置１００は、いわゆる「コンシューマ向けテレビゲーム装置」に相当するものであるが、仮想空間を表示するような画像処理を行うものであれば本発明を実現することができる。したがって、携帯電話、携帯ゲーム機器、カラオケ装置、一般的なビジネス用コンピュータなど、種々の計算機上で本発明を実現することが可能である。
【００７５】
たとえば、一般的なコンピュータは、上記情報処理装置１００と同様に、ＣＰＵ、ＲＡＭ、ＲＯＭ、ＤＶＤ−ＲＯＭドライブ、および、ＮＩＣを備え、情報処理装置１００よりも簡易な機能を備えた画像処理部を備え、外部記憶装置としてハードディスクを有する他、フレキシブルディスク、光磁気ディスク、磁気テープ等が利用できるようになっている。また、コントローラ１０５ではなく、キーボードやマウスなどを入力装置として利用する。
【００７６】
（衝突のモデル）
以下では、本実施形態に係るシミュレーション装置にて想定するオブジェクト同士の衝突のモデルの種々の態様について説明する。本衝突モデルには、物理現象のシミュレーションをできるだけ忠実に行いたい場合のほか、計算を簡易に済ませるために尤もらしい近似を行う場合など、用途に合わせて種々適用することができる。
【００７７】
図２は、衝突するオブジェクト同士の位置関係を示す説明図である。以下、本図を参照して説明する。
【００７８】
本図に示すように、仮想空間２０１内に２つの球形のオブジェクトi ２１１、オブジェクトj ２３１が配置されており、原点２０３からオブジェクトi ２１１、オブジェクトj ２３１への位置ベクトル２１３、２３３を、それぞれr[i]，r[j]とする。また、オブジェクトi ２１１、オブジェクトj ２３１の半径は、それぞれ、R[i]，R[j]である。
【００７９】
したがって、
|r[i] - r[j]| ≦ R[i] + R[j]
が成立すると、オブジェクトi ２１１、オブジェクトj ２３１は現在衝突中である、ということになる。ここで、|p|はベクトルpの長さを意味する。
【００８０】
本図に示すように、オブジェクトi ２１１、オブジェクトj ２３１の速度ベクトル２１５、２３５を、それぞれv[i]，v[j]とする。オブジェクトi ２１１に対するオブジェクトj ２３１の相対速度ベクトル２５１は、
v[j] - v[i]
であり、オブジェクトi ２１１に対するオブジェクトj ２３１の相対位置ベクトル２５２は、
r[j] - r[i]
であるが、相対速度ベクトル２５１と相対位置ベクトル２５２のなす角２５３（θ[j,i]）が０度〜９０度であれば、両者は離れつつあり、９０度〜１８０度であれば、両者は近付きつつあることになる。
【００８１】
ここで、ベクトルp，qの内積をp・qと書くとすると、
(v[j] - v[i])・(r[j] - r[i]) = |v[j] - v[i]| |r[j] - r[i]| cosθ[j,i]
であるから、
(v[j] - v[i])・(r[j] - r[i])<0  …  衝突が始まりつつある。
(v[j] - v[i])・(r[j] - r[i])=0  …  現在衝突中。
(v[j] - v[i])・(r[j] - r[i])>0  …  衝突が終わりつつある。
のように考えることができる。
【００８２】
ここで、相対位置ベクトル２５２
r[j] - r[i]
と同じ向きの方向ベクトル２５４を
z[j,i] = (r[j] - r[i])/|r[j] - r[i]|
と書くこととする。
【００８３】
さて、本図は、オブジェクトi ２１１に対するオブジェクトj ２３１の相対位置ベクトル２５２
r[j] - r[i]
や、その方向ベクトル２５４
z[j,i]
に垂直な方向から、仮想空間２０１を見た様子を示している。
【００８４】
ここで、オブジェクトi ２１１、オブジェクトj ２３１の衝突が生じている仮想的な衝突平面２６１を考えることができる。本モデルでは、衝突平面２６１は、その法線ベクトルが方向ベクトル２５４に等しく、オブジェクトi ２１１、オブジェクトj ２３１の位置をその半径の比で内分する内分点２６２を通過すると考える。
【００８５】
そして、この方向ベクトル２５４（z[j,i]）に直交する２つの単位方向ベクトル３０１、３０２（x[j,i]，y[j,i]）を考える。衝突平面２６１は、２つの単位方向ベクトル３０１、３０２（x[j,i]，y[j,i]）のいずれに対しても平行である。
【００８６】
まず、衝突平面２６１に垂直な方向の方向ベクトル２５４に直交する２つの単位方向ベクトル３０１、３０２と、（x[j,i]，y[j,i]）方向ベクトル２５４（z[j,i]）と、は、衝突平面２６１に固定された座標系における座標軸の方向をあらわす方向ベクトルである。なお、方向ベクトル３０１、３０２（x[j,i]，y[j,i]）が平面を張り、その平面が衝突平面２６１に平行であれば、その方向は任意である。典型的には、方向ベクトル３０１、３０２（x[j,i]，y[j,i]）も互いに直交する。
【００８７】
図３は、各ベクトルの位置関係をさらに詳細に示す説明図である。以下、本図を参照して説明する。本図は、方向ベクトル３０２（y[j,i]）に平行な視点・視線から当該仮想空間２０１内のベクトルを見たものである。したがって、方向ベクトル３０２（y[j,i]）は点になるため、図示を省略している。また、衝突平面２６１は、直線で描かれることになる。
【００８８】
オブジェクトi ２１１、オブジェクトj ２３１の衝突前の速度ベクトル２１５、２３５（v[i]，v[j]）は、これらのベクトルx[j,i]，y[j,i]，z[j,i]を用いて、以下のように各成分に分解できる。
v[i] = (v[i]・x[j,i])x[j,i] + (v[i]・y[j,i])y[j,i] + (v[i]・z[j,i])z[j,i] = p x[j,i] + q y[j,i] + r z[j,i]；
v[j] = (v[j]・x[j,i])x[j,i] + (v[j]・y[j,i])y[j,i] + (v[j]・z[j,i])z[j,i] = P x[j,i] + Q y[j,i] + R z[j,i]
【００８９】
ここで、オブジェクトi ２１１、オブジェクトj ２３１の衝突後の速度ベクトル２１５'、２３１'（v'[i]，v'[j]）を各成分に分解して以下のように表す。
v'[i] = p' x[j,i] + q' y[j,i] + r' z[j,i]；
v'[j] = P' x[j,i] + Q' y[j,i] + R' z[j,i]
【００９０】
ここで、p，q，r，P，Q，R，p'，q'，r'，P'，Q'，R'は、いずれもスカラー量である。
【００９１】
本モデルでは、オブジェクトi ２１１、オブジェクトj ２３１の間の衝突反発係数をe[j,i]、衝突摩擦係数をμ[j,i]とおく。衝突反発係数は、衝突平面２６１に垂直な速度成分に係る量であり、衝突摩擦係数は、衝突平面２６１に平行な速度成分に係る量である。これらの２つの係数の値は、いずれも０以上１以下である。
【００９２】
以下では、誤解の生じない限り、e[j,i]をeと書き、μ[j,i]をμと書くこととする。衝突摩擦係数について、
P' - p' = μ(P - p)；
Q' - q' = μ(Q - q)
が成立し、衝突反発係数について、
R' - r' = -e(R - r)
が成立するものと想定する。
【００９３】
e = e[j,i]は、１であれば衝突しても完全弾性反発し、０であれば、反発せず一体化（接着・密着・合体）してしまうことを意味する。
【００９４】
μ = μ[j,i]は、０であれば摩擦力によって両者が一体化（接着・密着・合体）してしまい、１であれば摩擦力がまったく生じないことを意味する。
【００９５】
本モデルにおいて、オブジェクトi ２１１、オブジェクトj ２３１のそれぞれの質量w[i]，w[j]（以下、理解を容易にするため、誤解の生じない限り、w[i]をmと書き、w[j]をMと書くものとする。）としたとき、現実世界と同様に運動量保存則が成立すると考えると、
mp + MP = mp' + MP'；
mq + MQ = mq' + MQ'；
mr + MR = mr' + MR'
が成立する。
【００９６】
これらの方程式を解くことによって、p'，q'，r'，P'，Q'，R'を求めることができる。すなわち、
p' = (m+μM)p/(m+M) + (1-μ)MP/(m+M)；
q' = (m+μM)q/(m+M) + (1-μ)MQ/(m+M)；
r' = (m-eM)r/(m+M) + (1+e)MR/(m+M)；
P' = (M+μm)P/(m+M) + (1-μ)mp/(m+M)；
Q' = (M+μm)Q/(m+M) + (1-μ)mq/(m+M)；
R' = (M-em)R/(m+M) + (1+e)mr/(m+M)
である。
【００９７】
これにより、衝突後のオブジェクトi ２１１、オブジェクトj ２３１の速度ベクトル２１５'，２３５'（v'[i]，v'[j]）を定めることができる。
【００９８】
このように、上記のモデルでは、２つのオブジェクトi ２１１、オブジェクトj ２３１を球形であると仮定し、衝突平面２６１の位置および向き（姿勢）をその位置関係から求め、衝突平面２６１を介して両者が衝突・反発し合うと仮定し、衝突反発係数と衝突摩擦係数を考慮するとともに、運動量保存則が成立するように物理現象をモデル化している。
【００９９】
たとえばオブジェクトの形状が球形でない場合は、重心同士の位置関係とオブジェクトの大まかな大きさから、当該オブジェクトを「球形」で近似して、このモデルを適用することができる。また、衝突平面２６１の位置および向きを、その他の手法によって定めても良い。
【０１００】
このほか、オブジェクト同士の衝突のシミュレーションを適用する用途によっては、さらに計算の簡略化を図ることができる。たとえば、宇宙空間を舞台にしたシューティングゲームで小惑星帯を背景とするときに、小惑星同士の衝突をシミュレーションしたいときなどは、必ずしも現実の物理法則に則ったシミュレーションが必要なわけではなく、ある程度尤もらしい近似が得られれば十分である。
【０１０１】
このような場合には、以下のような近似解法を採用しても良い。まず、x[j,i]，y[j,i]方向については、衝突に際して摩擦は生じないこととするのが最も単純である。すなわち、
p' = p，q' = q，P' = p，Q' = Q
とする。なお、このモデル化は、上記のモデルの単純な場合（μ[j,i] = 1）で、運動量保存則も維持される。
【０１０２】
一方、z[j,i]方向については、反発の計算を簡略化することが考えられる。すなわち、
r' = -r，R' = -R
あるいは、
r' = R，R' = r
とする。これらのモデルでは、必ずしも運動量保存則が成立しないが、用途によっては、このような近似で十分な場合がある。
【０１０３】
このほか、各オブジェクトの質量w[i]，w[j]や衝突摩擦係数μ[j,i]、衝突反発係数e[j,i]が一定の定数であるとする等の手法もある。
【０１０４】
また、上記の手法においてp，q，r，P，Q，Rを求めるには、グローバル座標系から方向ベクトルz[j,i]を座標軸の一つとするローカル座標系への座標変換が必要となる。このような座標変換の処理を簡易な計算で近似する手法もありうる。
【０１０５】
すなわち、グローバル座標系における方向ベクトル２５４（z[j,i]）の成分のうち、絶対値が最も大きい成分の軸を、衝突平面２６１の法線方向とするという手法である。グローバル座標系の軸の方向は、３×２の６種類ありうるので、その中からいずれかを、方向ベクトル２５４（z[j,i]）の方向として近似する。そして、衝突平面２６１に平行な方向の軸は、グローバル座標系における残りの２つの軸に合わせる。
【０１０６】
本手法では、グローバル座標系におけるオブジェクトi ２１１、オブジェクトj ２３１等の位置ベクトル２１３、２３３や速度ベクトル２１５、２３５に対する座標変換は、各成分の符号を反転させるか否か、という計算のみで行うことができる。
【０１０７】
このように、衝突のシミュレーションには種々の計算を要するため、これを簡易化するために、以下に説明する「間引き」を行う。「間引き」では、一旦衝突が生じたら、そのオブジェクトについては、それに続く所定の時間（定数の場合もあるし、変数の場合もある。）だけ、衝突判定を行わないこととする。以下詳細に説明する。
【０１０８】
（シミュレーション装置）
図４は、本実施形態に係るシミュレーション装置の概要構成を示す模式図である。以下、本図を参照して説明する。
【０１０９】
本実施形態に係るシミュレーション装置４００は、記憶部４０１、衝突判定部４０２、衝突更新部４０３、移動更新部４０４、モード更新部４０５、画像生成部４０６を備え、情報処理装置１００上にてプログラムを実行することによって実現される。
【０１１０】
記憶部４０１には、M個のオブジェクトのそれぞれの情報が、配列として記憶される。すなわち、以下のような情報である。
位置ベクトルr[0]，r[1]，…，r[M-1]；
速度ベクトルv[0]，v[1]，…，v[M-1]；
質量w[0]，w[1]，…，w[M-1]；
大きさ（半径）R[0]，R[1]，…，R[M-1]；
モードc[0]，c[1]，…，c[M-1]
【０１１１】
ここで、モードc[0]，c[1]，c[M-1]のそれぞれには、当該オブジェクトの現在のモードが、「衝突判定モード」と「通過モード」のいずれであるかの情報が記録される。
【０１１２】
このほか、仮想空間２０１内において各オブジェクトに印加される外力として、たとえば、重力、摩擦力、バネ等の弾性体で連結されている場合の弾性力、ロケットエンジンやジェットエンジンなどの推進力、粘性力などを想定することも可能である。
【０１１３】
本実施形態では、当該オブジェクトに印加される外力ベクトルの総和もまた、記憶部４０１の配列に記憶することとする。すなわち、以下のような情報である。
外力ベクトルf[0]，f[1]，…，f[M-1]
【０１１４】
本実施形態では、現在の仮想空間２０１の様子を表す画像を生成する周期、すなわちリフレッシュ時間Tは、垂直同期割り込みの整数倍とする。たとえば、垂直同期割り込み周期が１／６０秒であるとき、T = 1/60 × 1 = 1/60秒、あるいは、T = 1/60 × 2 = 1/30秒とする、等である。
【０１１５】
そして、リフレッシュ時間TをD個（Ｄは２以上の整数）に分割して、Δt = T/Dをシミュレーションにおけるステップ時間（更新時間間隔）とする。そして、現在のステップが、周期Tにおける何回目のステップに相当するか、を表すカウンタdと、最後に画像を生成した時刻tと、を記憶するための領域も用意する。時刻tの単位は、発生した垂直同期割り込みの回数を表すカウンタの値とするのが典型的であるが、その他の種々の単位を採用しても良い。
【０１１６】
したがって、ＲＡＭ  １０３は、記憶部４０１として機能する。
【０１１７】
図５は、本シミュレーション装置４００にて実行されるシミュレーション処理の制御の流れを示すフローチャートである。以下、本図を参照して説明する。
【０１１８】
本処理が開始されると、ＣＰＵ  １０１は、記憶部４０１の各領域の初期化を行う（ステップＳ５００）。初期化を行うための初期化データは、ＤＶＤ−ＲＯＭドライブ１０８に装着されたＤＶＤ−ＲＯＭから読み出したり、乱数によって生成する等の手法を採用することができる。
【０１１９】
オブジェクトのモードについてi = 0，1，…，M-1のそれぞれについて、
c[i]←衝突判定モード
と初期化するのが典型的である。ここで、「←」は代入を意味する。すなわち、本実施形態では、処理の開始時については、全オブジェクトについて、衝突判定を行うものとする。ただし、c[i]についての初期化処理は、後述するステップＳ５０２においても行われるので、省略しても良い。
【０１２０】
また、
d←0；
t←現在時刻
とする。本実施形態では、後述するように、dが０である場合は画像生成を行うこととしている。
【０１２１】
次に、ＣＰＵ  １０１は、d = 0であるか否かを判定し（ステップＳ５０１）、d = 0である場合（ステップＳ５０１；Ｙｅｓ）、i = 0，1，…，M-1のそれぞれについて、
c[i]←衝突判定モード
と更新する（ステップＳ５０２）。
【０１２２】
すなわち、本実施形態では、d = 0のときに、モード復帰条件が満たされ、全オブジェクトを衝突判定モードに移行する。したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３と共働して、モード更新部４０５として機能する。
【０１２３】
そして、時刻がt + Tになるまで待機する（ステップＳ５０３）。この待機の間は、他の各種の計算処理をコルーチン的に実行することも可能である。このほか、ユーザによるコントローラ１０５の操作に基づいて外力ベクトルf[0]，f[1]，…，f[M-1]を計算、更新したりする等の処理を行うことも可能である。
【０１２４】
時刻tから時刻t + Tまでの間には、リフレッシュ時間Tを垂直同期割り込み周期で割った回数だけ、垂直同期割り込みが発生する。
【０１２５】
そして、時刻tは、垂直同期割り込みが生じて画像生成を行った時刻を意味するから、時刻がt + Tになるまで待機する、ということもまた、画像生成のタイミングの直近の垂直同期割り込みが生じるまで待機することに相当する。
【０１２６】
この待機が終了し、垂直同期割り込みが生じた後は、ＣＰＵ  １０１は、t←t + Tを実行して、画像生成を行った最終時刻を更新する（ステップＳ５０４）。
【０１２７】
さらに、画像生成部４０６は、ＲＡＭ  １０３に記憶されるオブジェクトの情報を参照して、仮想空間２０１に配置されるオブジェクトの様子を表示する画像をフレームメモリ内に生成する（ステップＳ５０５）。
【０１２８】
このような画像生成には、各種の３次元コンピュータグラフィックスの手法を適用することができる。典型的には、仮想空間の中に視点と視線を設定し、視線とオブジェクトを結ぶ線分が視線と直交する投射面と交差する位置を、当該オブジェクトが画像内に描画される位置とする透視投影を行うが、平行投影や曲線・曲面を用いた投影（たとえば魚眼レンズで見た様子を表示する場合等）などのグラフィックス技術を採用することもできる。
【０１２９】
フレームメモリに記録された画像情報は、所定の同期タイミングでビデオ信号に変換され画像処理部１０７に接続されるモニタ（図示せず）へ出力される。このようにして、リフレッシュ時間おきに表示される画像を更新することにより、仮想空間２０１におけるオブジェクトの運動の様子をアニメーション表示するのである。
【０１３０】
したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３や画像処理部１０７と共同して、画像生成部４０６として機能する。
【０１３１】
さて、画像が生成された（ステップＳ５０５）後、もしくは、d≠0である場合（ステップＳ５０１；Ｎｏ）、ＣＰＵ  １０１は、衝突判定にともなう処理を開始する。この際、ＣＰＵ  １０１は、ＲＡＭ  １０３内もしくはＣＰＵ  １０１のレジスタにより表現される変数iおよび変数jを用いる。
【０１３２】
i = 0，1，…，M-1のそれぞれについて、以下の処理を繰り返す（ステップＳ５０６〜）。まず、c[i]=衝突判定モードであるか否かを判定し（ステップＳ５０７）、そうでなければ（ステップＳ５０７；Ｎｏ）、iについての次の繰り返しステップに移行する。
【０１３３】
一方、c[i]=衝突判定モードである場合（ステップＳ５０７；Ｙｅｓ）、j = i+1，i+2，…，M-1のそれぞれについて、以下の処理を繰り返す（ステップＳ５０８〜）。まず、c[j]=衝突判定モードであるか否かを判定し（ステップＳ５０９）、そうでなければ（ステップＳ５０９；Ｎｏ）、jについての次の繰り返しステップに移行する。
【０１３４】
一方、c[j]=衝突判定モードである場合（ステップＳ５０９；Ｙｅｓ）、ＲＡＭ  １０３内に記憶されているオブジェクトの情報
r[i]，r[j]，R[i]，R[j]
から、i番目のオブジェクトとj番目のオブジェクトが衝突しているか否かを判定する（ステップＳ５１０）。判定の基準としては、上述の手法を採用することができる。したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３と共同して、衝突判定部４０２として機能する。
【０１３５】
上記のように、オブジェクトのモードは、衝突判定モードと通過モードとのいずれかであり、前者の場合は衝突判定の対象とするが、後者の場合は衝突判定の対象としない。このようなモードの分別によって、計算処理の低減化を図るのである。
【０１３６】
衝突していない場合（ステップＳ５１０；Ｎｏ）、jについての次の繰り返しステップに移行する。
【０１３７】
一方、i番目のオブジェクトとj番目のオブジェクトが衝突している場合（ステップＳ５１０；Ｙｅｓ）、上記の手法に基づいて、それぞれのオブジェクトの衝突後の速度ベクトルv'[i]，v'[j]を計算する（ステップＳ５１１）。
【０１３８】
上記のように、通過モードのオブジェクトは、衝突判定の対象とされない。したがって、通過モードのオブジェクトの割合が大きくなればなるほど、衝突判定および衝突に伴う処理に要する計算の総量は、少なくなる。
【０１３９】
そして、
v[i]←v'[i]；
v[j]←v'[j]；
c[i]←通過モード；
c[j]←通過モード
を実行し、オブジェクトの速度を更新するとともに、モードを通過モードに変更する（ステップＳ５１２）。したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３と共同して、衝突更新部４０３として機能する。
【０１４０】
このように、本実施形態では、モードを変更することによって、「あるオブジェクトについての衝突が短時間に（次の画像生成時までに）連続して生ずるのは極めて稀であるため、これを無視する。」との仮定をするモデル化を行うのである。
【０１４１】
さらに、両オブジェクトの現在位置r[i]，r[j]、速度ベクトルv[i]，v[j]、外力ベクトルf[i]，f[j]、質量w[i]，w[j]の情報に基づいて、経過時間δを
δ = (D-d)T/D = (D-d)Δt
として当該経過時間δだけ経過した後の、両オブジェクトの位置r'[i]，r'[j]および速度v'[i]，v'[j]を計算し（ステップＳ５１３）、
r[i]←r'[i]；
r[j]←r'[j]；
v[i]←v'[i]；
v[j]←v'[j]
を実行して、オブジェクトの位置および速度を、次に画像を生成するタイミング時点の値に更新する（ステップＳ５１４）。したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３と共同して、移動更新部４０４として機能する。
【０１４２】
一般に、現在のオブジェクトの位置ベクトルr、速度ベクトルv、外力ベクトルf、オブジェクトの質量wのとき、これから経過時間δだけ経過した後の速度ベクトルv'および位置ベクトルr'は、以下のように（近似）計算することができる。
v' = v + (f/w)δ；
r' = r + ((v+v')/2)δ
ステップＳ５１３では、この（近似）計算を採用する。また、後述する位置更新の処理では、δの設定をΔtに変更して、この（近似）計算を採用する。
【０１４３】
衝突したオブジェクトの位置と速度を更新（ステップＳ５１４）したら、ステップＳ５１５に進む。
【０１４４】
さて、jについての繰り返し（〜ステップＳ５１５）と、iについての繰り返し（〜ステップＳ５１６）が終了したら、ＣＰＵ  １０１は、位置の更新を行っていないオブジェクト、すなわち、衝突判定モードのままのオブジェクトについて、位置の更新を行う。すなわち、i = 0，1，…，M-1のそれぞれについて、以下の処理を繰り返す（ステップＳ５１７〜）。
【０１４５】
まず、c[i]=衝突判定モードであるか否かを判定し（ステップＳ５１８）、そうでなければ（ステップＳ５１８；Ｎｏ）、iについての次の繰り返しステップに移行する。
【０１４６】
一方、c[i]=衝突判定モードである場合（ステップＳ５１８；Ｙｅｓ）、
δ = Δt
として、当該経過時間δだけ経過した後の、オブジェクトの位置r'[i]と速度v'[i]を計算し（ステップＳ５１９）、
r[i]←r'[i]；
v[i]←v'[i]
を実行して、当該オブジェクトの位置および速度を、更新時間間隔後の時点の値に更新して（ステップＳ５２０）、iについての繰り返し処理を続ける（〜ステップＳ５２１）。したがって、ＣＰＵ  １０１は、ＲＡＭ  １０３と共同して、移動更新部４０４として機能する。
【０１４７】
iについての繰り返し処理が終了したら、ＣＰＵ  １０１は、
d←(d+1)%D
を実行して（ステップＳ５２２）、カウンタを更新する。ここで、a%bは、aをbで割った余りを意味する。そして、ステップＳ５０１に戻る。
【０１４８】
このように、本実施形態によれば、衝突判定の対象となるオブジェクトの数を抑制することによって、オブジェクトの衝突と移動のシミュレーションをできるだけ少ない計算量で行うことができるようになる。
【実施例２】
【０１４９】
上記実施形態では、オブジェクトのモードが衝突判定モードから通過モードに移行した場合に、ステップＳ５１３、Ｓ５１４において経過時間δを
δ = (D-d)T/D = (D-d)Δt
として、当該経過時間δだけ経過した後、すなわち、次に画像を生成するタイミング（次にモード復帰条件が満たされるタイミング）での両オブジェクトの位置r'[i]，r'[j]および速度v'[i]，v'[j]を計算することとしていた。
【０１５０】
すなわち、「衝突が生じてからモード復帰条件が満たされるまでの間」については、オブジェクトに加えられる外力は事実上変化しない、とのモデル化を行っていた。
【０１５１】
一方、ステップＳ５１９、Ｓ５２０において、
δ = Δt
として、当該経過時間δだけ経過した後の、オブジェクトの位置r'[i]と速度v'[i]を計算するのは、衝突判定モードのオブジェクトのみであり、通過モードについては、「すでに計算済である」として、ステップＳ５１８において事前に判断を行い、計算をスキップしていた。
【０１５２】
しかしながら、オブジェクトの位置や速度の更新については、画像処理部１０７にベクトルプロセッサなど、オブジェクトごとの並列計算機能がある場合には、このような条件分岐を採用するのではなく、単純に位置や速度の計算・更新を行った方が良い場合もある。
【０１５３】
このような場合には、ステップＳ５１３、Ｓ５１４における処理を省略するとともに、ステップＳ５１８における判断を省略し、ステップＳ５１７に続いてステップＳ５１９に進むようにフローを変更することとしても良い。
【０１５４】
また、このような実施形態では、各種のループは、ベクトル化計算によって並列に計算することが望ましい。
【０１５５】
このモデル化では、「衝突が生じてからモード復帰条件が満たされるまでの間」についても、オブジェクトに加えられる外力が変化するとのモデル化を行うことになる。
【０１５６】
したがって、このような態様を採用した場合には、衝突計算については上記実施形態と同様の適切な近似を行うことができるとともに、オブジェクトの移動については、上記実施形態よりもより精密な近似を行うことができる。
【０１５７】
このほか、単純にステップＳ５１３、Ｓ５１４における計算・更新の処理を省略するだけとする実施態様もありうる。これは、衝突そのものに要する時間を、(D-d)T/D = (D-d)Δtに近似する手法である。
【０１５８】
すなわち、「衝突が生じてからモード復帰条件が満たされるまでの間」については、オブジェクトは事実上移動しない、とのモデル化を行う。
【０１５９】
このとき、時間δは、「オブジェクトが互いに接触し合ってから、弾性変形して相手方のオブジェクトと押し合い、反発力によって逆向きに動き始め、相手方のオブジェクトから離れるまでに要する時間」に相当する。
【０１６０】
この態様では、衝突後の位置と速度が、次の画像生成のタイミングまでそのまま維持されることとなる。アニメーションの映像の特殊効果の一つに、印象深いシーンを一定時間静止させて表示する「止め絵」という演出手法があるが、本実施形態は、衝突したオブジェクトについてこのような「止め絵」の効果を与えるものと考えることもできる。
【０１６１】
また、ステップＳ５１３における計算において、経過時間δ=Δtとして計算を行う手法もありうる。すなわち、「衝突が生じてからモード復帰条件が満たされるまでの間」については、オブジェクトはシミュレーションの更新間隔時間分だけ移動し、それ以外の時間については「衝突中」とする手法である。これは、上記の態様２つの中庸をとるものである。
【０１６２】
これらの態様では、簡易な計算を採用することによって、計算量を抑制しながら衝突のシミュレーションを適切に行うことができるようになる。
【０１６３】
本発明によれば、上記発明の効果に加え、移動計算の対象となるオブジェクトの数を抑制することによって、オブジェクトの衝突と移動のシミュレーションをできるだけ少ない計算量で行うことができるようになる。
【０１６４】
このほか、上記実施形態では、画像生成のタイミングでステップＳ５０２において全オブジェクトを衝突判定モードに移行することとしているが、オブジェクトごとに、通過モードから衝突判定モードに復帰するタイミングをずらすこととしても良い。
【０１６５】
典型的には、全オブジェクトに共通の通過維持時間という定数を定める。そして、各オブジェクトについて、衝突判定モードから通過モードに移行した移行時刻も記録することする。
【０１６６】
ステップＳ５０２においては、通過モードであるオブジェクトのうち、移行時刻に通過維持時間を加算した時刻が、現在時刻より前であるもの、すなわち、衝突判定モードから通過モードに移行した時刻から、通過維持時間が経過したオブジェクトについて、そのモードを衝突判定モードに復帰させるような繰り返し、判定、更新の処理を行うのである。
【０１６７】
この形態におけるモデル化は、オブジェクトが一旦衝突すると、通過維持時間が経過するまでは、他のオブジェクトとの衝突は生じない、と仮定するものである。
【０１６８】
このほか、リフレッシュ時間の間隔を画像生成のタイミング以外の適当な定数として、全オブジェクトについてまとめて、衝突判定モードへの復帰を行うこととしても良い。
【０１６９】
これらの態様では、通過維持時間という衝突が連続して起きることが極めて珍しい時間を想定することによって、簡易かつ適切にオブジェクトの衝突と移動のシミュレーションを行うことができるようになる。
【実施例３】
【０１７０】
衝突するか否かを判定する対象となるオブジェクト同士の組み合わせについては、上述のように、以下のような２種類の態様がありうる。
（１）いずれか少なくとも一方が衝突判定モードであるオブジェクト同士については、他方が通過モードであるか衝突判定モードあるか否かにかかわらず、衝突判定を行う。
（２）両方とも衝突判定モードであるオブジェクト同士についてのみ、衝突判定を行う。
【０１７１】
上記実施形態では、上記（２）の態様を採用しているが、上記（１）の態様を採用したい場合には、ステップＳ５０７の処理を省略し、ステップＳ５０９において、c[i]とc[j]の少なくとも一方が衝突判定モードである場合に、ステップＳ５１０に進むように、制御の流れを変更すれば良い。
【０１７２】
本実施形態では、衝突判定の対象となるオブジェクトの個数の抑制の度合は、上記実施形態にくらべて弱いものの、より正確なシミュレーションが可能となる。したがって、計算能力がある程度高いものの、全オブジェクトについての衝突判定は避けたいような用途に好適である。
【実施例４】
【０１７３】
上記実施形態では、オブジェクトが衝突する場合に、ステップＳ５１２において、衝突するオブジェクトのモードを一律に通過モードに更新していたが、本実施形態では、他の手法を採用する。
【０１７４】
すなわち、オブジェクトiとオブジェクトjのそれぞれについて、当該オブジェクトが所定のモード維持条件を満たしているか否かを判定し、満たしている場合には、当該オブジェクトのモードは、衝突判定モードのままとするものである。
【０１７５】
モード維持条件としては、以下のような条件が考えられる。
（ａ）衝突後の速度の大きさが、所定の閾値よりも大きい。激しく運動するオブジェクトについては、衝突判定の対象とした方が良い用途がありうるからである。
（ｂ）衝突前と衝突後の速度の変化が、所定の閾値よりも大きい。運動の様子が激変したオブジェクトについては、衝突判定の対象とした方が良い用途がありうるからである。
（ｃ）常に衝突判定モードを維持するオブジェクトを想定する。たとえば、ゲームに本発明を適用する場合、プレイヤーが操作するキャラクターや敵キャラクターのうちの強いもの（「ボスキャラ」と呼ばれる。）については、常に衝突判定モードとし、通過モードには移行しないこととする態様である。一般に、オブジェクトが多数存在するのは、敵キャラクターのうちの弱いもの（「雑魚キャラ」と呼ばれる。）であるので、本態様でも十分な計算量抑制の効果が得られることも多い。
（ｄ）上記条件（ａ）（ｂ）（ｃ）の適当な組み合わせ。
【０１７６】
本実施形態では、オブジェクトの個数の抑制の度合は、上記実施形態にくらべて弱いものの、より正確なシミュレーションが可能となる。したがって、計算能力がある程度高いものの、全オブジェクトについての衝突判定は避けたいような用途に好適である。
【産業上の利用可能性】
【０１７７】
以上説明したように、本発明によれば、仮想空間に配置されるオブジェクトの移動や衝突を簡易な計算でシミュレートするのに好適なシミュレーション装置、シミュレーション方法、ならびに、これらをコンピュータにて実現するプログラムを提供することができる。
【図面の簡単な説明】
【０１７８】
【図１】プログラムを実行することにより、本発明のシミュレーション装置の機能を果たす典型的な情報処理装置の概要構成を示す模式図である。
【図２】衝突するオブジェクト同士の位置関係を示す説明図である。
【図３】各ベクトルの位置関係をさらに詳細に示す説明図である。
【図４】本実施形態に係るシミュレーション装置の概要構成を示す模式図である。
【図５】本シミュレーション装置にて実行されるシミュレーション処理の制御の流れを示すフローチャートである。
【符号の説明】
【０１７９】
１００  情報処理装置
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  インターフェイス
１０５  コントローラ
１０６  外部メモリ
１０７  画像処理部
１０８  ＤＶＤ−ＲＯＭドライブ
１０９  ＮＩＣ
１１０  音声処理部
１１１  マイク
２０１  仮想空間
２０３  原点
２１１  オブジェクトi
２１３  オブジェクトiの位置ベクトル
２１５  オブジェクトiの速度ベクトル
２３１  オブジェクトj
２３３  オブジェクトjの位置ベクトル
２３５  オブジェクトjの速度ベクトル
２５１  相対速度ベクトル
２５２  相対位置ベクトル
２５３  相対速度ベクトルと相対位置ベクトルのなす角
２５４  相対位置ベクトルの方向ベクトル
２６１  衝突平面
２６２  内分点
３０１  方向ベクトル
３０２  方向ベクトル
４００  シミュレーション装置
４０１  記憶部
４０２  衝突判定部
４０３  衝突更新部
４０４  移動更新部
４０５  モード更新部
４０６  画像生成部
【図１】
2008040800.tif 000003
【図２】
2008040800.tif 000004
【図３】
2008040800.tif 000005
【図４】
2008040800.tif 000006
【図５】
2008040800.tif 000007