summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2022-12-16 13:35:16 -0600
committerDave Parks <davep@lindenlab.com>2022-12-16 13:35:16 -0600
commitd0af1ca7cb2174c479139692ed764ccaca92a8d5 (patch)
tree4b4620d0087b4ca62d44ff2179a1ca68493bc121
parentad1ecfd9cd1ebedf9aec4a31fd044983b8e0afe8 (diff)
SL-18780 Feedback cloud coverage into reflection probe ambiance to recover legacy behavior of cloud coverage brightening ambient lighting without destroying the ability to have good probe driven ambiance.
-rw-r--r--indra/llinventory/llsettingssky.cpp10
-rw-r--r--indra/llinventory/llsettingssky.h4
-rw-r--r--indra/newview/llreflectionmapmanager.cpp2
-rw-r--r--indra/newview/llsettingsvo.cpp3
4 files changed, 17 insertions, 2 deletions
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index d4e616abc2..4004793ffd 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -1437,6 +1437,16 @@ F32 LLSettingsSky::getReflectionProbeAmbiance() const
return mSettings[SETTING_REFLECTION_PROBE_AMBIANCE].asReal();
}
+F32 LLSettingsSky::getTotalReflectionProbeAmbiance() const
+{
+ // feed cloud shadow back into reflection probe ambiance to mimic pre-reflection-probe behavior
+ // without brightening dark/interior spaces
+ F32 probe_ambiance = getReflectionProbeAmbiance();
+ probe_ambiance += (1.f - probe_ambiance) * getCloudShadow()*0.5f;
+
+ return probe_ambiance;
+}
+
F32 LLSettingsSky::getSkyBottomRadius() const
{
return mSettings[SETTING_SKY_BOTTOM_RADIUS].asReal();
diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h
index 715d31518b..b17b32ebb1 100644
--- a/indra/llinventory/llsettingssky.h
+++ b/indra/llinventory/llsettingssky.h
@@ -133,8 +133,12 @@ public:
F32 getSkyDropletRadius() const;
F32 getSkyIceLevel() const;
+ // get the probe ambiance setting as stored in the sky settings asset
F32 getReflectionProbeAmbiance() const;
+ // get the probe ambiance setting to use for rendering (adjusted by cloud shadow, aka cloud coverage)
+ F32 getTotalReflectionProbeAmbiance() const;
+
// Return first (only) profile layer represented in LLSD
LLSD getRayleighConfig() const;
LLSD getMieConfig() const;
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 088b83a8e9..1472abcec2 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -695,7 +695,7 @@ void LLReflectionMapManager::updateUniforms()
LLEnvironment& environment = LLEnvironment::instance();
LLSettingsSky::ptr_t psky = environment.getCurrentSky();
- F32 minimum_ambiance = psky->getReflectionProbeAmbiance();
+ F32 minimum_ambiance = psky->getTotalReflectionProbeAmbiance();
for (auto* refmap : mReflectionMaps)
{
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index 59cfb4f0c4..870ac6bd5a 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -717,7 +717,8 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force)
shader->uniform3fv(LLShaderMgr::AMBIENT_LINEAR, linearColor3v(getAmbientColor()/3.f)); // note magic number 3.f comes from SLIDER_SCALE_SUN_AMBIENT
shader->uniform3fv(LLShaderMgr::SUNLIGHT_LINEAR, linearColor3v(getSunlightColor()));
shader->uniform3fv(LLShaderMgr::MOONLIGHT_LINEAR,linearColor3v(getMoonlightColor()));
- shader->uniform1f(LLShaderMgr::REFLECTION_PROBE_AMBIANCE, getReflectionProbeAmbiance());
+
+ shader->uniform1f(LLShaderMgr::REFLECTION_PROBE_AMBIANCE, getTotalReflectionProbeAmbiance());
shader->uniform1i(LLShaderMgr::SUN_UP_FACTOR, getIsSunUp() ? 1 : 0);
shader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, getSunMoonGlowFactor());