Algoritmi di rilevamento delle collisioni in fase stretta


10

Esistono tre fasi del rilevamento delle collisioni.

  1. Broadphase : circola tra tutti gli oggetti che possono interagire, sono consentiti falsi positivi, se acceleri il ciclo.

  2. Fase stretta : determina se si scontrano e, a volte, come, senza falsi positivi

  3. Risoluzione : risolve la collisione.

La domanda che sto ponendo riguarda la fase stretta. Esistono più algoritmi, che differiscono per complessità e precisione.

  1. Intersezione Hitbox : si tratta di un algoritmo a posteriori, che presenta la complessità più bassa, ma non è anche troppo preciso,

  2. Intersezione dei colori : intersezione Hitbox per ogni pixel, a posteriori, perfetta per i pixel, non precisa in termini di tempo, maggiore complessità

  3. Teorema degli assi di separazione : questo viene usato più spesso, preciso per i triangoli, tuttavia, a posteriori, poiché non riesce a trovare il bordo, tenendo conto dell'ultimo fotogramma in considerazione, è più stabile

  4. Raycasting lineare : l'algoritmo A-priori, utile per la fisica dall'aspetto semi-realistico, trova il punto di intersezione, ancora più preciso di SAT, ma con più complessità

  5. Interpolazione spline : A-priori, ancora più accurata dei raggi lineari, ancora più coplexity.

Probabilmente ce ne sono molti altri che ho dimenticato. La domanda è: quando è meglio usare il SAT, quando i raggi, quando le spline e se c'è qualcosa di meglio.

Risposte:


6

Due che ti mancano che si distinguono immediatamente per me sono GJK e MPR.

GJK è un algoritmo per trovare il punto più vicino di due poligoni convessi. Con un po 'di lavoro extra puoi usarlo per trovare punti incidenti per intersecare oggetti e quindi calcolare una varietà di collisioni. Questo viene fatto tramite ritaglio poligonale, come se si usasse SAT, ma GJK ti salva alcuni passaggi (poiché avrai già i punti più vicini).

MPR (Minkowski Portal Refinement) è un altro algoritmo, simile a GJK (entrambi utilizzano spazi Minkowski). Non riesce a trovare il punto più vicino tra oggetti non intersecanti come GJK, ma ha molte altre belle proprietà per i giochi, ed è un modo per usare una varietà di contatti.

MPR è uno dei più popolari per i giochi. È molto efficiente, numericamente stabile e facile da implementare.

Altre fasi strette sono utilizzate più nei giochi specializzati. I giochi di corse di solito usano il ray casting come modello di pneumatici reali e ottenere comportamenti realistici (o anche solo divertenti) non è ancora possibile utilizzando la tradizionale forma di collisione e la modellazione della risoluzione. I platform in genere usano anche la collisione e la fisica altamente personalizzate, poiché la fisica "simile a Mario" preferita non è modellata con algoritmi di fisica tradizionali. Vedrai spesso anche diversi metodi di collisione e fisica per fluidi e simili, anche se ne so di meno.

Vedere:


3

Volevo dire, il suo test sull'asse di separazione , non il teorema.

Utilizzeresti SAT su poligoni non mobili (2D), anche se puoi estenderlo per far fronte al movimento lineare relativo.

http://elancev.name/oliver/2D%20polygon.htm#tut3

Non usare GJK in 2D, l'ho trovato in realtà più lento del semplice forzare il SAT.

Un'altra tecnica che puoi usare è la differenza di Minkowski, che riduce un oggetto fino a un certo punto e 'cresce' l'altro dalla forma del primo. Quindi si verifica l'oggetto combinato rispetto al punto, il che è molto più semplice - questo ti dà la distanza di penetrazione e normale. Trovo che questo strumento sia concettualmente molto utile per affrontare nuovi problemi di rilevamento delle collisioni; più facile da visualizzare rispetto a SAT.

Per lo spostamento e la rotazione di poligoni (e poliedri) è possibile utilizzare Conservative Advancement per trovare l'ora e il punto di contatto esatti.

http://www.continuousphysics.com/BulletContinuousCollisionDetection.pdf

Puoi leggere di più su queste tecniche in questo post sul blog che ho scritto qualche tempo fa:

http://www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/

Spero che aiuti!

Saluti, Paul.


2
Teorema degli assi di separazione: esiste un asse lungo il quale le proiezioni di due oggetti convessi sono disgiunte se gli oggetti sono disgiunti. Un test sugli assi di separazione: mettere in pratica il teorema di cui sopra, immagino.
Eric,

0

Questo dipende davvero dal tipo di gioco che hai. Ogni metodo sopra ha i suoi compromessi.

Tuttavia, SAT è piuttosto standard nella mia esperienza per le biblioteche di fisica generica, Ex. Box2D lo usa ampiamente (Angry Birds e molti altri giochi usano Box2D).

Le variazioni dell'intersezione cromatica mescolate con l'intersezione SAT o Hitbox vengono utilizzate in giochi come Sonic, Megaman con buoni risultati.

Non so molto su # 4 e # 5 però.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.