aboutsummaryrefslogtreecommitdiff
path: root/client/shaders/extract_bloom
diff options
context:
space:
mode:
authorx2048 <codeforsmile@gmail.com>2022-11-02 09:09:48 +0100
committerGitHub <noreply@github.com>2022-11-02 09:09:48 +0100
commit9b24041394ecf8210514845372d965f8d65302c9 (patch)
treebdd8f6beea3ae775e3d2dbafa452257bd8f01ff9 /client/shaders/extract_bloom
parentfb3085a2c593e0671e3322fe0e7d0914a052acef (diff)
downloadminetest-9b24041394ecf8210514845372d965f8d65302c9.tar.xz
Improve bloom effect (#12916)
* Remove the built-in exposure factor of 2.5 * Add physics-based bloom (https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom) * Add luminance scaling for bloom layer to simulate HDR * Add setting to control bloom strength
Diffstat (limited to 'client/shaders/extract_bloom')
-rw-r--r--client/shaders/extract_bloom/opengl_fragment.glsl14
1 files changed, 10 insertions, 4 deletions
diff --git a/client/shaders/extract_bloom/opengl_fragment.glsl b/client/shaders/extract_bloom/opengl_fragment.glsl
index 7d18ec26f..af320f9ab 100644
--- a/client/shaders/extract_bloom/opengl_fragment.glsl
+++ b/client/shaders/extract_bloom/opengl_fragment.glsl
@@ -2,7 +2,7 @@
uniform sampler2D rendered;
uniform mediump float exposureFactor;
-uniform float bloomLuminanceThreshold;
+uniform mediump float bloomStrength;
#ifdef GL_ES
varying mediump vec2 varTexCoord;
@@ -14,8 +14,14 @@ centroid varying vec2 varTexCoord;
void main(void)
{
vec2 uv = varTexCoord.st;
- vec4 color = texture2D(rendered, uv).rgba;
+ vec3 color = texture2D(rendered, uv).rgb;
// translate to linear colorspace (approximate)
- color.rgb = pow(color.rgb, vec3(2.2)) * exposureFactor;
- gl_FragColor = vec4(color.rgb, 1.0); // force full alpha to avoid holes in the image.
+ color = pow(color, vec3(2.2));
+
+ // Scale colors by luminance to amplify bright colors
+ // in SDR textures.
+ float luminance = dot(color, vec3(0.213, 0.515, 0.072));
+ luminance *= luminance;
+ color *= luminance * exposureFactor * bloomStrength;
+ gl_FragColor = vec4(color, 1.0); // force full alpha to avoid holes in the image.
}