물 쉐이더는 나름 간편.
재미있는 원리군요.
아니 정확히 말하면 물 쉐이더는 이걸로 끝이 아니죠
이건 가장 간단한 물 표현 쉐이더의 하나.
더 계산해서 R2의 물 쉐이더만큼 만들어 줘야 할텐데 말입니다 ㅎㅎ
여기서 중요한건 움직이는 이미지를 tex2D 해서, 그 이미지값을 가지고 다시 tex2D의 좌표를 보정하는 것입니다.
이건 뭐 굴절도 아니고 ㅎㅎ

float4x4 matViewProjection;
struct VS_INPUT
{
float4 Position : POSITION0;
float2 texcoord : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Position : POSITION0;
float2 texcoord : TEXCOORD0;
};
VS_OUTPUT vs_main( VS_INPUT Input )
{
VS_OUTPUT Output;
Output.Position = mul( Input.Position, matViewProjection );
Output.texcoord = Input.texcoord ;
return( Output );
}
sampler2D Texture0;
sampler2D Texture1;
float Flowspeed;
float fTime0_X;
float bumpness;
float4 ps_main(float2 texcoord : TEXCOORD0) : COLOR0
{
//float2 uv = float2(texcoord.x + fTime0_X * Flowspeed, texcoord.y);
float3 normal ;
normal = tex2D(Texture1,float2(texcoord.x + fTime0_X * Flowspeed, texcoord.y));
//float4 ripple = tex2D ( Texture1, float2(texcoord.x + fTime0_X * flowspeed, texcoord.y));
float4 base = tex2D ( Texture0, texcoord.xy + bumpness * normal.xy );
return base;
}