diff options
author | Dave Parks <davep@lindenlab.com> | 2023-04-07 11:06:09 -0500 |
---|---|---|
committer | Dave Parks <davep@lindenlab.com> | 2023-04-07 11:06:09 -0500 |
commit | de73cf7599e934441fe760f53163b0504c03adc7 (patch) | |
tree | 7141fdad76010ccf1cb1f79fa5b016eb806ce7d6 | |
parent | 72a0408401e4fa8f22ec8a70584bf90e5f0ccc73 (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.glsl | 2 | ||||
-rw-r--r-- | indra/newview/lldrawpoolwlsky.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llreflectionmap.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llreflectionmapmanager.cpp | 9 |
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; + } } } |