Wie kann ich mit Alpha Blending und Partikeln einen guten Feuereffekt erzielen?

41

Verwenden Sie die folgende Einstellung für den OpenGL-Partikeleffekt:

SRC: GL_SRC_ALPHA
DST: GL_ONE

Erzeugt eine additive Mischung, die auf einem schwarzen Hintergrund spektakulär aussieht, auf helleren Farben jedoch furchtbar ist, da sie allmählich in Weiß übergeht.

Ich habe dann Alpha Blending verwendet:

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

Auf diese Weise können andere Hintergründe verwendet werden, ohne die Farbe der Partikel zu beeinträchtigen. Die Partikel selbst sehen jedoch im Vergleich zur Additivmischung matt aus. Wie kann ich mit Alpha Blending und Partikeln einen guten Feuereffekt erzielen?

Zusatzstoff:

Additiv auf Schwarz Additiv auf blau

Alpha:

Alpha auf Schwarz Alpha auf blau

AKTUALISIEREN:

Nach Davids Ratschlägen erstellte ich eine separate Textur und verwendete dann eine additive Mischung für den Partikeleffekt, bevor ich auf die Textur zeichnete. Das Problem dabei ist, dass beim Zeichnen auf eine Alpha = 0-Textur nur die farbigen Teile des Partikels vor meiner Weltkarte angezeigt wurden, da Sie normalerweise einen schwarzen Hintergrund haben. Der Trick bestand darin, zwei Texturen zu verwenden. Ich habe eine schwarze Textur erstellt und dann die Partikel darauf gezeichnet. Dann entfernte ich die Alpha-Schicht der Partikel von dieser Textur, entfernte effektiv das gesamte umgebende Vollschwarz und verblasste die teilweise sichtbaren Partikel, während das darunterliegende Schwarz so zurückblieb, wie Sie es erwarten würden, wenn additive Mischpartikel auf einem schwarzen Hintergrund erzeugt würden. Kurz gesagt, ein anstrengender Prozess, aber irgendwann habe ich es geschafft:

Regelmäßiger Zusatz und meine Version

Hier ist der Thread, in dem ich meinen Prozess gepostet habe: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528

Video: http://www.youtube.com/watch?v=JptGbEO3b5E

Aram Kocharyan
quelle

Antworten:

17

Ich gebe zu, dass mir keine ideale Lösung für dieses Problem bekannt ist, daher beschreibe ich eine Problemumgehung, mit der Sie sich möglicherweise auskennen oder nicht:

  1. Rendern Sie alle Partikel mithilfe der additiven Überblendung in eine separate Textur (oder ein Renderziel), wobei der Hintergrund in transparent geändert wird .
  2. Render , dass die Textur (oder Ziel - Render) auf oben der Szene mit Alpha - Blending .

Ich habe es in Photoshop ausprobiert und hier ist, was ich bekommen habe - Es ist nicht perfekt, aber es bewahrt zumindest die ursprünglichen Farben besser:

Bildbeschreibung hier eingeben

Hier ist die ursprüngliche Textur, ohne die Partikel additiv zu mischen:

Bildbeschreibung hier eingeben

David Gouveia
quelle
Würde dies sie in zwei Texturen aufteilen und so aussehen, als würde eine Textur der Additivmischung auf einen Hintergrund gezeichnet?
Aram Kocharyan
@AramKocharyan Ich habe es nicht persönlich ausprobiert, außer in Photoshop, wo die Ergebnisse vernünftig erschienen. Aber ich denke, es sollte aussehen wie Ihr erstes Bild, aber mit all den Schwarztönen, die durch Ihre Hintergrundfarbe ersetzt wurden. Mit anderen Worten, die Partikel addieren sich und ergeben das große Highlight in der Mitte der Explosion, jedoch nicht mit dem Hintergrund. Dann wird die resultierende Explosion über Ihren Hintergrund eingefügt, ohne dass das ursprüngliche Aussehen erhalten bleibt.
David Gouveia
Das macht Sinn, es ist wie eine normale Überblendung in Photoshop gegen eine Überlagerung, aber es sieht aus wie ein Bild einer Überlagerung, die über einer Hintergrundebene liegt. Ich werde es versuchen und dich wissen lassen.
Aram Kocharyan
@AramKocharyan Ich werde die Ergebnisse, die ich in Photoshop erhalten habe, in ein paar Minuten veröffentlichen, damit Sie sie vergleichen können.
David Gouveia
5
Wirf das
4

Wie David Gouveia betonte, gibt es keinen zufriedenstellenden Ersatz für das additive Mischen auf hellem Hintergrund. Der beste Effekt, den ich gefunden habe (für den kein Rendern in einem Backbuffer erforderlich ist), ist die Verwendung des folgenden GL-Mischmodus:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

Es ist nicht so schön wie das additive Mischen, aber viel besser als GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Wenn Sie die Start- und Endwerte für Alpha und Farbe ein wenig verändern, erhalten Sie möglicherweise Ergebnisse, die dem additiven Mischen sehr nahe kommen.

Partikelmischmodi

Im Bild oben ist GL_SRC_ALPHA, GL_ONElinks, in der Mitte GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAund rechts der Mischmodus zu sehen, den ich für dieses Setup vorschlagen würde.

Blödmann
quelle
Ich bin damit einverstanden, dass diese Methode für die vollständige Kontrolle über die Farbe hervorragend funktioniert.
Aram Kocharyan
Zu beachten ist, dass bei dieser Methode das Feuer am besten ausgeblendet werden kann, indem es auf die Größe Null verkleinert wird, da das Verringern des Alphas dazu führt, dass es in Weiß übergeht.
Aram Kocharyan
3

Haben Sie versucht, beide zu verwenden? Tragen Sie einige Partikel mit Alpha-Blending auf, damit Ihre Farben so aussehen, wie Sie es möchten, und kommen Sie dann mit einem additiven Blending zurück, um das gewünschte Highlight zu erzielen.

notlesh
quelle
Das könnte meine nächste Option sein, aber ich möchte Partikel auf ein Minimum beschränken. Hoffentlich kann ich beides halbieren.
Aram Kocharyan
3

Zunächst einmal scheinen die Partikelbilder, die Sie verwenden, einen schwarzen Hintergrund zu haben, was zu den dunklen Rändern in diesem zweiten Bild führt. Mach das nicht; Zeichnen Sie also nicht die Form des Partikels in den Farbkanälen. Stattdessen sollte das Bild einfarbig sein und nur die Form im Alphakanal definieren.

Dadurch wird das Erscheinungsbild der Alpha-Transparenz erheblich verbessert. Dann können Sie das Aussehen des Gesamteffekts weiter verbessern, indem Sie die Partikel im Laufe ihrer Lebensdauer farblich verändern lassen. Das Grundbild ist sehr hell und gibt Ihnen den zentralen, hellgelben Bereich. Dann färben Sie die Partikel rötlich-orange und erhöhen die Färbung im Laufe der Zeit. Auf diese Weise werden die Partikel dunkler, wenn sie sich aus der Mitte herausbewegen.

schockierend
quelle
Ja, die Textur ist nur ein weißer Pinsel, dessen Alpha von der Mitte abweicht.
Aram Kocharyan
huh, wenn das stimmt, ist es seltsam für mich, dass Ihr Alpha-Transparenz-Screenshot diese dunklen Lichthöfe um die Partikel hat.
jhocking
Ja, ich bin mir nicht sicher, warum sie sich um das Alpha-Blending gebildet haben. Aber für das, was ich jetzt habe, scheint es in Ordnung zu sein.
Aram Kocharyan
Siehe youtube.com/watch?v=JptGbEO3b5E
Aram Kocharyan
Das sieht ziemlich gut aus, das solltest du in dein Fragen-Update aufnehmen.
Am