From 055883beb5709dfb4814c8c5e90ea326abc07724 Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Tue, 7 Feb 2023 12:59:38 -0600
Subject: [PATCH] SL-18780 Turn down contribution of cloud shadow to reflection
 probe ambiance and make the value a debug setting.

---
 indra/llinventory/llsettingssky.cpp      |  5 +++--
 indra/llinventory/llsettingssky.h        |  2 +-
 indra/newview/app_settings/settings.xml  | 11 +++++++++++
 indra/newview/llreflectionmapmanager.cpp |  4 +++-
 indra/newview/llsettingsvo.cpp           |  3 ++-
 5 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index 4004793ffdb..c976307936e 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -1437,12 +1437,13 @@ F32 LLSettingsSky::getReflectionProbeAmbiance() const
     return mSettings[SETTING_REFLECTION_PROBE_AMBIANCE].asReal();
 }
 
-F32 LLSettingsSky::getTotalReflectionProbeAmbiance() const
+F32 LLSettingsSky::getTotalReflectionProbeAmbiance(F32 cloud_shadow_scale) 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;
+
+    probe_ambiance += (1.f - probe_ambiance) * getCloudShadow()*cloud_shadow_scale;
 
     return probe_ambiance;
 }
diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h
index b17b32ebb13..7ae569dd4c7 100644
--- a/indra/llinventory/llsettingssky.h
+++ b/indra/llinventory/llsettingssky.h
@@ -137,7 +137,7 @@ class LLSettingsSky: public LLSettingsBase
     F32 getReflectionProbeAmbiance() const;
 
     // get the probe ambiance setting to use for rendering (adjusted by cloud shadow, aka cloud coverage)
-    F32 getTotalReflectionProbeAmbiance() const;
+    F32 getTotalReflectionProbeAmbiance(F32 cloud_shadow_scale) const;
 
     // Return first (only) profile layer represented in LLSD
     LLSD getRayleighConfig() const;
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bbf04a6889d..304932dd1aa 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8828,6 +8828,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+  <key>RenderCloudShadowAmbianceFactor</key>
+  <map>
+    <key>Comment</key>
+    <string>Amount that cloud shadow (aka cloud coverage) contributes to reflection probe ambiance</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>F32</string>
+    <key>Value</key>
+    <real>0.1</real>
+  </map>
   <key>RenderComplexityColorMin</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 4fd10b85ad4..04bce58114c 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -780,7 +780,9 @@ void LLReflectionMapManager::updateUniforms()
     LLEnvironment& environment = LLEnvironment::instance();
     LLSettingsSky::ptr_t psky = environment.getCurrentSky();
 
-    F32 minimum_ambiance = psky->getTotalReflectionProbeAmbiance();
+    static LLCachedControl<F32> cloud_shadow_scale(gSavedSettings, "RenderCloudShadowAmbianceFactor", 0.125f);
+    F32 minimum_ambiance = psky->getTotalReflectionProbeAmbiance(cloud_shadow_scale);
+
     F32 ambscale = gCubeSnapshot && !isRadiancePass() ? 0.f : 1.f;
     
 
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index c3aaac3ede6..1752b2494f2 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -733,7 +733,8 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force)
     shader->uniform3fv(LLShaderMgr::SUNLIGHT_LINEAR, linearColor3v(sunDiffuse));
     shader->uniform3fv(LLShaderMgr::MOONLIGHT_LINEAR,linearColor3v(moonDiffuse));
 
-    shader->uniform1f(LLShaderMgr::REFLECTION_PROBE_AMBIANCE, getTotalReflectionProbeAmbiance());
+    static LLCachedControl<F32> cloud_shadow_scale(gSavedSettings, "RenderCloudShadowAmbianceFactor", 0.125f);
+    shader->uniform1f(LLShaderMgr::REFLECTION_PROBE_AMBIANCE, getTotalReflectionProbeAmbiance(cloud_shadow_scale));
 
     shader->uniform1i(LLShaderMgr::SUN_UP_FACTOR, getIsSunUp() ? 1 : 0);
     shader->uniform1f(LLShaderMgr::SUN_MOON_GLOW_FACTOR, getSunMoonGlowFactor());
-- 
GitLab