www.pudn.com > packmk2.rar > underwater_soft.fx


// oi oi 
 
float4x4	mViewProj; 
float4		view_position; 
float		LODbias; 
float		sun_alfa, sun_theta, sun_shininess, sun_strength; 
float3		watercolour; 
 
texture EnvironmentMap; 
texture Normalmap; 
texture FresnelMap; 
 
struct VS_INPUT 
{ 
    float3 Pos      : POSITION; 
	float3 Normal    : NORMAL; 
	float2 tc		: TEXCOORD0; 
}; 
 
struct VS_OUTPUT 
{ 
    float4  Pos     : POSITION;     
	float2 tc		: TEXCOORD0; 
	float3  normal	: TEXCOORD1; 
	float3	viewvec	: TEXCOORD2; 
	float3	sun		: TEXCOORD3; 
}; 
 
samplerCUBE sky = sampler_state 
{   
    Texture = ;  
    MipFilter = LINEAR;  
    MinFilter = LINEAR;  
    MagFilter = LINEAR;  
	AddressU  = WRAP;		 
    AddressV  = WRAP; 
    AddressW  = WRAP; 
	MipMapLodBias = (LODbias); 
	//SRGBTexture = true; 
}; 
 
sampler fresnel = sampler_state 
{   
    Texture = ;  
    MipFilter = LINEAR;  
    MinFilter = LINEAR;  
    MagFilter = LINEAR;  
	AddressU  = CLAMP;		 
	AddressV  = CLAMP;		 
}; 
 
sampler nmap = sampler_state 
{   
    Texture = ;  
    MipFilter = LINEAR;  
    MinFilter = LINEAR;  
    MagFilter = LINEAR;  
	AddressU  = CLAMP;		 
	AddressV  = CLAMP;		 
}; 
 
/* DX9 class shaders	*/ 
 
VS_OUTPUT VShaderR300(VS_INPUT i) 
{ 
    VS_OUTPUT   o; 
   		 
    o.Pos = mul(float4(i.Pos.xyz,1), mViewProj);     
	o.normal = normalize(i.Normal.xyz); 
	o.viewvec = i.Pos.xyz - view_position.xyz/view_position.w; 
	o.tc = i.tc; 
	o.sun.x = cos(sun_theta)*sin(sun_alfa); 
	o.sun.y = sin(sun_theta); 
	o.sun.z = cos(sun_theta)*cos(sun_alfa); 
	return o; 
} 
 
 
float4 PShaderR300(VS_OUTPUT i) : COLOR 
{ 
    //return float4(1,0,0,1); 
    float4 ut; 
	ut.a = 1; 
	float3 v = normalize(i.viewvec); 
	float3 N = 2*tex2D(nmap,i.tc)-1; 
	float3 R = refract(v,N,1.33);			 
	R.y = - R.y; 
	float f = tex1D(fresnel,dot(R,N));	 
	float sunlight = sun_strength*pow(saturate(dot(R, i.sun)),sun_shininess); 
    float3 col = texCUBE(sky,R) + sunlight*float3(1.2, 0.7, 0.3);	 
	float3 reflcol = watercolour + saturate(30*float3(0.4,0.6,0.8)*(1-dot(float3(0,1,0),N))); 
	ut.rgb = lerp(col, reflcol, f) ; 
 
	return ut; 
} 
 
/*	DX8 class shaders	*/ 
 
struct VS_NV20 
{ 
    float4  Pos			: POSITION;     
	float2  dot			: TEXCOORD1; 
	float3	R			: TEXCOORD2; 
	float3	sun			: TEXCOORD3; 
	float3  sunlight	: COLOR0; 
}; 
 
VS_NV20 VShaderNV20(VS_INPUT i) 
{ 
    VS_NV20   o; 
   		 
    o.Pos = mul(float4(i.Pos.xyz,1), mViewProj);     
	float3 normal = normalize(i.Normal.xyz); 
	float3 v = normalize(i.Pos.xyz - view_position.xyz/view_position.w); 
 
	// what am I doing here? ;) 
	o.sun.x = cos(sun_theta)*sin(sun_alfa); 
	o.sun.y = sin(sun_theta); 
	o.sun.z = cos(sun_theta)*cos(sun_alfa); 
	 
	o.R = reflect(v,normal);		 
	o.dot = dot(o.R,normal); 
	 
	float sunlight = sun_strength*pow(saturate(dot(o.R, o.sun)),sun_shininess); 
	o.sunlight = sunlight*float3(1.2, 0.6, 0.1); 
	return o; 
} 
 
float4 PShaderNV20(VS_NV20 i) : COLOR 
{ 
    float4 ut; 
	ut.a = 1; 
	 
	float f = tex1D(fresnel,i.dot);			 
    float3 col = texCUBE(sky,i.R) + i.sunlight;	 
	ut.rgb = lerp(float3(0.05,0.15,0.20), col, f) ; 
 
    return ut; 
} 
 
technique T0 
{ 
    pass P0 
    {         
		pixelshader = compile ps_2_0 PShaderR300(); 
		vertexshader = compile vs_1_1 VShaderR300(); 
	} 
} 
 
/*technique T1 
{ 
    pass P0 
    {         
		pixelshader = compile ps_1_1 PShaderNV20(); 
		vertexshader = compile vs_1_1 VShaderNV20();         
    } 
}*/