Shader: Basic Warped 2D Noise



Añadir a ColorRect de un CanvasItem.

CÓDIGO:
shader_type canvas_item;
float smoothNoise(vec2 p) {
 vec2 f = fract(p);
  p-=f; 
  f *= f*(3.0 - f - f); 
  vec4 z = fract(sin(vec4(0, 1, 27, 28) + p.x + p.y *27.0) * 10000.0);
  mat2 w = mat2(z.xy, z.zw);
  vec2 b = w*vec2(1.0-f.y,f.y);
  return dot(b, vec2(1.0-f.x, f.x));
}

float fractalNoise(vec2 p) {
 return smoothNoise(p)*0.2333 + smoothNoise(p*2.0)*0.2667 + smoothNoise(p*4.0)*0.1333 + smoothNoise(p*8.0)*0.1667;
}

float warpedNoise(vec2 p, float time) { 
 vec2 m = vec2(time, -time)*0.04;//vec2(sin(iTime*0.5), cos(iTime*0.5));
 float x = fractalNoise(p + m);
 float y = fractalNoise(p + m.yx + x);
 float z = fractalNoise(p - m - x + y);
 return fractalNoise(p + vec2(x, y) + vec2(y, z) + vec2(z, x) + length(vec3(x, y, z))*0.05); 
}

void fragment() {
 vec2 uv = FRAGCOORD.xy / (1.0 / SCREEN_PIXEL_SIZE).y;
 
 float n = warpedNoise(uv * 6.0, TIME);
 float n2 = warpedNoise(uv * 6.0 + 0.02, TIME);
 
 float bump = max(n2 - n, 0.0)/0.02*0.7071;
 float bump2 = max(n - n2, 0.0)/0.02*0.7071;
 
 bump = bump*bump*0.5 + pow(bump, 4.0)*0.5;
 bump2 = bump2*bump2*0.5 + pow(bump2, 4.0)*0.5;
 
 vec3 col = n*n*(vec3(0.1, 0.2, 0.4)*vec3(bump*0.1, (bump + bump2)*0.1, bump2*0.1)*0.1 + 0.1) + vec3(0.1,0.13,0.22);
 col = col * 0.6;
 
 COLOR = vec4(sqrt(max(col, vec3(0.0))), 1.0);
}

0 comentarios:

Publicar un comentario