본문 바로가기
College Study/GLSL

[GLSL] Gradient Noise

by 2den 2022. 1. 6.
728x90

 

 
source : https://eullee.tumblr.com/search/Shader습작+%3CTerrain+FBM%3E
#ifdef GL_ES
precision mediump float;
#endif

uniform vec2 u_resolution;

// vec2 vec2 random
vec2 random(vec2 st){
    float x = fract(sin(dot(st*25., vec2(17.34,50.13)))*84239.523);
    float y = fract(cos(dot(st*25., vec2(28.13,39.49)))*94820.475);
    
    return vec2(x, y) *2. -1.; // range -1 ~ 1
}

float noise(vec2 st){
    vec2 i = floor(st);
    vec2 f = fract(st);
    
    vec2 v1 = i;
    vec2 v2 = i + vec2(1., 0.);
    vec2 v3 = i + vec2(0., 1.);
    vec2 v4 = i + vec2(1., 1.);
    
    vec2 r1 = random(v1); // vector (random arrow) 
    vec2 r2 = random(v2);
    vec2 r3 = random(v3);
    vec2 r4 = random(v4);
    
    // f = smoothstep(0., 1., f);
    f = f*f*f*(f*(f*6.-15.)+10.);
    
    float d1 = dot(r1, st-v1); // vectors of four point and from those points to coord
    float d2 = dot(r2, st-v2);
    float d3 = dot(r3, st-v3);
    float d4 = dot(r4, st-v4);
    
    float bot = mix(d1, d2, f.x);
    float top = mix(d3, d4, f.x);
    float ret = mix(bot, top, f.y);
    
    return (ret + 1.) * .5; // range 0 ~ 1
}

void main(){
	vec2 coord = gl_FragCoord.xy/u_resolution;
    coord.x *= u_resolution.x/u_resolution.y;
    coord *= 15.;
	
    vec3 col = vec3(noise(coord));

    gl_FragColor = vec4(col, 1.0); 
}

728x90

'College Study > GLSL' 카테고리의 다른 글

[GLSL] Fractal Brownian Motion  (0) 2022.01.06
[GLSL] Voronoi  (0) 2022.01.06
[GLSL] Value Noise  (0) 2022.01.06
[GLSL] Float-float Noise  (0) 2022.01.06
[GLSL] Maze and Glitch  (0) 2022.01.06

댓글