¿Cómo puedo crear un sombreador de floración eficiente con GLSL?

12

He buscado en la red recursos relacionados con la representación de un efecto de floración con GLSL, pero no he encontrado nada. Aunque el tutorial en el sitio web de Philip Rideout es bueno, funciona muy mal en mi GPU Nvidia.

¿Alguien puede guiarme sobre cómo debería abordar este problema y construir una implementación bastante eficiente de un efecto de floración?

Snape
fuente
1
Ardor3d, un motor java 3d de código abierto, tiene un sombreador de flores implementado. Dado que es de código abierto, puede verificarlo fácilmente (www.ardor3d.com). Pero básicamente, solo está copiando el framebuffer, downcale, blur, blending additive ..
Pjotterke
1
¿Qué tipo de GPU tienes?
1
Es muy importante que nos haga saber qué GPU / tarjeta de video tiene. +! @JoshPetrie
Patrick Hughes
Tengo una tarjeta gráfica Nvidia GeForce GT 230M en mi computadora portátil
snape
66
@snape: ¿Qué tamaño de kernel gaussiano estás usando y cuál es la resolución de tu FBO borrosa más grande? La forma más fácil de mejorar el rendimiento es usar un kernel más pequeño y un FBO más pequeño. (En mis cosas, hago mi desenfoque dentro de un FBO de resolución 512x512, sin importar la resolución de la pantalla)
Trevor Powell

Respuestas:

3

Como Trevor mencionó en su comentario, su única opción podría ser reducir el tamaño de su kernel o realizar un muestreo adicional.

¿Pero leíste a fondo el tutorial al que te has vinculado? Hay un consejo sobre cómo explotar el filtrado de hardware, que el autor llama la versión "furtiva". Es probablemente el mejor truco que puede usar para optimizar su efecto de floración sin afectar su calidad.

Laurent Couvidou
fuente
Sí, leí el tutorial a fondo. Finalmente mejoré su rendimiento mediante el uso de renderizado sin conexión y tampoco había habilitado el soporte de hardware para la aplicación de gráficos anteriormente.
Snape
0

Resolví un problema muy similar (borroso, pero el filtro de floración está borroso) con dos pasadas.

En la primera pasada, me desenfoco en la dirección X y en la segunda pasada me desenfoco en la dirección Y.

No sé de dónde tengo este truco, pero reduce la complejidad del tiempo de n² a 2n.

Esto funciona solo para los núcleos que no tienen ninguna dirección (por lo que no puede optimizar un núcleo bokeh de esta manera).

Quonux
fuente