Jak mogę stworzyć skuteczny moduł cieniujący Bloom z GLSL?

12

Szukałem w sieci zasobów związanych z renderowaniem efektu rozkwitu za pomocą GLSL, ale niczego nie znalazłem. Chociaż samouczek na stronie Philip Rideout jest dobry, działa bardzo słabo na moim procesorze graficznym Nvidia.

Czy ktoś może mi wskazać, jak podejść do tego problemu i zbudować dość wydajną implementację efektu rozkwitu?

Snape
źródło
1
Ardor3d, silnik 3d Java typu opensource, ma zaimplementowany moduł cieniujący. Ponieważ jest to program typu open source, możesz łatwo to sprawdzić (www.ardor3d.com). Ale w zasadzie, jej po prostu kopiowanie bufora ramki, w dół skali, rozmycie, addytywne mieszanie ..
Pjotterke
1
Jakiego rodzaju GPU posiadasz?
1
Bardzo ważne, aby poinformować nas o posiadanej karcie graficznej / graficznej. +! @JoshPetrie
Patrick Hughes
Mam na swoim laptopie kartę graficzną Nvidia GeForce GT 230M
snape
6
@snape: Jak dużego jądra gaussa używasz i jaka jest rozdzielczość twojego największego niewyraźnego FBO? Najłatwiejszym sposobem na poprawę wydajności jest użycie mniejszego jądra i mniejszego FBO. (W moich materiałach rozmazuję w FBO o rozdzielczości 512x512, bez względu na rozdzielczość wyświetlacza)
Trevor Powell, 18'11

Odpowiedzi:

3

Jak wspomniał Trevor w swoim komentarzu, jedyną opcją może być zmniejszenie rozmiaru jądra lub dalsze próbkowanie w dół.

Ale czy dokładnie przeczytałeś samouczek, z którym masz link? Istnieje pewna wskazówka dotycząca wykorzystywania filtrowania sprzętowego, którą autor nazywa „podstępną” wersją. To prawdopodobnie najlepsza sztuczka, której możesz użyć, aby zoptymalizować efekt kwitnienia bez wpływu na jego jakość.

Laurent Couvidou
źródło
Tak, dokładnie przeczytałem samouczek. W końcu poprawiłem jego wydajność, używając renderowania offline, a także nie włączyłem wcześniej obsługi sprzętowej dla aplikacji graficznych.
snape
0

Rozwiązałem bardzo podobny problem (rozmycie, ale filtr kwitnienia zaciera się) za pomocą dwóch przejść.

W pierwszym przejściu rozmazuję w kierunku X, a w drugim przejściu rozmazuję w kierunku Y.

Nie wiem, skąd mam tę sztuczkę, ale zmniejsza złożoność czasu z n² do 2n.

Działa to tylko w przypadku jąder, które nie mają żadnego kierunku (więc nie można zoptymalizować jądra bokeh w ten sposób).

Quonux
źródło