summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2019-02-11 09:36:01 -0800
committerGraham Linden <graham@lindenlab.com>2019-02-11 09:36:01 -0800
commitaafa561215b7b69a72d00ed709d6411f6438474d (patch)
treea9063b0bd31c0c1932b3193b1164f32e561c4975 /indra
parent3e0c9087cd6b26a64831f99bf9be05daa1dec510 (diff)
SL-10500
Replace clamp on height in atmospherics calcs on fragment shader path. Fix colorspace conversions in material shaders in forward rendering mode. Fix deferred shaders not setting the sun_up_factor uniform and getting moonlight instead of sunlight.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/materialF.glsl9
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl6
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl8
-rw-r--r--indra/newview/pipeline.cpp2
4 files changed, 18 insertions, 7 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 09bb6c5bb8..c8f4d7c570 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -42,6 +42,9 @@ vec3 scaleSoftClipFrag(vec3 l);
void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);
+vec3 srgb_to_linear(vec3 cs);
+vec3 linear_to_srgb(vec3 cs);
+
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
#ifdef DEFINE_GL_FRAGCOLOR
@@ -199,7 +202,7 @@ void main()
#endif
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
- vec3 gamma_diff = diffcol.rgb;
+ vec3 gamma_diff = linear_to_srgb(diffcol.rgb);
#endif
#if HAS_SPECULAR_MAP
@@ -332,6 +335,7 @@ void main()
}
col = atmosFragLighting(col, additive, atten);
+ col = scaleSoftClipFrag(col);
vec3 npos = normalize(-pos.xyz);
@@ -352,7 +356,8 @@ void main()
glare = min(glare, 1.0);
float al = max(diffcol.a,glare)*vertex_color.a;
- col = scaleSoftClipFrag(col);
+ //convert to gamma space for display on screen
+ col.rgb = linear_to_srgb(col.rgb);
#ifdef WATER_FOG
vec4 temp = applyWaterFogView(pos, vec4(col.rgb, al));
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index cbc19bbba3..058e939ec8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -44,8 +44,8 @@ vec3 linear_to_srgb(vec3 cl);
void main()
{
- vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
- diff.rgb = linear_to_srgb(diff.rgb);
- frag_color = diff;
+ vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
+ diff.rgb = linear_to_srgb(diff.rgb);
+ frag_color = diff;
}
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
index efcf848ab1..565c00ba79 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
@@ -67,7 +67,11 @@ vec3 atmosLighting(vec3 light)
void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
vec3 P = inPositionEye;
-
+
+ //(TERRAIN) limit altitude
+ if (P.y > max_y) P *= (max_y / P.y);
+ if (P.y < -max_y) P *= (-max_y / P.y);
+
vec3 tmpLightnorm = lightnorm.xyz;
vec3 Pn = normalize(P);
@@ -93,7 +97,7 @@ void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit,
//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
temp2.y = max(0.0, tmpLightnorm.y);
temp2.y = 1. / temp2.y;
- sunlight *= exp( - light_atten * temp2.y);
+ sunlight *= exp(-light_atten * temp2.y);
// main atmospheric scattering line integral
temp2.z = Plen * density_multiplier;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 8bc8de3dba..efb3b7c69b 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -8507,6 +8507,8 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
shader.uniform1f(LLShaderMgr::DEFERRED_DEPTH_CUTOFF, RenderEdgeDepthCutoff);
shader.uniform1f(LLShaderMgr::DEFERRED_NORM_CUTOFF, RenderEdgeNormCutoff);
+ LLEnvironment& environment = LLEnvironment::instance();
+ shader.uniform1i(LLShaderMgr::SUN_UP_FACTOR, environment.getIsSunUp() ? 1 : 0);
if (shader.getUniformLocation(LLShaderMgr::DEFERRED_NORM_MATRIX) >= 0)
{