source: 2015/koodauskerho/sieerinn/JypeliShaderTest/JypeliShaderTest/JypeliShaderTestContent/TestShader.fx @ 7171

Revision 7171, 1.8 KB checked in by sieerinn, 4 years ago (diff)
Line 
1float2 Resolution;
2float Time;
3
4float Misalign; // 0.001
5
6float4x4 MatrixTransform;
7
8sampler TextureSampler: register(s0);
9
10// [-1, +1] -> [0, +1]
11float2 distort(float2 p) {
12        float theta = atan2(p.y, p.x);
13        float radius = length(p);
14        radius = pow(radius, 1.0 + 0.04 + Misalign * 3.0);
15        p.x = radius * cos(theta);
16        p.y = radius * sin(theta);
17        return 0.5 * (p + 1.0);
18}
19
20float4 PixShader(float2 texCoord: TEXCOORD0) : COLOR0
21{
22        float2 uv = distort((texCoord.xy - 0.5) * 3.0);
23        float3 original_color = tex2D(TextureSampler, uv).rgb;
24
25        // Color misalignment
26        float3 color;
27        color.r = tex2D(TextureSampler, float2(uv.x + Misalign, uv.y + Misalign * 0.5)).x;
28        color.g = tex2D(TextureSampler, float2(uv.x + Misalign * 0.4, uv.y - Misalign * 0.3)).y;
29        color.b = tex2D(TextureSampler, float2(uv.x - Misalign, uv.y + Misalign * 0.1)).z;
30
31        // Vignette
32        color *= 0.6 + 0.4 * 16.0 * uv.x * uv.y * (1.0 - uv.x) * (1.0 - uv.y);
33
34        // Scanlines
35        color *= 0.8 + 0.2 * sin(1.0 * Time + uv.y * Resolution.y);
36
37        // Glow
38        float radius = 3.1;
39        float3 glow = float3(0, 0, 0);
40        for (int x = -3; x<3; x++) {
41                for (int y = -3; y<3; y++) {
42                        float w = 0.0;
43                        if (!(x == 0 && y == 0))
44                                w = 0.1 * 1.0 / sqrt(float(x*x + y*y));
45                        glow += w * tex2D(TextureSampler, uv + float2(radius * x / Resolution.x,
46                                radius * y / Resolution.y)).rgb;
47                }
48        }
49        glow *= 1.0 / 10.0 * 10.0;
50        color += 0.4 * glow;
51
52        return float4(color, 1);
53}
54
55
56void SpriteVertexShader(inout float4 color    : COLOR0,
57                        inout float2 texCoord : TEXCOORD0,
58                        inout float4 position : SV_Position)
59{
60    position = mul(position, MatrixTransform);
61}
62
63technique Technique1
64{
65    pass Pass1
66    {
67        VertexShader = compile vs_3_0 SpriteVertexShader();
68        PixelShader = compile ps_3_0 PixShader();
69    }
70}
Note: See TracBrowser for help on using the repository browser.