diff options
| author | Graham Linden <graham@lindenlab.com> | 2019-05-29 15:57:24 -0700 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2019-05-29 15:57:24 -0700 | 
| commit | 2f2cf6d855e1e5977ef0ed3583238636e890220a (patch) | |
| tree | 23469b9f26f53271d3df526aa8f9c767383d833f | |
| parent | a00dd2837d92ffc1b3732fb2df273bb3759eed90 (diff) | |
SL-10969
Modify ambient handling and forward projector lighting again to stamp out alpha fires.
8 files changed, 41 insertions, 42 deletions
| diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index fecca12905..23b2b003a5 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -1249,14 +1249,22 @@ LLColor4 LLSettingsSky::getTotalAmbient() const  LLColor3 LLSettingsSky::getMoonlightColor() const  {      F32 moon_brightness = getIsMoonUp() ? getMoonBrightness() : 0.001f; - -    LLColor3 moonlight_a(0.45, 0.45, 0.66); -    LLColor3 moonlight_b(0.33, 0.33, 1.0); - +    LLColor3 moonlight_a(0.9, 0.9, 1.32); +    LLColor3 moonlight_b(0.66, 0.66, 2.0);      LLColor3 moonlight = lerp(moonlight_b, moonlight_a, moon_brightness);          return moonlight;  } +void LLSettingsSky::clampColor(LLColor3& color) const +{ +    F32 max_color = llmax(color.mV[0], color.mV[1], color.mV[2]); +    if (max_color > 1.f) +    { +        color *= 1.f/max_color; +    } +    color.clamp(); +} +  void LLSettingsSky::calculateLightSettings() const  {      // Initialize temp variables @@ -1282,30 +1290,28 @@ void LLSettingsSky::calculateLightSettings() const      }      lighty = llmax(LIMIT, lighty);      componentMultBy(sunlight, componentExp((light_atten * -1.f) * lighty)); +    componentMultBy(sunlight, light_transmittance); +    clampColor(sunlight);      //increase ambient when there are more clouds      LLColor3 tmpAmbient = ambient + (smear(1.f) - ambient) * cloud_shadow; +    componentMultBy(tmpAmbient, light_transmittance); +    clampColor(tmpAmbient);      //brightness of surface both sunlight and ambient -    // reduce range to 0 - 1 before gamma correct to prevent clipping -    // then restore to full 0 - 3 range before storage -    //mSunDiffuse = gammaCorrect(componentMult(sunlight,   light_transmittance)); -    //mSunAmbient = gammaCorrect(componentMult(tmpAmbient, light_transmittance)); - -    mSunDiffuse = componentMult(sunlight,   light_transmittance); -    mSunAmbient = componentMult(tmpAmbient, light_transmittance); +    mSunDiffuse = gammaCorrect(sunlight); +    mSunAmbient = gammaCorrect(tmpAmbient);      F32 moon_brightness = getIsMoonUp() ? getMoonBrightness() : 0.001f;      LLColor3 moonlight = getMoonlightColor(); -    LLColor3 moonlight_b(0.33, 0.33, 1.0); // scotopic ambient value +    LLColor3 moonlight_b(0.66, 0.66, 1.2); // scotopic ambient value      componentMultBy(moonlight, componentExp((light_atten * -1.f) * lighty)); +    clampColor(moonlight); -    //mMoonDiffuse  = gammaCorrect(componentMult(moonlight, light_transmittance) * moon_brightness); -    //mMoonAmbient  = gammaCorrect(componentMult(moonlight_b, light_transmittance) * 0.0125f); -    mMoonDiffuse  = componentMult(moonlight, light_transmittance) * moon_brightness; -    mMoonAmbient  = componentMult(moonlight_b, light_transmittance) * 0.0125f; +    mMoonDiffuse  = gammaCorrect(componentMult(moonlight, light_transmittance) * moon_brightness); +    mMoonAmbient  = gammaCorrect(componentMult(moonlight_b, light_transmittance) * 0.0125f);      mTotalAmbient = mSunAmbient;  } diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h index 92b8a8bd5a..d04209a1a1 100644 --- a/indra/llinventory/llsettingssky.h +++ b/indra/llinventory/llsettingssky.h @@ -346,6 +346,7 @@ private:      void        calculateHeavenlyBodyPositions() const;      void        calculateLightSettings() const; +    void        clampColor(LLColor3& color) const;      mutable LLVector3   mSunDirection;      mutable LLVector3   mMoonDirection; diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 2b5509400e..93359e0d4c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -102,8 +102,6 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec          return col;      } -    dist /= la; -      /* clip to projector bounds       vec4 proj_tc = proj_mat * lp; @@ -117,16 +115,17 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec          return col;      }*/ -    fa += 1.0; -	if (dist > 0.0 && la > 0.0 && fa > 0.0) +	if (dist > 0.0 && la > 0.0)  	{ +         dist /= la; +  		//normalize light vector  		lv = normalize(lv);  		//distance attenuation  		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);  		dist_atten *= dist_atten; -        dist_atten *= 2.0f; +        //dist_atten *= 2.0f;          if (dist_atten <= 0.0)          { @@ -177,14 +176,14 @@ void main()  #ifdef USE_DIFFUSE_TEX      vec4 diffuse_srgb = texture2D(diffuseMap,vary_texcoord0.xy); -    vec4 diffuse_linear = vec4(srgb_to_linear(diffuse_srgb.rgb), diffuse_srgb.a);  #endif  #ifdef USE_INDEXED_TEX -    vec4 diffuse_linear = diffuseLookup(vary_texcoord0.xy); -    vec4 diffuse_srgb = vec4(linear_to_srgb(diffuse_linear.rgb), diffuse_linear.a); +    vec4 diffuse_srgb = diffuseLookup(vary_texcoord0.xy);  #endif +    vec4 diffuse_linear = vec4(srgb_to_linear(diffuse_srgb.rgb), diffuse_srgb.a); +  #ifdef FOR_IMPOSTOR      vec4 color;      color.rgb = diffuse_srgb.rgb; @@ -236,9 +235,7 @@ void main()      float ambient = da;      ambient *= 0.5;      ambient *= ambient; - -    float ambient_clamp = getAmbientClamp() + 0.1; -    ambient = (1.0 - ambient) * ambient_clamp; +    ambient = (1.0 - ambient);      vec3 sun_contrib = min(final_da, shadow) * sunlit; @@ -268,7 +265,7 @@ vec3 post_atmo = color.rgb;      // to linear!      color.rgb = srgb_to_linear(color.rgb); -   #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diffuse_srgb.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w); +   #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diffuse_linear.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w);      LIGHT_LOOP(1)      LIGHT_LOOP(2) diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index c3ca9a6904..4701157909 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -112,8 +112,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe          return col;      }*/ -    fa += 1.0; -	if (dist > 0.0 && la > 0.0 && fa > 0.0) +	if (dist > 0.0 && la > 0.0)  	{  		//normalize light vector  		lv = normalize(lv); @@ -121,7 +120,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe  		//distance attenuation  		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);  		dist_atten *= dist_atten; -        dist_atten *= 2.0f; +        //dist_atten *= 2.0f;          if (dist_atten <= 0.0)          { @@ -328,9 +327,7 @@ void main()      float ambient = da;      ambient *= 0.5;      ambient *= ambient; - -    float ambient_clamp = getAmbientClamp() + 0.1; -    ambient = (1.0 - ambient) * ambient_clamp; +    ambient = (1.0 - ambient);      vec3 sun_contrib = min(final_da, shadow) * sunlit; diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 39d14314cc..e07b31b3c1 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -106,10 +106,7 @@ void main()          float ambient = da;          ambient *= 0.5;          ambient *= ambient; -          ambient = (1.0 - ambient); -        float ambient_clamp = getAmbientClamp() + 0.1; -        ambient *= ambient_clamp;          vec3 sun_contrib = final_da * sunlit; diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl index 55ffbdcc46..a702b8d510 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl @@ -138,6 +138,6 @@ void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, o      //brightness of surface both sunlight and ambient      sunlit = sunlight.rgb * 0.5; -    amblit = tmpAmbient.rgb * .25; +    amblit = tmpAmbient.rgb * .5;      additive *= vec3(1.0 - temp1);  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 7f83e168bb..35018360ac 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -114,10 +114,7 @@ void main()          float ambient = da;          ambient *= 0.5;          ambient *= ambient; - -        float ambient_clamp = getAmbientClamp() + 0.1;          ambient = (1.0 - ambient); -        ambient *= ambient_clamp;          vec3 sun_contrib = min(scol, final_da) * sunlit; @@ -161,7 +158,9 @@ vec3 post_diffuse = color.rgb;                  vec3 sp = sun_contrib*scontrib / 16.0;                  sp = clamp(sp, vec3(0), vec3(1));                  bloom += dot(sp, sp) / 6.0; +#if !defined(SUNLIGHT_KILL)                  color += sp * spec.rgb; +#endif              }          } @@ -175,7 +174,9 @@ vec3 post_diffuse = color.rgb;          { //add environmentmap              vec3 env_vec = env_mat * refnormpersp;              vec3 reflected_color = textureCube(environmentMap, env_vec).rgb; +#if !defined(SUNLIGHT_KILL)              color = mix(color.rgb, reflected_color, envIntensity);  +#endif          }  vec3 post_env = color.rgb; diff --git a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl index eca8515212..6918ac3b8c 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl @@ -35,7 +35,7 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color)  	vec4 c = sumLights(pos, norm, color);  #if !defined(AMBIENT_KILL) -    c.rgb += atmosAmbient() * color.rgb * getAmbientClamp(); +    c.rgb += atmosAmbient() * color.rgb * 0.5 * getAmbientClamp();  #endif      return c;  | 
