diff options
| author | Graham Linden <graham@lindenlab.com> | 2019-02-06 10:07:24 -0800 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2019-02-06 10:07:24 -0800 | 
| commit | f8171a909cb2a18fcca47f6a0317919ece802aef (patch) | |
| tree | 0c531a0af4a8badf7ccb52f284e55d706bc930e8 /indra/newview/app_settings/shaders/class1 | |
| parent | e17756e700a47bdb1857551268ee385533c9feca (diff) | |
SL-10461
Another attempt at getting approximage handling of projector ambiance in the alpha object shader.
This will not be a perfect match for non-transparent objects but should be close enough.
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 772859576f..9883ece648 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -86,9 +86,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec      //get distance      float d = length(lv); -          float da = 1.0; -      vec3 col = vec3(0);      if (d > 0.0 && fa > 0.0) @@ -100,7 +98,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec          da = max(0.0, dot(norm, lv));          //distance attenuation -        float dist = d; +        float dist = d/la;          float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);          dist_atten *= dist_atten;          dist_atten *= 2.0; @@ -109,9 +107,11 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec          float spot = max(dot(-ln, lv), is_pointlight);          da *= spot*spot; // GL_SPOT_EXPONENT=2 +        // to match spotLight (but not multiSpotLight) *sigh*          float lit = max(da * dist_atten,0.0); +        col = lit * light_col * diffuse; -        float amb_da = (da*da*0.5 + 0.5) * ambiance; +        float amb_da = (da*da*0.5 + 0.25) * ambiance;          amb_da *= dist_atten;          amb_da = min(amb_da, 1.0f - lit); | 
