Wie repliziere ich den Warp-Effekt aus Geometry Wars?


12

Ich versuche, den Warp-Effekt zu erzielen, den Sie in Spielen wie Geometry Wars sehen .

Screenshot von Geometry Wars mit Warp-Effekt

Kann mir jemand erklären, was hier los ist? Ich habe das Gefühl, dass die Z-Achse des Gitters in irgendeiner Weise vom Programmierer manipuliert wird, aber gibt es vielleicht eine bekannte mathematische Gleichung, um wirklich den richtigen Verzerrungseffekt zu erzielen?

Edit: Um genauer zu sein, meine ich das Verziehen des Gitters. Wie alles in Richtung der negativen Z-Achse gezogen aussieht und dann abprallt.


1
Beziehen Sie sich auf den Hintergrund, der sich biegt? Da es sich um Geometry Wars handelt , gibt es in dem Screenshot eine Menge Chaos, das mich für eine Weile dazu gebracht hat, mir den Kopf zu kratzen, um zu versuchen, zu sagen, worauf Sie sich beziehen.
Grace Note

Ja, der Hintergrund krümmt sich.
Joey Green

Antworten:


12

Eine 10-minütige Implementierung eines einfachen Federsystems (oder so sagt er in seinem Blog ;)). Das System kann mit mehreren Verwerfungen und anderen das Gitter verzerrenden Dingen umgehen.

Aktualisiert, um einige kleinere Details hinzuzufügen:

Ein paar andere Details. Aus einem Interview, das früher auf der Bizarre Creations-Website gehostet wurde (diese Website ist jetzt aufgrund der Schließung des Unternehmens verschwunden), ging eine Frage hervor:

F: Eine der auffälligsten neuen grafischen Funktionen im Spiel ist der Spielbereich "Schwerkraftraster". Wie hast du das so cool aussehen lassen? Hat wirklich jedes Objekt im Spiel seine eigene Schwerkraft? Das Gitter selbst besteht aus 60.000 Punkten, von denen jeder eine geringe Kraft auf seinen Nachbarn ausübt. Die Simulation selbst befindet sich am Rande der Stabilität, was dazu führt, dass sie so stark schwingt, wenn eines der Spielobjekte einen kleinen Stoß auslöst! Nur wenige Objekttypen wirken sich auf das Raster aus. Da die Berechnung des Rastersystems ziemlich teuer ist, wird es zusammen mit dem Audiosystem auf dem zweiten Kern ausgeführt (der erste Kern ist dem Gameplay und den Partikeln gewidmet, der dritte wird zum Rendern des Audios verwendet).


1

Ich weiß nicht, ob es einen "richtigen" Weg gibt, aber es handelt sich wahrscheinlich nur um eine ästhetisch ansprechende lineare Transformation, die mit einer Abnahme angewendet wird, die aus der Entfernung zu einem Punkt berechnet wird.

Also für jedes Element, mit dem Sie arbeiten, würden Sie:

  • Finde den Abstand zum Zentrum der Kette (d)
  • berechne 1 - d / die maximale Entfernung des gewünschten Effekts (i für Intensität)
  • klemme das auf [0-1]
  • transformiere das Element mit lerp (identity, transform, i)

Iirc, Geometry wars wendete dies als verzerrende Verzerrung auf einige Elemente an, während andere Elemente wie Partikel nur von der "Kraft" beeinflusst wurden, ohne verzerrt zu werden. Sie können die Verzerrung in einem Vertex-Shader anwenden, vorausgesetzt, Sie haben genügend Vertices, um den Effekt reibungslos abzutasten. Alternativ können Sie alles, was Sie brauchen, zuerst in einem Offscreen-Puffer rendern und dann die Ergebnisse in einem schön tessellierten Quad rendern, auf das Sie die Verzerrung anwenden, bevor Sie alle nicht verzerrten Elemente oben hinzufügen.

In Bezug auf die Transformation erhalten Sie durch Skalieren das saugende Aussehen. Wenn ich mich richtig erinnere, gab es auch einige Drehungen, die nur eine kleine Drehung sein würden.

Sie können mit Ihren Berechnungen des Intensitätsfaktors immer ausgefeilter werden, um verrückter wirkende Effekte zu erzielen. Sie können beispielsweise den Winkel (a) berechnen, in dem sich ein Element relativ zum Mittelpunkt befindet, und diesen berücksichtigen. Nehmen Sie cos (a) und Sie können Radialwellen im Effekt erzeugen. Was Sie tun möchten, ist sich mit dem erforderlichen Gerüstcode einzurichten und dann in die Stadt zu fahren, um mit verschiedenen Kombinationen von Faktoren zu experimentieren.


Cool, danke, ich werde es ausprobieren. Ist der von Ihnen beschriebene Algorithmus im Grunde genommen ein Frühlingseffekt?
Joey Green

Nein, ich habe nicht beschrieben, wie es mit der Zeit variieren würde, also keine Feder. Ich habe gerade beschrieben, wie Sie die gewünschte Verzerrungsform erhalten. Um es im GW-Stil zu animieren, müsste ein weiterer Faktor hinzugefügt werden, der i über die Zeit moduliert. Versuchen Sie, das Ganze zu implementieren, und es sollte Ihnen klar werden, dass Sie es skalieren können, um sich zu entspannen oder Ihre Wirkung zu verstärken. Leiten Sie eine Sinuswelle durch diesen Modulationswert oder hüpfen Sie wie bei einer 1D-Feder, um das Ganze effektiv zu hüpfen. Auch hier ist das Experimentieren Ihr Freund, sobald Sie ein Geschirr mit einer Reihe herumschwebender Variablen haben.
Chris Subagio
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.