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?
[DX9] Blur für Shadowmap
- Schrompf
- Moderator
- Beiträge: 5163
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [DX9] Blur für Shadowmap
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.
Re: [DX9] Blur für Shadowmap
Die separaten Vorgänge habe ich, aber wieso beschleunigt das die ganze Sache?
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: [DX9] Blur für Shadowmap
Weil du Singlepass n^2 Samples machen musst um den gleichen Effekt zu erzielen wie mit zwei getrennten Passes zu je n Samples.
Re: [DX9] Blur für Shadowmap
Wieso dann n^2... Irgendwie verstehe ich das jetzt nicht so ganz...
- Schrompf
- Moderator
- Beiträge: 5163
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [DX9] Blur für Shadowmap
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).
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.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: [DX9] Blur für Shadowmap
Oder grafisch:
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.
Code: Alles auswählen
xxxxx vs xxxxx + x
xxxxx x
xxxxx x
xxxxx x
xxxxx x
-
- 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
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:DomiOh hat geschrieben:Wieso dann n^2... Irgendwie verstehe ich das jetzt nicht so ganz...
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!