Czy istnieje silnik fizyki 2D, który może modelować płyny i gazy? [Zamknięte]

20

W tym momencie platforma i język programowania nie mają znaczenia. Chciałbym tylko wiedzieć, czy istnieje coś takiego. Każda pomoc jest mile widziana.

Xavier
źródło
Wdrożyłem niestandardowy silnik cieczy 2d. Udało mi się uzyskać działający przykład, używając tego artykułu na temat płynów lepkosprężystych i kodu z Flui ° D ° emo jako szablonu. Jednak płyny nie są tak stabilne, jak bym sobie tego życzył, a kod przydałby się z dużą ilością miłości optymalizacyjnej (przetwarzanie wielordzeniowe, obsługa pamięci podręcznej itp.) To, czego chcę, to biblioteka, która już to wszystko zrobiła, więc muszę tylko zintegrować ją z Box2d i moją grą.
deft_code

Odpowiedzi:

8

Sprawdź, co Q-Games wykorzystało do Pixeljunk Shooter. Jest to gra 2D z bardzo zaangażowaną fizyką płynów. Nie jestem pewien, czy użyli silnika fizyki domowej, czy oprogramowania pośredniego, ale informacje te prawdopodobnie gdzieś tam są.

Tristan Crockett
źródło
8
Użyli własnego silnika, ale zastosowali techniki, które można zastosować za pomocą dowolnego silnika fizyki i niestandardowego kodu. Faktycznie wygłosili bardzo pouczające przemówienie na temat ich dynamiki płynów w GDC (slajdy tutaj: gdcvault.com/play/1012447/Go-With-the-Flow-Fluid )
duch
6

Cóż, nie zastanawiałem się nad tym, ale wiem na pewno, że prawie każdy silnik fizyki może naśladować ten pomysł. Box2D itp.

Zasadniczo cząstki odbijają się wokół, od powierzchni i siebie nawzajem (szybciej w przypadku gazów), ale także dają im stały efekt grawitacji (wszystkie płyny miałyby to samo, ale niektóre gazy mogą wolniej się unosić).

Jeśli połączysz zewnętrzne cząstki, otrzymasz wielokątny kształt reprezentujący masę

LUB

jeśli po prostu narysujesz piksel lub grafikę cząstek na każdej cząsteczce, możesz zamiast tego uzyskać efekt chmury dla masy.

Joel
źródło
4
Ta odpowiedź nie nadaje się do gier w czasie rzeczywistym w praktycznym rozmiarze.
AttackingHobo
3
Nie jestem pewien, dlaczego tak mówisz, ponieważ dynamika płynów jest często modelowana jako cząstki. Przykłady można znaleźć w filmach technicznych NVIDIA na temat płynnych cząstek na youtube, programie Algodoo (dawniej Phun) lub wykładzie Q-Games na temat ich gry PixelJunk Shooter (slajdy na gdcvault.com/play/1012447/Go-With-the- Flow-Fluid ). W drugim przypadku Q-Games pokazuje, w jaki sposób konstruują wielokąty z kolekcji cząstek. Myślę, że to potwierdza, że ​​ta odpowiedź jest całkiem ważna dla implementacji IMHO w czasie rzeczywistym.
duch
WOWOW, dlaczego opinie negatywne? Nie szalę, chcę tylko wiedzieć dlaczego. Jest to realistyczna technika i jest używana.
Joel
„cząstki podskakują, od powierzchni i siebie nawzajem (szybciej dla gazów)”, które brzmią tak, jakbyś opisywał płyny na poziomie molekularnym i chociaż naiwne podejście może działać z wypaloną symulacją, nie zadziała dobrze w grach czasu rzeczywistego. Cząsteczki są w porządku, jeśli długi typ symulacji jest poprawny, „odbijanie się wokół” wydaje się działać tak, jakby działało z makrocząsteczkami. Rażąco wprowadziłeś w błąd, jak symulować gęstość.
AttackingHobo
Cząsteczki działają wystarczająco dobrze en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics . Został użyty w najnowszej wersji demonstracyjnej FLT, jak opisano w directtovideo.wordpress.com/2011/05/03/numb-res. Implementacja ta może być nieco ciężka, ale prostsze przybliżenia, jak w rozmowie GDC Pixel Junk Shooter, powinny działać dobrze.
nieważne
6

Jedyną biblioteką, jaką mogłem wymyślić, która konkretnie zajmuje się płynami, jest Fluidic . Jest dość alfa i ma tylko jedną wersję. Biblioteka fizyki Bullet obsługuje „hydrodynamikę cząstek wygładzonych”, technikę stosowaną do modelowania płynów. Mimo że biblioteka jest ukierunkowana na 3D, można zastosować wiązania do jednej osi, aby działała w 2D.

Moim zaleceniem byłoby, jak już wspomniałem w niektórych komentarzach do innych odpowiedzi, użycie standardowego silnika fizyki, takiego jak Box2D lub Chipmunk, i użycie szeregu kół do modelowania wody (z grawitacją) lub gazu (bez grawitacji) i połączenie ich razem w jedno ciało wodne lub gazowe. Możesz nałożyć pewne ograniczenia na poszczególne ciała, aby „zbijały się” ze sobą, dzięki czemu możesz symulować lepkość. Obejrzyj ten film, aby zobaczyć, jak poszczególne ciała (modelowane w kwadracie na filmie) współpracują ze sobą. Pamiętaj jednak, że technika zastosowana w tym filmie nie jest taka sama jak wspomniana w tym akapicie. Możesz użyć wideo, aby dowiedzieć się, w jaki sposób okręgi oddziałują na siebie i spróbować naśladować to za pomocą ograniczeń obecnych w używanej bibliotece fizyki.

Interesująca część pojawia się, gdy chcesz połączyć wiele kręgów w zbiornik wodny. Najprostszym rozwiązaniem, jakie mogę wymyślić, jest narysowanie każdego koła jako metabelki, aby pojawiły się jako część większego ciała. Można znaleźć matematyki i jakiś przykładowy kod za tymi organami tutaj .

duch
źródło
Film, do którego prowadzi link, wykorzystuje znacznie więcej niż tylko wiele kręgów. Używa techniki znanej jako SPH. Blaze Port of Flui ° d ° emo wykorzystuje box2d znaleźć kolizje i stosować siły, ale metody zastosowania SPH obliczyć siły nie sztywne ciała box2d użytkownika.
deft_code
Masz absolutną rację w tym względzie. Wideo miało być ilustracyjne, a nie przykładowe. Dziękuję za wspomnienie o moim błędzie i zaktualizowałem odpowiedź, aby zapobiec dalszym nieporozumieniom.
duch
3

Minęło kilka lat od opublikowania tego pytania, ale natknąłem się na nie podczas wyszukiwania, więc pomyślałem, że go zaktualizuję.

Google wydało LiquidFun (open source) dla systemu Box2D. Ma pewne ograniczenia, ale jest to szybki sposób na rozpoczęcie od cząstek cieczy, piasku itp. O całkiem przyzwoitej wydajności.

https://github.com/google/liquidfun

PixelJunk ma świetne podejście, ale jest to prywatna biblioteka. Podzielili się niesamowitym poziomem szczegółów w swoim przemówieniu na GCD 2010.

TrophyGeek
źródło