Plasma Effect [UPDATE 04-07-2009]

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Plasma Effect [UPDATE 04-07-2009]

      Hallo zusammen!

      F4LL0UT hat nach einem Tutorial zur Verwendung von Blend Modes gefragt.
      Also, hier ist es. Es soll euch einfach Step-by-Step die Basics nahe bringen. Das Ergebnis ist absolut noch kein Hit, aber die Grundlage!

      Vorweg:
      Der Blend Mode zeichnet auf andere Art und Weise. Es gibt verschiedene dieser Modi. Wir beschäftigen uns hier mit 'bm_add' (addierend). Für diesen gilt: je dunkler die Farbe, desto transparenter. Im Gegensatz zu normalen transparenten Grafiken werden hier die Übergänge weich gezeichnet, wodurch es sich eben besonders für Effekte eignet.

      Der gewünschte Plasma-Effekt entsteht durch die Überlagerung vieler Grafiken im additiven Blend-Modus. In diesem Beispiel werden etwa 80 Instanzen gleichzeitig gezeichnet, was kein Problem darstellt.

      Hier ein Screen aus meinem Projekt Nordlicht, um zu verdeutlichen, wie es aussehen kann:





      VOREINSTELLUNGEN:


      Startet den GM und öffnet die 'Global Game Settings'.
      Um einen schönen Farbeffekt zu erzielen, setzen wir unter der Registerkarte 'Graphics' ein Häkchen bei 'Interpolate colors between pixels'.
      Wenn ihr das Ganze in Vollbild sehen wollt, setzt gleich das Häkchen bei 'Start in full-screen mode' und darunter bei 'Full scale', um die Raumgröße auf die Bildschirmgröße zu strecken. Natürlich könnt ihr auch F4 drücken, um zwischen Vollbild und Fenstermodus hin und her zu schalten, während das Programm läuft.


      SPRITES:

      Wir benötigen nur ein Sprite. Wichtig ist, dass es weiche Übergänge hat. Harte Kanten nutzen im Blend Mode nichts. Ihr könnt ein wenig herum experimentieren. Dazu stelle ich diese Grafik bereit:



      Nennt es für dieses Tutorial "spr_particle" und klickt unter 'Origin' auf 'Center'.


      RAUMEINSTELLUNGEN:

      Als nächstes erstellen wir einen neuen Room. Da solche Grafikdemos keine hohe Auflösung benötigen, stellen wir unter der Registerkarte 'settings' folgende Werte ein:
      Width: 320
      Height: 240
      Unter der Registerkarte 'backgrounds' stellen wir die Hintergrundfarbe auf schwarz.


      OBJECT 1:

      Das erste Objekt nennen wir 'obj_particle' und geben ihm ein paar Grundeinstellungen für Größe (size), Richtung (direction), Geschwindigkeit (speed) und Transparenz (alpha). Eine zufällige Farbe soll auch gewählt werden. Also schreibt folgendes ins CREATE EVENT:

      GML-Quellcode

      1. // Grundeinstellungen
      2. size = 1+random(6);
      3. direction = random(360);
      4. speed = 3+random(3);
      5. alpha = random(1);
      6. // Zufällige Farbe wählen:
      7. col = choose(c_red, c_aqua, c_lime, c_orange, c_yellow, c_white);


      Im STEP EVENT lassen wir die Grafik langsam ausblenden und zerstören anschließend die Instanz. Außerdem verringern wir die Geschwindigkeit, das gibt einen schönen Effekt.

      GML-Quellcode

      1. if(speed > .05) {speed *= .95;}
      2. alpha -= .01;
      3. if(alpha <= 0) {instance_destroy();}


      Und nun zum Wichtigsten. Im DRAW EVENT zeichnen wir das Sprite im additiven Blend Mode:

      GML-Quellcode

      1. draw_set_blend_mode(bm_add);
      2. draw_sprite_ext(spr_particle,0,x,y,size,size,0,col,alpha);
      3. draw_set_blend_mode(bm_normal);



      OBJECT 2:

      Wir benötigen ein 2. Objekt als Controller, das in jedem Step eine Instanz vom 'obj_particle' erstellt. Dazu schreiben wir nur folgende Zeile ins STEP EVENT:

      GML-Quellcode

      1. instance_create(160,120,obj_particle);


      Bei mir heißt es 'obj_controller'. So, nun setzt ihr nur dieses Objekt irgendwo in den Raum und startet das Programm.

      Eine gm6/gmk habe ich mit Absicht nicht angehängt, weil der Lerneffekt beim Selbermachen größer ist.

      Viel Spaß beim Herumprobieren!
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von mauge ()

    • Hab das ebenfalls lange Zeit übersehen. Sehr schön! Was mir am besten an diesem Tutorial gefällt, ist wie es geschrieben ist. Wären alle Tutorials in dieser Form, wäre unser Technikforum wesentlich leerer...
      Einige meiner Spiele:
    • Original von Melancor
      Viel glatter wird das ganze, wenn Ihr anstelle des Sprites draw_circle_color benutzt. Allerdings auch viel langsamer.

      LINK


      Ich verstehe nicht, was daran glatter sein soll. Erstens gibt es Interpolation und zweitens könnte man das Sprite größer machen. Ich verwende ausschließlich diese Methode - schon allein, weil Sprites in Formen sein können, die man nicht mit den Standard-Draw-Funktionen zeichnen kann.

      @interceptor: Danke für das Lob!
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • Oh, du hast Recht. Aber eigentlich sieht der Plasma-Effekte doch ein wenig anders aus. Deine Sprites sind dafür ungeeignet. Ich werde mal einen neuen Screen posten.

      Edit: Ich habe das Tutorial nun komplett aktualisiert. Es gibt einen Screenshot und 3 Sprites zum Herumprobieren. Viel Spaß!
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von mauge ()

    • Naja, das liegt halt daran, dass du den Rand deiner Sprites weichgezeichnet hast, ich aber nur einen "harten" Pinsel verwendet habe :D
      Hast absolut recht, mein Sprite ist ungeeignet für einen weichen Partikeleffekt wie dein Blend-Plasma.

      Hier mal ein aktuellerer Screenshot (Mit deinem Sprite)



      Zum Tutorial selber wäre zu sagen, dass es im Allgemeinen sehr gut erklärt ist, nur finde ich, du hättest noch ein wenig ausführlicher erläutern können, was im Blendmode-Segment nun genau passiert. Ansonsten gibt es von meiner Seite absolut nix zu bemängeln.
    • Kleines Update: Da ich in einem anderen Thread auf dieses Tutorial verweise und mal wieder der Screenshot und das Plasma-Sprite gefehlt haben, habe ich es erneut aktualisiert. Außerdem wurde eine kleine Änderung im Code vorgenommen, um nur Farben zu verwenden, die hohe Leuchtkraft haben. Getestet habe ich es nicht, aber es sollte alles funktionieren. ^^

      Hoffe, dass es einigen hilft, den Nutzen von Blend Modes besser zu verstehen.
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • Freut mich, dass ich dir damit helfen konnte. Bedenke aber auch, dass es in vielen Fällen sinnvoller ist, das Partikelsystem vom GM zu nutzen. Es ist um ein Vielfaches schneller. Man muss je nach Bedarf entscheiden, auf welche Weise man vorgeht.
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mauge ()

    • *Auchmalantwort ;)*
      Wunderhübsch!
      Nur würde ich persönlich zu Partikeln zurückgreifen ( part_type_blend ( particle , 1 ) ;) ), da diese doch meistens um einiges schneller ist, wie du schon erwähnt hast :3
      Achja, um weiche Übergänge zu erzielen, kann man einfach beim GM-Spriteeditor unter 'Image' -> 'Blur' anklicken ( Am besten nicht Transparent ). Ich würde bei Blur immer Standard 3 nehmen, aber natürlich sollte man damit herumexperimentieren ;)
    • Ja, du hast schon Recht. Für so ein Plasmafeuerwerk ist es eigentlich völlig daneben, mit Objekten zu arbeiten. Aber es verdeutlicht eben den Effekt. Für Grafiken wie z.B. Lampen (mit Strahlen) ist diese Variante bestens geeignet.
      █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
      █████ ███████ ███ your █████ ████ government.
    • Benutzer online 1

      1 Besucher