Advertisement
ATtiny13aPU

Perlin Noise glsl

Nov 30th, 2020
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.55 KB | None | 0 0
  1. #version 330 core
  2.  
  3. out vec4 FragColor;
  4.  
  5. uniform sampler2D TTC; // палитра цветов
  6. uniform sampler2D MAP;
  7. uniform vec2 sizeW;
  8. uniform vec2 sizeM;
  9. uniform vec2 XYcam;
  10. uniform float mst;
  11.  
  12. float length(vec2 Dot1, vec2 Dot2) {
  13. return(sqrt((Dot1.x - Dot2.x)*(Dot1.x - Dot2.x) + (Dot1.y - Dot2.y)*(Dot1.y - Dot2.y)));
  14. }
  15.  
  16. float RANDS(float seed) {
  17. seed = sin(sin(seed*143.371f+21.212)*157.512f*seed+224.242) * 10.2521;
  18. return(fract(seed));
  19. }
  20.  
  21. float RANDS(float seed1, float seed2) {
  22. seed1 = sin(cosh(fract(seed1*41.1251251)+4.4124)+cosh(fract(seed2*53.1251251)-4.4122));
  23. return(fract(seed1));
  24. }
  25.  
  26. float RANDS(float seed1, float seed2, float seed3) {
  27. seed1 = sin(RANDS(seed2 + seed3 * 15.5235661f) + seed1 * 12.734734541f)*12.7571f*(seed1 - 214.f + seed3 * 21.6236281f);
  28. return(fract(seed1));
  29. }
  30.  
  31. float ReLu(float x) {
  32. if(x>0.f)
  33. return(x);
  34. else
  35. return(0.f);
  36. }
  37.  
  38.  
  39. float prlRand(float seed, float x, float y) {
  40. float sum = 0.f;
  41. float asum = 0.f;
  42. for(float a = 0.9f; a < 5.f; a+=1.f){
  43. float s = a * a;
  44. float
  45. serum1 = 0.f;
  46. float serum2 = 0.f;
  47.  
  48. float seed1 = RANDS(seed,a);
  49.  
  50. float x1 = x * s - floor(x * s + 0.5f);
  51. float y1 = y * s - floor(y * s + 0.5f);
  52.  
  53. float fx0 = floor(x*s - 2.f + 0.5f) / s;
  54. float fx1 = floor(x*s - 1.f + 0.5f) / s;
  55. float fx2 = floor(x*s + 0.5f) / s;
  56. float fx3 = floor(x*s + 1.f + 0.5f) / s;
  57. float fx4 = floor(x*s + 2.f + 0.5f) / s;
  58.  
  59. float fy0 = floor(y*s - 2.f + 0.5f) / s;
  60. float fy1 = floor(y*s - 1.f + 0.5f) / s;
  61. float fy2 = floor(y*s + 0.5f) / s;
  62. float fy3 = floor(y*s + 1.f + 0.5f) / s;
  63. float fy4 = floor(y*s + 2.f + 0.5f) / s;
  64.  
  65. float csd1 = 2.0f;
  66. float csd2 = 2.0f;
  67. float csd3 = 2.0f;
  68. float csd4 = 2.0f;
  69.  
  70. float cfd1 = 1.0f;
  71. float cfd2 = 1.0f;
  72. float cfd3 = 1.0f;
  73. float cfd4 = 1.0f;
  74.  
  75. float sd = 2.f;
  76.  
  77. serum1 += RANDS(fx0, fy0, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  78. serum1 += RANDS(fx0, fy1, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  79. serum1 += RANDS(fx0, fy2, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  80. serum1 += RANDS(fx0, fy3, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  81. serum1 += RANDS(fx0, fy4, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  82.  
  83. serum1 += RANDS(fx4, fy0, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  84. serum1 += RANDS(fx4, fy1, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  85. serum1 += RANDS(fx4, fy2, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  86. serum1 += RANDS(fx4, fy3, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  87. serum1 += RANDS(fx4, fy4, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  88.  
  89. serum1 += RANDS(fx1, fy0, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx1 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  90. serum1 += RANDS(fx1, fy4, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx1 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  91. serum1 += RANDS(fx2, fy0, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx2 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  92. serum1 += RANDS(fx2, fy4, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx2 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  93. serum1 += RANDS(fx3, fy0, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx3 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  94. serum1 += RANDS(fx3, fy4, seed1) * cfd1 * pow(ReLu(csd1 - (length(vec2( fx3 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  95.  
  96. serum1 += RANDS(fx1, fy1, seed1) * cfd4 * pow(ReLu(csd4 - (length(vec2( fx1 * s, fy1 * s ), vec2( x * s, y * s )))), sd);//
  97. serum1 += RANDS(fx1, fy2, seed1) * cfd3 * pow(ReLu(csd3 - (length(vec2( fx1 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  98. serum1 += RANDS(fx1, fy3, seed1) * cfd4 * pow(ReLu(csd4 - (length(vec2( fx1 * s, fy3 * s ), vec2( x * s, y * s )))), sd);//
  99. serum1 += RANDS(fx2, fy1, seed1) * cfd3 * pow(ReLu(csd3 - (length(vec2( fx2 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  100. serum1 += RANDS(fx2, fy2, seed1) * cfd2 * pow(ReLu(csd2 - (length(vec2( fx2 * s, fy2 * s ), vec2( x * s, y * s )))), sd);///
  101. serum1 += RANDS(fx2, fy3, seed1) * cfd3 * pow(ReLu(csd3 - (length(vec2( fx2 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  102. serum1 += RANDS(fx3, fy1, seed1) * cfd4 * pow(ReLu(csd4 - (length(vec2( fx3 * s, fy1 * s ), vec2( x * s, y * s )))), sd);//
  103. serum1 += RANDS(fx3, fy2, seed1) * cfd3 * pow(ReLu(csd3 - (length(vec2( fx3 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  104. serum1 += RANDS(fx3, fy3, seed1) * cfd4 * pow(ReLu(csd4 - (length(vec2( fx3 * s, fy3 * s ), vec2( x * s, y * s )))), sd);//
  105.  
  106. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  107. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  108. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy2 * s ), vec2( x * s, y * s
  109. )))), sd);
  110. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  111. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx0 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  112.  
  113. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  114. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  115. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  116. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  117. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx4 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  118.  
  119. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx1 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  120. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx1 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  121. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx2 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  122. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx2 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  123. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx3 * s, fy0 * s ), vec2( x * s, y * s )))), sd);
  124. serum2 += cfd1 * pow(ReLu(csd1 - (length(vec2( fx3 * s, fy4 * s ), vec2( x * s, y * s )))), sd);
  125.  
  126. serum2 += cfd4 * pow(ReLu(csd4 - (length(vec2( fx1 * s, fy1 * s ), vec2( x * s, y * s )))), sd);//
  127. serum2 += cfd3 * pow(ReLu(csd3 - (length(vec2( fx1 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  128. serum2 += cfd4 * pow(ReLu(csd4 - (length(vec2( fx1 * s, fy3 * s ), vec2( x * s, y * s )))), sd);//
  129. serum2 += cfd3 * pow(ReLu(csd3 - (length(vec2( fx2 * s, fy1 * s ), vec2( x * s, y * s )))), sd);
  130. serum2 += cfd2 * pow(ReLu(csd2 - (length(vec2( fx2 * s, fy2 * s ), vec2( x * s, y * s )))), sd);///
  131. serum2 += cfd3 * pow(ReLu(csd3 - (length(vec2( fx2 * s, fy3 * s ), vec2( x * s, y * s )))), sd);
  132. serum2 += cfd4 * pow(ReLu(csd4 - (length(vec2( fx3 * s, fy1 * s ), vec2( x * s, y * s )))), sd);//
  133. serum2 += cfd3 * pow(ReLu(csd3 - (length(vec2( fx3 * s, fy2 * s ), vec2( x * s, y * s )))), sd);
  134. serum2 += cfd4 * pow(ReLu(csd4 - (length(vec2( fx3 * s, fy3 * s ), vec2( x * s, y * s )))), sd);//
  135.  
  136. if (serum2 != 0.f)
  137. sum+= serum1 / serum2 / s;
  138. asum+=1.f/s;
  139. }
  140. return (sum/asum);
  141. }
  142.  
  143.  
  144. void main() {
  145. vec2 Pos = vec2(gl_FragCoord.x / sizeW.x, gl_FragCoord.y / sizeW.x) * 2.f;
  146. Pos.y = Pos.y * mst - 0.5f * mst + XYcam.y;
  147. Pos.x = Pos.x * mst - 1.f * mst + XYcam.x;
  148.  
  149. float c = prlRand(236236,Pos.x,Pos.y);
  150. FragColor.rgb = vec3(c,c,c);
  151. FragColor.a = 1.f;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement