2015-05-24 19 views
7

Ich habe Bloom HDR-Rendering mit OpenGL und GLSL integriert ... Zumindest denke ich! Ich bin nicht wirklich sicher über das Ergebnis.HDR Bloom-Effekt-Rendering-Pipeline mit OpenGL/GLSL

folgte ich ein Tutorial von Intel-Website:

https://software.intel.com/en-us/articles/compute-shader-hdr-and-bloom 

Und über Gaußsche Unschärfe-Effekt folgen ich alle Ratschläge peinlich genau die Leistung auf der folgenden Website in Bezug auf:

https://software.intel.com/en-us/blogs/2014/07/15/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms 

Nach der ersten Webseite :

"Die Hellpassausgabe wird dann viermal um die Hälfte herunterskaliert. Jeder der herunterskalierten Hellpassausgaben wird mit einem trennbaren G verwischt Aussian-Filter und dann zur helleren Pass-Ausgabe der nächsten höheren Auflösung hinzugefügt. Die endgültige Ausgabe ist eine Blüte ¼ Größe, die oben abgetastet wird und in die HDR-Ausgabe vor Tone Mapping.“

Hier ist die Blüte Pipeline (die Bilder oben haben von NSight NVIDIA Debugger genommen wurde).

Die Auflösung in meinem Test des Fensters ist 1024x720 (für die Notwendigkeit dieses Algorithmus wird diese Auflösung 4mal verkleinerter wird)

Schritt 1:.

Lighting Pass (Mischung von Material Pass + Schattenmaske Pass + skybox Pass) :

enter image description here

Schritt 2:

Lichtinformationen in eine helle Pass (Um genau zu sein, 4 Mipmaps Texturen Extrahierung Höhe erzeugt („Der helle Passausgabe dann auf die Hälfte verkleinert wird 4 mal“ -> 1/2 , 1/4, 1/8 und schließlich 1/2)):

enter image description here

Schritt 3:

„Jede der hellen verkleinerte Pass Ausgänge sind mit einem verschwommenen trennbaren Gaussian Filter und das n zur helleren Ausgabe der nächsten höheren Auflösung hinzugefügt. "

Ich möchte präzisieren, dass die bilineare Filterung aktiviert ist (GL_LINEAR) und die Pexilization auf den obigen Bildern das Ergebnis der Größenanpassung der Textur auf den NSight Debugger ist Fenster (1024x720).

a) Auflösung 1/16x1/16 (64x45)

"1/16x1/16 unscharfe Ausgabe"

b) Auflösung 1/8x1/8 (128x90)

"1/8x1/8 verkleinerter hellen Pass mit kombinierter 1/16x1/16 unscharfe Ausgabe"

enter image description here

"1/8x1/8 unscharfe Ausgabe"

enter image description here

c) Auflösung 1/4x1/4 (256x180)

„1/4x1/4-verkleinerte hellen Pass in Kombination mit 1/8x1/8 unscharfe Ausgabe“

enter image description here

"1/4x1/4 unscharfe Ausgabe"

enter image description here

d) Auflösung 1/2x1/2 (512x360)

"1/2x1/2 verkleinerte hellen Pass in Verbindung mit 1/4x1/4 unscharfer Ausgabe"

enter image description here

"1/2x1/2 unscharfe Ausgabe"

enter image description here

die gewünschten LEV Ziel el von mipmap Ich benutze FBO Größenanpassung (aber vielleicht wäre es schlauer, separate FBOs zu verwenden, die bereits bei der Initialisierung dimensioniert sind, anstatt die gleiche Größe mehrmals zu ändern. Was denkst du über diese Idee?).

Schritt 4:

Tone Mapping machen Pass:

enter image description here

Bis hier würde ich eine externe Beratung zu meiner Arbeit haben möchte. Ist es richtig oder nicht? Ich bin nicht wirklich sicher über das Ergebnis vor allem über Schritt 3 (Downscaling und Bluring).

Ich denke, der Bluring-Effekt ist nicht sehr ausgeprägt! Allerdings benutze ich einen Convolution-Kernel 35x35 (es würde reichen, denke ich :)).

Aber ich bin wirklich fasziniert von einem Artikel über ein PDF. Hier ist die Präsentation der Bloom-Pipeline (die Präsentation ist ziemlich die gleiche wie die, die ich anwendete).

enter image description here

-Link:

https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCMQFjAA&url=https%3A%2F%2Ftransporter-game.googlecode.com%2Ffiles%2FRealtimeHDRImageBasedLighting.pdf&ei=buBhVcLmA8jaUYiSgLgK&usg=AFQjCNFfbP9L7iEiGT6gQNW6dB2JFVcTmA&bvm=bv.93990622,d.d24

Wie man auf dem Bild sehen kann, dass die Unschärfe-Effekt Blutungen ist so viel stärker als meine! Denkst du, der Autor benutzt mehrere Faltungs-Kernel (höhere Auflösungen)?

Das erste, was ich nicht verstehe, ist, wie der Gaußsche Unschärfe-Algorithmus andere Farben erscheinen lässt als Weiß (Grauwerte) auf dem dritten Bild. Ich habe das helle Bild (das zweite) sehr genau betrachtet (hoher Zoom) und alle Pixel scheinen nahe an Weiß oder Weiß (Graustufen) zu sein. Eins ist sicher: Es gibt keine blauen oder orange Pixel auf der hellen Textur. Wie können wir einen solchen Übergang von Bild 2 zu Bild 3 erklären? Es ist sehr seltsam für mich.

Die zweite Sache, die ich nicht verstehe, ist der hohe Unterschied der Unschärfe Blutung Effekt zwischen den Bildern 3, 4, 5 und 6! In meiner Präsentation benutze ich 35x35 Convolution Kernel und das Endergebnis ist nahe dem dritten Bild hier.

Wie können Sie einen solchen Unterschied erklären?

PS: Beachten Sie, dass ich das interne Pixelformat GL_HALF_FLOAT und GL_RGBA16F zum Initialisieren der Bloom-Render-Pass-Textur verwenden (alle anderen Render-Pässe werden als GL_RGBA- und GL_FLOAT-Datentyp initialisiert).

Ist etwas falsch mit meinem Programm?

Vielen Dank für Ihre Hilfe!

Antwort

1

Verschwommene, kleinformatige Texturen scheinen nicht unscharf genug. Ich denke, irgendwo gibt es ein Problem hinsichtlich der Breite des Filters (nicht Anzahl der Samples, aber Abstand zwischen den Samples) oder Framebuffergröße.

Nehmen wir an, Sie haben 150x150 original fbo, eine 15x15 herunterskalierte Version für Bloom. Und dass Sie 15x15 Blurfilter verwenden.

Die unscharfe Version mit hoher Auflösung würde den 7px-Strich um helle Teile beeinflussen. Aber während das Bild mit niedriger Auflösung verwischt wird, würde die Breite des Kernels praktisch den gesamten Bildbereich beeinflussen. Bei niedriger Auflösung bedeutet 7px Strich - ein gesamter Bildbereich. Alle Pixel in der unscharfen Low-Res-Version würden also einen gewissen Beitrag zum endgültigen Bild liefern. Ein verschwommenes Bild mit hoher Auflösung würde also mit seiner Unschärfe für den 7px-Strich um helle Teile beitragen, während ein verschwommenes Bild mit niedriger Auflösung einen beträchtlichen Unterschied über den gesamten Bildbereich machen würde.

Ihre Bilder mit niedriger Auflösung scheinen einfach nicht unscharf zu sein, denn ihr Beitrag bleibt immer noch bei 35/2px Strich um helle Teile, was falsch ist.

Ich hoffe, ich habe es geschafft zu erklären, was los ist. Was genau zu ändern, wahrscheinlich Größe des Ansichtsfensters bei der Wiedergabe von Bildern mit niedriger Auflösung, aber ich kann einfach nicht 100% sicher sein.

+1

Vielen Dank! Effektiv schickte ich das schlechte Ansichtsfenster als einheitliche Variable an meinen Gaußschen Unschärfeschieber (es wurde immer auf meine ursprüngliche Fensterauflösung eingestellt -> 1024 * 720). Daher war der Durchschnitt jedes Pixel-Offsets völlig falsch. Nochmals vielen Dank für Ihre Hilfe! Tschüss. – user1364743

+1

Könnten Sie bitte Bilder mit Fix hochladen, damit andere erfahren können, wo das Problem liegt? Prost und viel Glück. –

Verwandte Themen