Come funzionano internamente le simulazioni fisiche Box2d e Bullet?


8

Ho visto box2d e bullet portati in JavaScript, ma nessuno dei due mi ha attratto, tranne il codice sorgente. Sembrava tutto abbastanza semplice, una volta che ho guardato dentro.

Cosa stanno facendo all'interno di ciascuna di quelle librerie per ottenere una bella simulazione fisica? Non riesco a trovare alcuna spiegazione.


Alla fine risponderò io stesso alla domanda perché sto studiando le fonti. Se riesci ad abbreviare lo sforzo, lo apprezzerò.
Allegro

Risposte:


10

La fisica del corpo rigido è in realtà abbastanza semplice nel concetto - cioè, i comportamenti che un motore sta cercando di creare non sono molto complicati. Questo è probabilmente il motivo per cui le librerie che hai guardato ti sembrano abbastanza semplici.

Il trucco è che creare una sim che sia robusta , stabile e veloce , anche in presenza di cose come errori in virgola mobile e framerate bassi e variabili, è piuttosto difficile e di solito comporta una grande quantità di modifiche e violini. A complicare ulteriormente il problema è il fatto che molte persone estremamente intelligenti hanno fatto sforzi eroici per trovare soluzioni migliori e hanno escogitato algoritmi belli e potenti ma di difficile comprensione che hanno dato al campo una reputazione di magia nera.

In generale, un motore fisico si occuperà di tre cose (l'ordine in cui le fanno nel circuito interno varia):

  1. Integrazione (approssimazione delle equazioni di moto newtoniane),
  2. Rilevazione di collisioni e
  3. Risoluzione dei vincoli (aggiornamento di posizioni e velocità per soddisfare la non penetrazione o altri vincoli specificati dall'utente).

Per la maggior parte di questi, esistono sia algoritmi semplici ma non così accurati che algoritmi complessi ma più accurati. Per iniziare:

  1. Per l'integrazione, la maggior parte delle persone usa Symplectic Euler o Verlet (che in realtà sono equivalenti. Puoi leggere sull'integrazione numerica se vuoi, ma il consenso sembra essere che i metodi economici del primo ordine vadano bene.
  2. È possibile trovare tutti i riferimenti di rilevamento delle collisioni desiderati nella pagina delle risorse di rendering in tempo reale .
  3. Per la risoluzione dei vincoli, il metodo degli impulsi sequenziali è molto facile da capire. Erin Catto (l'autore di Box2D) tiene una presentazione al GDC ogni anno - le diapositive sono collegate dalla pagina principale di Box2D . Le diapositive del 2006 coprono abbastanza bene gli impulsi sequenziali. Puoi anche esaminare metodi più fantasiosi come Featherstone o la proiezione di Gauss-Seidel.

C'è un'eccellente introduzione ai metodi semplici e cosa può andare storto nei primi capitoli del libro Game Physics Pearls appena pubblicato.


6

Leggi la serie di fisica dei giochi di Glenn Fiedler: http://gafferongames.com/game-physics/

Inoltre, Erin Catto (l'autore di Box2D) ha un articolo sulle dinamiche vincolate .

Per il rilevamento delle collisioni, leggi Rilevazione delle collisioni in tempo reale di Christer Ericson


1
Quel primo link è interrotto ma penso che gli stessi articoli ora possano essere trovati qui: gafferongames.com/game-physics/integration-basics (ma non posso essere sicuro perché non ho mai visto gli originali)
Justin

2

http://en.wikipedia.org/wiki/Rigid_body_dynamics potrebbe essere un buon punto di partenza. Giochi diversi dividono le cose in corpi diversi, ma in generale hai un numero di corpi rigidi discreti collegati da giunti con proprietà specifiche. Ogni ciclo del gioco calcola le forze su ciascun corpo e calcola i suoi nuovi parametri (posizione, velocità, ecc.). Devi anche trasmettere forze da ciascun corpo agli altri con cui condivide le articolazioni e fattore nelle forze globali (gravità).

Questo non copre cose come la fisica dei liquidi o dei tessuti, per me sono tutte incomprensibili. Ci sono equazioni differenziali coinvolte e questo è circa il punto in cui i miei occhi si velano.


Bene ... Wikipedia sarebbe il primo posto ovvio da cui guardare le cose. Anche tutti finora sanno che tendono a simulare i movimenti del corpo attraverso le forze. In box2d c'è molto di più. Ecco alcune cose che mi interessano: risoluzione dei vincoli e altre cose che impediscono l'esplosione della simulazione. Algoritmi di rilevamento delle collisioni. Ottimizzazioni sulla risoluzione dei vincoli e rilevamento delle collisioni. Algoritmi di risposta articolazione / collisione. Simulazione dell'attrito.
Allegro

Questo è sul punto di "troppo lungo per una vera risposta" territorio. Ad esempio, lo smorzamento per prevenire artefatti di simulazione è un po 'complesso di matematica . Per quanto riguarda cose come il trasferimento di forza articolare, la versione semplice è che ogni articolazione ha assi specifici su cui trasferirà la forza con una percentuale di energia del corpo che conta verso il giunto in base all'angolo tra i due. Il giunto più semplice è un collegamento fisso, in cui tutta la forza di entrambi i lati viene tradotta.
coderanger,

Come ho detto nella domanda: va bene solo dire che c'è una matematica complessa qua e là e fornire un link per ulteriori letture.
Allegro,

Bene,
eccoti


0

Una cosa importante oltre alle equazioni fisiche è il tracciamento di tutti gli oggetti, in modo che il controllo del rilevamento delle collisioni e delle interazioni sia il più veloce possibile. L'hashing spaziale è la tecnica utilizzata dal motore fisico Chipmunk .


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.