source: trunk/tools/neercs/video/postfx.lolfx @ 1663

Last change on this file since 1663 was 1663, checked in by rez, 9 years ago

fixed noise / added tons of control vars to postfx

File size: 2.9 KB
Line 
1-- GLSL.Vert --
2
3#version 120
4
5void main()
6        {
7        gl_Position=gl_Vertex;
8        gl_TexCoord[0]=gl_MultiTexCoord0;
9        }
10
11-- GLSL.Frag --
12
13#version 120
14
15uniform sampler2D texture;
16uniform vec2 screen_size;
17uniform float time;
18uniform float noise;
19uniform float noise_h;
20uniform float noise_v;
21uniform float aberration;
22uniform float deform;
23uniform bool scanline;
24uniform float scanline_h_base;
25uniform float scanline_h_var;
26uniform float scanline_h_repeat_x;
27uniform float scanline_h_repeat_y;
28uniform float scanline_v_base;
29uniform float scanline_v_var;
30uniform float scanline_v_repeat_x;
31uniform float scanline_v_repeat_y;
32uniform float flash;
33uniform float sync;
34
35const float PI=3.14159265358979323846;
36
37vec2 zoom(in vec2 p,in float radius)
38        {
39        float d=deform+sync*0.0625;
40        float zoom=1.5-(radius*cos(p.x*d)+radius*cos(p.y*d));
41        return p*zoom-0.5;
42        }
43
44vec3 get_color(in sampler2D tex,in vec2 p)
45        {
46        return texture2D(tex,clamp(p,-1.0,0.0)).xyz;
47        }
48
49float rand(in vec2 p)
50        {
51        return fract(sin(dot(p,vec2(12.9898,78.233)))*43758.5453);
52        }
53
54float letterbox(in vec2 p,in float radius,in float smooth)
55        {
56        return 1.0-smoothstep(smooth,1.0,length(max(abs(p*2.0+1.0)+vec2(radius),0.0))-radius);
57        }
58
59void main(void)
60        {
61        vec2 q=gl_FragCoord.xy/screen_size.xy;
62        vec2 p=-1.0+2.0*gl_FragCoord.xy/screen_size.xy;
63        p.y+=0.025*sync;
64        vec2 z =zoom(p,0.5250);
65        vec2 z1=zoom(p,0.5225);
66        vec2 z2=zoom(p,0.5275);
67        float mask=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0);
68
69        float rnd1=rand(vec2(p.x+time,p.y-time));
70        float rnd2=rand(vec2(p.x-time,p.y+time));
71        float d1=(noise_h-noise_h*2.0*rnd1)/float(screen_size.x);
72        float d2=(noise_v-noise_v*2.0*rnd1)/float(screen_size.y);
73
74        vec3 source;
75        source.x=get_color(texture,vec2(z.x+d1,z.y)).x;
76        source.y=get_color(texture,vec2(z.x+d1,z.y)).y;
77        source.z=get_color(texture,vec2(z.x+d1,z.y)).z;
78
79        vec3 glass1=get_color(texture,z1);
80        vec3 glass2=get_color(texture,z2);
81
82        float v=aberration/float(screen_size.x)+aberration/float(screen_size.x)*(2.0-mask);
83
84        vec3 noise;
85        noise.x=get_color(texture,vec2(z.x+d1-v,z.y+d2)).x;
86        noise.y=get_color(texture,vec2(z.x+d1  ,z.y+d2)).y;
87        noise.z=get_color(texture,vec2(z.x+d1+v,z.y+d2)).z;
88
89        vec3 color=source+glass1*glass1*0.25+glass2*glass2*0.25+(scanline?noise:source);
90
91        color+=flash;                                                                                                   // flash
92        if(scanline)
93                {
94                color-=0.0125*mod(z.y*4.0+time*0.25,1.0);                                       // electron beam
95                color-=(vec3(rnd1,rnd1,rnd1)-vec3(rnd2,rnd2,rnd2))*noise;       // noise
96                color*=scanline_h_base+scanline_h_var*cos(z.x*float(screen_size.x*scanline_h_repeat_x))*sin(z.y*float(screen_size.y*scanline_h_repeat_y));      // scanline w
97                color*=scanline_v_base+scanline_v_var*sin(z.y*float(screen_size.x*scanline_v_repeat_x))*cos(z.y*float(screen_size.y*scanline_v_repeat_y));      // scanline h
98                }
99        else
100                {
101                color*=0.675;
102                }
103        color=vec3(color.x*0.875,color.y*1.0,color.z*0.75);                             // hue
104        color*=mask;                                                                                                    // vignetting
105        color*=letterbox(z,-0.75,0.95);                                                                 // letterbox
106        gl_FragColor=vec4(color,1.0);
107        }
Note: See TracBrowser for help on using the repository browser.