diff options
| author | Dave Parks <davep@lindenlab.com> | 2022-06-10 16:36:38 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2022-06-10 16:36:38 -0500 | 
| commit | 929abcd296199ab4ed7a0b08166e284502f7b8df (patch) | |
| tree | 900f2a485cce2763a9c7603127fa6380d7ecafb6 | |
| parent | 5eb6591d0a5252f0bdd1db9ef551a526099b5a99 (diff) | |
SL-17523 Add reflection probe ambiance to windlight settings and integrate with UI and ReflectionMapManager
| -rw-r--r-- | indra/llinventory/llsettingssky.cpp | 17 | ||||
| -rw-r--r-- | indra/llinventory/llsettingssky.h | 6 | ||||
| -rw-r--r-- | indra/llrender/llshadermgr.cpp | 1 | ||||
| -rw-r--r-- | indra/llrender/llshadermgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.h | 1 | ||||
| -rw-r--r-- | indra/newview/llreflectionmap.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llreflectionmapmanager.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llsettingsvo.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml | 23 | 
10 files changed, 73 insertions, 4 deletions
| diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 83a92f08d0..d4e616abc2 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -131,6 +131,8 @@ const std::string LLSettingsSky::SETTING_SKY_MOISTURE_LEVEL("moisture_level");  const std::string LLSettingsSky::SETTING_SKY_DROPLET_RADIUS("droplet_radius");  const std::string LLSettingsSky::SETTING_SKY_ICE_LEVEL("ice_level"); +const std::string LLSettingsSky::SETTING_REFLECTION_PROBE_AMBIANCE("reflection_probe_ambiance"); +  const LLUUID LLSettingsSky::DEFAULT_ASSET_ID("3ae23978-ac82-bcf3-a9cb-ba6e52dcb9ad");  static const LLUUID DEFAULT_SUN_ID("32bfbcea-24b1-fb9d-1ef9-48a28a63730f"); // dataserver @@ -630,6 +632,9 @@ LLSettingsSky::validation_list_t LLSettingsSky::validationList()          validation.push_back(Validator(SETTING_SKY_ICE_LEVEL,      false,  LLSD::TypeReal,                boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); +        validation.push_back(Validator(SETTING_REFLECTION_PROBE_AMBIANCE, false, LLSD::TypeReal, +            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); +          validation.push_back(Validator(SETTING_RAYLEIGH_CONFIG, true, LLSD::TypeArray, &validateRayleighLayers));          validation.push_back(Validator(SETTING_ABSORPTION_CONFIG, true, LLSD::TypeArray, &validateAbsorptionLayers));          validation.push_back(Validator(SETTING_MIE_CONFIG, true, LLSD::TypeArray, &validateMieLayers)); @@ -755,6 +760,8 @@ LLSD LLSettingsSky::defaults(const LLSettingsBase::TrackPosition& position)          dfltsetting[SETTING_SKY_DROPLET_RADIUS] = 800.0f;          dfltsetting[SETTING_SKY_ICE_LEVEL]      = 0.0f; +        dfltsetting[SETTING_REFLECTION_PROBE_AMBIANCE] = 0.0f; +          dfltsetting[SETTING_RAYLEIGH_CONFIG]    = rayleighConfigDefault();          dfltsetting[SETTING_MIE_CONFIG]         = mieConfigDefault();          dfltsetting[SETTING_ABSORPTION_CONFIG]  = absorptionConfigDefault(); @@ -1132,6 +1139,11 @@ void LLSettingsSky::setSkyIceLevel(F32 ice_level)      setValue(SETTING_SKY_ICE_LEVEL, ice_level);  } +void LLSettingsSky::setReflectionProbeAmbiance(F32 ambiance) +{ +    setValue(SETTING_REFLECTION_PROBE_AMBIANCE, ambiance); +} +  void LLSettingsSky::setAmbientColor(const LLColor3 &val)  {      mSettings[SETTING_LEGACY_HAZE][SETTING_AMBIENT] = val.getValue(); @@ -1420,6 +1432,11 @@ F32 LLSettingsSky::getSkyIceLevel() const      return mSettings[SETTING_SKY_ICE_LEVEL].asReal();  } +F32 LLSettingsSky::getReflectionProbeAmbiance() const +{ +    return mSettings[SETTING_REFLECTION_PROBE_AMBIANCE].asReal(); +} +  F32 LLSettingsSky::getSkyBottomRadius() const  {      return mSettings[SETTING_SKY_BOTTOM_RADIUS].asReal(); diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h index fa9326f006..715d31518b 100644 --- a/indra/llinventory/llsettingssky.h +++ b/indra/llinventory/llsettingssky.h @@ -97,6 +97,8 @@ public:      static const std::string SETTING_SKY_DROPLET_RADIUS;      static const std::string SETTING_SKY_ICE_LEVEL; +    static const std::string SETTING_REFLECTION_PROBE_AMBIANCE; +      static const std::string SETTING_LEGACY_HAZE;      static const LLUUID DEFAULT_ASSET_ID; @@ -131,6 +133,8 @@ public:      F32 getSkyDropletRadius() const;      F32 getSkyIceLevel() const; +    F32 getReflectionProbeAmbiance() const; +      // Return first (only) profile layer represented in LLSD      LLSD getRayleighConfig() const;      LLSD getMieConfig() const; @@ -159,6 +163,8 @@ public:      void setSkyDropletRadius(F32 radius);      void setSkyIceLevel(F32 ice_level); +    void setReflectionProbeAmbiance(F32 ambiance); +      //---------------------------------------------------------------------      LLColor3 getAmbientColor() const;      void setAmbientColor(const LLColor3 &val); diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index bdc1f78201..e2e1ff9714 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -1342,6 +1342,7 @@ void LLShaderMgr::initAttribsAndUniforms()      mReservedUniforms.push_back("halo_map");      mReservedUniforms.push_back("moon_brightness");      mReservedUniforms.push_back("cloud_variance"); +    mReservedUniforms.push_back("reflection_probe_ambiance");      mReservedUniforms.push_back("sh_input_r");      mReservedUniforms.push_back("sh_input_g"); diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h index 663ba28b6d..d3bb2b9db4 100644 --- a/indra/llrender/llshadermgr.h +++ b/indra/llrender/llshadermgr.h @@ -243,6 +243,7 @@ public:          CLOUD_VARIANCE,                     //  "cloud_variance" +        REFLECTION_PROBE_AMBIANCE,          //  "reflection_probe_ambiance"          SH_INPUT_L1R,                       //  "sh_input_r"          SH_INPUT_L1G,                       //  "sh_input_g"          SH_INPUT_L1B,                       //  "sh_input_b" diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index a169712bd8..d17845ebc5 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -108,6 +108,8 @@ namespace      const std::string   FIELD_SKY_DENSITY_DROPLET_RADIUS("droplet_radius");      const std::string   FIELD_SKY_DENSITY_ICE_LEVEL("ice_level"); +    const std::string   FIELD_REFLECTION_PROBE_AMBIANCE("probe_ambiance"); +      const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f);      const F32 SLIDER_SCALE_BLUE_HORIZON_DENSITY(2.0f);      const F32 SLIDER_SCALE_GLOW_R(20.0f); @@ -150,6 +152,7 @@ BOOL LLPanelSettingsSkyAtmosTab::postBuild()      getChild<LLUICtrl>(FIELD_SKY_DENSITY_MOISTURE_LEVEL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoistureLevelChanged(); });      getChild<LLUICtrl>(FIELD_SKY_DENSITY_DROPLET_RADIUS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onDropletRadiusChanged(); });      getChild<LLUICtrl>(FIELD_SKY_DENSITY_ICE_LEVEL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onIceLevelChanged(); }); +    getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setCommitCallback([this](LLUICtrl*, const LLSD&) { onReflectionProbeAmbianceChanged(); });      refresh();      return TRUE; @@ -172,6 +175,7 @@ void LLPanelSettingsSkyAtmosTab::setEnabled(BOOL enabled)          getChild<LLUICtrl>(FIELD_SKY_DENSITY_MOISTURE_LEVEL)->setEnabled(enabled);          getChild<LLUICtrl>(FIELD_SKY_DENSITY_DROPLET_RADIUS)->setEnabled(enabled);          getChild<LLUICtrl>(FIELD_SKY_DENSITY_ICE_LEVEL)->setEnabled(enabled); +        getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setEnabled(enabled);      }  } @@ -203,10 +207,12 @@ void LLPanelSettingsSkyAtmosTab::refresh()      F32 moisture_level  = mSkySettings->getSkyMoistureLevel();      F32 droplet_radius  = mSkySettings->getSkyDropletRadius();      F32 ice_level       = mSkySettings->getSkyIceLevel(); +    F32 rp_ambiance     = mSkySettings->getReflectionProbeAmbiance();      getChild<LLUICtrl>(FIELD_SKY_DENSITY_MOISTURE_LEVEL)->setValue(moisture_level);      getChild<LLUICtrl>(FIELD_SKY_DENSITY_DROPLET_RADIUS)->setValue(droplet_radius);      getChild<LLUICtrl>(FIELD_SKY_DENSITY_ICE_LEVEL)->setValue(ice_level); +    getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(rp_ambiance);  }  //------------------------------------------------------------------------- @@ -311,6 +317,15 @@ void LLPanelSettingsSkyAtmosTab::onIceLevelChanged()      setIsDirty();  } +void LLPanelSettingsSkyAtmosTab::onReflectionProbeAmbianceChanged() +{ +    if (!mSkySettings) return; +    F32 ambiance = getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->getValue().asReal(); +    mSkySettings->setReflectionProbeAmbiance(ambiance); +    mSkySettings->update(); +    setIsDirty(); +} +  //==========================================================================  LLPanelSettingsSkyCloudTab::LLPanelSettingsSkyCloudTab() :      LLPanelSettingsSky() diff --git a/indra/newview/llpaneleditsky.h b/indra/newview/llpaneleditsky.h index cb63d40b0c..cd89e02eea 100644 --- a/indra/newview/llpaneleditsky.h +++ b/indra/newview/llpaneleditsky.h @@ -79,6 +79,7 @@ private:      void                    onMoistureLevelChanged();      void                    onDropletRadiusChanged();      void                    onIceLevelChanged(); +    void                    onReflectionProbeAmbianceChanged();  }; diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp index 500485fc70..4d4eb802f1 100644 --- a/indra/newview/llreflectionmap.cpp +++ b/indra/newview/llreflectionmap.cpp @@ -196,15 +196,13 @@ extern LLControlGroup gSavedSettings;  F32 LLReflectionMap::getAmbiance()  { -    static LLCachedControl<F32> minimum_ambiance(gSavedSettings, "RenderReflectionProbeAmbiance", 0.f); -      F32 ret = 0.f;      if (mViewerObject && mViewerObject->getVolume())      {          ret = ((LLVOVolume*)mViewerObject)->getReflectionProbeAmbiance();      } -    return llmax(ret, minimum_ambiance()); +    return ret;  }  F32 LLReflectionMap::getNearClip() diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index dc733687c3..48ed22d79f 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -33,6 +33,7 @@  #include "pipeline.h"  #include "llviewershadermgr.h"  #include "llviewercontrol.h" +#include "llenvironment.h"  extern BOOL gCubeSnapshot;  extern BOOL gTeleportDisplay; @@ -559,6 +560,11 @@ void LLReflectionMapManager::updateUniforms()      S32 count = 0;      U32 nc = 0; // neighbor "cursor" - index into refNeighbor to start writing the next probe's list of neighbors +    LLEnvironment& environment = LLEnvironment::instance(); +    LLSettingsSky::ptr_t psky = environment.getCurrentSky(); + +    F32 minimum_ambiance = psky->getReflectionProbeAmbiance(); +      for (auto* refmap : mReflectionMaps)      {          if (refmap == nullptr) @@ -591,7 +597,7 @@ void LLReflectionMapManager::updateUniforms()              rpd.refIndex[count][3] = -rpd.refIndex[count][3];          } -        rpd.refParams[count].set(refmap->getAmbiance(), 0.f, 0.f, 0.f); +        rpd.refParams[count].set(llmax(minimum_ambiance, refmap->getAmbiance()), 0.f, 0.f, 0.f);          S32 ni = nc; // neighbor ("index") - index into refNeighbor to write indices for current reflection probe's neighbors          { diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 14a9f4aa30..ed823fbba4 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -758,6 +758,7 @@ LLSettingsSky::parammapping_t LLSettingsVOSky::getParameterMap() const          param_map[SETTING_SKY_DROPLET_RADIUS] = DefaultParam(LLShaderMgr::DROPLET_RADIUS, sky_defaults[SETTING_SKY_DROPLET_RADIUS]);          param_map[SETTING_SKY_ICE_LEVEL] = DefaultParam(LLShaderMgr::ICE_LEVEL, sky_defaults[SETTING_SKY_ICE_LEVEL]); +        param_map[SETTING_REFLECTION_PROBE_AMBIANCE] = DefaultParam(LLShaderMgr::REFLECTION_PROBE_AMBIANCE, sky_defaults[SETTING_REFLECTION_PROBE_AMBIANCE]);  // AdvancedAtmospherics TODO  // Provide mappings for new shader params here      } diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml index 6f82a0efa1..094be36b01 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml @@ -315,6 +315,29 @@                              top_delta="20"                              width="219"                              can_edit_text="true"/> +                  <text +                            follows="left|top" +                            height="10" +                            layout="topleft" +                            left_delta="-5" +                            top_delta="25" +                            width="200"> +                    Reflection Probe Ambiance: +                  </text> +                  <slider +                          decimal_digits="3" +                          follows="left|top" +                          height="16" +                          increment="0.01" +                          initial_value="0" +                          layout="topleft" +                          left_delta="5" +                          min_val="0" +                          max_val="1" +                          name="probe_ambiance" +                          top_delta="20" +                          width="219" +                          can_edit_text="true"/>                  </layout_panel>                          </layout_stack>                          </layout_panel> | 
