diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class3/deferred')
4 files changed, 61 insertions, 25 deletions
diff --git a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl index 8430cca325..c382a9fbc0 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl @@ -53,8 +53,11 @@ void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout  void applyLegacyEnv(inout vec3 color, vec3 legacyenv, vec4 spec, vec3 pos, vec3 norm, float envIntensity); +void mirrorClip(vec3 pos); +  void main()  { +    mirrorClip(vary_position);  #ifdef HAS_DIFFUSE_LOOKUP  	vec4 color = diffuseLookup(vary_texcoord0.xy);  #else diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl index b3b1aaed56..0476b98e10 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl @@ -45,23 +45,13 @@ void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float  vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cs); -uniform vec4 clipPlane; -uniform float clipSign; -uniform float mirror_flag; -void applyClip(vec3 pos) -{ -    float funnyClip = 0; -    if (mirror_flag > 0) -    { -            if ((dot(pos.xyz, clipPlane.xyz) + clipPlane.w) > 0.0) -            { -                discard; -            } -    } -} +uniform mat4 modelview_matrix; +uniform mat3 normal_matrix;  in vec3 vary_position; +void mirrorClip(vec3 pos); +  #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)  out vec4 frag_color; @@ -302,13 +292,12 @@ float getShadow(vec3 pos, vec3 norm)  void main()  { -    applyClip(vary_position); +    mirrorClip(vary_position);      waterClip();      // diffcol == diffuse map combined with vertex color      vec4 diffcol = texture(diffuseMap, vary_texcoord0.xy);  	diffcol.rgb *= vertex_color.rgb; -      alphaMask(diffcol.a);      // spec == specular map combined with specular color @@ -428,9 +417,6 @@ void main()      float flag = GBUFFER_FLAG_HAS_ATMOS; -    if (mirror_flag > 0) -        flag = 1; -      frag_data[0] = vec4(diffcol.rgb, emissive);        // gbuffer is sRGB for legacy materials      frag_data[1] = vec4(spec.rgb, glossiness);           // XYZ = Specular color. W = Specular exponent.      frag_data[2] = vec4(encode_normal(norm), env, flag);;   // XY = Normal.  Z = Env. intensity. W = 1 skip atmos (mask off fog) diff --git a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl index d9dc83bb10..4f6e01764a 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/reflectionProbeF.glsl @@ -682,6 +682,35 @@ vec3 sampleProbeAmbient(vec3 pos, vec3 dir, vec3 amblit)      return col[1]+col[0];  } + +#if defined(HERO_PROBES) + +uniform vec4 clipPlane; +uniform samplerCubeArray heroProbes; + +void tapHeroProbe(inout vec3 glossenv, vec3 pos, vec3 norm, float glossiness) +{ +    float clipDist = dot(pos.xyz, clipPlane.xyz) + clipPlane.w; +    if (clipDist > 0.0 && clipDist < 0.1 && glossiness > 0.8) +    { +        vec3 refnormpersp = reflect(pos.xyz, norm.xyz); +        if (dot(refnormpersp.xyz, clipPlane.xyz) > 0.0) +        { +            glossenv = textureLod(heroProbes, vec4(env_mat * refnormpersp, 0), (1.0-glossiness)*10).xyz; +        } +    } +} + +#else + +void tapHeroProbe(inout vec3 glossenv, vec3 pos, vec3 norm, float glossiness) +{ +} + +#endif + + +  void doProbeSample(inout vec3 ambenv, inout vec3 glossenv,          vec2 tc, vec3 pos, vec3 norm, float glossiness, bool transparent, vec3 amblit)  { @@ -713,6 +742,8 @@ void doProbeSample(inout vec3 ambenv, inout vec3 glossenv,          glossenv = mix(glossenv, ssr.rgb, ssr.a);      }  #endif + +    tapHeroProbe(glossenv, pos, norm, glossiness);  }  void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv, @@ -800,6 +831,7 @@ void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout      {          float lod = (1.0-glossiness)*reflection_lods;          glossenv = sampleProbes(pos, normalize(refnormpersp), lod); +              }      if (envIntensity > 0.0) @@ -827,6 +859,9 @@ void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout      }  #endif +    tapHeroProbe(glossenv, pos, norm, glossiness); +    tapHeroProbe(legacyenv, pos, norm, 1.0); +      glossenv = clamp(glossenv, vec3(0), vec3(10));  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index f1de0b88d6..a8cfc3537e 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -60,6 +60,7 @@ uniform float ssao_irradiance_max;  #endif  // Inputs +uniform vec4 clipPlane;  uniform mat3 env_mat;  uniform mat3  ssao_effect_mat;  uniform vec3 sun_dir; @@ -188,7 +189,7 @@ void main()          float gloss      = 1.0 - perceptualRoughness;          sampleReflectionProbes(irradiance, radiance, tc, pos.xyz, norm.xyz, gloss, false, amblit_linear); -         +          adjustIrradiance(irradiance, ambocc);          vec3 diffuseColor; @@ -198,12 +199,11 @@ void main()          vec3 v = -normalize(pos.xyz);          color = pbrBaseLight(diffuseColor, specularColor, metallic, v, norm.xyz, perceptualRoughness, light_dir, sunlit_linear, scol, radiance, irradiance, colorEmissive, ao, additive, atten); -        #ifdef HERO_PROBES +        /*#ifdef HERO_PROBES          vec3 refnormpersp = reflect(pos.xyz, norm.xyz); -        if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_MIRROR))              color = textureLod(heroProbes, vec4(env_mat * refnormpersp, 0), (1.0 - gloss) * 11).xyz * specularColor; -        #endif +        #endif*/      }      else if (!GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_ATMOS))      { @@ -227,6 +227,18 @@ void main()          sampleReflectionProbesLegacy(irradiance, glossenv, legacyenv, tc, pos.xyz, norm.xyz, spec.a, envIntensity, false, amblit_linear); +        #ifdef HERO_PROBES +        float clipDist = dot(pos.xyz, clipPlane.xyz) + clipPlane.w; +        if (clipDist > 0.0 && clipDist < 0.1 && spec.a > 0.8) +        { +            vec3 refnormpersp = reflect(pos.xyz, norm.xyz); +            if (dot(refnormpersp.xyz, clipPlane.xyz) > 0.0) +            { +                radiance = textureLod(heroProbes, vec4(env_mat * refnormpersp, 0), (1.0-spec.a)*11).xyz; +            } +        } +        #endif +          adjustIrradiance(irradiance, ambocc);          // apply lambertian IBL only (see pbrIbl) @@ -262,9 +274,9 @@ void main()              // add radiance map              applyGlossEnv(color, glossenv, spec, pos.xyz, norm.xyz); -            #ifdef HERO_PROBES +            /*#ifdef HERO_PROBES              color = textureLod(heroProbes, vec4(env_mat * refnormpersp, 0), (1.0 - spec.a) * 11).xyz * spec.rgb; -            #endif +            #endif*/          }  | 
