diff options
| author | Dave Parks <davep@lindenlab.com> | 2022-06-02 18:42:38 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2022-06-02 18:42:38 -0500 | 
| commit | 220afbcda0961df86ad08bbd51d96b8c868b2e62 (patch) | |
| tree | 066d6508daa552a220c931931f13796754b6c261 /indra/newview/app_settings/shaders/class3 | |
| parent | 3b3d3d88d1755ac08c7d22721fa3fe1657f7c5fd (diff) | |
SL-17285 Add proper reflection probe support to LLVOVolume, LLPrimitive, and LLPanelVolume
Diffstat (limited to 'indra/newview/app_settings/shaders/class3')
| -rw-r--r-- | indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl | 21 | 
1 files changed, 10 insertions, 11 deletions
| diff --git a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl index 8c1323ba1a..eb9d3f485b 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl @@ -1,5 +1,5 @@  /** - * @file class2/deferred/reflectionProbeF.glsl + * @file class3/deferred/reflectionProbeF.glsl   *   * $LicenseInfo:firstyear=2022&license=viewerlgpl$   * Second Life Viewer Source Code @@ -42,6 +42,8 @@ layout (std140, binding = 1) uniform ReflectionProbes      mat4 refBox[REFMAP_COUNT];      // list of bounding spheres for reflection probes sorted by distance to camera (closest first)      vec4 refSphere[REFMAP_COUNT]; +    // extra parameters (currently only .x used for probe ambiance) +    vec4 refParams[REFMAP_COUNT];      // index  of cube map in reflectionProbes for a corresponding reflection probe      // e.g. cube map channel of refSphere[2] is stored in refIndex[2]      // refIndex.x - cubemap channel in reflectionProbes @@ -55,9 +57,6 @@ layout (std140, binding = 1) uniform ReflectionProbes      // number of reflection probes present in refSphere      int refmapCount; - -    // intensity of ambient light from reflection probes -    float reflectionAmbiance;  };  // Inputs @@ -335,7 +334,7 @@ vec3 tapRefMap(vec3 pos, vec3 dir, float lod, vec3 c, float r2, int i)      }  } -vec3 sampleProbes(vec3 pos, vec3 dir, float lod) +vec3 sampleProbes(vec3 pos, vec3 dir, float lod, float minweight)  {      float wsum = 0.0;      vec3 col = vec3(0,0,0); @@ -360,7 +359,7 @@ vec3 sampleProbes(vec3 pos, vec3 dir, float lod)              float atten = 1.0-max(d2-r2, 0.0)/(rr-r2);              w *= atten;              w *= p; // boost weight based on priority -            col += refcol*w; +            col += refcol*w*max(minweight, refParams[i].x);              wsum += w;          } @@ -383,7 +382,7 @@ vec3 sampleProbes(vec3 pos, vec3 dir, float lod)                  float w = 1.0/d2;                  w *= w; -                col += refcol*w; +                col += refcol*w*max(minweight, refParams[i].x);                  wsum += w;              }          } @@ -399,7 +398,7 @@ vec3 sampleProbes(vec3 pos, vec3 dir, float lod)  vec3 sampleProbeAmbient(vec3 pos, vec3 dir, float lod)  { -    vec3 col = sampleProbes(pos, dir, lod); +    vec3 col = sampleProbes(pos, dir, lod, 0.f);      //desaturate      vec3 hcol = col *0.5; @@ -413,7 +412,7 @@ vec3 sampleProbeAmbient(vec3 pos, vec3 dir, float lod)      col *= 0.333333; -    return col*reflectionAmbiance; +    return col;  } @@ -445,12 +444,12 @@ void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv, inout vec3 l      if (glossiness > 0.0)      {          float lod = (1.0-glossiness)*reflection_lods; -        glossenv = sampleProbes(pos, normalize(refnormpersp), lod); +        glossenv = sampleProbes(pos, normalize(refnormpersp), lod, 1.f);      }      if (envIntensity > 0.0)      { -        legacyenv = sampleProbes(pos, normalize(refnormpersp), 0.0); +        legacyenv = sampleProbes(pos, normalize(refnormpersp), 0.0, 1.f);      }  } | 
