Add LLVoSky wrapper for current env sky light direction.

Make LLVo classes use LLVoSky wrappers instead of direct access.

Isolate more legacy haze param usage w/in settings.
master
Graham Linden graham@lindenlab.com 2018-03-08 16:09:29 +00:00
parent 2eb03ae3ef
commit 087e210825
8 changed files with 59 additions and 83 deletions

View File

@ -32,6 +32,8 @@
#include "llfasttimer.h"
#include "v3colorutil.h"
#pragma optimize("", off)
//=========================================================================
namespace
{
@ -574,10 +576,7 @@ LLSD LLSettingsSky::translateLegacySettings(LLSD legacy)
// AdvancedAtmospherics TODO
// These need to be translated into density profile info in the new settings format...
// LEGACY_ATMOSPHERICS
if (legacy.has(SETTING_AMBIENT))
{
newsettings[SETTING_AMBIENT] = LLColor3(legacy[SETTING_AMBIENT]).getValue();
}
if (legacy.has(SETTING_BLUE_DENSITY))
{
newsettings[SETTING_BLUE_DENSITY] = LLColor3(legacy[SETTING_BLUE_DENSITY]).getValue();
@ -603,6 +602,10 @@ LLSD LLSettingsSky::translateLegacySettings(LLSD legacy)
newsettings[SETTING_HAZE_HORIZON] = LLSD::Real(legacy[SETTING_HAZE_HORIZON][0].asReal());
}
if (legacy.has(SETTING_AMBIENT))
{
newsettings[SETTING_AMBIENT] = LLColor3(legacy[SETTING_AMBIENT]).getValue();
}
if (legacy.has(SETTING_CLOUD_COLOR))
{
newsettings[SETTING_CLOUD_COLOR] = LLColor3(legacy[SETTING_CLOUD_COLOR]).getValue();
@ -756,6 +759,7 @@ void LLSettingsSky::calculateHeavnlyBodyPositions()
// this is used later for sunlight modulation at various altitudes
LLColor3 LLSettingsSky::getLightAttenuation(F32 distance) const
{
// LEGACY_ATMOSPHERICS
LLColor3 blue_density = getBlueDensity();
F32 haze_density = getHazeDensity();
F32 density_multiplier = getDensityMultiplier();
@ -766,6 +770,7 @@ LLColor3 LLSettingsSky::getLightAttenuation(F32 distance) const
LLColor3 LLSettingsSky::getLightTransmittance() const
{
// LEGACY_ATMOSPHERICS
LLColor3 blue_density = getBlueDensity();
F32 haze_density = getHazeDensity();
F32 density_multiplier = getDensityMultiplier();
@ -788,41 +793,40 @@ LLColor3 LLSettingsSky::gammaCorrect(const LLColor3& in) const
void LLSettingsSky::calculateLightSettings()
{
// LEGACY_ATMOSPHERICS
// Initialize temp variables
LLColor3 sunlight = getSunlightColor();
LLColor3 ambient = getAmbientColor();
F32 cloud_shadow = getCloudShadow();
LLVector3 lightnorm = getLightDirection();
// Initialize temp variables
LLColor3 sunlight = getSunlightColor();
LLColor3 ambient = getAmbientColor();
F32 cloud_shadow = getCloudShadow();
LLVector3 lightnorm = getLightDirection();
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes
F32 max_y = getMaxY();
LLColor3 light_atten = getLightAttenuation(max_y);
LLColor3 light_transmittance = getLightTransmittance();
// Compute sunlight from P & lightnorm (for long rays like sky)
/// USE only lightnorm.
// temp2[1] = llmax(0.f, llmax(0.f, Pn[1]) * 1.0f + lightnorm[1] );
// Compute sunlight from P & lightnorm (for long rays like sky)
/// USE only lightnorm.
// temp2[1] = llmax(0.f, llmax(0.f, Pn[1]) * 1.0f + lightnorm[1] );
// and vary_sunlight will work properly with moon light
F32 lighty = lightnorm[1];
if (lighty < NIGHTTIME_ELEVATION_COS)
{
lighty = -lighty;
}
// and vary_sunlight will work properly with moon light
F32 lighty = lightnorm[1];
if (lighty < NIGHTTIME_ELEVATION_COS)
{
lighty = -lighty;
}
lighty = llmax(0.f, lighty);
if(lighty > 0.f)
{
{
lighty = 1.f / lighty;
}
}
componentMultBy(sunlight, componentExp((light_atten * -1.f) * lighty));
//increase ambient when there are more clouds
LLColor3 tmpAmbient = ambient + (smear(1.f) - ambient) * cloud_shadow * 0.5f;
//increase ambient when there are more clouds
LLColor3 tmpAmbient = ambient + (smear(1.f) - ambient) * cloud_shadow * 0.5f;
//brightness of surface both sunlight and ambient
//brightness of surface both sunlight and ambient
mSunDiffuse = gammaCorrect(componentMult(sunlight, light_transmittance));
mSunAmbient = gammaCorrect(componentMult(tmpAmbient, light_transmittance) * 0.5);

View File

@ -114,64 +114,35 @@ public:
setValue(SETTING_AMBIENT, val);
}
// LEGACY_ATMOSPHERICS
LLColor3 getBlueDensity() const
{
return LLColor3(mSettings[SETTING_BLUE_DENSITY]);
}
void setBlueDensity(const LLColor3 &val)
{
setValue(SETTING_BLUE_DENSITY, val);
}
LLColor3 getBlueHorizon() const
{
return LLColor3(mSettings[SETTING_BLUE_HORIZON]);
}
void setBlueHorizon(const LLColor3 &val)
{
setValue(SETTING_BLUE_HORIZON, val);
}
F32 getDensityMultiplier() const
{
return mSettings[SETTING_DENSITY_MULTIPLIER].asReal();
}
void setDensityMultiplier(F32 val)
{
setValue(SETTING_DENSITY_MULTIPLIER, val);
}
F32 getDistanceMultiplier() const
{
return mSettings[SETTING_DISTANCE_MULTIPLIER].asReal();
}
void setDistanceMultiplier(F32 val)
{
setValue(SETTING_DISTANCE_MULTIPLIER, val);
}
F32 getHazeDensity() const
{
return mSettings[SETTING_HAZE_DENSITY].asReal();
}
void setHazeDensity(F32 val)
{
setValue(SETTING_HAZE_DENSITY, val);
}
F32 getHazeHorizon() const
{
return mSettings[SETTING_HAZE_HORIZON].asReal();
}
void setHazeHorizon(F32 val)
F32 getDensityMultiplier() const
{
setValue(SETTING_HAZE_HORIZON, val);
return mSettings[SETTING_DENSITY_MULTIPLIER].asReal();
}
F32 getDistanceMultiplier() const
{
return mSettings[SETTING_DISTANCE_MULTIPLIER].asReal();
}
LLColor3 getCloudColor() const
@ -434,6 +405,10 @@ public:
static LLSD translateLegacySettings(LLSD legacy);
LLColor3 getLightAttenuation(F32 distance) const;
LLColor3 getLightTransmittance() const;
LLColor3 gammaCorrect(const LLColor3& in) const;
protected:
static const std::string SETTING_LEGACY_EAST_ANGLE;
static const std::string SETTING_LEGACY_ENABLE_CLOUD_SCROLL;
@ -455,9 +430,6 @@ private:
void calculateHeavnlyBodyPositions();
void calculateLightSettings();
LLColor3 getLightAttenuation(F32 distance) const;
LLColor3 getLightTransmittance() const;
LLColor3 gammaCorrect(const LLColor3& in) const;
LLVector3 mSunDirection;
LLVector3 mMoonDirection;

View File

@ -488,22 +488,21 @@ void LLDrawPoolWater::shade()
LLVector3 light_dir;
LLColor3 light_color;
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
LLSettingsWater::ptr_t pwater = LLEnvironment::instance().getCurrentWater();
light_dir = psky->getLightDirection();
light_dir = voskyp->getLightDirection();
if (LLEnvironment::instance().getIsDayTime())
{
light_color = psky->getSunAmbient();
light_diffuse = psky->getSunDiffuse();
light_color = voskyp->getSunAmbientColor();
light_diffuse = voskyp->getSunDiffuseColor();
light_diffuse.normalize();
light_exp = light_dir * LLVector3(light_dir.mV[0], light_dir.mV[1], 0.f);
light_diffuse *= (light_exp + 0.25f);
}
else
{
light_color = psky->getMoonAmbient();
light_diffuse = psky->getMoonDiffuse();
light_color = voskyp->getMoonAmbientColor();
light_diffuse = voskyp->getMoonDiffuseColor();
light_diffuse.normalize();
light_diffuse *= 0.5f;
light_exp = light_dir * LLVector3(light_dir.mV[0], light_dir.mV[1], 0.f);

View File

@ -303,7 +303,7 @@ void LLAtmospherics::calcSkyColorWLVert(LLVector3 & Pn, AtmosphericsVars& vars)
// Sunlight attenuation effect (hue and brightness) due to atmosphere
// this is used later for sunlight modulation at various altitudes
LLColor3 light_atten = (blue_density * 1.0 + smear(haze_density * 0.25f)) * (density_multiplier * max_y);
LLColor3 light_atten = psky->getLightAttenuation(psky->getMaxY());
// Calculate relative weights
LLColor3 temp2(0.f, 0.f, 0.f);

View File

@ -179,18 +179,12 @@ protected:
class LLCubeMap;
// turn on floating point precision
// in vs2003 for this class. Otherwise
// black dots go everywhere from 7:10 - 8:50
#if LL_MSVC && __MSVC_VER__ < 8
#pragma optimize("p", on)
#endif
class AtmosphericsVars
{
public:
AtmosphericsVars()
: hazeColor(0,0,0)
, hazeColorBelowCloud(0,0,0)
, cloudColorSun(0,0,0)
, cloudColorAmbient(0,0,0)
, cloudDensity(0.0f)
@ -200,6 +194,7 @@ public:
}
LLColor3 hazeColor;
LLColor3 hazeColorBelowCloud;
LLColor3 cloudColorSun;
LLColor3 cloudColorAmbient;
F32 cloudDensity;
@ -234,6 +229,7 @@ protected:
void calcSkyColorWLVert(LLVector3 & Pn, AtmosphericsVars& vars);
LLColor3 calcSkyColorWLFrag(LLVector3 & Pn, AtmosphericsVars& vars);
LLColor3 getHazeColor(LLSettingsSky::ptr_t psky, AtmosphericsVars& vars, F32 costheta, F32 cloud_shadow);
LLHaze mHaze;
F32 mHazeConcentration;

View File

@ -597,7 +597,7 @@ public:
addText(xpos, ypos, llformat("%d Unique Textures", LLImageGL::sUniqueCount));
ypos += y_inc;
addText(xpos, ypos, llformat("%d Render Calls", last_frame_recording.getSampleCount(LLPipeline::sStatBatchSize)));
addText(xpos, ypos, llformat("%d Render Calls", (U32)last_frame_recording.getSampleCount(LLPipeline::sStatBatchSize)));
ypos += y_inc;
addText(xpos, ypos, llformat("%d/%d Objects Active", gObjectList.getNumActiveObjects(), gObjectList.getNumObjects()));
@ -612,9 +612,9 @@ public:
gPipeline.mTextureMatrixOps = 0;
gPipeline.mMatrixOpCount = 0;
if (last_frame_recording.getSampleCount(LLPipeline::sStatBatchSize) > 0)
if ((U32)last_frame_recording.getSampleCount(LLPipeline::sStatBatchSize) > 0)
{
addText(xpos, ypos, llformat("Batch min/max/mean: %d/%d/%d", last_frame_recording.getMin(LLPipeline::sStatBatchSize), last_frame_recording.getMax(LLPipeline::sStatBatchSize), last_frame_recording.getMean(LLPipeline::sStatBatchSize)));
addText(xpos, ypos, llformat("Batch min/max/mean: %d/%d/%d", (U32)last_frame_recording.getMin(LLPipeline::sStatBatchSize), (U32)last_frame_recording.getMax(LLPipeline::sStatBatchSize), (U32)last_frame_recording.getMean(LLPipeline::sStatBatchSize)));
}
ypos += y_inc;

View File

@ -1430,6 +1430,10 @@ void LLVOSky::setSunDirection(const LLVector3 &sun_dir, const LLVector3 &moon_di
}
}
LLVector3 LLVOSky::getLightDirection() const
{
return LLEnvironment::instance().getCurrentSky()->getLightDirection();
}
LLColor4U LLVOSky::getFadeColor() const
{

View File

@ -274,6 +274,7 @@ public:
const LLVector3& getToMoonLast() const { return mMoon.getDirectionCached(); }
BOOL isSunUp() const { return mSun.getDirectionCached().mV[2] > -0.05f; }
LLVector3 getLightDirection() const;
LLColor3 getSunDiffuseColor() const;
LLColor3 getMoonDiffuseColor() const;
LLColor4 getSunAmbientColor() const;