To better control what blooms:
simply disable/comment/delete that jodieReinhardTonemap thing in _image.fs(lines 10-15 and, 45),
set colorRange to 1.0,
enable HDR Half (for better performance).
Than you will be able to control what blooms by taking the color values of objects/ materials/ textures to go over 1.0 just like in eevee. Without needing Color Correcition. ^^)
_image.fs:
uniform float bgl_RenderedTextureWidth;
uniform float bgl_RenderedTextureHeight;
uniform sampler2D bgl_RenderedTexture;
vec2 iResolution = vec2(bgl_RenderedTextureWidth, bgl_RenderedTextureHeight); // viewport resolution (in pixels)
uniform sampler2D iChannel0; //! buffer[xbuf: 1, wrap: GL_CLAMP_TO_EDGE, mipmap: false, filter: GL_NEAREST]
#define colorRange 1.0
//vec3 jodieReinhardTonemap(vec3 c){
// float l = dot(c, vec3(0.2126, 0.7152, 0.0722));
// vec3 tc = c / (c + 8.0);
// return mix(c / (l + 80.0), tc, 0.55);
//}
vec3 bloomTile(float lod, vec2 offset, vec2 uv){
return texture(iChannel0, uv * exp2(-lod) + offset).rgb;
}
vec3 getBloom(vec2 uv){
vec3 blur = vec3(0.0);
blur = pow(bloomTile(2., vec2(0.0,0.0), uv),vec3(2.2)) * 0.32 + blur;
blur = pow(bloomTile(3., vec2(0.3,0.0), uv),vec3(2.2)) * 0.16 + blur;
blur = pow(bloomTile(4., vec2(0.0,0.3), uv),vec3(2.2)) * 0.08 + blur;
blur = pow(bloomTile(5., vec2(0.1,0.3), uv),vec3(2.2)) * 0.04 + blur;
blur = pow(bloomTile(6., vec2(0.2,0.3), uv),vec3(2.2)) * 0.04 + blur;
return blur * colorRange;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
vec3 color = pow(texture(bgl_RenderedTexture, uv).rgb * colorRange, vec3(2.2));
// color = pow(color, vec3(2.2));
color += pow(getBloom(uv), vec3(3.5));
color = pow(color, vec3(1.0 / 4.5));
color = max(vec3(0.0), color-0.0);
// color = jodieReinhardTonemap(color);
fragColor = vec4(color,1.0);
}
void main() {
vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
mainImage(color, gl_FragCoord.xy);
gl_FragColor = color;
}
edit: the line =~ 40 is also useless. => color = pow(color, vec3(2.2));