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
2 merge requests!3Update to main branch,!2Rebase onto current main branch
......@@ -55,13 +55,13 @@ void main()
vec3 col;
vec2 nz = noiseVec * step * 0.5;
//vec2 nz = noiseVec * step * 0.5;
for (float x = start; x <= end; x += 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;
float L = max(lum(c), 0.25);
......@@ -84,9 +84,11 @@ void main()
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));
s = mix(prev, s, min(dt*2.0*abs(prev-s), 0.04));
frag_color = vec4(s, s, s, dt);
}
......@@ -181,7 +181,11 @@ void LLReflectionMapManager::update()
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)
{
......@@ -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
if (mProbes[i]->mCubeIndex != -1)
{
if (!mProbes[i]->mOccluded)
if (!mProbes[i]->mOccluded && mProbes[i]->mComplete)
{
mProbes[i]->mProbeIndex = count;
maps[count++] = mProbes[i];
......@@ -385,6 +389,7 @@ S32 LLReflectionMapManager::allocateCubeIndex()
S32 ret = mProbes[i]->mCubeIndex;
mProbes[i]->mCubeIndex = -1;
mProbes[i]->mCubeArray = nullptr;
mProbes[i]->mComplete = false;
return ret;
}
}
......@@ -435,6 +440,7 @@ void LLReflectionMapManager::doProbeUpdate()
mUpdatingFace = 0;
if (isRadiancePass())
{
mUpdatingProbe->mComplete = true;
mUpdatingProbe = nullptr;
mRadiancePass = false;
}
......@@ -768,7 +774,10 @@ void LLReflectionMapManager::updateUniforms()
// for sphere probes, origin (xyz) and radius (w) of refmaps in clip space
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];
// indices used by probe:
......@@ -843,7 +852,7 @@ void LLReflectionMapManager::updateUniforms()
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
{
......
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