SATを使用して複合形状の衝突を解決する方法は?


16

SATは、任意の凸多角形間の衝突を判断する適切な方法です。衝突を解決するために必要なベクトルも取得します。

複雑な(非凸)形状間の衝突を解決するために、私はいくつかの凸多角形で構成されるある種の複合形状について考えていました。衝突がブロードフェーズで発生する場合(たとえば、円対円またはAABB対AABB)、衝突は、複合形状の各ポリゴンと他の複合形状の各ポリゴンをチェックすることで解決されます。

オブジェクトを実際に分離する最良の方法は何でしょうか?素朴なアプローチは、最高の大きさのベクトルを取得し、それを分離に使用することです。次の図では、これはV 2になります

SATの例1

ただし、分離ベクトルが異なる方向を指している場合、衝突をすぐに解決することはできず、何度か繰り返す必要があります。したがって、次の図ではV 1を使用して分離し、別の反復ではV 2(または形状がV 1の量だけ移動したためV 2に近いもの)で分離します。

SATの例2

このアプローチは、互いに反対方向を指すベクトルを分離する場合、または次の図に示すような場合に失敗します。

SATの例3

ここでは、左側の状態と右側の状態の間で無限に反復します。

ここで実際の質問をする:この問題に対する合理的なアプローチは何ですか?複雑な形状に複合ポリゴンを使用することは合理的な考えだと思いますが、その場合、衝突をどのように解決する必要があるのでしょうか?3番目の画像に示すように、行き止まりを検出するにはどうすればよいですか?


ベクターの使用目的を明確にできますか?
ウィル

@Willベクトルを使用して衝突を解決し、形状が重ならないようにします。そのため、結果のベクトルによって黄色のオブジェクトを移動でき、2つのオブジェクトは衝突しなくなりました。
-bummzack

回答:


7

ここでSATをそのまま適用して、正方形の鍵を丸い穴に収めようとしているのではないかと思います。明らかに、これは凹面と凹面の衝突用に設計されたものではなく、その目的に適合させる努力を称賛しますが、これが機能しそうにない考慮事項があります。

リアリズム

角度の衝動とそのノックオン効果は、ここでのゲームの名前です。

接触点の順序は、現実的な衝突解決のために重要です。現実の世界では、これらのポイントの1つは常に他のポイントよりも先に攻撃されます。そして、その接触順序とそれによって表される各「サブコリジョン」の結果をエミュレートするだけで、シミュレーションで現実的な結果を得ることができます。これは、そもそも凹面を凸面に分解する理由の1つです。最初にどの部分が叩かれたかを区分的に検出できます。もちろん、これは「より少ないリアリズム」の見出しの下での私のコメントに従ってエミュレートすることもできます。

凸面フィクスチャを組み合わせて、オブジェクトの輪郭と重心の両方を与えます(もちろん、より複雑なシミュレーションでは、各フィクスチャが密度に異なる影響を与えることもあります)。これに言及する理由は、衝突を現実的に解決する際に、接触点の各「サブ衝突」に続いて、線形だけでなく角度インパルスも計算する必要があるためです。これは、SATで適用する基本的な「押しのける」ほど単純ではありません。

これにより、問題の性質が完全に変わります。これは、ご覧のとおり、2つ以上の接点を取得して使用しようとするのは無意味であるためです。その後、線形および角度インパルスに関して最初の問題を解決したら、各オブジェクトの方向が変更されるため、さらに衝突するために再計算する必要があります。それに加えて、ステップでの個々の接触の検出は、同じステップ内で行う必要がある場合とそうでない場合があります-オブジェクトの最初の接触点が接触するときの接触間のタイミングに応じて、後続の線形および角度インパルスが適用されます接触点のタッチなど。

リアリズムが少ない

もちろん、角度インパルスの解決にまったく関心がないと仮定すると、SATでできることは、これらのポリゴンをGraham's Scanのようなものを使用して凸面としてラップする場合、本質的に正確になります。ベクター。言い換えれば、あなたが実証したように、3つのベクトルを並行して解決しようとすることはほとんど意味がありません。それは重要な束の中で最大です。

あなたの質問に応じて編集

単純化したアプローチが必要な場合は、次のようにする必要があります。

  • 変位の正しい方向を決定します。これは、それぞれを凸包にし、分離軸の法線を決定することで最も簡単に行えます。

  • 次に、変位の大きさを決定する必要があります。なぜSATで与えられた大きさをそのまま使用できないのですか?考えてみると、凸包の相互侵入深さは、一致した凹包の場合よりも潜在的に大きくなるためです-歯が互いにある2つのEを考えてください!上記で行ったように、指定されたステップのすべての接触点を見つけますが、軸の法線に平行な接触点を見つけます。これが正しい変位方向であるためです。次に、これらの並列オーバーラップベクトルのどれが最も長いかを判断します。その1つで置き換え、残りを破棄し、次の物理ステップに進みます。


私はあなたの意味がわかると思います。「リアリズムが少ない」シナリオでは、個々のポリゴンに対してSATによって与えられた(最短の)ベクトルを評価するだけでなく、他の(より大きな)オーバーラップも考慮しなければならず、最悪の場合は凸包を使用しますか?
bummzack

(最新の)編集を参照してください。
エンジニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.