Ich arbeite an meiner ersten Game-Engine und versuche, ein GPU-Partikelsystem zu implementieren. Ich habe bereits eine auf der CPU implementiert, aber jetzt versuche ich, sie effizienter zu machen. Mein Problem ist im Speziellen das Laichen von Partikeln auf Lebenszeit.Erstelle GPU-Partikel
Da ich mit Framebuffer-Texturen für die Partikel-Engine arbeite, ist es sehr parallel, aber auf Kosten von nicht in der Lage, zur CPU zurückzukehren, nicht wahr? Ich habe einen ersten Durchlauf beim Zeichnen eines Quads, das die Berechnungen für dieses spezielle Partikelsystem behandelt (es wird wahrscheinlich ein zweites Quad zum Sortieren geben müssen), und dann führe ich eine Idee aus, die ich hatte einen booleschen Wert oder einen int zu verwenden, wenn ich ein Partikel erstellen muss, das entweder die Notwendigkeit darstellt, ein Partikel zu erzeugen, oder die Menge der zu erzeugenden Partikel, die beide von der CPU initialisiert werden. Wenn ich also ein Teilchen (Pixel) finde, das lebenslang ist (sagen wir der Alpha-Wert der ersten fbo-Textur), ist es kleiner als Null, und ich weiß, dass ich es erstellen soll. Wie deaktiviere ich die Kreation für den Rest der Partikel oder verringern Sie die Anzahl der zu platzenden Partikel? Ich habe von Dingen wie der Umwandlung von Feedback gehört, aber ich weiß nicht, ob das der beste Weg ist. Und staatenlose Teilchen sind limitierend - nicht alle Teilchen haben eine Laichrate von 1: 1.
Um die Frage kurz zu wiederholen: Was ist der beste Weg, um GPU-Partikel zu spawnen?
Wenn ich die Anzahl der Partikel auf der CPU haben könnte, könnte ich übrigens die Menge in glDrawArraysInstanced zeichnen, also wenn Sie das in Ihre Antwort aufnehmen könnten, wäre ich dankbar.
"Ich arbeite an meiner ersten Spiel-Engine" - [Spiele schreiben, nicht Engines] (http://geometrian.com/programming/tutorials/write-games-not-engines/) –
Ich habe gearbeitet Spiele vorher. Müde von den Engines anderer Leute zu sein und nicht für jedes Spiel eine komplett neue Codebase schreiben zu wollen. Ich habe bereits eine Menge Arbeit an Rendering, Physik, Beleuchtung, Input und Tonnen anderer Systeme geleistet. Das Stoppen hört sich momentan nicht nach einer guten Idee an. –
Oh, und @JesperJuhl - Ich habe gerade den Artikel gelesen. Ich habe bereits einige Spielideen geplant, und jedes einzelne System im Code soll unter verschiedenen Arten von Spielen funktionieren. Wenn ich ein Spiel kodiere, wäre es nicht sehr flexibel. Mein Eingabesystem zum Beispiel ist kompatibel mit Linux und Windows, und bald Mac, sowie entworfen, um mit verschiedenen Eingängen und Funktionen zu funktionieren, um einfach zu bedienen und flexibel zu sein.Also danke für die harte Liebe, aber ich brauche sie nicht wirklich - ich muss nur die beste (und flexibelste) Lösung finden, um dieses Problem zu lösen. –