diff options
| author | x2048 <codeforsmile@gmail.com> | 2022-11-02 09:09:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-02 09:09:48 +0100 |
| commit | 9b24041394ecf8210514845372d965f8d65302c9 (patch) | |
| tree | bdd8f6beea3ae775e3d2dbafa452257bd8f01ff9 /client/shaders/bloom_downsample | |
| parent | fb3085a2c593e0671e3322fe0e7d0914a052acef (diff) | |
| download | minetest-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.glsl | 37 | ||||
| -rw-r--r-- | client/shaders/bloom_downsample/opengl_vertex.glsl | 11 |
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; +} |
