diff options
| author | x2048 <codeforsmile@gmail.com> | 2022-09-06 08:25:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-06 08:25:18 +0200 |
| commit | ff6dcfea82974df6db5a557e31aaddb6bdb7a71f (patch) | |
| tree | 18bafaedcfdff36a0c0719653b99370b7434b344 /client | |
| parent | 464043b8abdbd936640757604ecb21662592043b (diff) | |
| download | minetest-ff6dcfea82974df6db5a557e31aaddb6bdb7a71f.tar.xz | |
Implement rendering pipeline and post-processing (#12465)
Co-authored-by: Lars Mueller <appgurulars@gmx.de>
Co-authored-by: sfan5 <sfan5@live.de>
Co-authored-by: lhofhansl <lhofhansl@yahoo.com>
Diffstat (limited to 'client')
| -rw-r--r-- | client/shaders/default_shader/opengl_fragment.glsl | 2 | ||||
| -rw-r--r-- | client/shaders/nodes_shader/opengl_fragment.glsl | 43 | ||||
| -rw-r--r-- | client/shaders/nodes_shader/opengl_vertex.glsl | 4 | ||||
| -rw-r--r-- | client/shaders/object_shader/opengl_fragment.glsl | 39 | ||||
| -rw-r--r-- | client/shaders/second_stage/opengl_fragment.glsl | 53 | ||||
| -rw-r--r-- | client/shaders/second_stage/opengl_vertex.glsl | 11 | ||||
| -rw-r--r-- | client/shaders/selection_shader/opengl_fragment.glsl | 2 |
7 files changed, 75 insertions, 79 deletions
diff --git a/client/shaders/default_shader/opengl_fragment.glsl b/client/shaders/default_shader/opengl_fragment.glsl index 5018ac6ea..300c0c589 100644 --- a/client/shaders/default_shader/opengl_fragment.glsl +++ b/client/shaders/default_shader/opengl_fragment.glsl @@ -2,5 +2,5 @@ varying lowp vec4 varColor; void main(void) { - gl_FragColor = varColor; + gl_FragData[0] = varColor; } diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index c4b947e72..1f7d98069 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -45,6 +45,9 @@ centroid varying vec2 varTexCoord; #endif varying vec3 eyeVec; varying float nightRatio; +varying vec3 tsEyeVec; +varying vec3 lightVec; +varying vec3 tsLightVec; const float fogStart = FOG_START; const float fogShadingParameter = 1.0 / ( 1.0 - fogStart); @@ -359,40 +362,6 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance) #endif #endif -#if ENABLE_TONE_MAPPING - -/* Hable's UC2 Tone mapping parameters - A = 0.22; - B = 0.30; - C = 0.10; - D = 0.20; - E = 0.01; - F = 0.30; - W = 11.2; - equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F -*/ - -vec3 uncharted2Tonemap(vec3 x) -{ - return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333; -} - -vec4 applyToneMapping(vec4 color) -{ - color = vec4(pow(color.rgb, vec3(2.2)), color.a); - const float gamma = 1.6; - const float exposureBias = 5.5; - color.rgb = uncharted2Tonemap(exposureBias * color.rgb); - // Precalculated white_scale from - //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W)); - vec3 whiteScale = vec3(1.036015346); - color.rgb *= whiteScale; - return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a); -} -#endif - - - void main(void) { vec3 color; @@ -470,10 +439,6 @@ void main(void) } #endif -#if ENABLE_TONE_MAPPING - col = applyToneMapping(col); -#endif - // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?), // the fog will only be rendered correctly if the last operation before the // clamp() is an addition. Else, the clamp() seems to be ignored. @@ -488,5 +453,5 @@ void main(void) col = mix(skyBgColor, col, clarity); col = vec4(col.rgb, base.a); - gl_FragColor = col; + gl_FragData[0] = col; } diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 40f0965e1..42fae7612 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -42,6 +42,7 @@ centroid varying vec2 varTexCoord; varying float perspective_factor; #endif +varying float area_enable_parallax; varying vec3 eyeVec; varying float nightRatio; @@ -193,6 +194,9 @@ void main(void) vPosition = gl_Position.xyz; eyeVec = -(mWorldView * pos).xyz; +#ifdef SECONDSTAGE + normalPass = normalize((inVertexNormal+1)/2); +#endif vNormal = inVertexNormal; // Calculate color. diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl index 1fefc764b..662d0c865 100644 --- a/client/shaders/object_shader/opengl_fragment.glsl +++ b/client/shaders/object_shader/opengl_fragment.glsl @@ -361,39 +361,6 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance) #endif #endif -#if ENABLE_TONE_MAPPING - -/* Hable's UC2 Tone mapping parameters - A = 0.22; - B = 0.30; - C = 0.10; - D = 0.20; - E = 0.01; - F = 0.30; - W = 11.2; - equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F -*/ - -vec3 uncharted2Tonemap(vec3 x) -{ - return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333; -} - -vec4 applyToneMapping(vec4 color) -{ - color = vec4(pow(color.rgb, vec3(2.2)), color.a); - const float gamma = 1.6; - const float exposureBias = 5.5; - color.rgb = uncharted2Tonemap(exposureBias * color.rgb); - // Precalculated white_scale from - //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W)); - vec3 whiteScale = vec3(1.036015346); - color.rgb *= whiteScale; - return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a); -} -#endif - - void main(void) { @@ -473,10 +440,6 @@ void main(void) } #endif -#if ENABLE_TONE_MAPPING - col = applyToneMapping(col); -#endif - // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?), // the fog will only be rendered correctly if the last operation before the // clamp() is an addition. Else, the clamp() seems to be ignored. @@ -491,5 +454,5 @@ void main(void) col = mix(skyBgColor, col, clarity); col = vec4(col.rgb, base.a); - gl_FragColor = col; + gl_FragData[0] = col; } diff --git a/client/shaders/second_stage/opengl_fragment.glsl b/client/shaders/second_stage/opengl_fragment.glsl new file mode 100644 index 000000000..965450fcb --- /dev/null +++ b/client/shaders/second_stage/opengl_fragment.glsl @@ -0,0 +1,53 @@ +uniform sampler2D baseTexture; + +#define rendered baseTexture + +#ifdef GL_ES +varying mediump vec2 varTexCoord; +#else +centroid varying vec2 varTexCoord; +#endif + +#if ENABLE_TONE_MAPPING + +/* Hable's UC2 Tone mapping parameters + A = 0.22; + B = 0.30; + C = 0.10; + D = 0.20; + E = 0.01; + F = 0.30; + W = 11.2; + equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F +*/ + +vec3 uncharted2Tonemap(vec3 x) +{ + return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333; +} + +vec4 applyToneMapping(vec4 color) +{ + color = vec4(pow(color.rgb, vec3(2.2)), color.a); + const float gamma = 1.6; + const float exposureBias = 5.5; + color.rgb = uncharted2Tonemap(exposureBias * color.rgb); + // Precalculated white_scale from + //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W)); + vec3 whiteScale = vec3(1.036015346); + color.rgb *= whiteScale; + return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a); +} +#endif + +void main(void) +{ + vec2 uv = varTexCoord.st; + vec4 color = texture2D(rendered, uv).rgba; + +#if ENABLE_TONE_MAPPING + color = applyToneMapping(color); +#endif + + gl_FragColor = vec4(color.rgb, 1.0); // force full alpha to avoid holes in the image. +} diff --git a/client/shaders/second_stage/opengl_vertex.glsl b/client/shaders/second_stage/opengl_vertex.glsl new file mode 100644 index 000000000..12692c296 --- /dev/null +++ b/client/shaders/second_stage/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; +} diff --git a/client/shaders/selection_shader/opengl_fragment.glsl b/client/shaders/selection_shader/opengl_fragment.glsl index 35b1f8902..2094ea0f4 100644 --- a/client/shaders/selection_shader/opengl_fragment.glsl +++ b/client/shaders/selection_shader/opengl_fragment.glsl @@ -8,5 +8,5 @@ void main(void) vec2 uv = varTexCoord.st; vec4 color = texture2D(baseTexture, uv); color.rgb *= varColor.rgb; - gl_FragColor = color; + gl_FragData[0] = color; } |
