diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
8 files changed, 188 insertions, 152 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index b439fbbff6..4a12659d56 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -88,58 +88,49 @@ float getAmbientClamp();  vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight, float ambiance)  { -    //get light vector -    vec3 lv = lp.xyz-v; - -    vec4 proj_tc = proj_mat * lp; - -    //get distance -    float d = length(lv); -    float da = 1.0; -    vec3 col = vec3(0); -    if (proj_tc.z < 0 -     || proj_tc.z > 1 -     || proj_tc.x < 0 -     || proj_tc.x > 1 -     || proj_tc.y < 0 -     || proj_tc.y > 1) -    { -        return col; -    } +	//get light vector +	vec3 lv = lp.xyz-v; -    if (d > 0.0) -    { -        //normalize light vector -        lv = normalize(lv); -        vec3 norm = normalize(n); +la /= 20.0f; -        da = dot(norm, lv); -        da = clamp(da, 0.0, 1.0); -  -        //distance attenuation -        float dist = (la > 0) ? d/la : 1.0f; -        fa += 1.0f; -        float dist_atten = (fa > 0) ? clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0) : 0.0f; -        dist_atten *= dist_atten; -        dist_atten *= 2.2f; +	//get distance +	float d = length(lv); +	 +	float da = 1.0; + +	vec3 col = vec3(0); + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv = normalize(lv); +	 +		//distance attenuation +		float dist = d/la; +		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +		dist_atten *= dist_atten; +        dist_atten *= 2.0f; + +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -        // spotlight coefficient. -        float spot = max(dot(-ln, lv), is_pointlight); -        da *= spot*spot; // GL_SPOT_EXPONENT=2 +		//angular attenuation +		da *= max(dot(n, lv), 0.0);		 -        // to match spotLight (but not multiSpotLight) *sigh* -        float lit = max(da * dist_atten,0.0); +		float lit = max(da * dist_atten,0.0); +ambiance = 0.0f;          float amb_da = ambiance;          if (lit > 0)          {              col = lit * light_col * diffuse;              amb_da += (da*0.5+0.5) * ambiance; -            amb_da += (da*da*0.5 + 0.5) * ambiance;          } +        amb_da += (da*da*0.5 + 0.5) * ambiance;          amb_da *= dist_atten;          amb_da = min(amb_da, 1.0f - lit); -        col.rgb += amb_da * 0.5 * light_col * diffuse; +        col.rgb += amb_da * light_col * diffuse;          // no spec for alpha shader...      } @@ -217,21 +208,27 @@ void main()      vec4 color = vec4(0.0); -    color.rgb = amblit;      color.a   = final_alpha;      float ambient = da;      ambient *= 0.5;      ambient *= ambient; -    ambient = min(getAmbientClamp(), 1.0 - ambient); + +    float ambient_clamp = getAmbientClamp() + 0.1; +    ambient = (1.0 - ambient) * ambient_clamp;      vec3 sun_contrib = min(final_da, shadow) * sunlit; +#if !defined(AMBIENT_KILL) +    color.rgb = amblit;      color.rgb *= ambient; +#endif  vec3 post_ambient = color.rgb; +#if !defined(SUNLIGHT_KILL)      color.rgb += sun_contrib; +#endif  vec3 post_sunlight = color.rgb; @@ -249,7 +246,7 @@ vec3 post_atmo = color.rgb;      // to linear!      color.rgb = srgb_to_linear(color.rgb); -   #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diffuse_linear.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w * 0.5); +   #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, diffuse_linear.rgb, pos.xyz, norm, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, light_attenuation[i].w);      LIGHT_LOOP(1)      LIGHT_LOOP(2) @@ -260,7 +257,9 @@ vec3 post_atmo = color.rgb;      LIGHT_LOOP(7)      // sum local light contrib in linear colorspace +#if !defined(LOCAL_LIGHT_KILL)      color.rgb += light.rgb; +#endif      // back to sRGB as we're going directly to the final RT post-deferred gamma correction      color.rgb = linear_to_srgb(color.rgb); diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 0880a73b26..1c0516923e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -88,17 +88,19 @@ float getAmbientClamp();  vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spec, vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight, inout float glare, float ambiance)  { -    //get light vector -    vec3 lv = lp.xyz-v; -     -    //get distance -    float d = length(lv); -     -    float da = 1.0; +	vec3 col = vec3(0); + +la /= 20.0f; -    vec3 col = vec3(0,0,0); +	//get light vector +	vec3 lv = lp.xyz-v; +	 +	//get distance +	float d = length(lv); +	 +	float da = 1.0; -    vec4 proj_tc = proj_mat * lp; +    /*vec4 proj_tc = proj_mat * lp;      if (proj_tc.z < 0       || proj_tc.z > 1 @@ -108,76 +110,68 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe       || proj_tc.y > 1)      {          return col; -    } - -    if (d > 0.0) -    { -        //normalize light vector -        lv = normalize(lv); -     -        //distance attenuation -        float dist = (la > 0) ? d/la : 1.0f; -        fa += 1.0f; -        float dist_atten = ( fa > 0) ? clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0) : 1.0f; -        dist_atten *= dist_atten; -        dist_atten *= 2.2f; - -        if (dist_atten <= 0) -        { -            return col; -        } - -        // spotlight coefficient. -        float spot = max(dot(-ln, lv), is_pointlight); - -        //angular attenuation -        da = dot(n, lv); -        da = clamp(da, 0.0, 1.0); - -        da *= spot*spot; // GL_SPOT_EXPONENT=2 - -        float lit = max(da * dist_atten, 0.0); +    }*/ + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv = normalize(lv); +	 +		//distance attenuation +		float dist = d/la; +		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +		dist_atten *= dist_atten; +        dist_atten *= 2.0f; + +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 + +		//angular attenuation +		da *= max(dot(n, lv), 0.0);		 +		 +		float lit = max(da * dist_atten, 0.0);          float amb_da = ambiance; -        if (da > 0) -        { +        if (lit > 0) +        {                          col = light_col*lit*diffuse;              amb_da += (da*0.5 + 0.5) * ambiance; -            amb_da += (da*da*0.5+0.5) * ambiance;          } +        amb_da += (da*da*0.5+0.5) * ambiance;          amb_da *= dist_atten;          amb_da = min(amb_da, 1.0f - lit); -        col.rgb += amb_da * 0.25 * light_col * diffuse; - -        if (spec.a > 0.0) -        { -            //vec3 ref = dot(pos+lv, norm); -            vec3 h = normalize(lv+npos); -            float nh = dot(n, h); -            float nv = dot(n, npos); -            float vh = dot(npos, h); -            float sa = nh; -            float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; - -            float gtdenom = 2 * nh; -            float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh)); -                                 -            if (nh > 0.0) -            { -                float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); -                vec3 speccol = lit*scol*light_col.rgb*spec.rgb; +        col.rgb += amb_da * light_col * diffuse; + +		if (spec.a > 0.0) +		{ +			//vec3 ref = dot(pos+lv, norm); +			vec3 h = normalize(lv+npos); +			float nh = dot(n, h); +			float nv = dot(n, npos); +			float vh = dot(npos, h); +			float sa = nh; +			float fres = pow(1 - dot(h, npos), 5)*0.4+0.5; + +			float gtdenom = 2 * nh; +			float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh)); +								 +			if (nh > 0.0) +			{ +				float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); +				vec3 speccol = lit*scol*light_col.rgb*spec.rgb;                  speccol = clamp(speccol, vec3(0), vec3(1)); -                col += speccol; +				col += speccol; -                float cur_glare = max(speccol.r, speccol.g); -                cur_glare = max(cur_glare, speccol.b); -                glare = max(glare, speccol.r); -                glare += max(cur_glare, 0.0); -            } -        } -    } +				float cur_glare = max(speccol.r, speccol.g); +				cur_glare = max(cur_glare, speccol.b); +				glare = max(glare, speccol.r); +				glare += max(cur_glare, 0.0); +			} +		} +	} -    return max(col, vec3(0.0,0.0,0.0));  +	return max(col, vec3(0.0,0.0,0.0));	  }  #else @@ -320,16 +314,22 @@ void main()      float ambient = da;      ambient *= 0.5;      ambient *= ambient; -    ambient = min(getAmbientClamp(), 1.0 - ambient); + +    float ambient_clamp = getAmbientClamp() + 0.1; +    ambient = (1.0 - ambient) * ambient_clamp;      vec3 sun_contrib = min(final_da, shadow) * sunlit; +#if !defined(AMBIENT_KILL)      color.rgb = amblit;      color.rgb *= ambient; +#endif  vec3 post_ambient = color.rgb; +#if !defined(SUNLIGHT_KILL)      color.rgb += sun_contrib; +#endif  vec3 post_sunlight = color.rgb; @@ -395,7 +395,7 @@ vec3 post_atmo = color.rgb;      vec3 light = vec3(0,0,0); - #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse_linear.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w); + #define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse_linear.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w );          LIGHT_LOOP(1)          LIGHT_LOOP(2) @@ -405,11 +405,12 @@ vec3 post_atmo = color.rgb;          LIGHT_LOOP(6)          LIGHT_LOOP(7) -      glare = min(glare, 1.0);      float al = max(diffuse_linear.a,glare)*vertex_color.a; +#if !defined(LOCAL_LIGHT_KILL)      color.rgb += light.rgb; +#endif      // (only) post-deferred needs inline gamma correction      color.rgb = linear_to_srgb(color.rgb); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index 29298d7c07..367680556a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -61,6 +61,11 @@ vec3 getNorm(vec2 pos_screen);  void main()   { +	vec3 out_col = vec3(0,0,0); + +#if defined(LOCAL_LIGHT_KILL) +    discard; +#else  	vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res;  	vec3 pos = getPosition(frag.xy).xyz;  	if (pos.z < far_z) @@ -74,7 +79,6 @@ void main()  	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;  	float noise = texture2D(noiseMap, frag.xy/128.0).b; -	vec3 out_col = vec3(0,0,0);  	vec3 npos = normalize(-pos);  	// As of OSX 10.6.7 ATI Apple's crash when using a variable size loop @@ -130,7 +134,7 @@ void main()  		}  	}  	} -	 +#endif  	frag_color.rgb = out_col;  	frag_color.a = 0.0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 2569e49743..c81d633880 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -72,10 +72,12 @@ uniform vec2 screen_res;  uniform mat4 inv_proj;  vec3 getNorm(vec2 pos_screen); +vec3 srgb_to_linear(vec3 c);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); @@ -95,6 +97,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); @@ -112,6 +115,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = tc-vec2(0.5); @@ -126,6 +130,11 @@ vec4 getPosition(vec2 pos_screen);  void main()   { +	vec3 col = vec3(0,0,0); + +#if defined(LOCAL_LIGHT_KILL) +    discard; +#else  	vec4 frag = vary_fragcoord;  	frag.xyz /= frag.w;  	frag.xyz = frag.xyz*0.5+0.5; @@ -167,7 +176,6 @@ void main()  	lv = normalize(lv);  	float da = dot(norm, lv); -	vec3 col = vec3(0,0,0);  	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;  	vec3 dlit = vec3(0, 0, 0); @@ -263,7 +271,8 @@ void main()  			}  		}  	} -	 +#endif +  	frag_color.rgb = col;	  	frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index f8264d971c..73bc1141b0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -124,7 +124,7 @@ void main()      {          discard;      } -         +//col.rgb = vec3(0);              frag_color.rgb = col;         frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index c81d0f97da..c7426788c4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -106,16 +106,23 @@ void main()          float ambient = da;          ambient *= 0.5;          ambient *= ambient; -        ambient = min(getAmbientClamp(), 1.0 - ambient); + +        ambient = (1.0 - ambient); +        float ambient_clamp = getAmbientClamp() + 0.1; +        ambient *= ambient_clamp;          vec3 sun_contrib = final_da * sunlit; +#if !defined(AMBIENT_KILL)          color.rgb = amblit;          color.rgb *= ambient; +#endif  vec3 post_ambient = color.rgb; +#if !defined(SUNLIGHT_KILL)          color.rgb += sun_contrib; +#endif  vec3 post_sunlight = color.rgb; @@ -153,7 +160,7 @@ vec3 post_diffuse = color.rgb;   vec3 post_spec = color.rgb;  #ifndef WATER_FOG -        color.rgb = mix(color.rgb, diffuse_srgb.rgb, diffuse_srgb.a); +        color.rgb += diffuse_srgb.rgb * diffuse_srgb.a;  #endif          if (envIntensity > 0.0) @@ -179,11 +186,10 @@ vec3 post_atmo = color.rgb;              bloom = fogged.a;          #endif +// srgb colorspace debuggables  //color.rgb = amblit; -//color.rgb = vec3(ambient);  //color.rgb = sunlit;  //color.rgb = post_ambient; -//color.rgb = vec3(final_da);  //color.rgb = sun_contrib;  //color.rgb = post_sunlight;  //color.rgb = diffuse_srgb.rgb; @@ -197,6 +203,11 @@ vec3 post_atmo = color.rgb;          color.rgb = srgb_to_linear(color.rgb);      } +// linear debuggables +//color.rgb = vec3(final_da); +//color.rgb = vec3(ambient); +//color.rgb = vec3(scol); +      frag_color.rgb = color.rgb;      frag_color.a = bloom;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index d09bc25334..55c740d100 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -71,10 +71,12 @@ uniform vec2 screen_res;  uniform mat4 inv_proj;  vec3 getNorm(vec2 pos_screen); +vec3 srgb_to_linear(vec3 c);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); @@ -94,6 +96,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5)); @@ -111,6 +114,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)  vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  {  	vec4 ret = texture2DLod(projectionMap, tc, lod); +	ret.rgb = srgb_to_linear(ret.rgb);  	vec2 dist = tc-vec2(0.5); @@ -125,6 +129,11 @@ vec4 getPosition(vec2 pos_screen);  void main()   { +	vec3 col = vec3(0,0,0); + +#if defined(LOCAL_LIGHT_KILL) +    discard; +#else  	vec4 frag = vary_fragcoord;  	frag.xyz /= frag.w;  	frag.xyz = frag.xyz*0.5+0.5; @@ -138,12 +147,10 @@ void main()  	{  		discard;  	} -	  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;  	float envIntensity = norm.z;  	norm = getNorm(frag.xy); -	  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); @@ -169,14 +176,9 @@ void main()  	lv = normalize(lv);  	float da = dot(norm, lv); -	vec3 col = vec3(0,0,0); -		  	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb; -		  	vec4 spec = texture2DRect(specularRect, frag.xy); -	 -  	float noise = texture2D(noiseMap, frag.xy/128.0).b;  	vec3 dlit = vec3(0, 0, 0); @@ -212,7 +214,6 @@ void main()  		amb_da = min(amb_da, 1.0-lit);  		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a*diff_tex.rgb;  	} -	  	if (spec.a > 0.0)  	{ @@ -239,7 +240,6 @@ void main()  		}  	}	 -  	if (envIntensity > 0.0)  	{  		vec3 ref = reflect(normalize(pos), norm); @@ -268,7 +268,8 @@ void main()  			}  		}  	} -	 +#endif +  	frag_color.rgb = col;	  	frag_color.a = 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 914e17beed..2235ab12a4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -129,8 +129,7 @@ void main()      vec4 refcol = refcol1 + refcol2 + refcol3;      float df1 = df.x + df.y + df.z; -    df1 *= 0.333; -    refcol *= df1; +	refcol *= df1 * 0.333;      vec3 wavef = (wave1 + wave2 * 0.4 + wave3 * 0.6) * 0.5;      wavef.z *= max(-viewVec.z, 0.1); @@ -145,23 +144,35 @@ void main()      vec4 baseCol = texture2D(refTex, refvec4);      refcol = mix(baseCol*df2, refcol, dweight); - -    //figure out distortion vector (ripply)    -    vec2 distort2 = distort+wavef.xy*(refScale * 0.01)/max(dmod*df1, 1.0); -         -    vec4 fb = texture2D(screenTex, distort2); -  -    //mix with reflection -    // Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug -    color.rgb = mix(fb.rgb, refcol.rgb, df1 + 0.6); -    color.rgb *= 2.0f; -    color.rgb = scaleSoftClip(color.rgb); - -    vec4 pos = vary_position; +    refcol.rgb = srgb_to_linear(refcol.rgb); + +    //get specular component +	float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0); +		 +	//harden specular +	spec = pow(spec, 128.0); + +	//figure out distortion vector (ripply)    +	vec2 distort2 = distort+wavef.xy*refScale/max(dmod*df1, 1.0); +		 +	vec4 fb = texture2D(screenTex, distort2); +	 +	//mix with reflection +	// Note we actually want to use just df1, but multiplying by 0.999999 gets around an nvidia compiler bug +	color.rgb = mix(fb.rgb, refcol.rgb, df1 * 0.4 + 0.6); +	 +	vec4 pos = vary_position; +	 +	color.rgb += spec * specular; +	 +	//color.rgb = atmosTransport(color.rgb); +	color.rgb = scaleSoftClip(color.rgb); + +	color.a   = spec * sunAngle2; -    vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz); +	vec3 screenspacewavef = normalize((norm_mat*vec4(wavef, 1.0)).xyz); -    frag_data[0] = vec4(color.rgb, 0); // diffuse -    frag_data[1] = vec4(specular * 0.5, 0.5);     // speccolor, spec -    frag_data[2] = vec4(encode_normal(screenspacewavef.xyz), 0.05, 0);// normalxy, 0, 0 +	frag_data[0] = vec4(color.rgb, color); // diffuse +	frag_data[1] = vec4(0);		// speccolor, spec +	frag_data[2] = vec4(encode_normal(screenspacewavef.xyz*0.5+0.5), 0.05, 0);// normalxy, 0, 0  }  | 
