OpenGL - Einfacher Blur Effekt

Nabend,

Muepe32 auf deinen Rat hab ich mich schon einigermaßen in GLSL-Shader Programmierung eingearbeitet und hab festgestellt, dass Shader echt ne feine Sache sind, wenn man sie beherrscht^^
In dem Sinne also danke^^

Ich hab mir mal selber einen Blur-Shader geschrieben, der soweit auch ganz gut funktioniert. Ich hab nur ein kleines Problem.

Ich kopiere den Framebuffer nach dem Rendern aller 3D Objekte in der Szene in eine Textur und mappe diese dann auf das Quad im Vordergrund. Dabei läuft mein Blur-Shader drüber.
da ich alle umliegenden Pixel für den Blur-Effect mit einbeziehe komme ich natürlich über die Ränder der Textur, welche dann anscheinend als schwarze Pixel interpretiert werden von der Grafikkarte. Daher erscheinen die "geblurten" Pixel an den Rändern dunkel (siehe Bild).

Wie kann man das umgehen?

MfG Manuel

PS.: Ich habe für den Screenshot einen recht grpßen Blurradius gewählt, damit man es deutlich sieht.
 

Anhänge

  • UnlimitedEngine 2011-05-19 21-48-05-93.png
    UnlimitedEngine 2011-05-19 21-48-05-93.png
    197,8 KB · Aufrufe: 78
Hi Manuel,

Dazu gibt es verschiedene Lösungen:
1. Wenn du dich nicht darum kümmern willst im Shader wo du bist, dann kannst du die Texturadressierung ändern. Clamp wäre hier die richtige Wahl. Was das bedeutet siehst du hier:
http://www.packtpub.com/sites/default/files/Article-Images/2480-07-05.png

Es wird also einfach alles was > 1 ist auf 1 gesetzt und alles was < 0 ist auf 0.

Vorteil: Einfach und unkompliziert, die Engine kümmert sich um alles.
Nachteil: Der Rand wird dadurch natürlich schärfer was doppelt unnatürlich ist, da das Auge am Rand eher weniger scharf sieht.

2. Du prüfst ob du einen Wert ausserhalb nimmst und setzt einen Standardfilter ein, wenn dem so ist, der den geclampten Wert etwas verfälscht.

Vorteil: Der Rand wird in der Regel nicht unnatürlich scharf und es ist auch unkompliziert
Nachteil: Du musst für jeden gesampelten Wert zusätzliche Prüfungen einbauen, was kosten kann. Wenn der Standardfilter zudem noch nicht zur Szene passt wirkt es unnatürlich

Gibt noch mehr Möglichkeiten, wenn obige für deinen Geschmack nicht passen müssten wir schauen ;)

Gruss
Muepe
 
Ah ok danke. Werd erstmal die 2. Methode ausprobieren. Vielleicht reicht mir dass ja schon. Mal sehn...

MfG Manuel
 
Eine Verbesserung zu Variante 1 wäre folgendes:
Du schneidest die äusseren Pixel ab so dass du nie nach draussen kommst. Dadurch müsstest du entweder dann mit einem kleineren Auschnitt leben (je nach Blurradius) oder einen grösseren Ausschnitt sampeln. Dadurch ist dann natürlich der Nachteil von 1 aufgehoben.
 
Morgen,

ja ich glaube so werde ich es auch machen, dass ich bisschen was vom Rand "abschneide". Was nämlich auch ein Problem ist, wenn man auf 1 oder 0 setzt ist, wenn in der Nähe des Randes viele helle Pixel sind und der Pixel am Rand dunkel, dass der errechnete Pixel auf jedenfall Dunkel wird, da der dunkle Pixel öfter für den Blur-Effekt mit einbezogen wird. Andersrum isses genauso.
Naja und da man ja normalerweise keinen 50 Pixel Radius zum blurren nimmt wie in meinem Bild oben kann ich dass ruhig machen.

EDIT.: Ich habs gleich mal in die Tat umgesetzt. War ja nicht viel zu machen^^ Auf dem Screenshot aber nur mit 10 Pixel geblurrt. Oben und links sieht man auch, dass diese Pixel auf dem geblurrten Bild fehlen.
 

Anhänge

  • UnlimitedEngine_x64 2011-05-20 08-56-08-01.png
    UnlimitedEngine_x64 2011-05-20 08-56-08-01.png
    150 KB · Aufrufe: 68
Zuletzt bearbeitet:
Die sieht schon ganz gut aus! Du könntest dir noch überlegen vielleicht mal etwas Multisampling einzubauen da deine Kanten doch sehr starke Treppen sind ;)
 
Ja dass ist mir auch schon aufgefallen^^ Ich wollte auch schonmal Antialiasing einbauen aber ich hab dann gemerkt, dass es nur für Linien recht einfach einzubauen ist. Fullscreen AA hab ich net durchgesehen also hab ichs erstmal gelassen^^
Ist Multisampling da etwas einfacher zu implementieren? Dann mach ich dass sofort^^
Ansonsten liegen meine Prioritäten erstmal woanders ;-)

Aber nochma danke für deine Hilfe, bin mit meinem Blurring bisher ganz zufrieden =)
 
Zurück