1 | static const int MAX_WAVES = 3; |
---|
2 | float4 Waves[MAX_WAVES]; |
---|
3 | float2 Resolution; |
---|
4 | |
---|
5 | float4x4 MatrixTransform; |
---|
6 | sampler TextureSampler: register(s0); |
---|
7 | |
---|
8 | |
---|
9 | float2 Shock(float2 uv, float2 center, float time, float coefficient) |
---|
10 | { |
---|
11 | float3 shockParams = float3(10.0, 0.9, 0.1); |
---|
12 | |
---|
13 | float dist = distance(uv, center); |
---|
14 | if ((dist <= time + shockParams.z) && (dist >= time - shockParams.z)) |
---|
15 | { |
---|
16 | float diff = dist - time; |
---|
17 | float powDiff = 1.0 - pow(abs(diff * shockParams.x), shockParams.y); |
---|
18 | float diffTime = diff * powDiff; |
---|
19 | float2 diffUV = normalize(uv - center); |
---|
20 | uv += diffUV * diffTime * coefficient; |
---|
21 | } |
---|
22 | return uv; |
---|
23 | } |
---|
24 | |
---|
25 | float4 PixShader(float2 texCoord: TEXCOORD0) : COLOR0 |
---|
26 | { |
---|
27 | float2 uv = texCoord; |
---|
28 | [unroll] for(int i=0; i<MAX_WAVES; i++) |
---|
29 | { |
---|
30 | float4 wave = Waves[i]; |
---|
31 | uv = Shock(uv, float2(wave.x, wave.y), wave.z, wave.w); |
---|
32 | } |
---|
33 | float3 color = tex2D(TextureSampler, uv).rgb; |
---|
34 | |
---|
35 | /* |
---|
36 | float radius = 1.5; |
---|
37 | float3 glow = float3(0, 0, 0); |
---|
38 | for (int x = -5; x<5; x++) { |
---|
39 | for (int y = -5; y<5; y++) { |
---|
40 | float w = 0.0; |
---|
41 | if (!(x == 0 && y == 0)) |
---|
42 | w = 0.1 * 1.0 / sqrt(float(x*x + y*y)); |
---|
43 | glow += w * tex2D(TextureSampler, uv + float2(radius * x / Resolution.x, radius * y / Resolution.y)).rgb; |
---|
44 | } |
---|
45 | } |
---|
46 | glow *= 1.0 / 10.0 * 10.0; |
---|
47 | color += 0.2 * glow; |
---|
48 | */ |
---|
49 | |
---|
50 | return float4(color, 1); |
---|
51 | } |
---|
52 | |
---|
53 | |
---|
54 | void SpriteVertexShader(inout float4 color : COLOR0, |
---|
55 | inout float2 texCoord : TEXCOORD0, |
---|
56 | inout float4 position : SV_Position) |
---|
57 | { |
---|
58 | position = mul(position, MatrixTransform); |
---|
59 | } |
---|
60 | |
---|
61 | technique Technique1 |
---|
62 | { |
---|
63 | pass Pass1 |
---|
64 | { |
---|
65 | VertexShader = compile vs_3_0 SpriteVertexShader(); |
---|
66 | PixelShader = compile ps_3_0 PixShader(); |
---|
67 | } |
---|
68 | } |
---|