SL-13465 Restore Pre-EEP haze effecting moon

meow-7.2.2
Ptolemy 2020-09-11 20:46:55 -07:00
parent f677b4187b
commit 874d7e7e02
5 changed files with 37 additions and 66 deletions

View File

@ -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);
// 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 = srgb_to_linear(c.rgb);
vec4 c = texture2D(diffuseMap, vary_texcoord0.xy);
// c.rgb = srgb_to_linear(c.rgb);
c.rgb *= moonlight_color.rgb;
c.rgb *= moon_brightness;
// 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);
c.rgb *= fade;
c.a *= fade;
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);
//c.rgb *= moonlight_color.rgb;
// Partial atmospherics calculation
vec3 ac = getAdditiveColor();
c.rgb += ac;
c.rgb = scaleSoftClip(c.rgb);
c.rgb = scaleSoftClip(c.rgb);
frag_data[0] = vec4(c.rgb, c.a);
frag_data[1] = vec4(0.0);

View File

@ -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,8 +32,6 @@ ATTRIBUTE vec2 texcoord0;
VARYING vec2 vary_texcoord0;
void calcAtmospherics(vec3 eye_pos);
void main()
{
//transform vertex
@ -42,7 +40,5 @@ void main()
gl_Position = modelview_projection_matrix*vert;
calcAtmospherics(pos.xyz);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
}

View File

@ -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);
// 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 );
// 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);
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;
vec3 exp = vec3(1.0 - blend * moon_brightness) * 2.0 - 1.0;
c.rgb = pow(c.rgb, exp);
//c.rgb *= moonlight_color.rgb;
c.rgb *= fade;
c.a *= fade;
// Partial atmospherics calculation
vec3 ac = getAdditiveColor();
c.rgb += ac;
c.rgb = scaleSoftClip(c.rgb);
c.rgb = scaleSoftClip(c.rgb);
frag_color = vec4(c.rgb, c.a);
}

View File

@ -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,8 +30,6 @@ uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
ATTRIBUTE vec2 texcoord0;
void calcAtmospherics(vec3 inPositionEye);
VARYING vec2 vary_texcoord0;
void main()
@ -43,6 +41,4 @@ void main()
gl_Position = modelview_projection_matrix*vert;
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
calcAtmospherics(pos.xyz);
}

View File

@ -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();