W mojej grze eksperymentuję z warunkami pogodowymi i byłem pod wrażeniem sposobu, w jaki Starbound radził sobie z deszczem. Zasadniczo, gdy deszcz uderza w ziemię, jest albo rozpraszany poziomo (i pochłaniany przez ziemię), albo tworzy stosy wody (gdy krople deszczu lądują w otworze w ziemi).
Ten film wyraźnie to pokazuje: http://imgur.com/gallery/CKCGKbG
Wiem, jak sprawić, by deszcz padał i sprawdził, gdzie uderza w ziemię, ale tam utknąłem. Moje pytanie brzmi: jak można to stworzyć? I jak można modelować przepływ wody tak idealnie, bez niszczenia wydajności?
Z góry dziękuję!
2d
water
fluid-dynamics
Pandaqi
źródło
źródło
Odpowiedzi:
System wodny Starbound jest w rzeczywistości automatami komórkowymi opartymi na kafelkach 2D. Każda płytka na ekranie, która nie zawiera przedniej warstwy płytki, może pomieścić wodę. Ilość wody jest obliczana za pomocą automatów komórkowych.
Więcej informacji na temat tej techniki tutaj:
http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php
http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/
Jeśli chodzi o krople deszczu, są to cząstki. Służą głównie do udawania, że woda spada z nieba. Woda gromadzi się tylko dlatego, że gra wie, że obecnie pada deszcz. Poszczególne krople nie mają nic wspólnego z faktycznym tworzeniem się basenów wodnych.
Sposób, w jaki gromadzą się, polega na określeniu, gdzie są dziury w górnej warstwie ziemi. Jeśli istnieje obszar, w którym może gromadzić się woda, komórki w tym obszarze odpowiednio zwiększają poziom wody.
Starbound zajmuje się również ciśnieniem wody, a ich technika renderowania jest niesamowita. Mają najlepszą implementację 2D fizyki symulacji wody za pomocą automatów komórkowych, jakie kiedykolwiek widziałem.
Oto prymitywny widok silnika fizyki płynnej, wykorzystujący wyżej wspomnianą technikę automatów komórkowych. Część renderowania staje się nieco bardziej złożona, ponieważ twoja woda jest reprezentowana przez wartość liczbową.
http://www.jgallant.com/images/pressuretest.gif
W tym przykładzie bardzo prostym ulepszeniem byłoby ukrycie komórek wodnych, które mają mniej niż 1 pełną jednostkę wody w swoim kafelku, jeśli pod nim nie ma litej płytki. Ale ukrywasz przepływ wody. Zamiast go ukrywać, musisz określić, jak płynie woda, a następnie narysować odpowiedniego duszka na jego miejsce.
źródło
Jest na to wiele sposobów. Jak zawsze „to zależy”
I tak myślę, że jeden sposób byłby w ten sposób ... Biorąc pod uwagę arbitralne „zanurzenie w ziemi”, nałóż „ogranicznik wody”, który go ogranicza. Grunt i pojemnik na wodę są rysowane warstwami, aby ziemia była pokazana jako pierwsza, a pojemnik na wodę po.
za każdym razem, gdy kropla wody uderza w ziemię, dodaj ją do pojemnika na wodę. Kiedy pojemnik na wodę osiągnie magiczną liczbę, dodaj linię wody. Powiedzmy, że 10 kropli ląduje w zanurzeniu, co dodaje jedną linię do pojemnika na wodę.
Powiedzmy, że waterbox ma 32 x 32 piksele. Dodaj jedną linię koloru wody od 0,31 do 31,31. Kolejne 10 kropli, narysuj linię od 0,30 do 31,30. Gdy gromadzą się krople, budujesz pojemnik na wodę od dna, aż będzie pełny.
Mam nadzieję, że to ma sens.
źródło