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.