Ich arbeite derzeit an einem 2D "Worms" -Klon in XNA, und eine der Funktionen ist "deformierbares" Gelände (z. B. wenn eine Rakete auf das Gelände trifft, gibt es eine Explosion und ein Teil des Geländes verschwindet).
Derzeit verwende ich eine Textur mit einem zunehmend höheren Rotwert, wenn sie sich der Mitte nähert. Ich gehe jedes Pixel dieser "Deform" -Textur durch. Wenn das aktuelle Pixel ein Geländepixel überlappt und einen ausreichend hohen Rotwert aufweist, ändere ich das Farbarray, das das Gelände darstellt, auf transparent. Wenn das aktuelle Pixel NICHT einen ausreichend hohen Rotwert hat, schwärze ich die Geländefarbe (sie wird schwärzer, je näher der Rotwert am Schwellenwert liegt). Am Ende dieses Vorgangs verwende ich SetData, um meine Geländetextur zu aktualisieren.
Mir ist klar, dass dies kein guter Weg ist, nicht nur, weil ich über Pipeline-Stände und dergleichen gelesen habe, sondern auch, weil es ziemlich verzögert werden kann, wenn viele Krater gleichzeitig hinzugefügt werden. Ich möchte meine Kratergenerierung auf der GPU neu erstellen, anstatt Render Targets "Ping-Ponging" zwischen dem Ziel und der zu ändernden Textur zu verwenden. Das ist nicht das Problem, ich weiß, wie das geht. Das Problem ist, dass ich nicht weiß, wie ich meinen Brenneffekt mit dieser Methode beibehalten kann.
So sieht der Brenneffekt jetzt aus:
Hat jemand eine Idee, wie ich einen ähnlichen Brenneffekt erzeugen würde (Verdunkeln der Ränder um den gebildeten Krater)? Ich bin mit Shaders völlig unbekannt, aber wenn es erforderlich ist, wäre ich wirklich dankbar, wenn mich jemand durch die Vorgehensweise führen würde. Wenn es andere Möglichkeiten gibt, wäre das auch großartig.