diff options
| author | x2048 <codeforsmile@gmail.com> | 2023-01-06 22:33:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-06 22:33:25 +0100 |
| commit | 6d45c243f85942b20dab58753e735ec89a68f710 (patch) | |
| tree | bfe6207d73d1b111af82ea9e5794bdaac4ce26e3 /client/shaders/extract_bloom | |
| parent | 2715cc8bf68a2cc8cd583cd5b0bb732ee13a1b49 (diff) | |
| download | minetest-6d45c243f85942b20dab58753e735ec89a68f710.tar.xz | |
Add dynamic exposure correction (#12959)
* Add uniform for frame delta time
* Adjust exposure in logarithmic (EV) space
* Add network support and LUA API
* Add testing mod
Diffstat (limited to 'client/shaders/extract_bloom')
| -rw-r--r-- | client/shaders/extract_bloom/opengl_fragment.glsl | 13 | ||||
| -rw-r--r-- | client/shaders/extract_bloom/opengl_vertex.glsl | 8 |
2 files changed, 15 insertions, 6 deletions
diff --git a/client/shaders/extract_bloom/opengl_fragment.glsl b/client/shaders/extract_bloom/opengl_fragment.glsl index af320f9ab..45f5e9c6f 100644 --- a/client/shaders/extract_bloom/opengl_fragment.glsl +++ b/client/shaders/extract_bloom/opengl_fragment.glsl @@ -1,8 +1,12 @@ #define rendered texture0 +struct ExposureParams { + float compensationFactor; +}; + uniform sampler2D rendered; -uniform mediump float exposureFactor; uniform mediump float bloomStrength; +uniform ExposureParams exposureParams; #ifdef GL_ES varying mediump vec2 varTexCoord; @@ -10,6 +14,7 @@ varying mediump vec2 varTexCoord; centroid varying vec2 varTexCoord; #endif +varying float exposure; void main(void) { @@ -18,10 +23,6 @@ void main(void) // translate to linear colorspace (approximate) 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; + color *= pow(2., exposure) * exposureParams.compensationFactor * bloomStrength; gl_FragColor = vec4(color, 1.0); // force full alpha to avoid holes in the image. } diff --git a/client/shaders/extract_bloom/opengl_vertex.glsl b/client/shaders/extract_bloom/opengl_vertex.glsl index 12692c296..479ae1079 100644 --- a/client/shaders/extract_bloom/opengl_vertex.glsl +++ b/client/shaders/extract_bloom/opengl_vertex.glsl @@ -1,11 +1,19 @@ +#define exposureMap texture1 + +uniform sampler2D exposureMap; + #ifdef GL_ES varying mediump vec2 varTexCoord; #else centroid varying vec2 varTexCoord; #endif +varying float exposure; + void main(void) { + exposure = texture2D(exposureMap, vec2(0.5)).r; + varTexCoord.st = inTexCoord0.st; gl_Position = inVertexPosition; } |
