Fixed HDR controls for multiple atm's.

This commit is contained in:
Jonathas Costa
2017-07-11 14:52:59 -04:00
parent 18d8612a8a
commit 39b90863d6
11 changed files with 107 additions and 117 deletions

View File

@@ -24,113 +24,18 @@
#version __CONTEXT__
#include "hdr.glsl"
layout (location = 0) out vec4 finalColor;
uniform int nAaSamples;
uniform sampler2DMS mainColorTexture;
//uniform float exposure;
const float exposure = 0.4;
//const float exposure = 0.4;
uniform float backgroundExposure;
//uniform float gamma;
const float gamma = 2.2;
vec3 exponentialToneMapping(vec3 color) {
color *= exposure;
color.r = color.r < 1.413 ? pow(color.r * 0.38317, 1.0 / gamma) : 1.0 - exp(-color.r);
color.g = color.g < 1.413 ? pow(color.g * 0.38317, 1.0 / gamma) : 1.0 - exp(-color.g);
color.b = color.b < 1.413 ? pow(color.b * 0.38317, 1.0 / gamma) : 1.0 - exp(-color.b);
return color;
}
vec3 linearToneMapping(vec3 color)
{
float tExposure = 1.0f;
color = clamp(tExposure * color, 0.0f, 1.0f);
color = pow(color, vec3(1.0f / gamma));
return color;
}
vec3 simpleReinhardToneMapping(vec3 color)
{
float tExposure = 1.5f;
color *= tExposure/(1.0f + color / tExposure);
color = pow(color, vec3(1. / gamma));
return color;
}
vec3 lumaBasedReinhardToneMapping(vec3 color)
{
float luma = dot(color, vec3(0.2126f, 0.7152f, 0.0722f));
float toneMappedLuma = luma / (1.0f + luma);
color *= toneMappedLuma / luma;
color = pow(color, vec3(1.0f / gamma));
return color;
}
vec3 whitePreservingLumaBasedReinhardToneMapping(vec3 color)
{
float white = 4.0f;
//float luma = dot(color, vec3(0.2126f, 0.7152f, 0.0722f));
float luma = dot(color, vec3(0.4126f, 0.9152f, 0.2722f));
float toneMappedLuma = luma * (1.0f + luma / (white * white)) / (1.0f + luma);
color *= toneMappedLuma / luma;
color = pow(color, vec3(1.0f / gamma));
return color;
}
vec3 RomBinDaHouseToneMapping(vec3 color)
{
color = exp( -1.0f / ( 2.72f * color + 0.15f ) );
color = pow(color, vec3(1.7 / gamma));
return color;
}
vec3 filmicToneMapping(vec3 color)
{
color = max(vec3(0.0f), color - vec3(0.04f));
color = (color * (6.2f * color + 0.5f)) / (color * (6.2f * color + 20.0f) + 0.06f);
return color;
}
vec3 Uncharted2ToneMapping(vec3 color)
{
float A = 0.15f;
float B = 0.50f;
float C = 0.10f;
float D = 0.20f;
float E = 0.02f;
float F = 0.30f;
float W = 11.2f;
float tExposure = 0.4f;
color *= tExposure;
color = ((color * (A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F;
float white = ((W * (A * W + C * B) + D * E) / (W * (A * W + B) + D * F)) - E / F;
color /= white;
color = pow(color, vec3(1.0f / gamma));
return color;
}
vec3 jToneMapping(const vec3 color) {
return 1.0 - exp(-exposure * color);
}
vec3 HDR(vec3 color) {
//return exponentialToneMapping(color);
//return linearToneMapping(color);
//return simpleReinhardToneMapping(color);
//return lumaBasedReinhardToneMapping(color);
//return whitePreservingLumaBasedReinhardToneMapping(color);
//return RomBinDaHouseToneMapping(color);
//return filmicToneMapping(color);
//return Uncharted2ToneMapping(color);
return jToneMapping(color);
}
//const float gamma = 2.2;
void main() {
vec4 color = vec4(0.0);