SL-17523 Add reflection probe ambiance to windlight settings and integrate with UI and ReflectionMapManager
parent
5eb6591d0a
commit
929abcd296
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ private:
|
|||
void onMoistureLevelChanged();
|
||||
void onDropletRadiusChanged();
|
||||
void onIceLevelChanged();
|
||||
void onReflectionProbeAmbianceChanged();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue