Maister, I have an idea for the threshold part of the glowing algorithm. Instead a hard decision on which parts will glow or not, why not glow everything but with different weights depending on intensity? I made this in threshold.cg:
#define BLOOM_STRENGTH 0.5
float4 main_fragment(float2 tex : TEXCOORD0, uniform sampler2D s0 : TEXUNIT0, uniform input IN) : COLOR
{
float3 color = 1.0 * tex2D(s0, tex).rgb;
// return float4(saturate(OVERDRIVE * (color - THRESHOLD)), 1.0);
return float4(color * color * BLOOM_STRENGTH, 1.0);
}
The glow decay with the square of the color intensity. Some games have some animations where the intensity varies in time (see Super Nova logo screen, for example). In these games, hard decision makes the glowing disappear instantly. With a varying glow, it vanishes smoothly.
Or even use the cube to decay faster, but not instantly: color * color * color.