Skip to content
Snippets Groups Projects
Commit b5917fbd authored by David Parks's avatar David Parks
Browse files

DRTVWR-559 Reduce probe flashing and exposure flickering.

parent 9a03c819
No related branches found
No related tags found
No related merge requests found
...@@ -55,13 +55,13 @@ void main() ...@@ -55,13 +55,13 @@ void main()
vec3 col; vec3 col;
vec2 nz = noiseVec * step * 0.5; //vec2 nz = noiseVec * step * 0.5;
for (float x = start; x <= end; x += step) for (float x = start; x <= end; x += step)
{ {
for (float y = start; y <= end; y += step) for (float y = start; y <= end; y += step)
{ {
vec2 tc = vec2(x,y) + nz; vec2 tc = vec2(x,y); // + nz;
vec3 c = texture(diffuseRect, tc).rgb + texture(emissiveRect, tc).rgb; vec3 c = texture(diffuseRect, tc).rgb + texture(emissiveRect, tc).rgb;
float L = max(lum(c), 0.25); float L = max(lum(c), 0.25);
...@@ -84,9 +84,11 @@ void main() ...@@ -84,9 +84,11 @@ void main()
float s = clamp(0.1/L, 0.5, 2.5); float s = clamp(0.1/L, 0.5, 2.5);
float prev = texture(exposureMap, vec2(0.5,0.5)).r; float prev = texture(exposureMap, vec2(0.5,0.5)).r;
s = mix(prev, s, min(dt*2.0, 0.04));
s = mix(prev, s, min(dt*2.0*abs(prev-s), 0.04));
frag_color = vec4(s, s, s, dt); frag_color = vec4(s, s, s, dt);
} }
...@@ -181,7 +181,11 @@ void LLReflectionMapManager::update() ...@@ -181,7 +181,11 @@ void LLReflectionMapManager::update()
LLVector4a d; LLVector4a d;
if (probe->mOccluded) if (probe->mComplete)
{
probe->mFadeIn = llmin((F32) (probe->mFadeIn + gFrameIntervalSeconds), 1.f);
}
if (probe->mOccluded && probe->mComplete)
{ {
if (oldestOccluded == nullptr) if (oldestOccluded == nullptr)
{ {
...@@ -300,7 +304,7 @@ void LLReflectionMapManager::getReflectionMaps(std::vector<LLReflectionMap*>& ma ...@@ -300,7 +304,7 @@ void LLReflectionMapManager::getReflectionMaps(std::vector<LLReflectionMap*>& ma
mProbes[i]->mLastBindTime = gFrameTimeSeconds; // something wants to use this probe, indicate it's been requested mProbes[i]->mLastBindTime = gFrameTimeSeconds; // something wants to use this probe, indicate it's been requested
if (mProbes[i]->mCubeIndex != -1) if (mProbes[i]->mCubeIndex != -1)
{ {
if (!mProbes[i]->mOccluded) if (!mProbes[i]->mOccluded && mProbes[i]->mComplete)
{ {
mProbes[i]->mProbeIndex = count; mProbes[i]->mProbeIndex = count;
maps[count++] = mProbes[i]; maps[count++] = mProbes[i];
...@@ -385,6 +389,7 @@ S32 LLReflectionMapManager::allocateCubeIndex() ...@@ -385,6 +389,7 @@ S32 LLReflectionMapManager::allocateCubeIndex()
S32 ret = mProbes[i]->mCubeIndex; S32 ret = mProbes[i]->mCubeIndex;
mProbes[i]->mCubeIndex = -1; mProbes[i]->mCubeIndex = -1;
mProbes[i]->mCubeArray = nullptr; mProbes[i]->mCubeArray = nullptr;
mProbes[i]->mComplete = false;
return ret; return ret;
} }
} }
...@@ -435,6 +440,7 @@ void LLReflectionMapManager::doProbeUpdate() ...@@ -435,6 +440,7 @@ void LLReflectionMapManager::doProbeUpdate()
mUpdatingFace = 0; mUpdatingFace = 0;
if (isRadiancePass()) if (isRadiancePass())
{ {
mUpdatingProbe->mComplete = true;
mUpdatingProbe = nullptr; mUpdatingProbe = nullptr;
mRadiancePass = false; mRadiancePass = false;
} }
...@@ -768,7 +774,10 @@ void LLReflectionMapManager::updateUniforms() ...@@ -768,7 +774,10 @@ void LLReflectionMapManager::updateUniforms()
// for sphere probes, origin (xyz) and radius (w) of refmaps in clip space // for sphere probes, origin (xyz) and radius (w) of refmaps in clip space
LLVector4 refSphere[LL_MAX_REFLECTION_PROBE_COUNT]; LLVector4 refSphere[LL_MAX_REFLECTION_PROBE_COUNT];
// extra parameters (currently only ambiance in .x) // extra parameters
// x - irradiance scale
// y - radiance scale
// z - fade in
LLVector4 refParams[LL_MAX_REFLECTION_PROBE_COUNT]; LLVector4 refParams[LL_MAX_REFLECTION_PROBE_COUNT];
// indices used by probe: // indices used by probe:
...@@ -843,7 +852,7 @@ void LLReflectionMapManager::updateUniforms() ...@@ -843,7 +852,7 @@ void LLReflectionMapManager::updateUniforms()
rpd.refIndex[count][3] = -rpd.refIndex[count][3]; rpd.refIndex[count][3] = -rpd.refIndex[count][3];
} }
rpd.refParams[count].set(llmax(minimum_ambiance, refmap->getAmbiance())*ambscale, radscale, 0.f, 0.f); rpd.refParams[count].set(llmax(minimum_ambiance, refmap->getAmbiance())*ambscale, radscale, refmap->mFadeIn, 0.f);
S32 ni = nc; // neighbor ("index") - index into refNeighbor to write indices for current reflection probe's neighbors S32 ni = nc; // neighbor ("index") - index into refNeighbor to write indices for current reflection probe's neighbors
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment