2
\$\begingroup\$

I'm trying to understang how can I improve bloom effect quality using all known to me optimizations.

Currently I'm making it as follows:

  1. Create new texture using some threshold to extracts areas which should glow
  2. Downsample that texture 4 times (using bilinear filtering - GL_LINEAR)
  3. Blur each texture horizontally using 5x5 gaussian blur.
  4. Blur each texture vertically using 5x5 gaussian blur.
  5. Composite each blurred texture with final image.

I've implemented gaussian blur using Incremental Gaussian Algorithm and set radius to 5. However because of size of last texture after composition bloom has very low quality especially when moving camera:

It doesn't look clear here but you can see it near bunny tail.

Simple workaround to that issue was increasing the radius for smaller textures but then image was more blurred.

Similar effect is when I use solution presented by Philip Rideout.

I get better results when I use blur shader presented here. However I still see some kind of vertical stripes.

I also tried to improve the algorithm by blurring the image and then downsampling it. Then I repeated whole process for the rest of images. But I haven't spotted any difference.

I'm also wonder how it is done in Unreal Engine. I mean how effective blur radius is computed. Documentation claims that each Bloom Size value is "the size in percent of the screen width" and each texture is smaller from previous one 2 times.

\$\endgroup\$
  • \$\begingroup\$ Apologies if this is a dumb question, but are your textures used for the deferred passes floating-point (HDR, i.e.)? \$\endgroup\$ – user77245 Jan 9 '18 at 1:03
  • 1
    \$\begingroup\$ I store color in G-Buffer as RGB8 but lightning pass is done on floating-point buffers. \$\endgroup\$ – Harry Jan 10 '18 at 21:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.