float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewPos;
float4 vecTime;
texture entSkin1;
texture entSkin2;
texture b_reflection_bmap;
texture b_refraction_bmap;
texture b_hight_bmap;
sampler2D smpNormal = sampler_state
{
Texture = <entSkin1>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Wrap;
AddressV = Wrap;
};
sampler2D smpRefl = sampler_state
{
Texture = <b_reflection_bmap>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Clamp;
AddressV = Clamp;
};
sampler2D smpRefr = sampler_state
{
Texture = <b_refraction_bmap>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Clamp;
AddressV = Clamp;
};
sampler2D smpHight = sampler_state
{
Texture = <b_hight_bmap>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Clamp;
AddressV = Clamp;
};
sampler2D smpHightMesh = sampler_state
{
Texture = <entSkin2>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_OUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
float3 ProjTex : TEXCOORD1;
float3 ViewDir : TEXCOORD2;
};
VS_OUT Shader_VS(float4 inPos : POSITION, float2 inTex : TEXCOORD0)
{
VS_OUT Out = (VS_OUT)0;
Out.Tex = float2(vecTime.w*125, 0)*0.01+inTex*1000;
float4 Pos = inPos + float4(0,sin(inPos.x/2+(vecTime.w/5))+sin(inPos.z/4-(vecTime.w/5)),0,0);//float4(0,0,tex2D(smpRefl, Out.Tex).r*5,0);
Out.Pos = mul(Pos, matWorldViewProj);
Out.ProjTex = Out.Pos.xyw;
Out.ViewDir = vecViewPos.xyz-mul(inPos,matWorld).xyz;
return Out;
}
float fastFresnel(float3 I, float3 N, float R0, float power)
{
return R0+(1.0-R0)*pow(1.0-dot(I,N),power);
}
float4 Shader_PS(float2 inTex : TEXCOORD0, float3 ProjTex : TEXCOORD1, float3 ViewDir : TEXCOORD2, float deph : TEXCOORD3) : COLOR
{
ProjTex.xy = ProjTex.xy/ProjTex.z;
ProjTex.xy = ProjTex.xy*0.5+0.5;
float4 Bump = tex2D(smpNormal, inTex/500)*2.0-1.0;
float4 Reflect = tex2D(smpRefl, ProjTex.xy+Bump.rg*0.2);
float4 Refract = lerp(tex2D(smpRefr, ProjTex.xy+Bump.rg*0.2),float4(0,0.1,0.2,0),tex2D(smpHight, ProjTex.xy+Bump.rg*0.2));
float fresnel = fastFresnel(normalize(ViewDir), Bump.rbg, 0.0204,7);
float4 Color = lerp(Refract,Reflect,fresnel);
Color.a = 1.0;
return Color;
}
technique tech_00
{
pass pass_00
{
CullMode = None;
VertexShader = compile vs_2_0 Shader_VS();
PixelShader = compile ps_2_0 Shader_PS();
}
}