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ą.
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.
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ść.
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 .
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.
Odpowiedzi:
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ą.
źródło
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.
źródło
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 .
źródło
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.
źródło