GLSL을 이용한 FBM(Fractal Brownian Motion)구현
GLSL이란? GLSL(OpenGL Shading Language, OpenGL 셰이딩 언어)는 C 언어를 기초로 한, 상위 레벨 셰이딩 언어이다. 이 언어는 어셈블리 언어나 하드웨어에 의존한 언어를 사용하지 않고, 개발자가 그래픽스 파이프라인을 직접 제어할 수 있다.
FBM은 진폭은 줄이고, 주기는 증가된 서로 다른 Sin그래프또는 Noise 여러개를 겹쳐서 만드는 원리이다. 흔히 이런원리는 주파수개념에서 AM(진폭을 조절하는 방식), FM(주기를 조절하는 방식) 2개를 섞어놨다고 보면 이해하는데 도움이 될것이다.
float fbm(vec2 st){
float amp = .7;
float freq = 2.1;
float value;
#define OCTA 5
for(int i = 0; i < OCTA; i++){
value += amp * noise(st);
amp *= .5;
st = st * freq;
}
return value;
}
이 코드에선 fbm을 이용한 함수를 만들어 준 것이다. OCTA는 몇개의 noise를 겹칠것인지 정해준다. for문을 이용해서 value에 계속 진폭,주기가 서로 다른 noise를 더해준다.
vec2 q;
q.x = fbm(coord + fbm(coord) + sin(u_time * 1.5) * 1.5);
q.y = fbm(coord + fbm(coord) + sin(u_time * 1.5) * 1.8);
vec2 q값에는 좌표 coord를 fbm(coord)를 더해줌으로써 배경을 만들어 준다. 이때 sin(u_time)을 해줌으로서 물가처럼 일렁이는 효과를 추가시켜줬다. 이 움직이는 효과는 sin(u_time)에 곱해진 값으로 속력을 조절할 수 있다.










