Ich arbeite an einem von oben nach unten gekachelten, ziemlich grafischen 2D-Spiel, das von Dwarf Fortress inspiriert ist. Ich bin gerade dabei, einen Fluss in der Spielwelt zu implementieren, der eine Reihe von Plättchen abdeckt, und ich habe die Flussrichtung für jedes Plättchen berechnet, wie unten durch die rote Linie in jedem Plättchen gezeigt.
Als Referenz für den Grafikstil sieht mein Spiel derzeit so aus:
Was ich brauche, ist eine Technik, um das in jedem der Flusskacheln fließende Wasser zu animieren, so dass der Fluss in die umgebenden Kacheln übergeht, sodass die Kachelkanten nicht sichtbar sind.
Das nächste Beispiel, das ich gefunden habe, ist das, was ich suche, unter http://www.rug.nl/society-business/centre-for-information-technology/research/hpcv/publications/watershader/ beschrieben, aber ich bin nicht ganz an dem Punkt zu verstehen, was darin vor sich geht? Ich habe genug Verständnis für Shader-Programmierung, um meine eigene dynamische Beleuchtung implementiert zu haben, aber ich kann mich nicht ganz mit dem Ansatz im verlinkten Artikel auseinandersetzen.
Könnte jemand erklären, wie der oben genannte Effekt erzielt wird, oder einen anderen Ansatz vorschlagen, um das gewünschte Ergebnis zu erzielen? Ich denke, ein Teil der obigen Lösung besteht darin, die Kacheln zu überlappen (obwohl ich nicht sicher bin, in welchen Kombinationen) und die normale Karte zu drehen, die für die Verzerrung verwendet wird (wieder keine Ahnung von Einzelheiten), und darüber hinaus bin ich ein bisschen verloren, danke für irgendeine Hilfe!
Antworten:
Ich hatte keine Kacheln zur Hand, die mit Verzerrungen gut aussahen. Hier ist eine Version des Effekts, den ich stattdessen mit diesen Kenney-Kacheln verspottet habe :
Ich verwende eine Flusskarte wie diese, wobei Rot = Fluss nach rechts und Grün = nach oben, wobei Gelb beides ist. Jedes Pixel entspricht einer Kachel, wobei das Pixel unten links die Kachel bei (0, 0) in meinem Weltkoordinatensystem ist.
Und eine Wellenmustertextur wie diese:
Ich bin mit der hlsl / CG-Syntax von Unity am besten vertraut, daher müssen Sie diesen Shader ein wenig an Ihren glsl-Kontext anpassen, dies sollte jedoch unkompliziert sein.
quelle