Box2dとBulletの物理シミュレーションは内部でどのように機能しますか?


8

box2dとbulletがJavaScriptに移植されたのを見ましたが、ソースコードを除いて、どちらも私を惹きつけませんでした。中を見ると、それはすべてとてもシンプルに見えました。

すばらしい物理シミュレーションを得るために、各ライブラリ内で何をしていますか?説明が見つからない。


私は情報源を研究しているので、最終的には自分で質問に答えます。あなたが努力を短縮することができれば私はそれを感謝します。
陽気な

回答:


10

剛体の物理学は実際には概念が非常に単純です。つまり、エンジンが作成しようとしている動作はそれほど複雑ではありません。あなたが見たライブラリがあなたにとって非常に単純に見えるのは、おそらくそれが理由です。

秘訣は、浮動小数点エラーや低い可変フレームレートなどが存在する場合でも、堅牢安定した高速のシミュレーションを作成することは非常に難しく、通常は微調整と手間がかかることです。問題をさらに複雑にしているのは、多くの非常に賢い人々がより良い解決策を見つけるために英雄的な努力をし、美しく強力であるが理解しにくいアルゴリズムを考案して、この分野に黒魔術の評判を与えたという事実です。

一般に、物理エンジンは3つのことを考慮します(内部ループでの実行順序は異なります)。

  1. 積分(ニュートンの運動方程式の近似)、
  2. 衝突検出、および
  3. 制約の解決(非貫通または他のユーザー指定の制約を満たすように位置と速度を更新します。)

これらのほとんどには、単純ですがそれほど正確ではないアルゴリズムと、複雑ですがより正確なアルゴリズムの両方があります。はじめに:

  1. 統合については、ほとんどの人がSymplectic EulerまたはVerletのどちらかを使用します(実際には同等です。数値積分についてはお読みいただけますが、コンセンサスは、安価な1次法で問題ないようです。
  2. 必要なすべての衝突検出リファレンスは、リアルタイムレンダリングのリソースページにあります
  3. 制約を解決するために、シーケンシャルインパルスの方法は非常に簡単に理解できます。Erin Catto(Box2Dの作者)は毎年GDCでプレゼンテーションを行います。スライドはBox2Dのメインページからリンクされています2006のスライドはかなりよく、順次インパルスをカバーしています。Featherstoneや投影されたGauss-Seidelのようなより洗練された方法を調べることもできます。

単純な方法と、発行されたばかりの本「Game Physics Pearls」の初期の章で何がうまくいかないかについての優れた紹介があります。


6

Glenn Fiedlerのゲーム物理学シリーズをご覧くださいhttp : //gafferongames.com/game-physics/

また、Erin Catto(Box2Dの作者)は、制約付きダイナミクスに関する論文を持っています

衝突検出については、Christer EricsonによるReal-Time Collision Detectionをご覧ください。


1
:最初のリンクが壊れたが、私は同じ記事が今ここに見つけることができると思いますされていることをgafferongames.com/game-physics/integration-basics(私は原稿を見たことがないので、私は確認することはできません)
ジャスティン・

2

http://en.wikipedia.org/wiki/Rigid_body_dynamicsから始めるのが良いでしょう。ゲームが異なれば物事も異なるボディに分割されますが、一般的には、特定のプロパティを持つジョイントによってリンクされた多数の個別の剛体があります。ゲームをループするたびに、各ボディの力を計算し、その新しいパラメータ(位置、速度など)を計算します。また、各ボディからジョイントを共有する他のボディに力を伝達し、グローバルフォース(重力)を考慮に入れる必要があります。

これは液体や布の物理学のようなものをカバーしていません、それらはすべて私にとって意味不明なものです。微分方程式が関係していて、それは私の目が上を見る点に関するものです。


まあ..ウィキペディアは物事を調べる最初の明白な場所でしょう。また、これまでの誰もがおそらく、力によって体の動きをシミュレートする傾向があることを知っています。box2dにはそれ以上の機能があります。ここで、私が興味を持っているいくつかのことを示します。制約の解決と、シミュレーションの爆発を防ぐその他の要素。衝突検出アルゴリズム。制約解決と衝突検出の最適化。ジョイント/衝突応答アルゴリズム。摩擦のシミュレーション。
陽気な

それは「本当の答えには長すぎる」領域になりつつあります。たとえば、シミュレーションのアーチファクトを防ぐための減衰は、複雑な数学です。関節の力の伝達などについては、単純なバージョンでは、各関節に力を伝達する特定の軸があり、2つの間の角度に応じて、結合に向かって数えた体のエネルギーのパーセンテージを持ちます。最も単純なジョイントは固定リンクで、どちら側からのすべての力が横方向に変換されます。
coderanger 2010

質問で言ったように:あちこちに複雑な数学があると言って、さらに読むためのリンクを提供することは大丈夫です。
Cheery 2010

さて、あなたはそこに行きます:-)
coderanger


0

物理方程式以外に重要なことの1つは、すべてのオブジェクトを追跡することです。これにより、衝突の検出と相互作用のチェックが可能な限り高速になります。 空間ハッシュは、Chimunk物理エンジンが使用する手法です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.