Szukam jakichkolwiek danych wejściowych na temat symulacji wody w 2D w stosunku do dość dużej (nazwij ją) tablicy zablokowanej / niezablokowanej (widzianej z boku). Wymyśliłem następujące pomysły:
Automaty komórkowe
Wykonaj masowo równoległą symulację procesora za pomocą automatów komórkowych . Z zasadami tak prostymi jak:
- Jeśli komórka jest otwarta na dole, przejdź do niej.
- Sprawdź lewą i prawą komórkę, wybierz losową z dwóch i przejdź do niej.
Plusy
- Prosty do wdrożenia.
- Znaczący / deterministyczny w systemie dla wielu graczy.
Cons
- Prawdopodobnie bardzo powoli.
- Nie przekonujący.
Płynna dynamika na GPU
Wykonaj przybliżone przybliżenie dynamiki płynów na GPU w oparciu o teksturę taką jak poniżej:
+------+-----+-----+-------+
|R |G |B |A |
+------+-----+-----+-------+
|vX |vY |NULL |Density|
+------+-----+-----+-------+
Plusy
- Prawdopodobnie bardzo szybko.
- To może być całkiem przekonujące.
- Kolejny moduł cieniujący pikseli mógłby renderować go bezpośrednio.
Cons
- Trudne do wdrożenia.
- Trudne do ulepszenia.
- Nie mogę przydzielić jednej tekstury wielkości mojego poziomu.
- Mógłbym nakładać się na obszary siatki, ale spowodowałoby to dodatkową złożoność.
Cząsteczki
Użyj cząstek do symulacji wody. Podczas renderowania za pomocą mieszania dodatków, a następnie zastosuj funkcję mnożenia do kanału alfa, aby uzyskać ostre krawędzie wody.
Plusy
- Prawdopodobnie będzie ładnie wyglądać.
- Łatwy do wdrożenia.
- Łatwy do renderowania.
- Ma to sens w systemie dla wielu graczy, choć do transferu wymagałoby sporo pasma.
Cons
- Efekty między cząsteczkami będą prawdopodobnie powolne (wyszukiwanie sąsiedztwa).
- Może to prowadzić do „wycieku” wody przez stałe przestrzenie (ponieważ stałe przestrzenie są małe, np. 1px).
- Może to prowadzić do dziwnych dziur w wodzie w zależności od wielkości cząstek.
- Oba powyższe można złagodzić, umożliwiając dryfowanie cząstek bliżej siebie niż ich rzeczywisty rozmiar, jednak spowodowałoby to problemy z wydajnością między cząsteczkami i wydajnością cząstek / krajobrazu.
Jakieś dalsze pomysły?
Uwaga: jest to przybliżenie, nie szukam tutaj fizycznie poprawnej wody - po prostu coś, co „jest wystarczająco dobre” (punkty bonusowe za szybkie i brudne). Gra jest wieloosobowa, więc niestety cały poziom musi być ciągle symulowany.