Final
Final
/*
_______ _________ _______ _______ _
( ____ \\__ __/( ___ )( ____ )( )
| ( \/ ) ( | ( ) || ( )|| |
| (_____ | | | | | || (____)|| |
(_____ ) | | | | | || _____)| |
) | | | | | | || ( (_)
/\____) | | | | (___) || ) _
\_______) )_( (_______)|/ (_)
Do not modify this code until you have read the LICENSE.txt contained in the root
directory of this shaderpack!
*/
#include "lib/Uniforms.inc"
#include "lib/Common.inc"
/////////////////////////CONFIGURABLE
VARIABLES//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////
/////////////////////////CONFIGURABLE
VARIABLES//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////
/////////////////////////END OF CONFIGURABLE
VARIABLES//////////////////////////////////////////////////////////////////////////
///////////////////////////////////
/////////////////////////END OF CONFIGURABLE
VARIABLES//////////////////////////////////////////////////////////////////////////
///////////////////////////////////
in vec4 texcoord;
in vec3 lightVector;
in float timeSunriseSunset;
in float timeNoon;
in float timeMidnight;
in vec3 colorSunlight;
in vec3 colorSkylight;
in float avgSkyBrightness;
// ACES
const mat3 ACESInputMat = mat3(
0.59719, 0.35458, 0.04823,
0.07600, 0.90834, 0.01566,
0.02840, 0.13383, 0.83777
);
vec3 Uncharted2Tonemap(vec3 x)
{
x *= 3.0;
// float A = 0.15;
// float B = 0.50;
// float C = 0.10;
// float D = 0.20;
// float E = 0.02;
// float F = 0.30;
float A = 0.9;
float B = 0.8;
float C = 0.1;
float D = 1.0;
float E = 0.02;
float F = 0.30;
x = x * coneOverlap;
x = ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
x = x * coneOverlapInverse;
return x;
}
float a = 2.0*n - m;
float b = 2.0*m - 3.0*n;
float t = x/m;
vec3 retCol = (maxCol * (6.2 * maxCol + 0.05)) / (maxCol * (6.2 * maxCol + 2.3)
+ 0.06);
retCol = pow(retCol, vec3(1.0 / p));
return retCol;
}
return color;
}
vec3 ReinhardJodie(vec3 v)
{
v = pow(v, vec3(TONEMAP_CURVE));
float l = Luminance(v);
vec3 tv = v / (1.0f + v);
return tonemapped;
}
/////////////////////////////////////////////////////////////////////////////////
// ACES Fitting by Stephen Hill
vec3 RRTAndODTFit(vec3 v)
{
vec3 a = v * (v + 0.0245786f) - 0.000090537f;
vec3 b = v * (1.0f * v + 0.4329510f) + 0.238081f;
return a / b;
}
// Clamp to [0, 1]
color = color * ACESOutputMat;
color = saturate(color);
return color;
}
/////////////////////////////////////////////////////////////////////////////////
vec3 ACESTonemap(vec3 color)
{
color *= 0.7;
color = saturate(color);
return color;
}
coord *= resolution;
float fx = fract(coord.x);
float fy = fract(coord.y);
coord.x -= fx;
coord.y -= fy;
fx -= 0.5;
fy -= 0.5;
coord /= scale;
coord -= offset;
return offset;
}
bloom /= 12.6;
return bloom;
}
//exposure = 1.0f;
color.rgb /= vec3(exposure);
color.rgb *= 350.0;
}
color = overlay;
}
/////////////////////////
MAIN///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
/////////////////////////
MAIN///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
void main() {
// Sharpen
#if POST_SHARPENING > 0
{
vec2 texel = 1.0 / vec2(viewWidth, viewHeight);
vec3 cs = (texture2D(colortex3, texcoord.st + vec2(texel.x, texel.y)
* 0.5).rgb);
cs += (texture2D(colortex3, texcoord.st + vec2(texel.x, -
texel.y) * 0.5).rgb);
cs += (texture2D(colortex3, texcoord.st + vec2(-texel.x,
texel.y) * 0.5).rgb);
cs += (texture2D(colortex3, texcoord.st + vec2(-texel.x, -
texel.y) * 0.5).rgb);
cs -= color;
cs /= 3.0;
color = GammaToLinear(color);
Vignette(color);
AverageExposure(color);
// color *= 51.0;
// color = vec3(
// almostIdentity(color.x, blackRolloff, blackClip),
// almostIdentity(color.y, blackRolloff, blackClip),
// almostIdentity(color.z, blackRolloff, blackClip)
// ) - blackClip;
color = saturate(TONEMAP_OPERATOR(color));