mirror of
https://github.com/minetest/minetest.git
synced 2024-08-20 05:24:15 +02:00
* 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
38 lines
1.5 KiB
GLSL
38 lines
1.5 KiB
GLSL
// 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);
|
|
}
|