Come posso creare uno shader di fioritura efficiente con GLSL?


12

Ho cercato in rete risorse relative al rendering di un effetto bloom usando GLSL, ma non ho trovato nulla. Sebbene il tutorial sul sito Web di Philip Rideout sia valido, si comporta molto male sulla mia GPU Nvidia.

Qualcuno può guidarmi su come dovrei affrontare questo problema e costruire un'implementazione abbastanza efficiente di un effetto bloom?


1
Ardor3d, un motore 3d Java open source, ha implementato uno shader di fioritura. Dal momento che è opensource puoi facilmente verificarlo (www.ardor3d.com). Ma fondamentalmente, sta solo copiando il framebuffer, il downscale, la sfocatura, la fusione additiva ..
Pjotterke,

1
Che tipo di GPU hai?

1
Molto importante per farci sapere quale GPU / scheda video hai. +! @JoshPetrie
Patrick Hughes,

Ho una scheda grafica Nvidia GeForce GT 230M sul mio laptop
snape

6
@snape: quanto è grande un kernel gaussiano e qual è la risoluzione del tuo più grande FBO offuscata? Il modo più semplice per migliorare le prestazioni è utilizzare un kernel più piccolo e un FBO più piccolo. (Nella mia roba, faccio la sfocatura all'interno di un FBO con risoluzione 512x512, indipendentemente dalla risoluzione del display)
Trevor Powell,

Risposte:


3

Come menzionato da Trevor nel suo commento, l'unica opzione potrebbe essere quella di ridurre le dimensioni del kernel o di eseguire ulteriori downsampling.

Ma hai letto attentamente il tutorial a cui ti sei collegato? C'è un suggerimento sullo sfruttamento del filtro hardware, che l'autore chiama la versione "subdola". È probabilmente il miglior trucco che puoi usare per ottimizzare l'effetto di fioritura senza influire sulla sua qualità.


Sì, ho letto attentamente il tutorial. Alla fine ho migliorato le prestazioni utilizzando il rendering offline e non avevo abilitato il supporto hardware per l'applicazione grafica in precedenza.
Snape

0

Ho risolto un problema molto simile (sfocatura, ma il filtro di fioritura è sfocato) con due passaggi.

Nel primo passaggio sfocatura nella direzione X e nel secondo passaggio sfocatura nella direzione Y.

Non so da dove ho questo trucco, ma riduce la complessità temporale da n² a 2n.

Questo funziona solo per i kernel che non hanno alcuna direzione (quindi non puoi ottimizzare un kernel bokeh in questo modo).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.