aboutsummaryrefslogtreecommitdiff
path: root/client/shaders/bloom_downsample
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/bloom_downsample
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/bloom_downsample')
-rw-r--r--client/shaders/bloom_downsample/opengl_fragment.glsl37
-rw-r--r--client/shaders/bloom_downsample/opengl_vertex.glsl11
2 files changed, 48 insertions, 0 deletions
diff --git a/client/shaders/bloom_downsample/opengl_fragment.glsl b/client/shaders/bloom_downsample/opengl_fragment.glsl
new file mode 100644
index 000000000..a1ff271a9
--- /dev/null
+++ b/client/shaders/bloom_downsample/opengl_fragment.glsl
@@ -0,0 +1,37 @@
+// based on Phys.Bloom OpenGL tutorial https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom
+// and ACM Siggraph talk in 2014 by Jorge Jimenez for Call of Duty: Advanced Warfare.
+#define rendered texture0
+
+uniform sampler2D rendered;
+uniform vec2 texelSize0;
+
+#ifdef GL_ES
+varying mediump vec2 varTexCoord;
+#else
+centroid varying vec2 varTexCoord;
+#endif
+
+void main(void)
+{
+ vec2 tx = 2.0 * texelSize0;
+ vec3 a = texture2D(rendered, varTexCoord.st + vec2(-1., -1.) * tx).rgb;
+ vec3 b = texture2D(rendered, varTexCoord.st + vec2(0., -1.) * tx).rgb;
+ vec3 c = texture2D(rendered, varTexCoord.st + vec2(1., -1.) * tx).rgb;
+ vec3 d = texture2D(rendered, varTexCoord.st + vec2(-1., 0.) * tx).rgb;
+ vec3 e = texture2D(rendered, varTexCoord.st + vec2(0., 0.) * tx).rgb;
+ vec3 f = texture2D(rendered, varTexCoord.st + vec2(1., 0.) * tx).rgb;
+ vec3 g = texture2D(rendered, varTexCoord.st + vec2(-1., 1.) * tx).rgb;
+ vec3 h = texture2D(rendered, varTexCoord.st + vec2(0., 1.) * tx).rgb;
+ vec3 i = texture2D(rendered, varTexCoord.st + vec2(1., 1.) * tx).rgb;
+ vec3 j = texture2D(rendered, varTexCoord.st + vec2(-0.5, -0.5) * tx).rgb;
+ vec3 k = texture2D(rendered, varTexCoord.st + vec2(0.5, -0.5) * tx).rgb;
+ vec3 l = texture2D(rendered, varTexCoord.st + vec2(-0.5, 0.5) * tx).rgb;
+ vec3 m = texture2D(rendered, varTexCoord.st + vec2(-0.5, 0.5) * tx).rgb;
+
+ vec3 color =
+ (a + c + g + i) * 0.03125 +
+ (b + d + f + h) * 0.0625 +
+ (e + j + k + l + m) * 0.125;
+
+ gl_FragColor = max(vec4(color, 1.0), 1e-4);
+}
diff --git a/client/shaders/bloom_downsample/opengl_vertex.glsl b/client/shaders/bloom_downsample/opengl_vertex.glsl
new file mode 100644
index 000000000..12692c296
--- /dev/null
+++ b/client/shaders/bloom_downsample/opengl_vertex.glsl
@@ -0,0 +1,11 @@
+#ifdef GL_ES
+varying mediump vec2 varTexCoord;
+#else
+centroid varying vec2 varTexCoord;
+#endif
+
+void main(void)
+{
+ varTexCoord.st = inTexCoord0.st;
+ gl_Position = inVertexPosition;
+}