Halation is not bloom

These get collapsed into one effect constantly, usually as "bloom with a warm tint". They are different physical events with different shapes, and the reason halation reads as film while a tinted bloom reads as a filter is that the differences are structural rather than chromatic.

The same bright source. Left: bloom. Right: halation. Identical core, everything else different.

Two different accidents

Bloom happens in the lens and the eye: light scattering off imperfections on its way to the sensor. It is roughly neutral in color, roughly symmetric, and it scales smoothly with brightness. Every bright thing blooms a little.

Halation happens in film stock. Light passes all the way through the emulsion, reflects off the base behind it, and comes back up to expose the emulsion a second time from underneath. Three things follow from that, and all three are visible:

  1. It is red. Longer wavelengths penetrate the emulsion layers deepest, so the returning light is heavily weighted to red. This is not a tint choice, it is which light survived the round trip.
  2. It is much wider than bloom. The light traveled down through the stock, sideways, and back. That is a far longer path than lens scatter, so the spread radius is bigger by a large factor rather than a small one.
  3. It is gated. Only light bright enough to punch through the emulsion and back produces it at all. Dim highlights bloom and do not halate, which is why a threshold is correct here and wrong for bloom.

The gradient, not the tint

The mistake that makes halation look fake is applying one warm color to a blurred copy. Real halation has a radius gradient across the channels: red spreads widest, green less, blue least. So the near field is warm-white and the far field is pure red, continuously.

vec3 spread = vec3(
    glowExp(d, r * 14.0),   // red penetrates deepest, spreads furthest
    glowExp(d, r *  8.5),
    glowExp(d, r *  5.5)    // blue barely makes the round trip
);
hdr += tint * spread * gate;

Three different radii, not one radius with a tint. That single change is most of the difference between "this looks like film" and "this looks like an orange blur".

When not to use it

Halation is a property of film stock. On a scene meant to read as digital, or as something other than a camera, it is a costume rather than an effect, and it fights with a clean neon look rather than supporting it. Bloom belongs in almost every frame; halation belongs in frames that are pretending to be photochemical.

Rules of thumb

  1. Per-channel radii, widest on red. A single radius with a tint is the giveaway.
  2. Gate it. Only genuinely bright sources halate, unlike bloom.
  3. Make it much wider than your bloom, not slightly wider.
  4. Keep them as separate effects with separate controls. They are not two settings of one thing.
  5. It is a film artifact. If nothing in the frame is claiming to be film, leave it out.

All 61 notes How to use them Credits