summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2019-04-25 10:59:00 -0700
committerGraham Linden <graham@lindenlab.com>2019-04-25 10:59:00 -0700
commit4ed05fc84fce0fbee76c583e91feed5aff2dbbfc (patch)
tree31bfec7a2b09919d9df3a050d2f2ed369d31f0ad
parentca16874379bf76dd844d57b2ee59da531d642a8e (diff)
Fix dark ALM and strangeness at Mid lighting (class 3 but with a darkness about it).
Make a distinct class3/lighting/lightV which boosts to WL levels (* 2.0) and make lighting without WL atmo enabled use class 2 or below. Make forward shaders (alpha and materialF with alpha-blend mode on) more consistent with deferred lighting.
-rw-r--r--indra/llinventory/llsettingssky.cpp36
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl1
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/materialF.glsl7
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl2
-rw-r--r--indra/newview/app_settings/shaders/class3/lighting/lightV.glsl5
-rw-r--r--indra/newview/llviewershadermgr.cpp9
7 files changed, 37 insertions, 25 deletions
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index 41e8882181..c41944bdbb 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -33,9 +33,8 @@
#include "v3colorutil.h"
//=========================================================================
-namespace {
- const F32 NIGHTTIME_ELEVATION = 8.0f; // degrees
- const F32 NIGHTTIME_ELEVATION_SIN = (F32)sinf(NIGHTTIME_ELEVATION * DEG_TO_RAD);
+namespace
+{
const LLUUID IMG_BLOOM1("3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef");
const LLUUID IMG_RAINBOW("11b4c57c-56b3-04ed-1f82-2004363882e4");
const LLUUID IMG_HALO("12149143-f599-91a7-77ac-b52a3c0f59cd");
@@ -958,15 +957,15 @@ F32 LLSettingsSky::getSunMoonGlowFactor() const
LLVector3 moonDir = getMoonDirection();
// sun glow at full iff moon is not up
- if (sunDir.mV[VZ] > -NIGHTTIME_ELEVATION_SIN)
+ if (getIsSunUp())
{
- if (moonDir.mV[2] <= 0.0f)
+ if (!getIsMoonUp())
{
return 1.0f;
}
}
- if (moonDir.mV[2] > 0.0f)
+ if (getIsMoonUp())
{
return 0.25f;
}
@@ -977,13 +976,13 @@ F32 LLSettingsSky::getSunMoonGlowFactor() const
bool LLSettingsSky::getIsSunUp() const
{
LLVector3 sunDir = getSunDirection();
- return (sunDir.mV[2] >= 0.0f) || ((sunDir.mV[2] > -NIGHTTIME_ELEVATION_SIN) && !getIsMoonUp());
+ return sunDir.mV[2] >= 0.0f || !getIsMoonUp();
}
bool LLSettingsSky::getIsMoonUp() const
{
LLVector3 moonDir = getMoonDirection();
- return moonDir.mV[2] > 0.0f;
+ return moonDir.mV[2] >= 0.0f;
}
void LLSettingsSky::calculateHeavenlyBodyPositions() const
@@ -997,10 +996,19 @@ void LLSettingsSky::calculateHeavenlyBodyPositions() const
mSunDirection.normalize();
mMoonDirection.normalize();
- if (mSunDirection.lengthSquared() < 0.01f)
- LL_WARNS("SETTINGS") << "Zero length sun direction. Wailing and gnashing of teeth may follow... or not." << LL_ENDL;
- if (mMoonDirection.lengthSquared() < 0.01f)
- LL_WARNS("SETTINGS") << "Zero length moon direction. Wailing and gnashing of teeth may follow... or not." << LL_ENDL;
+ // find out about degen math earlier rather than later
+ llassert(mSunDirection.length() >= 0.9f);
+ llassert(mMoonDirection.length() >= 0.9f);
+
+ if (mSunDirection.lengthSquared() < 0.9f)
+ {
+ LL_WARNS("SETTINGS") << "Invalid sun direction." << LL_ENDL;
+ }
+
+ if (mMoonDirection.lengthSquared() < 0.9f)
+ {
+ LL_WARNS("SETTINGS") << "Invalid moon direction." << LL_ENDL;
+ }
}
LLVector3 LLSettingsSky::getLightDirection() const
@@ -1280,9 +1288,9 @@ void LLSettingsSky::calculateLightSettings() const
// and vary_sunlight will work properly with moon light
F32 lighty = lightnorm[2];
- if(lighty > 0.001f)
+ if(fabs(lighty) > 0.001f)
{
- lighty = 1.f / lighty;
+ lighty = 1.f / fabs(lighty);
}
lighty = llmax(0.001f, lighty);
componentMultBy(sunlight, componentExp((light_atten * -1.f) * lighty));
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index e8400ba66d..8709053ac6 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -201,7 +201,6 @@ void main()
float final_da = da;
final_da = clamp(final_da, 0.0f, 1.0f);
- final_da = pow(final_da, 1.0/1.3);
vec4 color = vec4(0,0,0,0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index f1dbf4af46..5926236fd7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -302,7 +302,6 @@ void main()
float final_da = da;
final_da = clamp(final_da, 0.0, 1.0);
- final_da = pow(final_da, 1.0 / 1.3);
float ambient = da;
ambient *= 0.5;
@@ -372,6 +371,8 @@ vec3 post_spec = col.rgb;
glare += cur_glare;
}
+vec3 post_env = col.rgb;
+
col = atmosFragLighting(col, additive, atten);
col = scaleSoftClipFrag(col);
@@ -379,7 +380,7 @@ vec3 post_spec = col.rgb;
vec3 light = vec3(0,0,0);
- vec3 prelight_linearish_maybe = srgb_to_linear(col.rgb);
+vec3 post_atmo = col.rgb;
#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w * 0.5);
@@ -393,7 +394,7 @@ vec3 post_spec = col.rgb;
vec3 light_linear = light.rgb;
- col.rgb += light.rgb;
+ col.rgb += light_linear;
vec3 postlight_linear = col.rgb;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 68deedd0d0..83006c8916 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -108,7 +108,7 @@ void main()
vec3 atten;
calcAtmosphericVars(pos.xyz, 1.0, sunlit, amblit, additive, atten);
- sunlit *= 0.5;
+
float ambient = da;
ambient *= 0.5;
ambient *= ambient;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index dd70790fc3..2d5d1c1b50 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -120,7 +120,7 @@ void main()
vec3 atten;
calcAtmosphericVars(pos.xyz, ambocc, sunlit, amblit, additive, atten);
- sunlit *= 0.5;
+
float ambient = da;
ambient *= 0.5;
ambient *= ambient;
diff --git a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
index b19f4e96ca..efe7f69f21 100644
--- a/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
+++ b/indra/newview/app_settings/shaders/class3/lighting/lightV.glsl
@@ -28,10 +28,9 @@
// All lights, no specular highlights
vec4 sumLights(vec3 pos, vec3 norm, vec4 color, vec4 baseLight);
-vec3 atmosAmbient(vec3 c);
+
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseLight)
{
- vec4 l = sumLights(pos, norm, color, baseLight);
- return l;
+ return sumLights(pos, norm, color, baseLight) * 2.0f;
}
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index ebfdc38d50..0bd4a5eae0 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -478,7 +478,8 @@ void LLViewerShaderMgr::setShaders()
//using shaders, disable fixed function
LLGLSLShader::sNoFixedFunction = true;
- S32 light_class = 2;
+ S32 light_class = 3;
+ S32 interface_class = 2;
S32 env_class = 2;
S32 obj_class = 2;
S32 effect_class = 2;
@@ -519,6 +520,10 @@ void LLViewerShaderMgr::setShaders()
// windlight shaders to stub versions.
wl_class = 2;
}
+ else
+ {
+ light_class = 2;
+ }
// Trigger a full rebuild of the fallback skybox / cubemap if we've toggled windlight shaders
if (mShaderLevel[SHADER_WINDLIGHT] != wl_class && gSky.mVOSkyp.notNull())
@@ -528,7 +533,7 @@ void LLViewerShaderMgr::setShaders()
// Load lighting shaders
mShaderLevel[SHADER_LIGHTING] = light_class;
- mShaderLevel[SHADER_INTERFACE] = light_class;
+ mShaderLevel[SHADER_INTERFACE] = interface_class;
mShaderLevel[SHADER_ENVIRONMENT] = env_class;
mShaderLevel[SHADER_WATER] = water_class;
mShaderLevel[SHADER_OBJECT] = obj_class;