diff options
author | Dave Parks <davep@lindenlab.com> | 2022-12-16 13:35:16 -0600 |
---|---|---|
committer | Dave Parks <davep@lindenlab.com> | 2022-12-16 13:35:16 -0600 |
commit | d0af1ca7cb2174c479139692ed764ccaca92a8d5 (patch) | |
tree | 4b4620d0087b4ca62d44ff2179a1ca68493bc121 | |
parent | ad1ecfd9cd1ebedf9aec4a31fd044983b8e0afe8 (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.cpp | 10 | ||||
-rw-r--r-- | indra/llinventory/llsettingssky.h | 4 | ||||
-rw-r--r-- | indra/newview/llreflectionmapmanager.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llsettingsvo.cpp | 3 |
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()); |