Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. -- GLSL.Vert --
  2. #version 120
  3. attribute vec2 in_Position;
  4. void main(void)
  5. {
  6. gl_Position = vec4(in_Position, 0.0, 1.0);
  7. }
  8. -- GLSL.Frag --
  9. #version 120
  10. uniform float u_Time;
  11. vec3 mod289(vec3 x)
  12. {
  13. return x - floor(x * (1.0 / 289.0)) * 289.0;
  14. }
  15. vec3 perm(vec3 x)
  16. {
  17. return mod289(((x * 34.0) + 1.0) * x);
  18. }
  19. vec4 noise3d(vec3 p1, vec3 p2, vec3 p3, vec3 p4)
  20. {
  21. p1 = perm(perm(perm(p1) + p1.zxy) + p1.yzx);
  22. p2 = perm(perm(perm(p2) + p2.zxy) + p2.yzx);
  23. p3 = perm(perm(perm(p3) + p3.zxy) + p3.yzx);
  24. p4 = perm(perm(perm(p4) + p4.zxy) + p4.yzx);
  25. return fract(vec4(p1.x, p2.x, p3.x, p4.x) / 41.0);
  26. }
  27. float perlin3d(vec3 p)
  28. {
  29. mat3 r = mat3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  30. p = r * p;
  31. vec3 a = floor(p);
  32. vec3 d = p - a;
  33. d = d * d * (3.0 - 2.0 * d);
  34. vec4 o1 = noise3d(a,
  35. a + vec3(0.0, 1.0, 0.0),
  36. a + vec3(0.0, 0.0, 1.0),
  37. a + vec3(0.0, 1.0, 1.0));
  38. vec4 o2 = noise3d(a + vec3(1.0, 0.0, 0.0),
  39. a + vec3(1.0, 1.0, 0.0),
  40. a + vec3(1.0, 0.0, 1.0),
  41. a + vec3(1.0, 1.0, 1.0));
  42. vec4 o3 = o2 * d.x + o1 * (1.0 - d.x);
  43. vec2 o4 = o3.yw * d.y + o3.xz * (1.0 - d.y);
  44. return o4.y * d.z + o4.x * (1.0 - d.z);
  45. }
  46. void main(void)
  47. {
  48. vec2 xy = gl_FragCoord.xy * 2.0;
  49. xy.y -= u_Time * 400.0;
  50. float z = u_Time * 2.0;
  51. float p = perlin3d(vec3(xy / 80.0, z + 1.5)) / 2.0
  52. + perlin3d(vec3(xy / 40.0, z + 0.3)) / 4.0
  53. + perlin3d(vec3(xy / 20.0, z + 3.3)) / 8.0
  54. + perlin3d(vec3(xy / 10.0, z + 2.0)) / 16.0;
  55. /* Scroll by adding [-.5,.5] */
  56. p -= gl_FragCoord.y / 720.0 - 0.5;
  57. p = max(p, 0.0);
  58. p = min(p, 1.0);
  59. float q = p * p * (3.0 - 2.0 * p);
  60. float r = q * q * (3.0 - 2.0 * q);
  61. gl_FragColor = vec4(min(q * 2.0, 1.0),
  62. max(r * 1.5 - 0.5, 0.0),
  63. max(q * 8.0 - 7.3, 0.0),
  64. 1.0);
  65. }
  66. -- HLSL.Vert --
  67. void main(float2 in_Position : POSITION,
  68. uniform float2 u_WinSize,
  69. out float4 out_Position : POSITION,
  70. out float2 pass_Position : TEXCOORD0)
  71. {
  72. //pass_Position = in_Position * u_WinSize;
  73. pass_Position = in_Position * float2(1280.0, 720.0);
  74. out_Position = float4(in_Position, 0.0, 1.0);
  75. }
  76. -- HLSL.Frag --
  77. float3 mod289(float3 x)
  78. {
  79. return x - floor(x * (1.0 / 289.0)) * 289.0;
  80. }
  81. float3 perm(float3 x)
  82. {
  83. return mod289(((x * 34.0) + 1.0) * x);
  84. }
  85. float4 noise3d(float3 p1, float3 p2, float3 p3, float3 p4)
  86. {
  87. p1 = perm(perm(perm(p1) + p1.zxy) + p1.yzx);
  88. p2 = perm(perm(perm(p2) + p2.zxy) + p2.yzx);
  89. p3 = perm(perm(perm(p3) + p3.zxy) + p3.yzx);
  90. p4 = perm(perm(perm(p4) + p4.zxy) + p4.yzx);
  91. return frac(float4(p1.x, p2.x, p3.x, p4.x) / 41.0);
  92. }
  93. float perlin3d(float3 p)
  94. {
  95. float3x3 r = float3x3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  96. p = mul(r, p);
  97. float3 a = floor(p);
  98. float3 d = p - a;
  99. d = d * d * (3.0 - 2.0 * d);
  100. float4 o1 = noise3d(a,
  101. a + float3(0.0, 1.0, 0.0),
  102. a + float3(0.0, 0.0, 1.0),
  103. a + float3(0.0, 1.0, 1.0));
  104. float4 o2 = noise3d(a + float3(1.0, 0.0, 0.0),
  105. a + float3(1.0, 1.0, 0.0),
  106. a + float3(1.0, 0.0, 1.0),
  107. a + float3(1.0, 1.0, 1.0));
  108. float4 o3 = o2 * d.x + o1 * (1.0 - d.x);
  109. float2 o4 = o3.yw * d.y + o3.xz * (1.0 - d.y);
  110. return o4.y * d.z + o4.x * (1.0 - d.z);
  111. }
  112. void main(in float2 pass_Position : TEXCOORD0,
  113. uniform float u_Time,
  114. out float4 out_FragColor : COLOR)
  115. {
  116. float2 xy = pass_Position;
  117. xy.y -= u_Time * 400.0;
  118. float z = u_Time * 2.0;
  119. float p = perlin3d(float3(xy / 80.0, z + 1.5)) / 2.0
  120. + perlin3d(float3(xy / 40.0, z + 0.3)) / 4.0
  121. + perlin3d(float3(xy / 20.0, z + 3.3)) / 8.0
  122. + perlin3d(float3(xy / 10.0, z + 2.0)) / 16.0;
  123. /* Scroll by adding [-.5,.5] */
  124. p -= pass_Position.y / 1440.0;
  125. p = max(p, 0.0);
  126. p = min(p, 1.0);
  127. float q = p * p * (3.0 - 2.0 * p);
  128. float r = q * q * (3.0 - 2.0 * q);
  129. out_FragColor = float4(min(q * 2.0, 1.0),
  130. max(r * 1.5 - 0.5, 0.0),
  131. max(q * 8.0 - 7.3, 0.0),
  132. 1.0);
  133. }