@@ -22,6 +22,38 @@ bool texSeamless = false;
2222const float e = 2.718281828459 ;
2323const float BS = 10.0 ;
2424
25+ #ifdef ENABLE_TONE_MAPPING
26+
27+ /* Hable's UC2 Tone mapping parameters
28+ A = 0.22;
29+ B = 0.30;
30+ C = 0.10;
31+ D = 0.20;
32+ E = 0.01;
33+ F = 0.30;
34+ W = 11.2;
35+ equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
36+ */
37+
38+ vec3 uncharted2Tonemap(vec3 x)
39+ {
40+ return ((x * (0.22 * x + 0.03 ) + 0.002 ) / (x * (0.22 * x + 0.3 ) + 0.06 )) - 0.03334 ;
41+ }
42+
43+ vec4 applyToneMapping(vec4 color)
44+ {
45+ color = vec4 (pow (color.rgb, vec3 (2.2 )), color.a);
46+ const float gamma = 1.6 ;
47+ const float exposureBias = 5.5 ;
48+ color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
49+ // Precalculated white_scale from
50+ // vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
51+ vec3 whiteScale = vec3 (1.036015346 );
52+ color.rgb *= whiteScale;
53+ return vec4 (pow (color.rgb, vec3 (1.0 / gamma)), color.a);
54+ }
55+ #endif
56+
2557void get_texture_flags()
2658{
2759 vec4 flags = texture2D (textureFlags, vec2 (0.0 , 0.0 ));
@@ -116,22 +148,26 @@ vec4 base = texture2D(baseTexture, uv).rgba;
116148 color = base.rgb;
117149#endif
118150
151+ vec4 col = vec4 (color.rgb * gl_Color .rgb, 1.0 );
152+
119153#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
120154 float alpha = gl_Color .a;
121- vec4 col = vec4 (color.rgb, alpha);
122- col *= gl_Color ;
123- if (fogDistance != 0.0 ){
155+ if (fogDistance != 0.0 ) {
124156 float d = max (0.0 , min (vPosition.z / fogDistance * 1.5 - 0.6 , 1.0 ));
125157 alpha = mix (alpha, 0.0 , d);
126158 }
127- gl_FragColor = vec4 (col.rgb, alpha);
159+ col = vec4 (col.rgb, alpha);
128160#else
129- vec4 col = vec4 (color.rgb, base.a);
130- col *= gl_Color ;
131- if (fogDistance != 0.0 ){
161+ if (fogDistance != 0.0 ) {
132162 float d = max (0.0 , min (vPosition.z / fogDistance * 1.5 - 0.6 , 1.0 ));
133163 col = mix (col, skyBgColor, d);
134164 }
135- gl_FragColor = vec4 (col.rgb, base.a);
165+ col = vec4 (col.rgb, base.a);
166+ #endif
167+
168+ #ifdef ENABLE_TONE_MAPPING
169+ gl_FragColor = applyToneMapping(col);
170+ #else
171+ gl_FragColor = col;
136172#endif
137173}
0 commit comments