diff options
| author | Graham Linden <graham@lindenlab.com> | 2019-02-13 13:09:14 -0800 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2019-02-13 13:09:14 -0800 | 
| commit | 65927e0a76aaf8ff4dc268acdb12007265ff3a14 (patch) | |
| tree | a42b75a5b880849c9ec5a7f610669f4c9dd674ad /indra/newview/app_settings/shaders/class1 | |
| parent | 5433ed60ac93c6ccc7692ad43d579a83ab544f31 (diff) | |
SL-10181, SL-10546
Fix distortion map rendering in deferred mode not including underwater fog effects.
Fix distortion map rendering not including post-deferred content at all.
Fix distortion map rendering not including anything but sky when camera is underwater.
Update sun_up_factor/sunmoon_glow_factor uniforms even when sun disc isn't in use.
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
5 files changed, 88 insertions, 76 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 9883ece648..1ba10fa8b7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -215,11 +215,11 @@ void main()      // keep it linear      //      color.rgb += light.rgb; +#endif  #ifdef WATER_FOG      color = applyWaterFogView(pos.xyz, color);  #endif -#endif      frag_color = color;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index 0cd90b0d97..d7b2a9cc8e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -37,29 +37,38 @@ uniform sampler2D detail_2;  uniform sampler2D detail_3;  uniform sampler2D alpha_ramp; +VARYING vec3 pos;  VARYING vec3 vary_normal;  VARYING vec4 vary_texcoord0;  VARYING vec4 vary_texcoord1;  vec2 encode_normal(vec3 n); +#ifdef WATER_FOG +vec4 applyWaterFogView(vec3 pos, vec4 c); +#endif +  void main()  { -	/// Note: This should duplicate the blending functionality currently used for the terrain rendering. -	 -	vec4 color0 = texture2D(detail_0, vary_texcoord0.xy); -	vec4 color1 = texture2D(detail_1, vary_texcoord0.xy); -	vec4 color2 = texture2D(detail_2, vary_texcoord0.xy); -	vec4 color3 = texture2D(detail_3, vary_texcoord0.xy); +    /// Note: This should duplicate the blending functionality currently used for the terrain rendering. +     +    vec4 color0 = texture2D(detail_0, vary_texcoord0.xy); +    vec4 color1 = texture2D(detail_1, vary_texcoord0.xy); +    vec4 color2 = texture2D(detail_2, vary_texcoord0.xy); +    vec4 color3 = texture2D(detail_3, vary_texcoord0.xy); + +    float alpha1 = texture2D(alpha_ramp, vary_texcoord0.zw).a; +    float alpha2 = texture2D(alpha_ramp,vary_texcoord1.xy).a; +    float alphaFinal = texture2D(alpha_ramp, vary_texcoord1.zw).a; +    vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal ); +     +#ifdef WATER_FOG +    outColor = applyWaterFogView(pos.xyz, outColor); +#endif -	float alpha1 = texture2D(alpha_ramp, vary_texcoord0.zw).a; -	float alpha2 = texture2D(alpha_ramp,vary_texcoord1.xy).a; -	float alphaFinal = texture2D(alpha_ramp, vary_texcoord1.zw).a; -	vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal ); -	 -	frag_data[0] = vec4(outColor.rgb, 0.0); -	frag_data[1] = vec4(0,0,0,0); -	vec3 nvn = normalize(vary_normal); -	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0); +    frag_data[0] = vec4(outColor.rgb, 0.0); +    frag_data[1] = vec4(0,0,0,0); +    vec3 nvn = normalize(vary_normal); +    frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl index 5effee4e4e..04fdc18b78 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl @@ -33,8 +33,8 @@ ATTRIBUTE vec4 diffuse_color;  ATTRIBUTE vec2 texcoord0;  ATTRIBUTE vec2 texcoord1; +VARYING vec3 pos;  VARYING vec3 vary_normal; -  VARYING vec4 vary_texcoord0;  VARYING vec4 vary_texcoord1; @@ -43,31 +43,35 @@ uniform vec4 object_plane_t;  vec4 texgen_object(vec4  vpos, vec4 tc, mat4 mat, vec4 tp0, vec4 tp1)  { -	vec4 tcoord; -	 -	tcoord.x = dot(vpos, tp0); -	tcoord.y = dot(vpos, tp1); -	tcoord.z = tc.z; -	tcoord.w = tc.w; -	 -	tcoord = mat * tcoord;  -	 -	return tcoord;  +    vec4 tcoord; +     +    tcoord.x = dot(vpos, tp0); +    tcoord.y = dot(vpos, tp1); +    tcoord.z = tc.z; +    tcoord.w = tc.w; +     +    tcoord = mat * tcoord;  +     +    return tcoord;   }  void main()  { -	//transform vertex -	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); -			 -	vary_normal = normalize(normal_matrix * normal); -	 -	// Transform and pass tex coords - 	vary_texcoord0.xy = texgen_object(vec4(position, 1.0), vec4(texcoord0,0,1), texture_matrix0, object_plane_s, object_plane_t).xy; -	 -	vec4 t = vec4(texcoord1,0,1); -	 -	vary_texcoord0.zw = t.xy; -	vary_texcoord1.xy = t.xy-vec2(2.0, 0.0); -	vary_texcoord1.zw = t.xy-vec2(1.0, 0.0); +    //transform vertex +    vec4 pre_pos = vec4(position.xyz, 1.0); +    vec4 t_pos = modelview_projection_matrix * pre_pos; + +    gl_Position = t_pos; +    pos = t_pos.xyz; + +    vary_normal = normalize(normal_matrix * normal); +     +    // Transform and pass tex coords +    vary_texcoord0.xy = texgen_object(vec4(position, 1.0), vec4(texcoord0,0,1), texture_matrix0, object_plane_s, object_plane_t).xy; +     +    vec4 t = vec4(texcoord1,0,1); +     +    vary_texcoord0.zw = t.xy; +    vary_texcoord1.xy = t.xy-vec2(2.0, 0.0); +    vary_texcoord1.zw = t.xy-vec2(1.0, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index ee028d8194..be5e3538a7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -156,7 +156,6 @@ void main()      //mix with reflection      // Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug -    refcol.rgb = pow(refcol.rgb, vec3(0.45)); // boost the reflect color a little to get stars to show up SL-1475      color.rgb = mix(fb.rgb, refcol.rgb, df1 * 0.99999);      vec4 pos = vary_position; diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl index 68ce2843d0..856924b1e5 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl @@ -34,46 +34,46 @@ vec3 getPositionEye();  vec4 applyWaterFogView(vec3 pos, vec4 color)  { -	vec3 view = normalize(pos); -	//normalize view vector -	float es = -(dot(view, waterPlane.xyz)); +    vec3 view = normalize(pos); +    //normalize view vector +    float es = -(dot(view, waterPlane.xyz)); -	//find intersection point with water plane and eye vector -	 -	//get eye depth -	float e0 = max(-waterPlane.w, 0.0); -	 -	vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0); -	 -	//get object depth -	float depth = length(pos - int_v); -		 -	//get "thickness" of water -	float l = max(depth, 0.1); +    //find intersection point with water plane and eye vector +     +    //get eye depth +    float e0 = max(-waterPlane.w, 0.0); +     +    vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0); +     +    //get object depth +    float depth = length(pos - int_v); +         +    //get "thickness" of water +    float l = max(depth, 0.1); -	float kd = waterFogDensity; -	float ks = waterFogKS; -	vec4 kc = waterFogColor; -	 -	float F = 0.98; -	 -	float t1 = -kd * pow(F, ks * e0); -	float t2 = kd + ks * es; -	float t3 = pow(F, t2*l) - 1.0; -	 -	float L = min(t1/t2*t3, 1.0); -	 -	float D = pow(0.98, l*kd); -	 -	color.rgb = color.rgb * D + kc.rgb * L; -	color.a = kc.a + color.a; -	 -	return color; +    float kd = waterFogDensity; +    float ks = waterFogKS; +    vec4 kc = waterFogColor; +     +    float F = 0.98; +     +    float t1 = -kd * pow(F, ks * e0); +    float t2 = kd + ks * es; +    float t3 = pow(F, t2*l) - 1.0; +     +    float L = min(t1/t2*t3, 1.0); +     +    float D = pow(0.98, l*kd); +     +    color.rgb = color.rgb * D + kc.rgb * L; +    color.a = kc.a + color.a; + +    return color;  }  vec4 applyWaterFog(vec4 color)  { -	//normalize view vector -        return applyWaterFogView(getPositionEye(), color); +    //normalize view vector +    return applyWaterFogView(getPositionEye(), color);  } | 
