Как я могу создать эффективный шейдер Bloom с GLSL?

12

Я искал в сети ресурсы, связанные с визуализацией эффекта цветения с помощью GLSL, но ничего не нашел. Хотя учебник на веб-сайте Philip Rideout является хорошим, он работает очень плохо на моем графическом процессоре Nvidia.

Кто-нибудь может подсказать мне, как я должен подойти к этой проблеме и построить довольно эффективную реализацию эффекта цветения?

Снейпу
источник
1
Ardor3d, Java-движок с открытым исходным кодом, имеет встроенный шейдер Bloom. Так как это с открытым исходным кодом, вы можете легко проверить это (www.ardor3d.com). Но в основном это просто копирование кадрового буфера, уменьшение масштаба, размытие, аддитивное смешение ..
Пьоттерке
1
Какой у вас графический процессор?
1
Очень важно сообщить нам, какая у вас видеокарта / видеокарта. +! @JoshPetrie
Патрик Хьюз
У меня на ноутбуке есть видеокарта Nvidia GeForce GT 230M
snape
6
@snape: Насколько велико ядро ​​Гаусса, которое вы используете, и каково разрешение вашего самого большого размытого FBO? Самый простой способ улучшить производительность - использовать меньшее ядро ​​и меньшее FBO. (В моем материале я делаю размытие внутри FBO с разрешением 512x512, независимо от разрешения экрана)
Тревор Пауэлл,

Ответы:

3

Как упомянул Тревор в своем комментарии, единственным вариантом может быть уменьшение размера ядра или дальнейшая понижающая дискретизация.

Но внимательно ли вы прочитали учебник, на который вы ссылались? Есть подсказка об использовании аппаратной фильтрации, которую автор называет «хитрой» версией. Это, вероятно, лучший трюк, который вы можете использовать, чтобы оптимизировать эффект цветения, не влияя на его качество.

Лоран Кувиду
источник
Да, я внимательно прочитал учебник. Наконец-то я улучшил его производительность с помощью автономного рендеринга, а также ранее не включал аппаратную поддержку графического приложения.
Снейп
0

Я решил очень похожую проблему (смазывание, но фильтр Блума размывает) с двумя проходами.

На первом проходе я размываю в направлении X, а на втором проходе размываю в направлении Y.

Я не знаю, откуда у меня есть этот трюк, но он снижает сложность времени с n² до 2n.

Это работает только для ядер, у которых нет направления (поэтому вы не можете оптимизировать ядро ​​bokeh таким образом).

Quonux
источник