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?


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.


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).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.