diff options
| author | Dave Parks <davep@lindenlab.com> | 2022-10-06 18:40:01 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2022-10-06 18:40:01 -0500 | 
| commit | 9448db5d4af7bba094e5bc51f85e5c2491d3f5a1 (patch) | |
| tree | 98e3c28316a892512ecf26661a564c8a81832a39 /indra/newview/app_settings/shaders/class1/interface | |
| parent | 2b28fecf4893e103e99328e5b4a13c607498396d (diff) | |
SL-18190 Water shader WIP.  Better parallax correction for sphere probes.  Reduce probe memory footprint.  Remove framebuffer copies and move to deprecate stencil buffer usage.
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/interface')
3 files changed, 34 insertions, 16 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl b/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl index 63e2fce40f..b633813819 100644 --- a/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl @@ -177,10 +177,10 @@ float computeLod(float pdf)      return lod;  } -vec3 filterColor(vec3 N) +vec4 filterColor(vec3 N)  {      //return  textureLod(uCubeMap, N, 3.0).rgb; -    vec3 color = vec3(0.f); +    vec4 color = vec4(0.f);      float weight = 0.0f;      for(int i = 0; i < u_sampleCount; ++i) @@ -198,7 +198,7 @@ vec3 filterColor(vec3 N)          lod = clamp(lod, 0, 7);          // sample lambertian at a lower resolution to avoid fireflies -        vec3 lambertian = textureLod(reflectionProbes, vec4(H, sourceIdx), lod).rgb; +        vec4 lambertian = textureLod(reflectionProbes, vec4(H, sourceIdx), lod);          color += lambertian;      } @@ -212,16 +212,16 @@ vec3 filterColor(vec3 N)          color /= float(u_sampleCount);      } -    return color.rgb ; +    return color;  }  // entry point  void main()  { -    vec3 color = vec3(0); +    vec4 color = vec4(0);      color = filterColor(vary_dir); -    frag_color = vec4(color,1.0); +    frag_color = color;  } diff --git a/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl b/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl index bb4a79247d..f4879b52de 100644 --- a/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl @@ -26,11 +26,7 @@  /*[EXTRA_CODE_HERE]*/ -#ifdef DEFINE_GL_FRAGCOLOR  out vec4 frag_color; -#else -#define frag_color gl_FragColor -#endif  uniform samplerCubeArray   reflectionProbes;  uniform int sourceIdx; @@ -122,11 +118,11 @@ float D_GGX(float dotNH, float roughness)  	return (alpha2)/(PI * denom*denom);   } -vec3 prefilterEnvMap(vec3 R) +vec4 prefilterEnvMap(vec3 R)  {  	vec3 N = R;  	vec3 V = R; -	vec3 color = vec3(0.0); +	vec4 color = vec4(0.0);  	float totalWeight = 0.0;  	float envMapDim = 256.0;      int numSamples = 4; @@ -157,7 +153,7 @@ vec3 prefilterEnvMap(vec3 R)  			// Biased (+1.0) mip level for better result  			float mip = roughness == 0.0 ? 0.0 : clamp(0.5 * log2(omegaS / omegaP) + 1.0, 0.0f, 7.f);              //float mip = clamp(0.5 * log2(omegaS / omegaP) + 1.0, 0.0f, 7.f); -			color += textureLod(reflectionProbes, vec4(L,sourceIdx), mip).rgb * dotNL; +			color += textureLod(reflectionProbes, vec4(L,sourceIdx), mip) * dotNL;  			totalWeight += dotNL;  		} @@ -168,6 +164,6 @@ vec3 prefilterEnvMap(vec3 R)  void main()  {		  	vec3 N = normalize(vary_dir); -	frag_color = vec4(prefilterEnvMap(N), 1.0); +	frag_color = prefilterEnvMap(N);  }  // ============================================================================================================= diff --git a/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl b/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl index e8452a9c14..9dd97a80b2 100644 --- a/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/reflectionmipF.glsl @@ -33,10 +33,20 @@ out vec4 frag_color;  #define frag_color gl_FragColor  #endif -uniform sampler2DRect screenMap; +// NOTE screenMap should always be texture channel 0 and  +// depthmap should always be channel 1 +uniform sampler2DRect diffuseRect; +uniform sampler2DRect depthMap; + +uniform float resScale; +uniform float znear; +uniform float zfar;  VARYING vec2 vary_texcoord0; +// get linear depth value given a depth buffer sample d and znear and zfar values +float linearDepth(float d, float znear, float zfar); +  void main()   {  #if 0 @@ -74,6 +84,18 @@ void main()      frag_color = vec4(color, 1.0);  #else -    frag_color = vec4(texture2DRect(screenMap, vary_texcoord0.xy).rgb, 1.0); +    vec2 depth_tc = vary_texcoord0.xy * resScale; +    float depth = texture(depthMap, depth_tc).r; +    float dist = linearDepth(depth, znear, zfar); + +    // convert linear depth to distance +    vec3 v; +    v.xy = depth_tc / 512.0 * 2.0 - 1.0; +    v.z = 1.0; +    v = normalize(v); +    dist /= v.z; + +    vec3 col = texture2DRect(diffuseRect, vary_texcoord0.xy).rgb; +    frag_color = vec4(col, dist/256.0);   #endif  } | 
