Advertisement
kem0o

Stars shader

Dec 13th, 2022
2,435
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. uniform vec2 iResolution;
  2.  uniform float iTime;
  3.  uniform vec3 lightColor;
  4.  
  5.  vec3 mod289(vec3 x) {
  6.    return x - floor(* (1.0 / 289.0)) * 289.0;
  7.  }
  8.  
  9.  vec4 mod289(vec4 x) {
  10.    return x - floor(* (1.0 / 289.0)) * 289.0;
  11.  }
  12.  
  13.  vec4 permute(vec4 x) {
  14.       return mod289(((x*34.0)+1.0)*x);
  15.  }
  16.  
  17.  vec4 taylorInvSqrt(vec4 r)
  18.  {
  19.    return 1.79284291400159 - 0.85373472095314 * r;
  20.  }
  21.  
  22.  float snoise(vec3 v)
  23.    { 
  24.    const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;
  25.    const vec4  D = vec4(0.0, 0.5, 1.0, 1.0);
  26.  
  27.  // First corner
  28.    vec3 i  = floor(+ dot(v, C.yyy) );
  29.    vec3 x0 =   v - i + dot(i, C.xxx) ;
  30.  
  31.  // Other corners
  32.    vec3 g = step(x0.yzx, x0.xyz);
  33.    vec3 l = 1.0 - g;
  34.    vec3 i1 = min( g.xyz, l.zxy );
  35.    vec3 i2 = max( g.xyz, l.zxy );
  36.  
  37.    //   x0 = x0 - 0.0 + 0.0 * C.xxx;
  38.    //   x1 = x0 - i1  + 1.0 * C.xxx;
  39.    //   x2 = x0 - i2  + 2.0 * C.xxx;
  40.    //   x3 = x0 - 1.0 + 3.0 * C.xxx;
  41.    vec3 x1 = x0 - i1 + C.xxx;
  42.    vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
  43.    vec3 x3 = x0 - D.yyy;      // -1.0+3.0*C.x = -0.5 = -D.y
  44.  
  45.  // Permutations
  46.    i = mod289(i); 
  47.    vec4 p = permute( permute( permute( 
  48.               i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
  49.             + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) 
  50.             + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
  51.  
  52.  // Gradients: 7x7 points over a square, mapped onto an octahedron.
  53.  // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
  54.    float n_ = 0.142857142857; // 1.0/7.0
  55.    vec3  ns = n_ * D.wyz - D.xzx;
  56.  
  57.    vec4 j = p - 49.0 * floor(* ns.z * ns.z);  //  mod(p,7*7)
  58.  
  59.    vec4 x_ = floor(* ns.z);
  60.    vec4 y_ = floor(- 7.0 * x_ );    // mod(j,N)
  61.  
  62.    vec4 x = x_ *ns.x + ns.yyyy;
  63.    vec4 y = y_ *ns.x + ns.yyyy;
  64.    vec4 h = 1.0 - abs(x) - abs(y);
  65.  
  66.    vec4 b0 = vec4( x.xy, y.xy );
  67.    vec4 b1 = vec4( x.zw, y.zw );
  68.  
  69.    //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
  70.    //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
  71.    vec4 s0 = floor(b0)*2.0 + 1.0;
  72.    vec4 s1 = floor(b1)*2.0 + 1.0;
  73.    vec4 sh = -step(h, vec4(0.0));
  74.  
  75.    vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
  76.    vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
  77.  
  78.    vec3 p0 = vec3(a0.xy,h.x);
  79.    vec3 p1 = vec3(a0.zw,h.y);
  80.    vec3 p2 = vec3(a1.xy,h.z);
  81.    vec3 p3 = vec3(a1.zw,h.w);
  82.  
  83.  //Normalise gradients
  84.    vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
  85.    p0 *= norm.x;
  86.    p1 *= norm.y;
  87.    p2 *= norm.z;
  88.    p3 *= norm.w;
  89.  
  90.  // Mix final noise value
  91.    vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
  92.    m = m * m;
  93.    return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), 
  94.                                  dot(p2,x2), dot(p3,x3) ) );
  95.    }
  96.  
  97.  float normnoise(float noise) {
  98.          return 0.5*(noise+1.0);
  99.  }
  100.  
  101.  float clouds(vec2 uv) {
  102.      uv += vec2(iTime*0.05, + iTime*0.01);
  103.      
  104.      vec2 off1 = vec2(50.0,33.0);
  105.      vec2 off2 = vec2(0.0, 0.0);
  106.      vec2 off3 = vec2(-300.0, 50.0);
  107.      vec2 off4 = vec2(-100.0, 200.0);
  108.      vec2 off5 = vec2(400.0, -200.0);
  109.      vec2 off6 = vec2(100.0, -1000.0);
  110.          float scale1 = 3.0;
  111.      float scale2 = 6.0;
  112.      float scale3 = 12.0;
  113.      float scale4 = 24.0;
  114.      float scale5 = 48.0;
  115.      float scale6 = 96.0;
  116.      return normnoise(snoise(vec3((uv+off1)*scale1,iTime*0.5))*0.8 + 
  117.                       snoise(vec3((uv+off2)*scale2,iTime*0.4))*0.4 +
  118.                       snoise(vec3((uv+off3)*scale3,iTime*0.1))*0.2 +
  119.                       snoise(vec3((uv+off4)*scale4,iTime*0.7))*0.1 +
  120.                       snoise(vec3((uv+off5)*scale5,iTime*0.2))*0.05 +
  121.                       snoise(vec3((uv+off6)*scale6,iTime*0.3))*0.025);
  122.  }
  123.  
  124.  
  125.  void main()
  126.  {
  127.      vec2 fragCoord = openfl_TextureCoordv * iResolution;
  128.    
  129.            vec2 uv =  fragCoord.xy/iResolution.x;
  130.      
  131.      vec2 center = vec2(0.5,0.5*(iResolution.y/iResolution.x));
  132.      
  133.      vec2 light1 = vec2(sin(iTime*1.2+50.0)*1.0 + cos(iTime*0.4+10.0)*0.6,sin(iTime*1.2+100.0)*0.8 + cos(iTime*0.2+20.0)*-0.2)*0.2+center;
  134.      vec3 lightColor1 = lightColor;
  135.      
  136.      vec2 light2 = vec2(sin(iTime+3.0)*-2.0,cos(iTime+7.0)*1.0)*0.2+center;
  137.      vec3 lightColor2 = lightColor;
  138.      
  139.      vec2 light3 = vec2(sin(iTime+3.0)*2.0,cos(iTime+14.0)*-1.0)*0.2+center;
  140.      vec3 lightColor3 = lightColor;
  141.  
  142.      
  143.      float cloudIntensity1 = 0.7*(1.0-(2.5*distance(uv, light1)));
  144.      float lighIntensity1 = 1.0/(100.0*distance(uv,light1));
  145.  
  146.      float cloudIntensity2 = 0.7*(1.0-(2.5*distance(uv, light2)));
  147.      float lighIntensity2 = 1.0/(100.0*distance(uv,light2));
  148.      
  149.      float cloudIntensity3 = 0.7*(1.0-(2.5*distance(uv, light3)));
  150.      float lighIntensity3 = 1.0/(100.0*distance(uv,light3));
  151.      
  152.      
  153.          gl_FragColor = vec4(vec3(cloudIntensity1*clouds(uv))*lightColor1 + lighIntensity1*lightColor1 +
  154.                       vec3(cloudIntensity2*clouds(uv))*lightColor2 + lighIntensity2*lightColor2 +
  155.                       vec3(cloudIntensity3*clouds(uv))*lightColor3 + lighIntensity3*lightColor3 
  156.                       ,0.3);
  157.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement