mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-28 23:19:35 -06:00
Fixed HDR controls for multiple atm's.
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user