The new FFT convolution bloom

Hi everybody. I’d like to discuss 4.16’s new FFT convolution bloom method. I couldn’t get it to work for a little bit but a recent preview update managed to fix it for me. Here’s some stuff:

So here’s the normal bloom

Here’s the default FFT bloom. There’s a very slight loss of sharpness.

Here’s what happens when you resize the default Bloom Kernel down to 512 from 2048. (Note the drastic loss of sharpness)

Here’s what happened when I tried to create my own quick .EXR file to use as a texture and couldn’t get it to work properly.

Here’s the default engine Bokeh texture used as bloom.

In the end the only non-default acceptable result I managed to get was from resizing the default Bloom Kernel on Y and then putting it back onto a 2048 black texture.

If I could figure out how to generate .EXR files that work properly that’d be great, as this “anamorphic bloom” effect is one I’ve been trying to figure out for a while now. Anybody else experimented with this?

With the Convolution Bloom the main thing to keep in mind here is that the kernel image you use is a whole image filter. The hottest (brightest) part of the image should be much brighter than any other part of the image by a lot! The .exr format is good for this kind of contrast. The Convolution Bloom system also expects the hottest (brightest) point of the image to be at the center, so to do this just make a white dot there and the rest of the image substantially less bright. The blurring effect you’re seeing with the other images is because they don’t adhere to this and simply won’t work well. Also for any kernel images you create if you don’t adhere to this you’ll run into the same blurring issue. I made this mistake as well when I initially started using the system.

So now that you know that, a good bloom kernel has a structure that fills most of the image kernel image you create, although if you look at the default one you may wonder why it doesn’t appear that way. In fact this kernel image (default one) uses the majority of the image! Just export it and open with Photoshop or a similar image manipulation software and adjust the contrast values. You’ll then be able to see the radial lines that come out and the spires stretch further as well. You should also look at the individual color channels as this may help with your Bloom Kernel Image construction.

All of this should be making its way into documentation soon. I don’t have an ETA when, but I just finished the addition to the Post Process Effects Bloom page for it the other day, then it’ll continue its way through our review process. :slight_smile:

Thanks for the info. I did increase the exposure in PS and noticed that it was pretty massive. I’ll play around with it more when I have time!

Do you know if the default kernel is an actual flare created in a studio by shining a light into a camera and then bracketing or was it generated or manually painted?

I don’t know how the default kernel image was created. My best guess would be using PS tools and creating a flare manually there and tweaking as needed.

Huh, so it’s exactly analogous to an audio impulse response used for convolution reverb. That… makes sense on a number of levels.

Is there any way to improve performance and tweak it beyond the basic settings?

It looks really good compared to normal bloom and for the lighting effects im doing it would be nice to use but the cost is too great. Hopefully this is just an early version and tweaks can be made.

Normal bloom seems too spread out and spoils contrast. Adjusting it’s spread ends up looking pixelated which i haven’t seen a fix for?

It’s meant to target cinematics or high end machines currently. For more in depth info check out the live stream from this past week with David Hill as he goes in muvh more detail about the system.

could you please share your bloom texture ? tnx

I checked out the stream and it was interesting if a bit too in depth for me. :slight_smile:

Will it improve enough in future to run on more reasonble high end hardware or always remain for cinematics only?

I hope there’s a lot of performance improvements possible or at least the option to run at a low quality setting. It looks great and would be a shame if this was only ever used for cinematics.

It can be used for High-end machines and not only for cinematics only. One thing that David mentioned was that todays high-end is tomorrows mid-spec machines. As machines become more powerful this will be used more so, I think. Since the kernel images have to be high-resolution to work well since it’s a full-image filter and can never be streamed there is a performance cost associated with that that lower-end spec machines may not handle well.

Hey Tim,

I did watch the livestream which was super interesting. I was curious about something that I cannot seem to get an answer about regarding the texture itself. When looking at the default texture in 4.16 there seems to be an alpha channel however exporting that texture out to take a closer look (it exports as a .HDR) kills that alpha channel. My question is: Are alpha channels at all important in the creation and use of this texture?



I actually have successfully made my own texture now and have a decent pipe for it working! Will post a tutorial over the weekend

Looking cool! Definitely, share the tutorial when you get a chance. I’d love to take a look :slight_smile:

JJ Abrams approved! :cool:

When would you like to share the tutorial? I’m looking forward to it!

Hey guys, I threw the video up this morning! Hope it helps some folks. Links and files in the description

Vimeo Link here:


I don’t suppose there are any plans to make a similar system but for depth of field? I imagine it’s quite trivial to plug a COC into it and have perfect bokeh as a result with completely custom shape etc?

Im gonna use in my game and just make it something you can turn off. It did cost about 20 fps :

I’m sure people with 4 GPUs will appreciate it anyway :smiley: