Wie kann ich mit GLSL einen effizienten Bloom-Shader erstellen?

12

Ich habe im Internet nach Ressourcen für das Rendern eines Bloom-Effekts mit GLSL gesucht, aber nichts gefunden. Obwohl das Tutorial auf der Website von Philip Rideout gut ist, funktioniert es auf meiner Nvidia-GPU sehr schlecht.

Kann mich jemand anleiten, wie ich dieses Problem angehen und eine ziemlich effiziente Implementierung eines Bloom-Effekts aufbauen soll?

schnappen
quelle
1
Ardor3d, eine Open Source Java 3D Engine, hat einen Bloom Shader implementiert. Da es sich um Open Source handelt, können Sie dies leicht überprüfen (www.ardor3d.com). Aber im Grunde ist es nur das Kopieren des Framebuffers, Downscale, Blur, additive Blending ..
Pjotterke
1
Was für eine GPU hast du?
1
Sehr wichtig, um uns mitzuteilen, welche GPU / Grafikkarte Sie haben. +! @JoshPetrie
Patrick Hughes
Ich habe eine Nvidia GeForce GT 230M-Grafikkarte auf meinem Laptop
snape 18.10.11
6
@snape: Wie groß ist Ihr Gauß-Kernel und wie hoch ist die Auflösung Ihres größten unscharfen FBO? Der einfachste Weg, die Leistung zu verbessern, ist die Verwendung eines kleineren Kernels und eines kleineren FBO. (In meinem Zeug mache ich meine Unschärfe in einer 512x512-Auflösung FBO, unabhängig von der Bildschirmauflösung)
Trevor Powell

Antworten:

3

Wie Trevor in seinem Kommentar erwähnt hat, besteht Ihre einzige Option möglicherweise darin, die Größe Ihres Kernels zu verringern oder ein weiteres Downsampling durchzuführen.

Aber haben Sie das Tutorial, mit dem Sie verlinkt sind, gründlich gelesen? Es gibt einen Tipp zum Ausnutzen der Hardware-Filterung, den der Autor "Sneaky" -Version nennt. Dies ist wahrscheinlich der beste Trick, mit dem Sie Ihren Blüteeffekt optimieren können, ohne die Qualität zu beeinträchtigen.

Laurent Couvidou
quelle
Ja, ich habe das Tutorial gründlich gelesen. Schließlich habe ich die Leistung durch die Verwendung von Offline-Rendering verbessert und auch die Hardware-Unterstützung für Grafikanwendungen zuvor nicht aktiviert.
Snape
0

Ich habe ein sehr ähnliches Problem (Unschärfe, aber der Bloom-Filter verwischt) mit zwei Durchgängen gelöst.

Im ersten Durchgang verwische ich in X-Richtung und im zweiten Durchgang verwische ich in Y-Richtung.

Ich weiß nicht, woher ich diesen Trick habe, aber er verringert die zeitliche Komplexität von n² auf 2n.

Dies funktioniert nur für Kernel, die keine Richtung haben (so können Sie einen Bokeh-Kernel nicht auf diese Weise optimieren).

Quonux
quelle