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

Last change on this file since 1665 was 1665, checked in by rez, 8 years ago

modified A LOT postfx, added MOAR controls to all effects, especially for moire/scanline

File size: 3.0 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 deform;
19uniform vec3 filter;
20uniform vec3 retrace;
21uniform float noise;
22uniform float noise_h;
23uniform float noise_v;
24uniform float aberration;
25uniform bool moire;
26uniform vec4 moire_h;
27uniform vec4 moire_v;
28uniform bool scanline;
29uniform vec4 scanline_h;
30uniform vec4 scanline_v;
31uniform float flash;
32uniform float sync;
33
34const float PI=3.14159265358979323846;
35
36vec2 zoom(in vec2 p,in float radius)
37        {
38        float d=deform+sync*0.0625;
39        float zoom=1.5-(radius*cos(p.x*d)+radius*cos(p.y*d));
40        return p*zoom-0.5;
41        }
42
43vec3 get_color(in sampler2D tex,in vec2 p)
44        {
45        return texture2D(tex,clamp(p,-1.0,0.0)).xyz;
46        }
47
48float rand(in vec2 p)
49        {
50        return fract(sin(dot(p,vec2(12.9898,78.233)))*43758.5453);
51        }
52
53float letterbox(in vec2 p,in float radius,in float smooth)
54        {
55        return 1.0-smoothstep(smooth,1.0,length(max(abs(p*2.0+1.0)+vec2(radius),0.0))-radius);
56        }
57
58void main(void)
59        {
60        vec2 q=gl_FragCoord.xy/screen_size.xy;
61        vec2 p=-1.0+2.0*gl_FragCoord.xy/screen_size.xy;
62        p.y+=0.025*sync;
63        vec2 z =zoom(p,0.5250);
64        vec2 z1=zoom(p,0.5225);
65        vec2 z2=zoom(p,0.5275);
66        float mask=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0);
67
68        float rnd1=rand(vec2(p.x+time,p.y-time));
69        float rnd2=rand(vec2(p.x-time,p.y+time));
70        float d1=(noise_h-noise_h*2.0*rnd1)/float(screen_size.x);
71        float d2=(noise_v-noise_v*2.0*rnd1)/float(screen_size.y);
72
73        vec3 source;
74        source.x=get_color(texture,vec2(z.x+d1,z.y)).x;
75        source.y=get_color(texture,vec2(z.x+d1,z.y)).y;
76        source.z=get_color(texture,vec2(z.x+d1,z.y)).z;
77
78        vec3 glass1=get_color(texture,z1);
79        vec3 glass2=get_color(texture,z2);
80
81        float v=aberration/float(screen_size.x)+aberration/float(screen_size.x)*(2.0-mask);
82
83        vec3 scramble;
84        scramble.x=get_color(texture,vec2(z.x+d1-v,z.y+d2)).x;
85        scramble.y=get_color(texture,vec2(z.x+d1  ,z.y+d2)).y;
86        scramble.z=get_color(texture,vec2(z.x+d1+v,z.y+d2)).z;
87
88        vec3 color=source+glass1*glass1*0.25+glass2*glass2*0.25;
89
90        color+=flash;                                                                                                   // flash
91        color+=scramble;                                                                                                // scramble
92        color-=retrace.x*mod(z.y*retrace.y+time*retrace.z,1.0);                 // retrace
93        color-=(vec3(rnd1,rnd1,rnd1)-vec3(rnd2,rnd2,rnd2))*noise;               // noise
94        if(moire)
95                {
96                color*=moire_h.x+moire_h.y*sin(z.y*float(screen_size.y*moire_h.z))*sin(0.5+z.x*float(screen_size.x*moire_h.w)); // moire h
97                color*=moire_v.x+moire_v.y*sin(z.x*float(screen_size.x*moire_v.z))*sin(0.5+z.y*float(screen_size.y*moire_v.w)); // moire v
98                }
99        else
100                {
101                color*=(moire_h.x+moire_v.x)*0.5;
102                }
103        if(scanline)
104                {
105                color*=scanline_h.x+scanline_h.y*cos(z.y*float(screen_size.y*scanline_h.z+scanline_h.w));       // scanline h
106                color*=scanline_v.x+scanline_v.y*cos(z.x*float(screen_size.x*scanline_v.z+scanline_v.w));       // scanline v
107                }
108        else
109                {
110                color*=(scanline_h.x+scanline_v.x)*0.5;
111                }
112        color*=filter;                                                                                                  // hue
113        color*=mask;                                                                                                    // vignetting
114        color*=letterbox(z,-0.75,0.95);                                                                 // letterbox
115        gl_FragColor=vec4(color,1.0);
116        }
Note: See TracBrowser for help on using the repository browser.