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.master
parent
ca16874379
commit
4ed05fc84f
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue