Bloom is a very common effect widely used in movies and games (sometimes overused) and can produce either realistic or stylized results. Most of the realtime render engines offer an option to simulate bloom in post-processing.
In this post, we're going to investigate how exactly this effect occurs in real life and how we implement that in our digital images.
First of all, bloom is a lens effect. It's present in our real world! When our cameras are pointed to a very bright spot, the light bleeds around the light source. This effectively gives the viewer the illusion these bright regions are intensely bright. You can see that in practice just by getting your smartphone camera and pointing to a bright light source like a TV, a screen monitor, etc. The effect can be emphasized by tweaking bright/contrast in your camera. The more sensitive to light the camera is, the higher is the effect.
Ok, but how the render engines reproduce that effect? Simply by getting the brighter pixels of an image and drawing a glow around it.
Let's take this image for example:
Where are the brighter pixels? Fortunately, the software has some algorithms for it. In Blender, you can set the mix parameter to 1 inside the Glare node to show which pixels were selected. The threshold parameter will control the amount of blow will be applied, for example:
0 = The entire image
1 = Nothing
0.90 = just some bright pixels
This configuration generates the following image:
A mix = 1 means basically no mix, only the bloom effect is being shown. This has been just for demonstration purposes. Let's set back to 0 and see the final result: