summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders/class2
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2019-04-26 16:02:21 -0700
committerGraham Linden <graham@lindenlab.com>2019-04-26 16:02:21 -0700
commitf133be068a4aa23c02c47348f5c7d4a28e1d5c37 (patch)
tree948e7fc0ed5fc01acb466f137e088a0d87ca6b64 /indra/newview/app_settings/shaders/class2
parent9d314074c9e3c898436321bdb90d3bf0d10c0079 (diff)
Lighting WIP
Consistency across class2/3/ALM lighting.
Diffstat (limited to 'indra/newview/app_settings/shaders/class2')
-rw-r--r--indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl21
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl14
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl11
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl8
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl3
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/transportF.glsl4
9 files changed, 33 insertions, 44 deletions
diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
index 5af9f5c902..563c5f562b 100644
--- a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
+++ b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
@@ -37,7 +37,7 @@ VARYING vec4 vertex_color;
VARYING vec2 vary_texcoord0;
-vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol);
+vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor);
void calcAtmospherics(vec3 inPositionEye);
void main()
@@ -53,7 +53,7 @@ void main()
// vec4 specular = specularColor;
vec4 specular = vec4(1.0);
- vec4 color = calcLightingSpecular(pos, norm, diffuse_color, specular, vec4(0.0));
+ vec4 color = calcLightingSpecular(pos, norm, diffuse_color, specular);
vertex_color = color;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 7ccc91f73c..a82d738ec2 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -71,15 +71,8 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-vec3 srgb_to_linear(vec3 cs);
-
vec3 getNorm(vec2 pos_screen);
-
-vec4 correctWithGamma(vec4 col)
-{
- return vec4(srgb_to_linear(col.rgb), col.a);
-}
-
+vec3 scaleDownLight(vec3 light);
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
@@ -220,14 +213,14 @@ void main()
col = dlit*lit*diff_tex*shadow;
// unshadowed for consistency between forward and deferred?
- amb_da += (da*0.5+0.5)/* *(1.0-shadow) */ *proj_ambiance;
+ amb_da += (da*0.5+0.5) * (1.0-shadow) * proj_ambiance;
}
//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
- // unshadowed for consistency between forward and deferred?
- amb_da += (da*da*0.5+0.5) /* *(1.0-shadow) */ * proj_ambiance;
+ // use unshadowed for consistency between forward and deferred?
+ amb_da += (da*da*0.5+0.5) * (1.0-shadow) * proj_ambiance;
amb_da *= dist_atten * noise;
amb_da = min(amb_da, 1.0-lit);
@@ -259,10 +252,6 @@ void main()
col += speccol;
}
}
-
-
-
-
if (envIntensity > 0.0)
{
@@ -296,6 +285,8 @@ void main()
//not sure why, but this line prevents MATBUG-194
col = max(col, vec3(0.0));
+ col = scaleDownLight(col);
+
frag_color.rgb = col;
frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 2d5d1c1b50..06a76668ba 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -73,6 +73,8 @@ vec3 scaleSoftClipFrag(vec3 l);
void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);
float getAmbientClamp();
vec3 atmosTransportFrag(vec3 light, vec3 additive, vec3 atten);
+vec3 linear_to_srgb(vec3 c);
+vec3 srgb_to_linear(vec3 c);
vec4 getPositionWithDepth(vec2 pos_screen, float depth);
vec4 getPosition(vec2 pos_screen);
@@ -99,14 +101,14 @@ void main()
float da = dot(normalize(norm.xyz), light_dir.xyz);
da = clamp(da, -1.0, 1.0);
- vec4 diffuse = texture2DRect(diffuseRect, tc);
-
+ vec4 gamma_diff = texture2DRect(diffuseRect, tc);
+ vec4 diffuse = gamma_diff;
+ diffuse.rgb = srgb_to_linear(diffuse.rgb);
+
scol = max(scol_ambocc.r, diffuse.a);
- //scol = pow(scol, light_gamma);
float final_da = da;
final_da = clamp(final_da, 0.0, 1.0);
- //final_da = pow(final_da, light_gamma);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 col;
@@ -138,7 +140,7 @@ vec3 post_ambient = col.rgb;
vec3 post_sunlight = col.rgb;
- col.rgb *= diffuse.rgb;
+ col.rgb *= gamma_diff.rgb;
vec3 post_diffuse = col.rgb;
@@ -169,7 +171,7 @@ vec3 post_diffuse = col.rgb;
}
}
- col.rgb += diffuse.a * diffuse.rgb;
+ col.rgb += diffuse.a * gamma_diff.rgb;
if (envIntensity > 0.0)
{ //add environmentmap
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index 2844cc8574..cd3b33eecc 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -71,13 +71,8 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
-vec3 srgb_to_linear(vec3 cs);
vec3 getNorm(vec2 pos_screen);
-
-vec4 correctWithGamma(vec4 col)
-{
- return vec4(srgb_to_linear(col.rgb), col.a);
-}
+vec3 scaleDownLight(vec3 c);
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
@@ -218,7 +213,7 @@ void main()
col = dlit*lit*diff_tex*shadow;
- amb_da += (da*0.5+0.5) /* * (1.0-shadow) */ * proj_ambiance;
+ amb_da += (da*0.5+0.5) * (1.0-shadow) * proj_ambiance;
}
//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
@@ -293,6 +288,8 @@ void main()
//not sure why, but this line prevents MATBUG-194
col = max(col, vec3(0.0));
+ col = scaleDownLight(col);
+
frag_color.rgb = col;
frag_color.a = 0.0;
}
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
index 6fcc41cd6d..89d9d1bde3 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
@@ -28,7 +28,7 @@
float calcDirectionalLightSpecular(inout vec4 specular, vec3 view, vec3 n, vec3 l, vec3 lightCol, float da);
vec3 calcPointLightSpecular(inout vec4 specular, vec3 view, vec3 v, vec3 n, vec3 l, float r, float pw, vec3 lightCol);
-vec3 atmosAmbient(vec3 light);
+vec3 atmosAmbient();
vec3 atmosAffectDirectionalLight(float lightIntensity);
vec3 atmosGetDiffuseSunlightColor();
vec3 scaleDownLight(vec3 light);
@@ -37,7 +37,7 @@ uniform vec4 light_position[8];
uniform vec4 light_attenuation[8];
uniform vec3 light_diffuse[8];
-vec4 sumLightsSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor, vec4 baseCol)
+vec4 sumLightsSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor)
{
vec4 col = vec4(0.0, 0.0, 0.0, color.a);
@@ -53,8 +53,8 @@ vec4 sumLightsSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor
col.rgb = scaleDownLight(col.rgb);
// Add windlight lights
- col.rgb += atmosAmbient(baseCol.rgb);
- col.rgb += atmosAffectDirectionalLight(calcDirectionalLightSpecular(specularSum, view, norm, light_position[0].xyz,atmosGetDiffuseSunlightColor()*baseCol.a, 1.0));
+ col.rgb += atmosAmbient();
+ col.rgb += atmosAffectDirectionalLight(calcDirectionalLightSpecular(specularSum, view, norm, light_position[0].xyz, atmosGetDiffuseSunlightColor(), 1.0));
col.rgb = min(col.rgb*color.rgb, 1.0);
specularColor.rgb = min(specularColor.rgb*specularSum.rgb, 1.0);
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
index b4f4850646..57f93a8b36 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
@@ -26,7 +26,6 @@
float calcDirectionalLight(vec3 n, vec3 l);
float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
-vec3 atmosAmbient(vec3 light);
vec3 atmosAffectDirectionalLight(float lightIntensity);
vec3 scaleDownLight(vec3 light);
@@ -35,7 +34,7 @@ uniform vec3 light_direction[8];
uniform vec3 light_attenuation[8];
uniform vec3 light_diffuse[8];
-vec4 sumLights(vec3 pos, vec3 norm, vec4 color, vec4 baseLight)
+vec4 sumLights(vec3 pos, vec3 norm, vec4 color)
{
vec4 col = vec4(0.0, 0.0, 0.0, color.a);
@@ -46,11 +45,8 @@ vec4 sumLights(vec3 pos, vec3 norm, vec4 color, vec4 baseLight)
col.rgb = scaleDownLight(col.rgb);
// Add windlight lights
- col.rgb += atmosAmbient(baseLight.rgb);
col.rgb += atmosAffectDirectionalLight(calcDirectionalLight(norm, light_position[0].xyz));
-
col.rgb = min(col.rgb*color.rgb, 1.0);
-
return col;
}
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
index c80706d2a7..9f049cb8fb 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
@@ -35,10 +35,10 @@ vec3 getPositionEye();
uniform float scene_light_strength;
uniform int no_atmo;
-vec3 atmosAmbient(vec3 light)
+vec3 atmosAmbient()
{
- if (no_atmo == 1) return light + vec3(0.66);
- return getAmblitColor() + light / 2.0;
+ if (no_atmo == 1) return vec3(0.66);
+ return getAmblitColor();
}
vec3 atmosAffectDirectionalLight(float lightIntensity)
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
index 9953f79cf2..ea37610502 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
@@ -32,14 +32,17 @@ vec3 getSunlitColor()
{
return vec3(0,0,0);
}
+
vec3 getAmblitColor()
{
return vec3(0,0,0);
}
+
vec3 getAdditiveColor()
{
return vary_AdditiveColor;
}
+
vec3 getAtmosAttenuation()
{
return vec3(vary_AtmosAttenuation);
diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
index 2e8946252b..9cb9c723a2 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
@@ -39,8 +39,8 @@ vec3 atmosTransportFrag(vec3 light, vec3 additive, vec3 atten)
return light;
}
light *= atten.r;
- light += additive * 2.0;
- return light;
+ light += additive;
+ return light * 2.0;
}
vec3 atmosTransport(vec3 light)