From 5e3ea358578e2a6b4a857daaf86ca72c56ba16ec Mon Sep 17 00:00:00 2001 From: Sanjeet Suhag Date: Wed, 16 Mar 2022 11:25:02 -0400 Subject: [PATCH] Fix tonemapping, HSB bug #1 --- Source/Shaders/SkyAtmosphereFS.glsl | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Source/Shaders/SkyAtmosphereFS.glsl b/Source/Shaders/SkyAtmosphereFS.glsl index 34a261864226..79a06fd09f9e 100644 --- a/Source/Shaders/SkyAtmosphereFS.glsl +++ b/Source/Shaders/SkyAtmosphereFS.glsl @@ -1,5 +1,7 @@ varying vec3 v_outerPositionWC; +uniform vec3 u_hsbShift; + #ifndef PER_FRAGMENT_ATMOSPHERE varying vec3 v_mieColor; varying vec3 v_rayleighColor; @@ -29,5 +31,24 @@ void main (void) opacity = v_opacity; #endif - gl_FragColor = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity); + vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity); + +#ifdef COLOR_CORRECT + // Convert rgb color to hsb + vec3 hsb = czm_RGBToHSB(color.rgb); + // Perform hsb shift + hsb.x += u_hsbShift.x; // hue + hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation + hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness + // Convert shifted hsb back to rgb + color.rgb = czm_HSBToRGB(hsb); +#endif + + // Apply tonemapping + float exposure = 1.0; + color = vec4(1.0 - exp(-exposure * color)); + float gamma = 0.8; + color = pow(color, vec4(1.0 / gamma)); + + gl_FragColor= color; }