Advertisement
Guest User

Untitled

a guest
Apr 8th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     PsyVR test
  3. */
  4.  
  5. #define R iResolution.xy
  6. #define T iTime * .5
  7.  
  8. // toggle for psychedelic madness
  9. #define ENABLE_COLOR_CYCLE
  10.  
  11. // FabriceNeyret2
  12. #define hue2(v)  (.5 + cos(6.3 * (v) + vec4(0, 23, 21, 0)))
  13. #define hue(v)   (.9 + cos(1.3 * (v) + vec4(0, 23, 21, 0)))
  14.  
  15. int id = -1;
  16.  
  17. mat2 rotate(float a) {
  18.     float c = cos(a),
  19.         s = sin(a);
  20.     return mat2(c, s, -s, c);
  21. }
  22.  
  23. float random(in vec2 st) {
  24.     return fract(sin(dot(st.xy, vec2(1.9898, 78.233))) * 43758.1);
  25. }
  26.  
  27. float noise(vec2 p) {
  28.     vec2 i = ceil(p);
  29.     vec2 f = fract(p);
  30.     vec2 u = f * f * (3. - 2. * f);
  31.     float a = random(i);
  32.     float b = random(i + vec2(1., 0.));
  33.     float c = random(i + vec2(0., 1.));
  34.     float d = random(i + vec2(1., 1.));
  35.     return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
  36. }
  37.  
  38. float fbm(in vec2 p) {
  39.     float s = .0;
  40.     float m = .0;
  41.     float a = .5;  
  42.     for(int i = 0; i < 8; i++) {
  43.         s += a * noise(p);
  44.         m += a;
  45.         a *= .5;
  46.         p *= 1.;
  47.     }
  48.     return s / m;
  49. }
  50.  
  51. vec3 renderFractal(vec2 uv) {
  52.  
  53.     vec3 color = vec3(0.);
  54.     vec2 p = uv;
  55.    
  56.     // per channel iters
  57.     float t = T;
  58.     for (int c = 0; c < 12; c++) {
  59.    
  60.         t += 0.1; // time offset per channel
  61.        
  62.         float l = 0.;
  63.         float s = 1.;
  64.         for (int i = 0; i < 8; i++) {
  65.             // from Kali's fractal iteration
  66.             p = abs(p) / dot(p, p);
  67.             p -= s;
  68.             p *= rotate(t * .5);
  69.             s *= .8;
  70.             l += (s  * .08) / length(p);
  71.         }
  72.         color[c] += l;
  73.    
  74.     }
  75.  
  76.     return color;
  77.  
  78. }
  79.  
  80. float map(vec3 p) {
  81.    
  82.     float m = 10.;
  83.    
  84.     vec3 q = p;
  85.     float k = fbm(q.xz + fbm(q.xz + T *2.));
  86.    
  87.     q.y += .1;
  88.     float d = dot(q, vec3(0., 1., 0.)) + k;
  89.     d = min(5. - d, d);
  90.     if (d < m) {
  91.         m = d;
  92.         id = 1;
  93.     }
  94.    
  95.     q = p;
  96.     q.xz = mod(q.xz + 2., 4.) - 2.;
  97.     d = min(d, length(q.xz) - .5);
  98.     if (d < m) {
  99.         m = d;
  100.         id = 2;
  101.     }
  102.    
  103.     return m;
  104. }
  105.  
  106. vec3 render(vec3 ro, vec3 rd) {
  107.  
  108.     vec3 col = vec3(0.);
  109.     vec3 p;
  110.    
  111.     float t = 1.;
  112.     for (int i = 0; i < 95; i++) {
  113.         p = ro + rd * t;
  114.         float d = map(p);
  115.         if (d < .001 || t > 50.) break;
  116.         t += .5 * d;
  117.         col += .02 * hue(d).rgb;
  118.     }
  119.     col /= 1.5;
  120.    
  121.     //vec3 tex =  renderFractal(fract(.1 * p.xz) - .5);
  122.     //if (id == 1) col += tex / (1. + t * t * .5);
  123.     //if (id == 2) col += abs(.1 / sin(10. * p.y + T)) * vec3(0., 1., 1.);
  124.    
  125.     return col;
  126.  
  127. }
  128.  
  129. void mainImage(out vec4 O, vec2 I) {
  130.  
  131.     vec2 uv = (2. * I - R)
  132.         / R.y;
  133.     vec3 col = vec3(0.);
  134.    
  135.     vec3 ro = vec3(2., 1., T * 2.);
  136.     vec3 rd = vec3(uv, 1.);
  137.    
  138.     vec3 pc = render(ro, rd);
  139.    
  140.     O = vec4(pc, 1.);
  141. }
  142.  
  143. void mainVR(out vec4 O, vec2 I, vec3 roVR, vec3 rdVR) {        
  144.     vec3 col = render(roVR + vec3(2., 1., T * 2.), rdVR);
  145.     O = vec4(col, 1.);
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement