Esiste un motore fisico 2D in grado di modellare fluidi e gas? [chiuso]


20

A questo punto la piattaforma e il linguaggio di programmazione non contano, vorrei solo sapere se esiste qualcosa là fuori per questo. Qualsiasi aiuto è apprezzato.


Ho implementato un motore fluido 2D personalizzato. Sono stato in grado di ottenere un esempio funzionante usando questo documento sui fluidi viscoelastici e il codice di Flui ° D ° emo come modello. Tuttavia, i fluidi non sono stabili come vorrei e il codice potrebbe usare molto amore per l'ottimizzazione (elaborazione multicore, compatibilità con la cache, ecc.). Quello che voglio è una libreria che ha già fatto tutto ciò, quindi devo solo integrarlo con Box2d e il mio gioco.
deft_code

Risposte:


8

Scopri quali Q-Games hanno usato per Pixeljunk Shooter. È un gioco 2d con una fisica fluida piuttosto coinvolta. Non sono sicuro che usassero un motore fisico interno o di middleware, ma le informazioni sono probabilmente là fuori da qualche parte.


8
Hanno usato un motore nazionale, ma hanno incluso tecniche che possono essere applicate usando qualsiasi motore fisico in qualche codice personalizzato. In realtà hanno tenuto un discorso molto informativo sulla loro fluidodinamica al GDC (diapositive qui: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
fantasma

6

Beh, non ho esaminato questo, ma so per certo che quasi tutti i motori fisici possono emulare l'idea. Box2D, ecc.

Fondamentalmente hanno particelle che rimbalzano intorno, lontano dalle superfici e a vicenda (più velocemente per i gas) ma danno anche loro un effetto gravitazionale costante (i liquidi avrebbero tutti lo stesso, ma alcuni gas che potresti voler aumentare lentamente).

Se colleghi le particelle esterne otterrai una forma poligonale che rappresenta la massa

O

se disegni semplicemente un pixel o un grafico di particelle su ogni particella, puoi invece ottenere un effetto nuvola per la massa.


4
Questa risposta non è adatta per giochi in tempo reale di dimensioni pratiche.
Attaccando Hobo

3
Non sono sicuro del perché lo diresti, poiché la dinamica dei fluidi è molto spesso modellata come particelle. Per esempi, vedi i video tecnici nvidia sulle particelle fluide su YouTube, il programma Algodoo (precedentemente chiamato Phun) o il discorso di Q-Games sul loro gioco PixelJunk Shooter (diapositive su gdcvault.com/play/1012447/Go-With-the- Flow-Fluid ). In quest'ultimo caso, Q-Games mostra come costruiscono un poligono da una raccolta di particelle. Penserei che ciò verifichi che questa risposta è abbastanza valida per le implementazioni in tempo reale IMHO.
fantasma

WOWOW perché i downvotes? Non sto infuriando, voglio solo sapere il perché. È una tecnica realistica e viene utilizzata.
Gioele,

"particelle che rimbalzano intorno, fuori dalla superficie e vicenda (più veloce per i gas)" che suona come se stessi descrivendo fluidi a livello molecolare, e mentre un approccio ingenuo potrebbe funzionare con la simulazione cotta, non funzionerà bene per i giochi in tempo reale. Le particelle vanno bene se il tipo di simulazione lungo è corretto, "rimbalzare intorno" sembra che funzionerebbe con le macro particelle. Hai anche gravemente travisato come simulare la densità.
Attaccando Hobo

Le particelle funzionano abbastanza bene en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . È stato utilizzato nell'ultima demo di FLT: s come descritto in directtovideo.wordpress.com/2011/05/03/numb-res Questa implementazione potrebbe essere un po 'pesante, ma le approssimazioni più semplici come nel discorso GDC di Pixel Junk Shooter dovrebbero funzionare bene.
Vuoto

6

L'unica biblioteca che ho potuto inventare che si occupa specificamente dei fluidi è Fluidic . È piuttosto alfa e ha solo una versione, però. La libreria di fisica Bullet supporta "l'idrodinamica delle particelle levigate", una tecnica utilizzata per modellare i fluidi. Sebbene la libreria sia orientata al 3D, è possibile applicare vincoli a un asse per farlo funzionare in 2D.

La mia raccomandazione sarebbe, come ho già detto in alcuni commenti su altre risposte, di utilizzare un motore fisico standard come Box2D o Chipmunk e utilizzare un numero di cerchi per modellare l'acqua (con gravità) o gas (senza gravità) e combinarli insieme in un corpo idrico o gassoso. È possibile applicare alcuni vincoli sui singoli corpi per renderli "raggruppati" in modo da simulare la viscosità. Guarda questo video per vedere come i singoli corpi (modellati come quadrati nel video) lavorano insieme. Nota, tuttavia, la tecnica utilizzata in questo video non è la stessa menzionata in questo paragrafo. Puoi usare il video per avere un'idea di come i cerchi interagiscono tra loro e provare a imitare questo con i vincoli presenti nella libreria di fisica utilizzata.

La parte interessante arriva quando vuoi combinare più cerchi in uno specchio d'acqua. La soluzione più semplice che posso trovare è disegnare ogni cerchio come un metaball in modo che appaiano come parte di un corpo più grande. Puoi trovare la matematica e alcuni esempi di codice dietro questi corpi qui .


Il video a cui ti sei collegato utilizza molto più di un semplice numero di cerchie. Usa una tecnica nota come SPH. La fiammata porta di Flui ° D ° emo usa Box2d per trovare collisioni e applicare forze, ma usa metodi SPH per calcolare le forze non i corpi rigidi di Box2d.
deft_code

Hai assolutamente ragione al riguardo. Il video doveva essere illustrativo anziché un esempio di implementazione. Grazie per aver menzionato il mio errore e ho aggiornato la risposta per evitare ulteriori equivoci.
ghost

3

Sono passati alcuni anni da quando questa domanda è stata pubblicata, ma l'ho trovata durante la ricerca, quindi ho pensato di aggiornarla.

Google ha rilasciato LiquidFun (open source) per il sistema Box2D. Presenta alcune limitazioni, ma è un modo rapido per iniziare con particelle di liquido, sabbia, ecc. Con prestazioni abbastanza decenti.

https://github.com/google/liquidfun

PixelJunk ha un ottimo approccio, ma è una libreria privata. Hanno condiviso un livello incredibile di dettagli nei loro interventi al GCD 2010.

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.