Como posso criar um shader de bloom eficiente com o GLSL?

12

Pesquisei na net por recursos relacionados à renderização de um efeito bloom usando GLSL, mas não encontrei nada. Embora o tutorial no site de Philip Rideout seja bom, ele tem um desempenho muito ruim na minha GPU Nvidia.

Alguém pode me orientar sobre como devo abordar esse problema e criar uma implementação bastante eficiente de um efeito bloom?

snape
fonte
1
O Ardour3d, um mecanismo 3d java de código aberto, possui um bloom shader implementado. Como é de código aberto, você pode verificar isso com facilidade (www.ardor3d.com). Mas, basicamente, é só copiar o framebuffer, downscale, borrão, mistura aditiva ..
Pjotterke
1
Que tipo de GPU você possui?
1
Muito importante para nos informar qual placa de vídeo / GPU você possui. +! @JoshPetrie
Patrick Hughes
Eu tenho uma placa gráfica Nvidia GeForce GT 230M no meu laptop
Snape
6
@ snape: Qual o tamanho de um kernel gaussiano que você está usando e qual é a resolução do seu maior FBO desfocado? A maneira mais fácil de melhorar o desempenho é usar um kernel menor e um FBO menor. (Em minhas coisas, eu faço o meu borrar dentro de uma resolução 512x512 FBO, não importa a resolução da tela)
Trevor Powell

Respostas:

3

Como Trevor mencionou em seu comentário, sua única opção pode ser reduzir o tamanho do seu kernel ou realizar mais downsampling.

Mas você leu completamente o tutorial ao qual vinculou? Há uma dica sobre a exploração da filtragem de hardware, que o autor chama de versão "sorrateira". É provavelmente o melhor truque que você pode usar para otimizar o efeito de floração sem afetar sua qualidade.

Laurent Couvidou
fonte
Sim, li o tutorial completamente. Finalmente melhorei seu desempenho usando a renderização offline e também não havia ativado o suporte de hardware para aplicativos gráficos anteriormente.
Snape
0

Resolvi um problema muito semelhante (embaçamento, mas o filtro de floração está manchando) com duas passagens.

Na primeira passagem, desfoquei na direção X e, na segunda passagem, desfoquei na direção Y.

Não sei de onde eu tenho esse truque, mas reduz a complexidade do tempo de n² para 2n.

Isso funciona apenas para kernels que não têm nenhuma direção (então você não pode otimizar um bokeh bokeh dessa maneira).

Quonux
fonte