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

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

glsl letterbox and round corner & some new fancy animation!

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