www.pudn.com > packmk2.rar > water_soft.fx
// oi oi
float4x4 mViewProj;
float4x4 mView;
float4 view_position;
float3 watercolour;
float LODbias;
float sun_shininess, sun_strength;
float3 sun_vec;
float reflrefr_offset;
bool diffuseSkyRef;
texture EnvironmentMap;
texture FresnelMap;
texture Heightmap;
texture Normalmap;
texture Reflectionmap;
texture Refractionmap;
texture noiseXZ;
struct VS_INPUT
{
float3 Pos : POSITION;
float3 Normal : NORMAL;
float2 tc : TEXCOORD0;
};
samplerCUBE sky = sampler_state
{
Texture = ;
MipFilter = NONE;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
//MipMapLodBias = (LODbias);
//SRGBTexture = true;
};
sampler fresnel = sampler_state
{
Texture = ;
MipFilter = NONE;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};
sampler reflmap = sampler_state
{
Texture = ;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
MipMapLodBias = (LODbias);
};
sampler refrmap = sampler_state
{
Texture = ;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
MipMapLodBias = (LODbias);
};
struct VS_NV20
{
float4 Pos : POSITION;
float2 dot : TEXCOORD0;
float3 R : TEXCOORD1;
float2 refr_tc : TEXCOORD2;
float2 refl_tc : 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);
o.R = reflect(v,normal);
o.dot = dot(o.R,normal);
float sunlight = pow(saturate(dot(o.R, sun_vec)),sun_shininess);
o.sunlight = sunlight*float3(1.2, 0.8, 0.6);
float4 tpos = mul(float4(i.Pos.x,0,i.Pos.z,1), mViewProj);
tpos.xyz = tpos.xyz/tpos.w;
tpos.xy = 0.5 + 0.5*tpos.xy*float2(1,-1);
tpos.z = reflrefr_offset/tpos.z;
o.refr_tc = tpos.xy - tpos.z*normal.xz;
o.refl_tc = tpos.xy - tpos.z*normal.xz;
return o;
}
VS_NV20 VShaderNV30(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);
o.R = reflect(v,normal);
o.dot = dot(o.R,normal);
float sunlight = pow(saturate(dot(o.R, sun_vec)),sun_shininess);
o.sunlight = sunlight*float3(1.2, 0.4, 0.1);
float4 tpos = mul(float4(i.Pos.x,0,i.Pos.z,1), mViewProj);
tpos.xyz = tpos.xyz/tpos.w;
tpos.xy = 0.5 + 0.5*tpos.xy*float2(1,-1);
tpos.z = reflrefr_offset/tpos.z;
o.refr_tc = tpos.xy - tpos.z*normal.xz;
o.refl_tc = tpos.xy - tpos.z*normal.xz;
return o;
}
float4 PShaderNV20(VS_NV20 i) : COLOR
{
float4 ut;
ut.a = 1;
float f = tex1D(fresnel,i.dot);
float3 global_refl = texCUBE(sky,i.R);
float4 local_refl = tex2D(reflmap, i.refl_tc);
float3 refr = tex2D(refrmap, i.refr_tc);
float3 refl = lerp( global_refl, local_refl.rgb, local_refl.a);
ut.rgb = lerp( refr, refl, f) + i.sunlight*sun_strength;
return ut;
}
float4 PShaderNV30(VS_NV20 i) : COLOR
{
float4 ut;
ut.a = 1;
float f = tex1D(fresnel,i.dot);
float3 global_refl = texCUBE(sky,i.R) + i.sunlight.rgb*sun_strength;
float4 local_refl = tex2D(reflmap, i.refl_tc);
float3 refr = tex2D(refrmap, i.refr_tc);
float3 refl = lerp( global_refl, local_refl.rgb, local_refl.a);
ut.rgb = lerp( refr, refl, f);
return ut;
}
technique T0
{
pass P0
{
pixelshader = compile ps_2_0 PShaderNV30();
vertexshader = compile vs_2_0 VShaderNV30();
}
}
technique T1
{
pass P0
{
pixelshader = compile ps_1_4 PShaderNV20();
vertexshader = compile vs_1_1 VShaderNV20();
}
}
technique T2
{
pass P0
{
pixelshader = compile ps_1_1 PShaderNV20();
vertexshader = compile vs_1_1 VShaderNV20();
}
}