物理エンジン

introduction(イントロダクシュン)

Kano氏、mitsuman氏のの剛体力学デモ、Unreal Tournament 2002を見て、 はなげ氏の物理エンジンメモを見て、物理エンジンを作りたいなぁと思う人は多いはずです。
2D → 3Dに移り変わるとき、物体の位置を直接動かすのではなく、物体の質量や加速度、力によって 物理的に動かしたい・・・と思う人は多いはずです。
僕もワン・オブ・ゼムです。 ということで、いろいろと考えてみました。

first of all(ファストヴォール)

物理エンジンは実際に組んだことはないものの、いろいろと考えたことはありました。 そこで、一番僕が問題と感じたのは「物体のすりぬけ」です。 固定時間進行型ならこの問題はごまかせますが、 実時間進行型だとこの問題はごまかせません。 実行速度の異なるコンピュータで実行結果が異なる、ということがあってはならないのです。

この問題の解決策として、まず最初に考え付くのが「進める時間を微小時間に区切って進める」というものだと思います。 100ms進めるのではなく、1msを100回というふうにやります。これで結構問題は解決できるのですが、

といった問題が生じます。富豪的プログラミングをやるなら、もちろん実行速度なんか気にしなくていい (いずれCPUが追いつく)と思いますが、そうもいってられません。

微小時間における衝突を考慮した複数の物体の運動

そこで、考え付いたのが、下記のような手法です。 物体同士の衝突がいつ起こるかを予測し、 「物体の衝突が起こるまで」区切りで時間を進めていきます。 「やっぱり考えるのは紙の上」派なので、ルーズリーフに書いたものを載せておきます(手抜きではありません)。 あとは実装だけなんですが、物理エンジンなんて組んだことがないので、 いろいろと問題にぶちあたるんだろうなぁ・・。

微小時間における衝突を考慮した複数の物体の運動

書き手 奥村佳雄
メールはこちら delphier@yahoo.co.jp