summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/pipeline.cpp35
2 files changed, 38 insertions, 8 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f0ba6eff95..6d6a52a77f 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9298,6 +9298,17 @@
<key>Value</key>
<real>4.0</real>
</map>
+ <key>RenderUseExposureSkySettings</key>
+ <map>
+ <key>Comment</key>
+ <string>Use exposure sky settings instead of deriving from HDR scale.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>RenderDynamicExposureCoefficient</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 4b50b7218e..6c8fe60776 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7077,18 +7077,37 @@ void LLPipeline::generateExposure(LLRenderTarget* src, LLRenderTarget* dst, bool
LLSettingsSky::ptr_t sky = LLEnvironment::instance().getCurrentSky();
F32 probe_ambiance = LLEnvironment::instance().getCurrentSky()->getReflectionProbeAmbiance(should_auto_adjust);
- F32 exp_min = sky->getHDRMin();
- F32 exp_max = sky->getHDRMax();
- if (dynamic_exposure_enabled)
+ F32 exp_min = 1.f;
+ F32 exp_max = 1.f;
+
+ static LLCachedControl<bool> use_exposure_sky_settings(gSavedSettings, "RenderUseExposureSkySettings", false);
+
+ if (use_exposure_sky_settings)
{
- exp_min = sky->getHDROffset() - exp_min;
- exp_max = sky->getHDROffset() + exp_max;
+ if (dynamic_exposure_enabled)
+ {
+ exp_min = sky->getHDROffset() - sky->getHDRMin();
+ exp_max = sky->getHDROffset() + sky->getHDRMax();
+ }
+ else
+ {
+ exp_min = sky->getHDROffset();
+ exp_max = sky->getHDROffset();
+ }
}
- else
+ else if (dynamic_exposure_enabled)
{
- exp_min = sky->getHDROffset();
- exp_max = sky->getHDROffset();
+ if (probe_ambiance > 0.f)
+ {
+ F32 hdr_scale = sqrtf(LLEnvironment::instance().getCurrentSky()->getGamma()) * 2.f;
+
+ if (hdr_scale > 1.f)
+ {
+ exp_min = 1.f / hdr_scale;
+ exp_max = hdr_scale;
+ }
+ }
}
shader->uniform1f(dt, gFrameIntervalSeconds);