diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class2')
7 files changed, 50 insertions, 39 deletions
| diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index e2694e060e..ef35bf3fd7 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -250,6 +250,9 @@ void main()      calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten); +    vec3 sunlit_linear = srgb_to_linear(sunlit); +    vec3 amblit_linear = amblit; +      vec3 irradiance;      vec3 glossenv;      vec3 legacyenv; @@ -266,7 +269,7 @@ void main()      color.a   = final_alpha; -    vec3 sun_contrib = min(final_da, shadow) * sunlit; +    vec3 sun_contrib = min(final_da, shadow) * sunlit_linear;      color.rgb = max(amblit, irradiance); @@ -274,8 +277,10 @@ void main()      color.rgb *= diffuse_linear.rgb; +    color.rgb = linear_to_srgb(color.rgb);      color.rgb = atmosFragLightingLinear(color.rgb, additive, atten);      color.rgb = scaleSoftClipFragLinear(color.rgb); +    color.rgb = srgb_to_linear(color.rgb);      vec4 light = vec4(0,0,0,0); @@ -294,8 +299,9 @@ void main()      color.rgb += light.rgb;  #endif // !defined(LOCAL_LIGHT_KILL) +  #ifdef WATER_FOG -    color = applyWaterFogViewLinear(pos.xyz, color, sunlit); +    color = applyWaterFogViewLinear(pos.xyz, color, sunlit_linear);  #endif // WATER_FOG  #endif // #else // FOR_IMPOSTOR @@ -303,6 +309,7 @@ void main()  #ifdef IS_HUD      color.rgb = linear_to_srgb(color.rgb);  #endif +      frag_color = color;  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl index 2a093827cb..fb76db99a0 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl @@ -82,6 +82,8 @@ vec3 srgb_to_linear(vec3 c);  vec3 linear_to_srgb(vec3 c);  void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive); +vec3 atmosFragLightingLinear(vec3 color, vec3 additive, vec3 atten); +vec3 scaleSoftClipFragLinear(vec3 color);  void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);  float calcLegacyDistanceAttenuation(float distance, float falloff); @@ -196,6 +198,8 @@ void main()      vec3 atten;      calcAtmosphericVarsLinear(pos.xyz, norm, light_dir, sunlit, amblit, additive, atten); +    vec3 sunlit_linear = srgb_to_linear(sunlit); +      vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;  #ifdef HAS_SUN_SHADOW @@ -229,9 +233,14 @@ void main()      vec3 v = -normalize(pos.xyz);      vec3 spec; -    color = pbrBaseLight(diffuseColor, specularColor, metallic, v, norm.xyz, perceptualRoughness, light_dir, sunlit, scol, radiance, irradiance, colorEmissive, ao, additive, atten, spec); +    color = pbrBaseLight(diffuseColor, specularColor, metallic, v, norm.xyz, perceptualRoughness, light_dir, sunlit_linear, scol, radiance, irradiance, colorEmissive, ao, additive, atten, spec);      glare += max(max(spec.r, spec.g), spec.b); +    color.rgb = linear_to_srgb(color.rgb); +    color.rgb = atmosFragLightingLinear(color.rgb, additive, atten); +    color.rgb = scaleSoftClipFragLinear(color.rgb); +    color.rgb = srgb_to_linear(color.rgb); +      vec3 light = vec3(0);      // Punctual lights diff --git a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl index 5fa53c374b..080f622155 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl @@ -47,7 +47,6 @@ void sampleReflectionProbesWater(inout vec3 ambenv, inout vec3 glossenv,          vec2 tc, vec3 pos, vec3 norm, float glossiness)  {      sampleReflectionProbes(ambenv, glossenv, tc, pos, norm, glossiness); -    glossenv *= 8.0;  }  vec4 sampleReflectionProbesDebug(vec3 pos) diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index 6668a00841..1d02498209 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -33,8 +33,8 @@ vec3 linear_to_srgb(vec3 col);  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten)  {       light *= atten.r; -    light += additive; -    return light * 2.0; +    light += additive * 2.0; +    return light;  }  vec3 atmosFragLightingLinear(vec3 light, vec3 additive, vec3 atten) diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsFuncs.glsl index f9f625ecdb..768f422060 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsFuncs.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsFuncs.glsl @@ -137,8 +137,8 @@ void calcAtmosphericVars(vec3 inPositionEye, vec3 light_dir, float ambFactor, ou      additive = (blue_horizon.rgb * blue_weight.rgb) * (cs + tmpAmbient.rgb) + (haze_horizon * haze_weight.rgb) * (cs * haze_glow + tmpAmbient.rgb);      // brightness of surface both sunlight and ambient -    sunlit = sunlight.rgb; -    amblit = tmpAmbient.rgb; +    sunlit = sunlight.rgb * 0.7; +    amblit = tmpAmbient.rgb * 0.25;      additive *= vec3(1.0 - combined_haze);  } @@ -150,21 +150,22 @@ vec3 srgb_to_linear(vec3 col);  float ambientLighting(vec3 norm, vec3 light_dir)  {      float ambient = min(abs(dot(norm.xyz, light_dir.xyz)), 1.0); -    ambient *= 0.56; +    ambient *= 0.5;      ambient *= ambient;      ambient = (1.0 - ambient);      return ambient;  } -// return colors in linear space +// return lit amblit in linear space, leave sunlit and additive in sRGB space  void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, out vec3 sunlit, out vec3 amblit, out vec3 additive,                           out vec3 atten)  {      calcAtmosphericVars(inPositionEye, light_dir, 1.0, sunlit, amblit, additive, atten, false); -    sunlit = srgb_to_linear(sunlit); -    additive = srgb_to_linear(additive); -    amblit = ambient_linear; + +    sunlit *= 2.0; +    amblit *= 2.0;      amblit *= ambientLighting(norm, light_dir); +    amblit = srgb_to_linear(amblit);  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl index 9a9b179e6a..027bfb866f 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl @@ -22,43 +22,34 @@   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ -uniform float gamma; -vec3 getAtmosAttenuation(); -vec3 getAdditiveColor(); + // DEPRECATED -vec3 srgb_to_linear(vec3 col); -vec3 linear_to_srgb(vec3 col); +//soft clip effect has been moved to postDeferredGammaCorrect legacyGamma, this file is effectively dead +// but these functions need to be removed from all existing shaders before removing this file -vec3 scaleSoftClipFragLinear(vec3 light) -{ // identical to non-linear version and that's probably close enough -    //soft clip effect: -    light = 1. - clamp(light, vec3(0.), vec3(1.)); -    light = 1. - pow(light, vec3(gamma)); // s/b inverted already CPU-side +vec3 scaleSoftClipFrag(vec3 light) +{      return light;  } -vec3 scaleSoftClipFrag(vec3 light) -{ -    //soft clip effect: -    light = 1. - clamp(light, vec3(0.), vec3(1.)); -    light = 1. - pow(light, vec3(gamma)); // s/b inverted already CPU-side +vec3 scaleSoftClipFragLinear(vec3 light) +{ // identical to non-linear version and that's probably close enough      return light;  }  vec3 scaleSoftClip(vec3 light)  { -    return scaleSoftClipFrag(light); +    return light;  }  vec3 fullbrightScaleSoftClipFrag(vec3 light, vec3 add, vec3 atten)  { -    //return mix(scaleSoftClipFrag(light.rgb), add, atten); -    return scaleSoftClipFrag(light.rgb); +    return light;  }  vec3 fullbrightScaleSoftClip(vec3 light)  { -    return fullbrightScaleSoftClipFrag(light, getAdditiveColor(), getAtmosAttenuation()); +    return light;  } diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl index c509d865ba..6aa719d200 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl @@ -48,23 +48,27 @@ vec3 atmosTransport(vec3 light)  vec3 fullbrightAtmosTransportFragLinear(vec3 light, vec3 additive, vec3 atten)  {      // same as non-linear version, probably fine -    float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;     -    return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive, brightness * brightness); +    //float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;     +    //return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive, brightness * brightness); +    return atmosTransportFrag(light, additive, atten);  }  vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten)  { -    float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;     -    return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive, brightness * brightness); +    //float brightness = dot(light.rgb * 0.5, vec3(0.3333)) + 0.1;     +    //return mix(atmosTransportFrag(light.rgb, additive, atten), light.rgb + additive, brightness * brightness); +    return atmosTransportFrag(light, additive, atten);  }  vec3 fullbrightAtmosTransport(vec3 light)  { -    return fullbrightAtmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation()); +    //return fullbrightAtmosTransportFrag(light, getAdditiveColor(), getAtmosAttenuation()); +    return atmosTransport(light);  }  vec3 fullbrightShinyAtmosTransport(vec3 light)  { -    float brightness = dot(light.rgb, vec3(0.33333)); -    return mix(atmosTransport(light.rgb), (light.rgb + getAdditiveColor().rgb) * (2.0 - brightness), brightness * brightness); +    //float brightness = dot(light.rgb, vec3(0.33333)); +    //return mix(atmosTransport(light.rgb), (light.rgb + getAdditiveColor().rgb) * (2.0 - brightness), brightness * brightness); +    return atmosTransport(light);  } | 
