[BotW] contrasty remove reshade tonemap

Turns out it's not tonemap
Credit SkalFate on discord
ACES now with a simple exposure that can be tweaked, default 0.6 to
match original curve according the author
This commit is contained in:
NAVras-Z 2017-11-08 15:09:43 +08:00
parent ed3ef4b909
commit 26f9bcfaaa
No known key found for this signature in database
GPG Key ID: AD82D45EF853EC40

View File

@ -11,14 +11,8 @@ const float bloomFactor = 0.7; // 1.0 is neutral
// -1: disable, clamp bright detail but keep [0,1] intact, however clamping could lead to desaturation as well // -1: disable, clamp bright detail but keep [0,1] intact, however clamping could lead to desaturation as well
// 0: (Wii U) BotW original // 0: (Wii U) BotW original
// 1: ACES Filmic // 1: ACES Filmic
// 2: Reshade/Sweetfx Tonemap, also allow color adjusting during tone mapping //--------------------"ACES Filmic" Parameters-----------------//
//-----------------"Reshade Tonemap" Parameters---------------// const float Exposure = 0.6; // [0.0, 1.0+] Adjust exposure
const float Gamma = 1.0; // [ 0.0, 2.0] 1.000 is neutral
const float Exposure = 0.0; // [-1.0, 1.0] Adjust exposure
const float Saturation = 0.0; // [-1.0, 1.0] Adjust saturation
const float Bleach = 0.0; // [ 0.0, 1.0] Brightens the shadows and fades the colors
const float Detint = 0.0; // [ 0.0, 1.0+] How much of the color tint to remove
const vec3 tintColor = vec3(0.0, 0.0, 0.0); // [ 0.0, 1.0+] Which color tint to remove
//---------------------------------------------------------------// //---------------------------------------------------------------//
#define post_process 2 #define post_process 2
@ -26,7 +20,7 @@ const vec3 tintColor = vec3(0.0, 0.0, 0.0); // [ 0.0, 1.0+] Which color tint to
// 0: (Wii U) BotW original, only vibrance // 0: (Wii U) BotW original, only vibrance
// 1: Reshade Vibrance // 1: Reshade Vibrance
// 2: Contrasty // 2: Contrasty
// 3: experiment, convert rgb to hsv then adjust s // 3: Experimental, convert rgb to hsv then adjust saturation directly
//----------------"BotW original" vibrance adjust-------------// //----------------"BotW original" vibrance adjust-------------//
const float satFactor = 0.29; // 0.18 is neutral. Experimental, adjust native saturation const float satFactor = 0.29; // 0.18 is neutral. Experimental, adjust native saturation
//---------------------------------------------------------------// //---------------------------------------------------------------//
@ -41,7 +35,7 @@ const float vibrance = 0.45; // 0.0 is neutral
const float crushContrast = 0.004; // 0.0 is neutral. Use small increments, loss of shadow detail const float crushContrast = 0.004; // 0.0 is neutral. Use small increments, loss of shadow detail
//---------------------------------------------------------------// //---------------------------------------------------------------//
//------------------------"hsv experiment"---------------------// //------------------------"hsv experiment"---------------------//
const float satScale = 1.5; const float satScale = 1.5; // 1.0 is neutral
//---------------------------------------------------------------// //---------------------------------------------------------------//
/*==========================================================================*/ /*==========================================================================*/
@ -72,34 +66,10 @@ vec3 BotWToneMap(vec3 color) {
} }
vec3 ACESFilm(vec3 color) { vec3 ACESFilm(vec3 color) {
color *= 0.6; color *= Exposure;
return (color*(2.51*color+0.03))/(color*(2.43*color+0.59)+0.14); return (color*(2.51*color+0.03))/(color*(2.43*color+0.59)+0.14);
} }
vec3 ReshadeTM(vec3 color) {
color = clamp(color - Detint * tintColor,0.0,1.0); // Detint, removed 2.55
color *= pow(2.0f, Exposure); // Exposure
color = pow(color, vec3(1.0/Gamma)); // Reciprocal Gamma, like contrasty, more intuitive, not exactly midtone anyway
float lum = getL709(color);
float L = clamp(10.0 * (lum - 0.45),0.0,1.0);
vec3 A2 = Bleach * color;
vec3 result1 = 2.0 * color * lum;
vec3 result2 = 1.0 - 2.0 * (1.0 - lum) * (1.0 - color);
vec3 newColor = mix(result1, result2, L);
vec3 mixRGB = A2 * newColor;
color += ((1.0 - A2) * mixRGB);
vec3 middlegray = vec3(dot(color, vec3(1.0 / 3.0)));
vec3 diffcolor = color - middlegray;
color = (color + diffcolor * Saturation) / (1.0 + (diffcolor * Saturation)); // Saturation
return color;
}
vec3 BotWVibrance(vec3 color) { vec3 BotWVibrance(vec3 color) {
float avg = (color.r + color.g + color.b)/3.0; float avg = (color.r + color.g + color.b)/3.0;
float maxc = max(color.r, max(color.g,color.b)); float maxc = max(color.r, max(color.g,color.b));
@ -172,8 +142,6 @@ color = clamp(color,0.0,1.0);
color = BotWToneMap(color); color = BotWToneMap(color);
#elif (tone_mapping == 1) #elif (tone_mapping == 1)
color = ACESFilm(color); color = ACESFilm(color);
#elif (tone_mapping == 2)
color = ReshadeTM(color);
#endif #endif
#if (post_process == 0) #if (post_process == 0)