summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2023-03-30 10:41:04 -0500
committerDave Parks <davep@lindenlab.com>2023-03-30 10:41:04 -0500
commit6162b9208a087f78eba609d3fe9da5c8385f7ade (patch)
tree03899b00ec0c40083d53f2130c14fdeec1310f5f
parentf5fb3ae27140d7455956ba7264dc0a545fb2ec3c (diff)
DRTVWR-559 Add RenderAutomaticReflectionProbes control. Tweak automatic exposure.
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl4
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl1
-rw-r--r--indra/newview/llreflectionmapmanager.cpp27
-rwxr-xr-xindra/newview/llviewerregion.cpp52
5 files changed, 43 insertions, 52 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d6af39f97e..5ffd610fba 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10367,7 +10367,7 @@
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <real>1</real>
+ <real>2</real>
</map>
<key>RenderExposure</key>
<map>
@@ -10403,18 +10403,17 @@
<key>Value</key>
<real>0</real>
</map>
- <key>RenderReflectionProbeTextureHackID</key>
+ <key>RenderAutomaticReflectionProbes</key>
<map>
<key>Comment</key>
- <string>HACK -- Any object with a diffuse texture with this ID will be treated as a user override reflection probe. (default is "Violet Info Hub" photo from Library)</string>
+ <string>Automatic reflection probes control. 0 - disable, 1 - Terrain/water only, 2- Terrain/water + objects. Requires restart.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>String</string>
+ <string>S32</string>
<key>Value</key>
- <string>6b186931-05da-eafa-a3ed-a012a33bbfb6</string>
+ <integer>2</integer>
</map>
-
<key>RenderReflectionRes</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl b/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
index ff37f9e4b3..b325f55576 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
@@ -46,7 +46,7 @@ float lum(vec3 col)
void main()
{
- float step = 1.0/32.0;
+ float step = 1.0/16.0;
float start = step;
float end = 1.0-step;
@@ -82,7 +82,7 @@ void main()
float L = lum(col);
- float s = clamp(0.1/L, 0.5, 2.0);
+ float s = clamp(0.1/L, 0.5, 2.5);
float prev = texture(exposureMap, vec2(0.5,0.5)).r;
s = mix(prev, s, min(dt*2.0, 0.04));
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index 4ac1ff9368..221de0b095 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -125,7 +125,6 @@ vec3 toneMap(vec3 color)
// this factor is based on the exposure correction of Krzysztof Narkowicz in his
// implemetation of ACES tone mapping
color *= 1.0/0.6;
- //color /= 0.6;
color = toneMapACES_Hill(color);
#endif
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 58ce571505..6828078f4f 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -328,29 +328,20 @@ void LLReflectionMapManager::getReflectionMaps(std::vector<LLReflectionMap*>& ma
LLReflectionMap* LLReflectionMapManager::registerSpatialGroup(LLSpatialGroup* group)
{
-#if 1
- if (group->getSpatialPartition()->mPartitionType == LLViewerRegion::PARTITION_VOLUME)
+ static LLCachedControl<S32> automatic_probes(gSavedSettings, "RenderAutomaticReflectionProbes", 2);
+ if (automatic_probes > 1)
{
- OctreeNode* node = group->getOctreeNode();
- F32 size = node->getSize().getF32ptr()[0];
- if (size >= 15.f && size <= 17.f)
+ if (group->getSpatialPartition()->mPartitionType == LLViewerRegion::PARTITION_VOLUME)
{
- return addProbe(group);
+ OctreeNode* node = group->getOctreeNode();
+ F32 size = node->getSize().getF32ptr()[0];
+ if (size >= 15.f && size <= 17.f)
+ {
+ return addProbe(group);
+ }
}
}
-#endif
-#if 0
- if (group->getSpatialPartition()->mPartitionType == LLViewerRegion::PARTITION_TERRAIN)
- {
- OctreeNode* node = group->getOctreeNode();
- F32 size = node->getSize().getF32ptr()[0];
- if (size >= 15.f && size <= 17.f)
- {
- return addProbe(group);
- }
- }
-#endif
return nullptr;
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index dd4ff50259..192a96a408 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1255,43 +1255,45 @@ U32 LLViewerRegion::getNumOfVisibleGroups() const
void LLViewerRegion::updateReflectionProbes()
{
-#if 1
- const F32 probe_spacing = 32.f;
- const F32 probe_radius = sqrtf((probe_spacing * 0.5f) * (probe_spacing * 0.5f) * 3.f);
- const F32 hover_height = 2.f;
+ static LLCachedControl<S32> automatic_probes(gSavedSettings, "RenderAutomaticReflectionProbes", 2);
+ if (automatic_probes > 0)
+ {
+ const F32 probe_spacing = 32.f;
+ const F32 probe_radius = sqrtf((probe_spacing * 0.5f) * (probe_spacing * 0.5f) * 3.f);
+ const F32 hover_height = 2.f;
- F32 start = probe_spacing * 0.5f;
+ F32 start = probe_spacing * 0.5f;
- U32 grid_width = REGION_WIDTH_METERS / probe_spacing;
+ U32 grid_width = REGION_WIDTH_METERS / probe_spacing;
- mReflectionMaps.resize(grid_width * grid_width);
+ mReflectionMaps.resize(grid_width * grid_width);
- F32 water_height = getWaterHeight();
- LLVector3 origin = getOriginAgent();
+ F32 water_height = getWaterHeight();
+ LLVector3 origin = getOriginAgent();
- for (U32 i = 0; i < grid_width; ++i)
- {
- F32 x = i * probe_spacing + start;
- for (U32 j = 0; j < grid_width; ++j)
+ for (U32 i = 0; i < grid_width; ++i)
{
- F32 y = j * probe_spacing + start;
+ F32 x = i * probe_spacing + start;
+ for (U32 j = 0; j < grid_width; ++j)
+ {
+ F32 y = j * probe_spacing + start;
- U32 idx = i * grid_width + j;
+ U32 idx = i * grid_width + j;
- if (mReflectionMaps[idx].isNull())
- {
- mReflectionMaps[idx] = gPipeline.mReflectionMapManager.addProbe();
- }
+ if (mReflectionMaps[idx].isNull())
+ {
+ mReflectionMaps[idx] = gPipeline.mReflectionMapManager.addProbe();
+ }
- LLVector3 probe_origin = LLVector3(x,y, llmax(water_height, mImpl->mLandp->resolveHeightRegion(x,y)));
- probe_origin.mV[2] += hover_height;
- probe_origin += origin;
+ LLVector3 probe_origin = LLVector3(x, y, llmax(water_height, mImpl->mLandp->resolveHeightRegion(x, y)));
+ probe_origin.mV[2] += hover_height;
+ probe_origin += origin;
- mReflectionMaps[idx]->mOrigin.load3(probe_origin.mV);
- mReflectionMaps[idx]->mRadius = probe_radius;
+ mReflectionMaps[idx]->mOrigin.load3(probe_origin.mV);
+ mReflectionMaps[idx]->mRadius = probe_radius;
+ }
}
}
-#endif
}
void LLViewerRegion::addToVOCacheTree(LLVOCacheEntry* entry)