All guides

Bloom Post-Processing vs Procedural Glow

Procedural neon evaluates distance from a luminous line inside one fragment shader. Bloom is post-processing: extract bright image regions, blur and composite. Neon knows the emitting geometry; bloom only sees image brightness, so any sufficiently bright source can contribute.

Fix the problem and environment

Procedural neon evaluates distance from a luminous line inside one fragment shader. Bloom is post-processing: extract bright image regions, blur and composite. Neon knows the emitting geometry; bloom only sees image brightness, so any sufficiently bright source can contribute.

The controlling code

float proceduralGlow=exp(-distanceToLine*falloff);
vec3 bright=source*smoothstep(threshold,threshold+softKnee,max(source.r,max(source.g,source.b)));
// A separate pass blurs bright. Final composition:
vec3 result=source+blurredHighlights*strength;

Verify in order

Compare neon with the bloom example. Inspect u_bright to identify contributing pixels, then inspect u_blur. Increasing final exposure is not the same as increasing bloom radius.

Scope and common mistakes

The teaching case uses RGBA8 to explain pass relationships. Production HDR bloom must also define linear color, values above one, floating-point targets and tone-map ordering; its threshold is not physical exposure.

Continue experimenting

Reference

Official documentation

Run the related examples