Wie man eine Plasma-Spur für ein Raumschiff erstellt


13

Ich habe viele großartig aussehende Weltraumspiele gesehen, die alle ähnliche Effekte verwenden. Ich bin wirklich daran interessiert herauszufinden, wie einige dieser Effekte im Allgemeinen durchgeführt werden.

Insbesondere möchte ich wissen, wie einige der Spuren hinter Raumschiffen oder Raketen ausgeführt werden, ohne alle verfügbaren Ressourcen zu nutzen.

Beispiele für den Effekt finden Sie in den Screenshots zu Gimbal und sogar im Video unter demselben Link. Auch die Raketenspuren in Ether Vapor .

Sind das beide die gleichen Techniken? Ich interessiere mich hauptsächlich für 2D, aber ich kann mir nicht vorstellen, dass es zu unterschiedlich wäre.

Wie würde ich also vorgehen, um diese Art von Effekt zu erzielen? Sprechen wir über Pixel-Shader, Mischmodi / Filter, Bitmap-Effekte, Partikelsysteme oder was? Nicht wirklich plattformspezifisch. Ich suche nur nach der Theorie, aber spezifische Beispiele oder Links wären großartig. Und je mehr Details desto besser.

Antworten:


7

Wie würde ich also vorgehen, um diese Art von Effekt zu erzielen? Sprechen wir über Pixel-Shader, Mischmodi / Filter, Bitmap-Effekte, Partikelsysteme oder was? Nicht wirklich plattformspezifisch. Ich suche nur nach der Theorie, aber spezifische Beispiele oder Links wären großartig. Und je mehr Details desto besser.

Alles das oben Genannte.

Wenn Sie nicht in ihrem Quellcode stöbern, wissen Sie möglicherweise nicht genau, wie sie es getan haben.

Doch von den Blicken der beiden Spiele, beide haben , was erscheint Geometrie und folgen dem Schiff. Es muss nicht unbedingt ein grundlegendes Punkt-Sprite-Partikelsystem sein, aber es ist auch nicht allzu schwierig.

Einige Spiele verwenden einen Kurven-Algorithmus und generieren daraus eine Liste von Scheitelpunkten. Dabei werden verschiedene Texturen an den beiden Endpunkten des Trails verwendet, sodass der Auspuff an einer Stelle heiß und an der anderen kühler und besser aussieht schleppt sich in den Weltraum.

Das Schiff eines Spielers ist ein interessanter Fall, da die Bewegungen unvorhersehbar sind und Sie möglicherweise entweder die Kontrollpunkte Ihres Kurvenalgorithmus aktualisieren oder die letzte Schiffsposition abtasten und daraus Scheitelpunktpositionen generieren müssen.

Schauen Sie sich diese Antwort von einer früheren Frage an, wenn Sie möchten, dass etwas außerhalb der Kontrollpunkte funktioniert. Für Ihre Bedürfnisse würde das Abtasten der Spielerposition wahrscheinlich viel besser funktionieren und einfacher zu verstehen sein.

Folgendes soll Sie zum Nachdenken anregen:

Starten Sie das Abtasten der Playerposition. Diese Punkte bilden die Körpersegmente Ihres Trails, aus denen die Geometrie konstruiert werden kann. Es ist eine gute Idee, ein separates Schwanzsegment mit einer separaten Textur beizubehalten. Möglicherweise möchten Sie erkennen, wann sich ein Spieler dreht, und die Häufigkeit dieser Segmente erhöhen, da Sie sonst blockige Kurven erhalten. Es sei denn, das ist der Effekt, den Sie anstreben :)

Unter bestimmten Umständen müssen die Segmente aufhören, sich zu erzeugen, und die vorhandenen Segmente sollten langsam verkleinert werden, beginnend mit dem Körpersegment, das dem Schwanz am nächsten liegt (aber nicht dem Schwanz selbst). Dies ist der Fall, wenn der Player langsamer wird. Wenn jedoch die Geschwindigkeit, mit der die Segmente verkleinert werden, mit der Schiffsgeschwindigkeit des Spielers übereinstimmt, wird ein neues Segment gerade rechtzeitig beim Herausnehmen gebildet. Das funktioniert also auch für ein Schiff, das sich in voller Bewegung befindet. Die Länge des Pfades ist immer gleich - was einen flüssigen, gleichmäßigen Strom ergibt.

Das Kopfsegment sollte sich immer an der aktuellen Position des Spielers befinden. Wenn Kurven erkannt werden, wird das vorhandene Kopfsegment zu einem Körpersegment hinzugefügt und ein neues Kopfsegment gestartet. Wiederholen. Abhängig von Ihren Texturen kann jedes Segment auch eine maximale Länge haben.

Dies gibt uns eine einfache Möglichkeit, diesen Effekt zu modellieren: Wir arbeiten von der Idee ab, dass der Effekt immer von selbst abnimmt / schrumpft, wenn nicht mehr Segmente geliefert werden, und spielen mit Geschwindigkeiten, um zu verhindern, dass er schrumpft.


4

Es gibt viele verschiedene Möglichkeiten, solche Trails zu erstellen. Sie können einfache Linien, Polygone, Punktwolken usw. verwenden.

Sie alle basieren normalerweise auf einem von zwei Konzepten:

  • Verfolgen Sie die vorherigen Positionen und verwenden Sie diese, um den Schwanz zu zeichnen.
  • Verfolgen Sie die Geschwindigkeit / Richtung und passen Sie das Heck entsprechend an.

Der erste Ansatz eignet sich besser für Dinge wie Raketen, während der zweite Ansatz besser für bestimmte angehängte Dinge geeignet ist, die auf etwas folgen (z. B. den Schwanz eines Drachen).

Eine einfache Implementierung für Motorschwänze ist nicht so kompliziert. Sie benötigen nur einen Puffer, um vorherige Positionen zu speichern. Ich weiß nicht, welche Sprache Sie verwenden, aber dafür würde ich entweder einen Ringpuffer oder einen ähnlichen Puffer verwenden (schnelle Löschungen und Einfügungen an den Enden).

Bei jedem x-ten Frame / Update-Tick (Sie müssen es nicht hundertmal pro Sekunde machen), legen Sie im Wesentlichen das älteste / letzte Element in Ihrem Puffer ab und fügen die aktuelle Position an dessen Vorderseite hinzu (nur wenn der Puffer gefüllt ist; Stellen Sie sicher, dass es immer n Elemente enthält (wobei n die Länge Ihres Schwanzes bestimmt).

Während des Zeichnens beginnen Sie einfach an Ihrer aktuellen Position und zeichnen eine Reihe von Linien durch alle Punkte in Ihrem Puffer. Gleichzeitig verringern Sie Ihre Deckkraft mit jedem weiteren Scheitelpunkt.

Auf diese Weise solltest du einen schönen und sauberen Schwanz haben. Abhängig von Ihrer Plattform können Sie dies erweitern, z. B. mithilfe von Shadern oder indem Sie eine nette Schwanzgrafik entlang dieses Pfades wickeln.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.