Ich experimentiere mit den Wetterbedingungen in einem meiner Spiele und war beeindruckt von der Art und Weise, wie Starbound mit dem Regen umging. Wenn Regen auf den Boden trifft, verteilt er sich entweder horizontal (und wird vom Boden absorbiert) oder es entstehen Wasserhaufen (wenn Regentropfen in einem Loch im Boden landen).
Dieses Video zeigt dies deutlich: http://imgur.com/gallery/CKCGKbG
Ich weiß, wie man Regen fallen lässt und prüft, wo er auf den Boden trifft, aber dort stecke ich fest. Meine Frage ist: Wie konnte das geschaffen werden? Und wie könnte man den Wasserfluss so perfekt modellieren, ohne die Leistung zu beeinträchtigen?
Danke im Voraus!
2d
water
fluid-dynamics
Pandaqi
quelle
quelle
Antworten:
Das Wassersystem von Starbound besteht eigentlich aus 2D-Kachel-basierten Zellularautomaten. Jede Kachel auf dem Bildschirm, die keine vordere Kachelschicht enthält, kann Wasser aufnehmen. Die Wassermenge wird über zelluläre Automaten berechnet.
Weitere Informationen zu dieser Technik finden Sie hier:
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/
Die Regentropfen sind Partikel. Sie dienen hauptsächlich dazu, vorzutäuschen, dass tatsächlich Wasser vom Himmel fällt. Das Wasser sammelt sich nur an, weil das Spiel weiß, dass es gerade regnet. Die einzelnen Tropfen haben nichts mit der tatsächlichen Bildung der Wasserbecken zu tun.
Die Art und Weise, wie sie es ansammeln, besteht darin, zu bestimmen, wo sich Löcher in der obersten Schicht des Bodens befinden. Wenn es einen Bereich gibt, in dem sich Wasser ansammeln kann, erhöhen die Zellen in diesem Bereich ihren Wasserstand entsprechend.
Starbound befasst sich auch mit dem Wasserdruck und ihre Rendering-Technik ist ziemlich erstaunlich. Sie haben die beste 2D-Implementierung der Wassersimulationsphysik unter Verwendung von Zellularautomaten, die ich je gesehen habe.
Hier ist eine primitive Ansicht einer Flüssigphysik-Engine unter Verwendung der oben erwähnten zellularen Automatentechnik. Der Rendering-Teil wird etwas komplexer, da Ihr Wasser durch einen numerischen Wert dargestellt wird.
http://www.jgallant.com/images/pressuretest.gif
In diesem Beispiel besteht eine sehr einfache Verbesserung darin, Wasserzellen mit weniger als 1 vollen Wassereinheit in der Kachel auszublenden, wenn sich keine feste Kachel darunter befindet. Aber dann versteckst du den Wasserfluss. Anstatt es zu verstecken, müssten Sie bestimmen, wie das Wasser fließt, und dann das entsprechende Wassersprite an seine Stelle ziehen.
quelle
Es gibt eine Reihe von Möglichkeiten, dies zu erreichen. Wie immer kommt es darauf an
Und so denke ich, wäre ein Weg dieser Weg. Bei einem willkürlichen "Eintauchen in den Boden" Überlagern Sie eine "Wasserkiste", die ihn begrenzt. Der Boden und der Wasserkasten werden in Schichten gezeichnet, so dass der Boden zuerst und der Wasserkasten danach angezeigt wird.
Jedes Mal, wenn ein Wassertropfen auf den Boden fällt, geben Sie einen in den Wasserkasten. Wenn die Wasserkiste eine magische Zahl erreicht, fügen Sie eine Linie Wasser hinzu. Nehmen wir also an, 10 Tropfen landen im Bad, dies fügt dem Wasserkasten eine Linie hinzu.
Angenommen, die Waterbox hat 32 x 32 Pixel. Fügen Sie eine Linie Aquarell von 0,31 bis 31,31 hinzu. Weitere 10 Tropfen, ziehen Sie eine Linie von 0,30 - 31,30. Wenn sich Tropfen ansammeln, bauen Sie den Wasserkasten von unten auf, bis er voll ist.
Hoffe das macht Sinn.
quelle