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

Last change on this file since 1661 was 1661, checked in by rez, 10 years ago

new font / blur+chromatic aberration boosted on screen corners / various optimization in postfx

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