diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/tonemapUtilF.glsl | 37 | 
1 files changed, 24 insertions, 13 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/tonemapUtilF.glsl b/indra/newview/app_settings/shaders/class1/deferred/tonemapUtilF.glsl index a63b8d7c2b..774ccb6baf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/tonemapUtilF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/tonemapUtilF.glsl @@ -117,27 +117,34 @@ uniform float exposure;  uniform float tonemap_mix;  uniform int tonemap_type; +  vec3 toneMap(vec3 color)  {  #ifndef NO_POST -    float exp_scale = texture(exposureMap, vec2(0.5,0.5)).r; - -    color *= exposure * exp_scale; +    vec3 linear_input_color = color; -    vec3 clamped_color = clamp(color.rgb, vec3(0.0), vec3(1.0)); +    float exp_scale = texture(exposureMap, vec2(0.5,0.5)).r; +    float final_exposure = exposure * exp_scale; +    vec3 exposed_color = color * final_exposure; +    vec3 tonemapped_color = exposed_color;      switch(tonemap_type)      {      case 0: -        color = PBRNeutralToneMapping(color); +        tonemapped_color = PBRNeutralToneMapping(exposed_color);          break;      case 1: -        color = toneMapACES_Hill(color); +        tonemapped_color = toneMapACES_Hill(exposed_color);          break;      } -    // mix tonemapped and linear here to provide adjustment -    color = mix(clamped_color, color, tonemap_mix); +    vec3 exposed_linear_input = linear_input_color * final_exposure; +    color = mix(exposed_linear_input, tonemapped_color, tonemap_mix); + +    color = clamp(color, 0.0, 1.0); +#else +    color *= exposure * texture(exposureMap, vec2(0.5,0.5)).r; +    color = clamp(color, 0.0, 1.0);  #endif      return color; @@ -147,20 +154,24 @@ vec3 toneMap(vec3 color)  vec3 toneMapNoExposure(vec3 color)  {  #ifndef NO_POST -    vec3 clamped_color = clamp(color.rgb, vec3(0.0), vec3(1.0)); +    vec3 linear_input_color = color; +    vec3 tonemapped_color = color;      switch(tonemap_type)      {      case 0: -        color = PBRNeutralToneMapping(color); +        tonemapped_color = PBRNeutralToneMapping(color);          break;      case 1: -        color = toneMapACES_Hill(color); +        tonemapped_color = toneMapACES_Hill(color);          break;      } -    // mix tonemapped and linear here to provide adjustment -    color = mix(clamped_color, color, tonemap_mix); +    color = mix(linear_input_color, tonemapped_color, tonemap_mix); + +    color = clamp(color, 0.0, 1.0); +#else +     color = clamp(color, 0.0, 1.0);  #endif      return color; | 
