summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders/class2
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/app_settings/shaders/class2')
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl24
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/skyF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl98
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl19
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl1
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl14
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl5
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyV.glsl2
8 files changed, 93 insertions, 72 deletions
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 9cd5592d7c..54ec534d14 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -71,12 +71,21 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
+vec3 srgb_to_linear(vec3 cs);
+vec3 linear_to_srgb(vec3 cl);
+
vec3 getNorm(vec2 pos_screen);
-vec3 scaleDownLight(vec3 light);
+
+
+vec4 correctWithGamma(vec4 col)
+{
+ return vec4(srgb_to_linear(col.rgb), col.a);
+}
+
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
-
+ ret = correctWithGamma(ret);
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
float det = min(lod/(proj_lod*0.5), 1.0);
@@ -95,6 +104,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
+ ret = correctWithGamma(ret);
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
@@ -112,6 +122,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
+ ret = correctWithGamma(ret);
vec2 dist = tc-vec2(0.5);
@@ -213,21 +224,18 @@ 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);
// use unshadowed for consistency between forward and deferred?
- amb_da += (da*da*0.5+0.5) * (1.0-shadow) * proj_ambiance;
+ 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);
-#ifndef NO_AMBIANCE
col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
-#endif
-
}
@@ -288,8 +296,6 @@ 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/skyF.glsl b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
index a8eb7102ed..bd0ca0a46e 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
@@ -117,7 +117,7 @@ void main()
vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
vec4 light_atten;
- float dens_mul = density_multiplier;
+ float dens_mul = density_multiplier * 0.45;
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 7368b8d80c..f6f8f56103 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -45,40 +45,27 @@ uniform float blur_size;
uniform float blur_fidelity;
// Inputs
-uniform vec4 morphFactor;
-uniform vec3 camPosLocal;
-//uniform vec4 camPosWorld;
-uniform float cloud_shadow;
-uniform float max_y;
-uniform float global_gamma;
-uniform float display_gamma;
uniform mat3 env_mat;
-uniform vec4 shadow_clip;
-uniform mat3 ssao_effect_mat;
uniform vec3 sun_dir;
uniform vec3 moon_dir;
uniform int sun_up_factor;
-
VARYING vec2 vary_fragcoord;
uniform mat4 inv_proj;
uniform vec2 screen_res;
vec3 getNorm(vec2 pos_screen);
+vec4 getPositionWithDepth(vec2 pos_screen, float depth);
+void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);
+float getAmbientClamp();
vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten);
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);
-
#ifdef WATER_FOG
vec4 applyWaterFogView(vec3 pos, vec4 color);
#endif
@@ -94,24 +81,24 @@ void main()
vec3 light_dir = (sun_up_factor == 1) ? sun_dir : moon_dir;
- float light_gamma = 1.0/1.3;
float scol = 1.0;
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
float da = dot(normalize(norm.xyz), light_dir.xyz);
da = clamp(da, -1.0, 1.0);
- vec4 gamma_diff = texture2DRect(diffuseRect, tc);
- vec4 diffuse = gamma_diff;
- diffuse.rgb = srgb_to_linear(diffuse.rgb);
-
- scol = max(scol_ambocc.r, diffuse.a);
+
float final_da = da;
final_da = clamp(final_da, 0.0, 1.0);
+ vec4 diffuse_srgb = texture2DRect(diffuseRect, tc);
+ vec4 diffuse_linear = vec4(srgb_to_linear(diffuse_srgb.rgb), diffuse_srgb.a);
+
+ scol = max(scol_ambocc.r, diffuse_linear.a);
+
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
- vec3 col;
+ vec3 color = vec3(0);
float bloom = 0.0;
{
float ambocc = scol_ambocc.g;
@@ -126,22 +113,23 @@ void main()
float ambient = da;
ambient *= 0.5;
ambient *= ambient;
+ //ambient = max(getAmbientClamp(), ambient);
ambient = 1.0 - ambient;
- vec3 sun_contrib = scol * final_da * sunlit;
+ vec3 sun_contrib = min(scol, final_da) * sunlit;
- col.rgb = amblit;
- col.rgb *= ambient;
+ color.rgb = amblit;
+ color.rgb *= ambient;
-vec3 post_ambient = col.rgb;
+vec3 post_ambient = color.rgb;
- col.rgb += sun_contrib;
+ color.rgb += sun_contrib;
-vec3 post_sunlight = col.rgb;
+vec3 post_sunlight = color.rgb;
- col.rgb *= gamma_diff.rgb;
+ color.rgb *= diffuse_srgb.rgb;
-vec3 post_diffuse = col.rgb;
+vec3 post_diffuse = color.rgb;
vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
@@ -163,34 +151,58 @@ vec3 post_diffuse = col.rgb;
if (nh > 0.0)
{
float scontrib = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
- vec3 speccol = sun_contrib*scontrib*spec.rgb;
+ vec3 speccol = sun_contrib*scontrib*spec.rgb * 0.25;
speccol = clamp(speccol, vec3(0), vec3(1));
- bloom += dot (speccol, speccol) / 6;
- col += speccol;
+ bloom += dot (speccol, speccol);
+ color += speccol;
}
}
-
- col.rgb += diffuse.a * gamma_diff.rgb;
+
+ vec3 post_spec = color.rgb;
+
+ color.rgb += diffuse_srgb.a * diffuse_srgb.rgb;
if (envIntensity > 0.0)
{ //add environmentmap
vec3 env_vec = env_mat * refnormpersp;
- vec3 refcol = textureCube(environmentMap, env_vec).rgb;
- col = mix(col.rgb, refcol, envIntensity);
+ vec3 reflected_color = textureCube(environmentMap, env_vec).rgb;
+ color = mix(color.rgb, reflected_color, envIntensity);
}
+vec3 post_env = color.rgb;
+
if (norm.w < 1)
{
- col = atmosFragLighting(col, additive, atten);
- col = scaleSoftClipFrag(col);
+ color = atmosFragLighting(color, additive, atten);
+ color = scaleSoftClipFrag(color);
}
+vec3 post_atmo = color.rgb;
+
#ifdef WATER_FOG
- vec4 fogged = applyWaterFogView(pos.xyz,vec4(col, bloom));
- col = fogged.rgb;
+ vec4 fogged = applyWaterFogView(pos.xyz,vec4(color, bloom));
+ color = fogged.rgb;
bloom = fogged.a;
#endif
+
+//color.rgb = amblit;
+//color.rgb = vec3(ambient);
+//color.rgb = sunlit;
+//color.rgb = post_ambient;
+//color.rgb = vec3(final_da);
+//color.rgb = sun_contrib;
+//color.rgb = post_sunlight;
+//color.rgb = diffuse_srgb.rgb;
+//color.rgb = post_diffuse;
+//color.rgb = post_spec;
+//color.rgb = post_env;
+//color.rgb = post_atmo;
+
+// convert to linear as fullscreen lights need to sum in linear colorspace
+// and will be gamma (re)corrected downstream...
+ color.rgb = srgb_to_linear(color.rgb);
}
- frag_color.rgb = col.rgb;
+
+ frag_color.rgb = color.rgb;
frag_color.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index 957ce579c0..2ef7cffe9d 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -72,12 +72,17 @@ uniform vec2 screen_res;
uniform mat4 inv_proj;
vec3 getNorm(vec2 pos_screen);
-vec3 scaleDownLight(vec3 c);
+vec3 srgb_to_linear(vec3 c);
+vec4 correctWithGamma(vec4 col)
+{
+ return vec4(srgb_to_linear(col.rgb), col.a);
+}
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
-
+ ret = correctWithGamma(ret);
+
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
float det = min(lod/(proj_lod*0.5), 1.0);
@@ -96,6 +101,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
+ ret = correctWithGamma(ret);
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
@@ -113,6 +119,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
{
vec4 ret = texture2DLod(projectionMap, tc, lod);
+ ret = correctWithGamma(ret);
vec2 dist = tc-vec2(0.5);
@@ -213,19 +220,17 @@ 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);
vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
- amb_da += (da*da*0.5+0.5)*(1.0-shadow)*proj_ambiance;
+ 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);
-#ifndef NO_AMBIANCE
col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
-#endif
}
@@ -290,8 +295,6 @@ 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/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
index 94e776d51d..36703ea742 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
@@ -44,7 +44,6 @@ uniform mat3 ssao_effect_mat;
uniform int no_atmo;
uniform float sun_moon_glow_factor;
-vec3 srgb_to_linear(vec3 c);
vec3 scaleSoftClipFrag(vec3 light);
vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten)
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index e31bdf610c..1de919bf30 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -86,14 +86,14 @@ void main()
vec2 disturbance2 = vec2(cloudNoise((uv1 + uv3) / 4.0f).x, cloudNoise((uv4 + uv2) / 8.0f).x) * cloud_variance * (1.0f - cloud_scale * 0.25f);
// Offset texture coords
- uv1 += cloud_pos_density1.xy + (disturbance * 0.02); //large texture, visible density
+ uv1 += cloud_pos_density1.xy;// + (disturbance * 0.02); //large texture, visible density
uv2 += cloud_pos_density1.xy; //large texture, self shadow
uv3 += cloud_pos_density2.xy; //small texture, visible density
uv4 += cloud_pos_density2.xy; //small texture, self shadow
float density_variance = min(1.0, (disturbance.x* 2.0 + disturbance.y* 2.0 + disturbance2.x + disturbance2.y));
- cloudDensity *= 1.0 - (density_variance * density_variance);
+ //cloudDensity *= 1.0 - (density_variance * density_variance);
// Compute alpha1, the main cloud opacity
@@ -104,12 +104,12 @@ void main()
alpha1 = 1. - alpha1 * alpha1;
alpha1 = 1. - alpha1 * alpha1;
- alpha1 *= altitude_blend_factor;
+ //alpha1 *= altitude_blend_factor;
- if (alpha1 < 0.001f)
- {
- discard;
- }
+ //if (alpha1 < 0.001f)
+ //{
+ // discard;
+ //}
// Compute alpha2, for self shadowing effect
// (1 - alpha2) will later be used as percentage of incoming sunlight
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
index 64156bd3bf..43500bc5e3 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
@@ -103,7 +103,7 @@ void main()
vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
vec4 light_atten;
- float dens_mul = density_multiplier;
+ float dens_mul = density_multiplier * 0.45;
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes
@@ -180,7 +180,8 @@ void main()
// Texture coords
vary_texcoord0 = texcoord0;
vary_texcoord0.xy -= 0.5;
- vary_texcoord0.xy /= max(0.001, cloud_scale);
+ vary_texcoord0.xy /= cloud_scale;
+ //vary_texcoord0.xy /= max(0.001, cloud_scale);
vary_texcoord0.xy += 0.5;
vary_texcoord1 = vary_texcoord0;
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
index 6d6b3dafa7..f6bef3e6bc 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
@@ -87,7 +87,7 @@ void main()
vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
vec4 light_atten;
- float dens_mul = density_multiplier;
+ float dens_mul = density_multiplier * 0.45;
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes