Advertisement
cybereality

Godot Portal Shader

Dec 22nd, 2019
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. shader_type canvas_item;
  2.  
  3. float noise(vec2 x, sampler2D tex) {
  4. return texture(tex, x * 0.01).x;
  5. }
  6.  
  7. float fbm(vec2 p, float time, sampler2D tex)
  8. {
  9. vec4 tt=fract(vec4(time*0.15)+vec4(0.0,0.25,0.5,0.75));
  10. vec2 p1=p-normalize(p)*tt.x;
  11. vec2 p2=vec2(1.0)+p-normalize(p)*tt.y;
  12. vec2 p3=vec2(2.0)+p-normalize(p)*tt.z;
  13. vec2 p4=vec2(3.0)+p-normalize(p)*tt.w;
  14. vec4 tr=vec4(1.0)-abs(tt-vec4(0.5))*2.0;//*vec4(0.0,1.0,0.0,1.0);
  15. float z=2.0;
  16. vec4 rz = vec4(0.0);
  17. //for (float i= 1.0;i < 4.0;i++)
  18. //{
  19. rz+= abs((vec4(noise(p1, tex),noise(p2, tex),noise(p3, tex),noise(p4, tex))-vec4(0.5))*2.0)/z;
  20. z = z*2.0;
  21. p1 = p1*2.0;
  22. p2 = p2*2.0;
  23. p3 = p3*2.0;
  24. p4 = p4*2.0;
  25.  
  26.  
  27. //}
  28. return dot(rz,tr)*0.25;
  29. }
  30. float dualfbm(vec2 p, float time, sampler2D tex)
  31. {
  32. //get two rotated fbm calls and displace the domain
  33. vec2 p2 = p*0.7;
  34. vec2 basis = vec2(fbm(p2-vec2(time*0.15*1.6, time*0.15*1.6), time, tex),fbm(p2+vec2(time*0.15*1.7, time*0.15*1.7), time, tex));
  35. basis = (basis-vec2(0.5, 0.5))*0.2;
  36. p += basis;
  37.  
  38. //coloring
  39. return fbm(p, time, tex); //*makem2(time*2.0));
  40. }
  41.  
  42. float circ(vec2 p)
  43. {
  44. float r = length(p);
  45. r = log(sqrt(r));
  46. return abs(mod(r*2.0,6.2831)-4.54)*3.0+0.5;
  47.  
  48. }
  49.  
  50. void fragment() {
  51. //setup system
  52. vec2 p = UV;
  53. p -= vec2(1024.0, 600.0) * TEXTURE_PIXEL_SIZE * 0.5;
  54. p*=2.0;
  55.  
  56. float rz = dualfbm(p, TIME, TEXTURE);
  57.  
  58. //rings
  59. //p /= 7.0; //exp(mod(time*10.,3.14159));
  60. //rz *= pow(abs((0.0-circ(p))),.99);
  61.  
  62. rz *= abs((-circ(vec2(p.x / 4.2, p.y / 7.0))));
  63. rz *= abs((-circ(vec2(p.x / 4.2, p.y / 7.0))));
  64. rz *= abs((-circ(vec2(p.x / 4.2, p.y / 7.0))));
  65.  
  66. //final color
  67. vec3 col = vec3(.1,0.1,0.4)/rz;
  68. col=pow(abs(col),vec3(0.99));
  69. COLOR = vec4(col,1.0);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement