Description

FFT bloom (convolution bloom) renders nothing for some combinations of kernel size, r.Bloom.ScreenPercentage and viewport sizes (e.g. 50% and 1024 x 768)

Root cause

PostProcessFFTBloom.cpp computes SurveyGroupGridSize from ViewTexelRadiusInKernelTexels (R):

2 * DivideAndRoundUp(CeilToInt(R) + 4, SurveyTileSize)(source)

so the survey grid spans texel offsets -4*G .. 4*G-1, roughly R+4.

BloomSurveyMaxScatterDispersion.usf however defines its center zone with 2R + 1 and edge zone with 2R + 4, i.e. it surveys texels out to ~2R+4. For radii where little rounding up happens, the entire grid lies inside the center zone, the survey is empty and the max scatter dispersion is 0, which makes the bloom vanish.

Fix

Size the grid from 2R:

2 * DivideAndRoundUp(CeilToInt(2.0f * R) + 4, SurveyTileSize)

This guarantees 4*G-1 >= CeilToInt(2R) + 3, the last texel the shader can survey. BloomSurveyKernelCenterEnergy.usf masks by R and is unaffected by the larger grid.

Steps to Reproduce

  1. Emissive sphere in the level (see attached sample project)
  2. Post process volume with a custom bloom convolution kernel of 4096x4096.
  3. r.Bloom.ScreenPercentage=50, viewport 1024x768.
  4. PIE: bloom is not visible. Resizing the viewport slightly makes it appear; resizing to a very small viewport makes it disappear again.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-405641 in the post.

0
Login to Vote

Unresolved
Affects Versions5.6, 5.7, 5.8
CreatedOct 22, 2026
UpdatedOct 23, 2026
View Jira Issue