         void line ( mediump vec2 a , mediump vec2 b, mediump float size ) {
                     if ( size <= 0.0 ) return;
            mediump vec2 pos = gl_FragCoord.xy / inDisplaySize;
            mediump float aspect = inDisplaySize.x / inDisplaySize.y;
            mediump vec2 lab = a - b, la = pos - a, lb = pos - b;
             
            lab.x *= aspect; la.x *= aspect; lb.x *= aspect;
            mediump float d = ( length ( la ) + length ( lb ) - length ( lab ) + 1e-6 )
                * min ( length ( la ) , length ( lb ) );
            tc = max ( size - pow ( d * 4.3e8 , 0.07 ) , tc );
        }
        mediump float rand(mediump vec2 co){
            return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
        }
        void split ( mediump vec2 a , mediump vec2 b) {
            for ( int j = 1 ; j < 6 ; ++j ){
                mediump vec2 t = a;
                mediump vec2 d = ( b - a ) / float ( 15 );
                for ( int i = 1 ; i < 15 ; ++i ) {
                    mediump vec2 v = a + d * float(i);
                    if(15-i==j*2) {
                        d+=(rand(vec2(float(j),float(j))+v)-0.5)*rand(v)*0.025;
                    }
                    v += (rand(v)-0.5)*d.y;
                    line( t, v,float(j)*0.25+2.0);
                    t = v;
                }
            }
        }
        mediump vec4 thunder()
        {
            split ( vec2((sin((floor(s*10.0)+0.7))+1.0)*0.5,.1),vec2 ((sin((floor(s*10.0)+0.5))+1.0)*0.4 , 0.7) );	
            return vec4( tc - .2 , tc - 1. , tc , tc)*rand(vec2(s,s));
        }       