summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pohoreski <ptolemy@lindenlab.com>2020-09-12 03:53:03 +0000
committerMichael Pohoreski <ptolemy@lindenlab.com>2020-09-12 03:53:03 +0000
commitdd875c76668a7818f8b584752418dc5296339d7b (patch)
treea46e9150e6ce721ec892373770fe07c65c7399e3
parent98578ddc7943ddcc4dfb4c3c4faaf91e68170b11 (diff)
parent874d7e7e02e3bfbabbac1b31e94ad848ee854367 (diff)
Merged in SL-13465_B (pull request #296)
SL-13465 B
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/moonF.glsl43
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/moonV.glsl11
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/moonF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/moonV.glsl9
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp11
5 files changed, 39 insertions, 70 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
index 4366945214..35068899ee 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
@@ -1,9 +1,9 @@
/**
- * @file moonF.glsl
+ * @file class1\deferred\moonF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2005, Linden Research, Inc.
+ * Copyright (C) 2005, 2020 Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -36,46 +36,33 @@ out vec4 frag_data[3];
uniform vec4 color;
uniform vec4 sunlight_color;
uniform vec4 moonlight_color;
-uniform vec3 lumWeights;
+uniform vec3 moon_dir;
uniform float moon_brightness;
-uniform float minLuminance;
uniform sampler2D diffuseMap;
-uniform sampler2D altDiffuseMap;
-uniform float blend_factor; // interp factor between moon A/B
+
VARYING vec2 vary_texcoord0;
vec3 srgb_to_linear(vec3 c);
-vec3 getAdditiveColor();
-
/// Soft clips the light with a gamma correction
vec3 scaleSoftClip(vec3 light);
void main()
{
- vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy);
- vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);
- vec4 c = mix(moonA, moonB, blend_factor);
-
- c.rgb = srgb_to_linear(c.rgb);
-
- // mix factor which blends when sunlight is brighter
- // and shows true moon color at night
- vec3 luma_weights = vec3(0.3, 0.5, 0.3);
-
- vec4 light_color = max(sunlight_color, moonlight_color);
- float blend = 1.0 - dot(normalize(light_color.rgb), luma_weights);
-
- vec3 exp = vec3(1.0 - blend * moon_brightness) * 2.0 - 1.0;
- c.rgb = pow(c.rgb, exp);
+ // Restore Pre-EEP alpha fade moon near horizon
+ float fade = 1.0;
+ if( moon_dir.z > 0 )
+ fade = clamp( moon_dir.z*moon_dir.z*4.0, 0.0, 1.0 );
- //c.rgb *= moonlight_color.rgb;
+ vec4 c = texture2D(diffuseMap, vary_texcoord0.xy);
+// c.rgb = srgb_to_linear(c.rgb);
+ c.rgb *= moonlight_color.rgb;
+ c.rgb *= moon_brightness;
- // Partial atmospherics calculation
- vec3 ac = getAdditiveColor();
- c.rgb += ac;
+ c.rgb *= fade;
+ c.a *= fade;
- c.rgb = scaleSoftClip(c.rgb);
+ c.rgb = scaleSoftClip(c.rgb);
frag_data[0] = vec4(c.rgb, c.a);
frag_data[1] = vec4(0.0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl
index e1bac4f248..c4922afd7d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl
@@ -1,9 +1,9 @@
/**
- * @file moonV.glsl
+ * @file class1\deferred\moonV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
+ * Copyright (C) 2007, 2020 Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -32,18 +32,13 @@ ATTRIBUTE vec2 texcoord0;
VARYING vec2 vary_texcoord0;
-void calcAtmospherics(vec3 eye_pos);
-
void main()
{
//transform vertex
- vec3 offset = vec3(0, 0, 50);
- vec4 vert = vec4(position.xyz - offset, 1.0);
+ vec4 vert = vec4(position.xyz, 1.0);
vec4 pos = (modelview_matrix * vert);
gl_Position = modelview_projection_matrix*vert;
- calcAtmospherics(pos.xyz);
-
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
}
diff --git a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
index 72d2c4cdfa..2425a2ad04 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
@@ -3,7 +3,7 @@
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2005, Linden Research, Inc.
+ * Copyright (C) 2005, 2020 Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -36,37 +36,30 @@ out vec4 frag_color;
uniform vec4 color;
uniform vec4 sunlight_color;
uniform vec4 moonlight_color;
-uniform vec3 lumWeights;
+uniform vec3 moon_dir;
uniform float moon_brightness;
-uniform float minLuminance;
uniform sampler2D diffuseMap;
-uniform sampler2D altDiffuseMap;
-uniform float blend_factor; // interp factor between moon A/B
+
VARYING vec2 vary_texcoord0;
-vec3 getAdditiveColor();
vec3 scaleSoftClip(vec3 light);
void main()
{
- vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy);
- vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);
- vec4 c = mix(moonA, moonB, blend_factor);
-
- // mix factor which blends when sunlight is brighter
- // and shows true moon color at night
- vec3 luma_weights = vec3(0.3, 0.5, 0.3);
- float blend = 1.0f - dot(normalize(sunlight_color.rgb), luma_weights);
+ // Restore Pre-EEP alpha fade moon near horizon
+ float fade = 1.0;
+ if( moon_dir.z > 0 )
+ fade = clamp( moon_dir.z*moon_dir.z*4.0, 0.0, 1.0 );
- vec3 exp = vec3(1.0 - blend * moon_brightness) * 2.0 - 1.0;
- c.rgb = pow(c.rgb, exp);
- //c.rgb *= moonlight_color.rgb;
+ vec4 c = texture2D(diffuseMap, vary_texcoord0.xy);
+// c.rgb = pow(c.rgb, vec3(0.7f)); // can't use "srgb_to_linear(color.rgb)" as that is a deferred only function
+ c.rgb *= moonlight_color.rgb;
+ c.rgb *= moon_brightness;
- // Partial atmospherics calculation
- vec3 ac = getAdditiveColor();
- c.rgb += ac;
+ c.rgb *= fade;
+ c.a *= fade;
- c.rgb = scaleSoftClip(c.rgb);
+ c.rgb = scaleSoftClip(c.rgb);
frag_color = vec4(c.rgb, c.a);
}
diff --git a/indra/newview/app_settings/shaders/class1/windlight/moonV.glsl b/indra/newview/app_settings/shaders/class1/windlight/moonV.glsl
index 8cd4b2ef47..2fceb5f743 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/moonV.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/moonV.glsl
@@ -3,7 +3,7 @@
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
+ * Copyright (C) 2007, 2020 Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,20 +30,15 @@ uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
ATTRIBUTE vec2 texcoord0;
-void calcAtmospherics(vec3 inPositionEye);
-
VARYING vec2 vary_texcoord0;
void main()
{
//transform vertex
- vec3 offset = vec3(0, 0, 50);
- vec4 vert = vec4(position.xyz - offset, 1.0);
+ vec4 vert = vec4(position.xyz, 1.0);
vec4 pos = (modelview_matrix * vert);
gl_Position = modelview_projection_matrix*vert;
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-
- calcAtmospherics(pos.xyz);
}
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b0eb1a405b..d4e7f1600e 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -532,8 +532,6 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
}
}
- blend_factor = LLEnvironment::instance().getCurrentSky()->getBlendFactor();
-
face = gSky.mVOSkyp->mFace[LLVOSky::FACE_MOON];
if (gSky.mVOSkyp->getMoon().getDraw() && face && face->getTexture(LLRender::DIFFUSE_MAP) && face->getGeomCount() && moon_shader)
@@ -551,17 +549,17 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
{
// Bind current and next sun textures
moon_shader->bindTexture(LLShaderMgr::DIFFUSE_MAP, tex_a, LLTexUnit::TT_TEXTURE);
- blend_factor = 0;
+ //blend_factor = 0;
}
else if (tex_b && !tex_a)
{
moon_shader->bindTexture(LLShaderMgr::DIFFUSE_MAP, tex_b, LLTexUnit::TT_TEXTURE);
- blend_factor = 0;
+ //blend_factor = 0;
}
else if (tex_b != tex_a)
{
moon_shader->bindTexture(LLShaderMgr::DIFFUSE_MAP, tex_a, LLTexUnit::TT_TEXTURE);
- moon_shader->bindTexture(LLShaderMgr::ALTERNATE_DIFFUSE_MAP, tex_b, LLTexUnit::TT_TEXTURE);
+ //moon_shader->bindTexture(LLShaderMgr::ALTERNATE_DIFFUSE_MAP, tex_b, LLTexUnit::TT_TEXTURE);
}
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
@@ -571,7 +569,8 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
moon_shader->uniform1f(LLShaderMgr::MOON_BRIGHTNESS, moon_brightness);
moon_shader->uniform4fv(LLShaderMgr::MOONLIGHT_COLOR, 1, gSky.mVOSkyp->getMoon().getColor().mV);
moon_shader->uniform4fv(LLShaderMgr::DIFFUSE_COLOR, 1, color.mV);
- moon_shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);
+ //moon_shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);
+ moon_shader->uniform3fv(LLShaderMgr::DEFERRED_MOON_DIR, 1, psky->getMoonDirection().mV); // shader: moon_dir
face->renderIndexed();