Apakah ada mesin fisika 2d yang dapat memodelkan cairan dan gas? [Tutup]

20

Pada titik ini platform dan bahasa pemrograman tidak masalah saya hanya ingin tahu apakah ada sesuatu di luar sana untuk ini. Bantuan apa pun dihargai.

Xavier
sumber
Saya telah menerapkan mesin fluida 2d khusus. Saya bisa mendapatkan contoh kerja menggunakan makalah ini pada cairan viskoelastik dan kode dari Flui ° D ° emo sebagai templat. Namun, cairannya tidak stabil seperti yang saya inginkan dan kode dapat menggunakan banyak cinta optimasi (pemrosesan multicore, keramahan cache, dll). Yang saya inginkan adalah perpustakaan yang telah melakukan semua itu, sehingga saya hanya perlu mengintegrasikannya dengan Box2d dan permainan saya.
deft_code

Jawaban:

8

Lihatlah apa yang Q-Games gunakan untuk Pixeljunk Shooter. Ini adalah game 2d dengan fisika fluida yang cukup terlibat. Saya tidak yakin apakah mereka menggunakan mesin fisika buatan sendiri atau middleware, tetapi informasinya mungkin ada di suatu tempat.

Tristan Crockett
sumber
8
Mereka telah menggunakan mesin buatan sendiri, tetapi telah memasukkan teknik yang dapat diterapkan menggunakan mesin fisika apa pun dalam beberapa kode khusus. Sebenarnya memberi ceramah yang sangat informatif tentang dinamika fluida mereka di GDC (slide di sini: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
ghost
6

Yah saya belum melihat ke dalam ini, tetapi saya tahu pasti bahwa hampir semua mesin fisika dapat meniru gagasan itu. Box2D, dll.

Pada dasarnya memiliki partikel memantul di sekitar, dari permukaan dan satu sama lain (lebih cepat untuk gas) tetapi juga memberi mereka efek seperti gravitasi konstan (cairan semua akan memiliki yang sama, tetapi beberapa gas Anda mungkin ingin naik perlahan).

Jika Anda menghubungkan partikel luar Anda akan mendapatkan bentuk poligonal yang mewakili massa

ATAU

jika Anda hanya menggambar piksel atau grafik partikel di atas setiap partikel, Anda bisa mendapatkan efek cloud untuk massa.

Joel
sumber
4
Jawaban ini tidak cocok untuk game waktu nyata dalam ukuran praktis.
AttackingHobo
3
Saya tidak yakin mengapa Anda mengatakan itu, karena dinamika fluida sangat sering dimodelkan sebagai partikel. Sebagai contoh, lihat video teknologi nvidia pada partikel fluida di youtube, program Algodoo (sebelumnya bernama Phun) atau ceramah yang diberikan Q-Games tentang game PixelJunk Shooter mereka (slide di gdcvault.com/play/1012447/Go-With-the- Flow-Fluid ). Dalam kasus terakhir, Q-Games menunjukkan bagaimana mereka membangun poligon dari kumpulan partikel. Saya akan berpikir bahwa ini memverifikasi bahwa jawaban ini cukup valid untuk implementasi IMHO realtime.
hantu
WOWOW mengapa downvotes? Saya tidak mengamuk, hanya ingin tahu alasannya. Ini adalah teknik yang realistis dan digunakan.
Joel
"partikel memantul di sekitar, dari permukaan dan satu sama lain (lebih cepat untuk gas)" yang terdengar seperti Anda menggambarkan cairan pada tingkat molekuler, dan sementara pendekatan naif dapat bekerja dengan simulasi baked, itu tidak akan bekerja dengan baik untuk permainan waktu nyata. Partikel baik-baik saja karena jenis simulasi yang panjang sudah benar, "bouncing arround" sepertinya akan bekerja dengan partikel makro. Anda juga salah mengartikan cara mensimulasikan kepadatan.
AttackingHobo
Partikel berfungsi cukup baik en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . Telah digunakan dalam demo terbaru FLT: seperti yang dijelaskan dalam directtovideo.wordpress.com/2011/05/03/numb-res Implementasi ini mungkin sedikit berat, tetapi perkiraan yang lebih sederhana seperti dalam Pixel Junk Shooter Pembicaraan GDC harus bekerja dengan baik.
batal
6

Satu-satunya perpustakaan yang bisa saya temukan yang khusus menangani cairan adalah Fluidic . Itu cukup alpha dan hanya memiliki satu rilis, meskipun. Perpustakaan fisika Bullet mendukung 'smoothed-particle hydrodynamics', teknik yang digunakan untuk memodelkan cairan. Meskipun pustaka diarahkan 3D, Anda bisa menerapkan batasan pada satu sumbu untuk membuatnya bekerja dalam 2D.

Rekomendasi saya adalah, seperti yang telah saya sebutkan di beberapa komentar pada jawaban lain, untuk menggunakan mesin fisika standar seperti Box2D atau Chipmunk dan menggunakan sejumlah lingkaran untuk memodelkan air (dengan gravitasi) atau gas (tanpa gravitasi) dan menggabungkan ini bersama-sama menjadi satu badan air atau gas. Anda dapat menerapkan beberapa kendala pada masing-masing tubuh untuk membuatnya 'rumpun' bersama sehingga Anda dapat mensimulasikan viskositas. Lihat video ini untuk melihat bagaimana masing-masing tubuh (dimodelkan sebagai kotak dalam video) bekerja bersama. Namun, perhatikan teknik yang digunakan dalam video ini tidak sama dengan yang disebutkan dalam paragraf ini. Anda dapat menggunakan video untuk merasakan bagaimana lingkaran berinteraksi satu sama lain dan mencoba untuk meniru ini dengan kendala yang ada di perpustakaan fisika yang digunakan.

Bagian yang menarik datang ketika Anda ingin menggabungkan beberapa lingkaran ke badan air. Solusi paling mudah yang bisa saya buat adalah menggambar setiap lingkaran sebagai sebuah metaball sehingga mereka muncul sebagai bagian dari tubuh yang lebih besar. Anda dapat menemukan matematika dan beberapa kode contoh di balik badan-badan ini di sini .

hantu
sumber
Video yang Anda tautkan menggunakan lebih dari sekadar banyak lingkaran. Dia menggunakan teknik yang dikenal sebagai SPH. The pelabuhan api dari flui ° D ° emo menggunakan box2D untuk menemukan tabrakan dan menerapkan kekuatan tetapi metode penggunaan SPH menghitung kekuatan bukan tubuh kaku box2D ini.
deft_code
Anda benar dalam hal itu. Video itu dimaksudkan sebagai ilustrasi bukan contoh implementasi. Terima kasih telah menyebutkan kesalahan saya dan saya telah memperbarui jawabannya untuk mencegah kesalahpahaman lebih lanjut.
hantu
3

Sudah beberapa tahun sejak pertanyaan ini diposting, tetapi saya menemukan saat mencari, jadi saya pikir saya akan memperbaruinya.

Google merilis LiquidFun (open source) untuk sistem Box2D. Ini memiliki beberapa keterbatasan, tetapi ini adalah cara cepat untuk memulai dengan partikel cair, pasir, dll dengan kinerja yang cukup baik.

https://github.com/google/liquidfun

PixelJunk memiliki pendekatan hebat, tetapi merupakan perpustakaan pribadi. Mereka berbagi tingkat detail yang luar biasa dalam pembicaraan mereka di GCD 2010.

TrofiGeek
sumber