Ich schreibe ein Partikelsystem und möchte einen Trick finden, um eine korrekte Alpha-Mischung zu erreichen, ohne Partikel zu sortieren, weil:
- Jedes Partikel ist ein Punktsprite in einem einzelnen Netz, und ich kann die Szenendiagrammfunktion nicht zum Sortieren transparenter Knoten verwenden. Der Systemknoten sollte jedoch ordnungsgemäß sortiert sein.
- Die Partikelposition wird auf dem Shader aus Anfangsgeschwindigkeit, Beschleunigung und Zeit berechnet. Um das System zu sortieren, müsste ich all diese Berechnungen auf der CPU durchführen, was ich vermeiden möchte.
- Das Sortieren von Hunderten von Partikeln anhand der Kameraposition und das Hochladen auf die GPU jedes Bilds ergibt einen leisen, schweren Betrieb.
Alpha-Tests scheinen auf GLES 2.0 schnell genug zu sein und funktionieren gut für nicht transparente, aber "maskierte" Texturen. Für halbtransparente Partikel reicht dies jedoch nicht aus.
Wie würden Sie damit umgehen?
opengl
opengl-es
particles
transparency
Stepan Zastupov
quelle
quelle
Antworten:
Folgendes würde ich tun.
Schritt 1: Nicht sortieren. Mach es einfach. Sehen Sie, ob es ein Problem ist. Höchstwahrscheinlich nicht.
Schritt 2: Begrenzen Sie Partikel auf solche, die nicht wirklich sortiert werden müssen, wie z.
Nur Feststoffe (mit möglicherweise Kanten von Alpha bis Bedeckung)
Nur additive Bits
Schritt 3: Wenn mehr benötigt wird, teilen Sie das Partikel-Rendering in Bits auf, die vorne und im Rest sein müssen, und führen Sie das Rendering in mehreren Durchgängen durch (könnte beispielsweise komplexen Rauch reparieren).
Schritt 4: Wenn noch mehr benötigt wird oder wenn Sie eine allgemeine Lösung benötigen, sollten Sie MRTs verwenden, um eine sehr grobe N-Bucket-Sortierung durchzuführen. Rendern Sie die Partikel in N Ausgangsflächen und setzen Sie sie in einem separaten Durchgang zusammen.
Für weitere Informationen sind weitere Informationen zu Ihrem speziellen Anwendungsfall erforderlich. Aber ich bin mir ziemlich sicher, dass Sie doch keine wirkliche Auftragsunabhängigkeit brauchen. Verwenden Sie einfach genug Partikel zufällig genug und es wird in Ordnung sein =)
quelle
Schreiben Sie beim Rendern der Partikel nur nicht in den Tiefenpuffer. Dadurch können sie alle gerendert und miteinander gemischt werden. Sie sollten dennoch Tiefentests durchführen, damit sie durch die Geometrie in der Szene ordnungsgemäß verdeckt werden können.
quelle
Die Verwendung der additiven Mischreihenfolge spielt keine Rolle:
Dies setzt voraus, dass Ihre Sprite-Textur einen transparenten Hintergrund hat.
quelle