summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2023-04-07 11:06:09 -0500
committerDave Parks <davep@lindenlab.com>2023-04-07 11:06:09 -0500
commitde73cf7599e934441fe760f53163b0504c03adc7 (patch)
tree7141fdad76010ccf1cb1f79fa5b016eb806ce7d6
parent72a0408401e4fa8f22ec8a70584bf90e5f0ccc73 (diff)
SL-19538 Remove clouds from irradiance maps and don't conflate max probe samples with max probe neighbors, and don't move manual probes after they are complete (removes flickering around Sponza).
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl2
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp6
-rw-r--r--indra/newview/llreflectionmap.cpp2
-rw-r--r--indra/newview/llreflectionmapmanager.cpp9
4 files changed, 16 insertions, 3 deletions
diff --git a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
index e73e396b8e..e1b18935e8 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl
@@ -134,7 +134,7 @@ void preProbeSample(vec3 pos)
int neighborIdx = refIndex[i].y;
if (neighborIdx != -1)
{
- int neighborCount = min(refIndex[i].z, REF_SAMPLE_COUNT-1);
+ int neighborCount = refIndex[i].z;
int count = 0;
while (count < neighborCount)
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b49fe35851..820073b3e0 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -442,7 +442,11 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
{
renderStarsDeferred(origin);
}
- renderSkyCloudsDeferred(origin, camHeightLocal, cloud_shader);
+
+ if (!gCubeSnapshot || gPipeline.mReflectionMapManager.isRadiancePass()) // don't draw clouds in irradiance maps to avoid popping
+ {
+ renderSkyCloudsDeferred(origin, camHeightLocal, cloud_shader);
+ }
}
gGL.setColorMask(true, true);
}
diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp
index 89ac0df286..261aa51d62 100644
--- a/indra/newview/llreflectionmap.cpp
+++ b/indra/newview/llreflectionmap.cpp
@@ -70,7 +70,7 @@ void LLReflectionMap::autoAdjustOrigin()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_DISPLAY;
- if (mGroup)
+ if (mGroup && !mComplete)
{
const LLVector4a* bounds = mGroup->getBounds();
auto* node = mGroup->getOctreeNode();
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 8252b4be36..dc84b0b10e 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -861,6 +861,9 @@ void LLReflectionMapManager::updateUniforms()
{
//LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("rmmsu - refNeighbors");
//pack neghbor list
+ const U32 max_neighbors = 64;
+ U32 neighbor_count = 0;
+
for (auto& neighbor : refmap->mNeighbors)
{
if (ni >= 4096)
@@ -876,6 +879,12 @@ void LLReflectionMapManager::updateUniforms()
// this neighbor may be sampled
rpd.refNeighbor[ni++] = idx;
+
+ neighbor_count++;
+ if (neighbor_count >= max_neighbors)
+ {
+ break;
+ }
}
}