float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewPos;
float4 vecTime;
float4 vecLightColor[8];
float4 vecLightPos[8];
float3x3 matTangent;
texture entSkin1;
texture b_reflection_bmap;
texture b_refraction_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 = Mirror;
AddressV = Mirror;
};
sampler2D smpRefr = sampler_state
{
Texture = <b_refraction_bmap>;
MinFilter = linear;
MagFilter = linear;
MipFilter = linear;
AddressU = Clamp;
AddressV = Clamp;
};
struct VS_OUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
float3 ProjTex : TEXCOORD1;
float3 ViewDir : TEXCOORD2;
float3 WorldPos : TEXCOORD3;
float3 tangent0 : TEXCOORD4;
float3 tangent1 : TEXCOORD5;
float3 tangent2 : TEXCOORD6;
};
VS_OUT Shader_VS(float4 inPos : POSITION, float2 inTex : TEXCOORD0, float3 inTangent : TEXCOORD2, float3 inNormal : NORMAL)
{
VS_OUT Out = (VS_OUT)0;
Out.Tex = float2(vecTime.w*125, 0)*0.01+inTex*1000;
float4 Pos = inPos;
Out.Pos = mul(Pos, matWorldViewProj);
Out.ProjTex = Out.Pos.xyw;
Out.ViewDir = vecViewPos.xyz-mul(inPos,matWorld).xyz;
inNormal = -inNormal;
Out.tangent0 = mul(inTangent, matWorld);
Out.tangent1 = mul(cross(inTangent, inNormal), matWorld);
Out.tangent2 = mul(inNormal, matWorld);
Out.WorldPos = mul(inPos, matWorld);
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, float3 inPos : TEXCOORD3, float3 tangent0 : TEXCOORD4, float3 tangent1 : TEXCOORD5, float3 tangent2 : TEXCOORD6) : 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;
matTangent[0] = tangent0;
matTangent[1] = tangent1;
matTangent[2] = tangent2;
float4 SpecNormal = Bump;
float3 Normal = SpecNormal.rgb*5.0-2.50;
Normal = mul(Normal, matTangent);
Normal = normalize(Normal);
float4 Reflect = tex2D(smpRefl, ProjTex.xy+Bump.rg*0.2);
float4 Refract = tex2D(smpRefr, ProjTex.xy+Bump.rg*0.2);
Refract = lerp(Refract,float4(0,0.1,0.2,0.5),0.3);
float i;
for(i=0;i<=7;i++)
{
float3 lightdir = normalize(inPos-vecLightPos[i].xyz);
float3 viewdir2 = normalize(inPos-vecViewPos);
float3 halfvec = normalize(viewdir2+lightdir);
float specularity = saturate(dot(halfvec, Normal));
}
float fresnel = fastFresnel(normalize(ViewDir), Bump.rbg, 0.0204,5);
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_3_0 Shader_PS();
}
}