[DX9] Blur für Shadowmap

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

[DX9] Blur für Shadowmap

Beitrag von DomiOh »

Hallo,

ich mache für meine Shadow-Map ein Blur. Das empfinde ich als ziemlich langsam.
Gibt es da Möglichkeiten, das ganze zu beschleunigen?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4861
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [DX9] Blur für Shadowmap

Beitrag von Schrompf »

Nicht viele. Ausnutzung des bilinearen Filters der Grafikkarte durch geschicktes Platzieren der Samples genau auf den Texel-Grenzen. Oder falls Du es noch nicht getan hast: Aufteilung des Blurs in separate Durchgänge für horizontal und vertikal.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

Re: [DX9] Blur für Shadowmap

Beitrag von DomiOh »

Die separaten Vorgänge habe ich, aber wieso beschleunigt das die ganze Sache?
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [DX9] Blur für Shadowmap

Beitrag von Aramis »

Weil du Singlepass n^2 Samples machen musst um den gleichen Effekt zu erzielen wie mit zwei getrennten Passes zu je n Samples.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

Re: [DX9] Blur für Shadowmap

Beitrag von DomiOh »

Wieso dann n^2... Irgendwie verstehe ich das jetzt nicht so ganz...
Benutzeravatar
Schrompf
Moderator
Beiträge: 4861
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: [DX9] Blur für Shadowmap

Beitrag von Schrompf »

Blur mit 5x5 Samples im Single-Pass: 25 Texturzugriffe
Blur mit 5x5 Samples in 2 Passes: 2x jeweils 5 Texturzugriffe

Das eine ist O(n^2), das andere nur O(n).
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [DX9] Blur für Shadowmap

Beitrag von Aramis »

Oder grafisch:

Code: Alles auswählen

xxxxx          vs xxxxx + x
xxxxx                     x
xxxxx                     x
xxxxx                     x
xxxxx                     x
Natürlich, der zweite Pass bringt auch einen gewissen Overhead mit sich, schließlich musst du ja Target/Quelle wechseln. Für *ganz* kleine Blurkernel auf geringer Auflösung ist die Singlepass-Variante also zumindest theoretisch schneller. In den DX Samples kommt beispielsweise hin und wieder mal (iirc) ein Singlepass (Pseudo)-2D-Kernel mit unregelmäßig verteilten Samples zum Einsatz.
glassbear
Establishment
Beiträge: 324
Registriert: 08.04.2003, 18:09
Alter Benutzername: Enrico_
Echter Name: Enrico
Wohnort: San Diego
Kontaktdaten:

Re: [DX9] Blur für Shadowmap

Beitrag von glassbear »

DomiOh hat geschrieben:Wieso dann n^2... Irgendwie verstehe ich das jetzt nicht so ganz...
Ein paar Grundlagen: Blur ist ein Filter für ein Signal (=das Bild in diesem Fall) und jeder Pixel muss mit einer 2D-Matrix multipliziert werden.. Meist wird ein Gaussian Blur eingesetzt, da dies ein linear separierbarer Filter ist: Computational Complexity. Deshalb kann man statt der Anwendung einer 2D-Matrix auf das gesamte Bild, diese Berechnung zerlegen in:
1. 1D-Filter in horizontaler Richtung
2. 1D-Filter in vertikaler Richtung

Das verringert die Berechnungskomplexität von O(wk * hk * wi * hi) auf O(wk * wi * hi) + O(hk * wi * hi) mit
wk = kernel width
hk = kernel height (==> die Größe der 2D-Matrix)
wi = Image Width
hi = Image Height (==> Größe des Signals)

Beispiel für 5x5 Kernel auf 720p:
2D: O(5 * 5 * 1280 * 720) ==> 24.040.000 Berechnungen
1D: O(5 * 1280 * 720) + O(5 * 1280 * 720) ==> 9.216.000 Berechnungen


Irgendwie hat das dt. Wikipedia zu diesem Thema kaum Inhalt :(


PS: Ich hoffe, ich hab nix durcheinander gebracht, ist schon ein paar Jährchen her :mrgreen:
Ein Hoch auf uns Männer... Auf die Frau, die uns HAT ( oder hat, und nicht weiß, dass sie uns hat ) ...auf die Idiotinnen ... besser gesagt VOLLPFOSTINNEN ... die uns hatten und uns verloren haben ... und auf die GLÜCKLICHEN, die das Vergnügen & Glück haben werden uns kennenzulernen!
Antworten