본문 바로가기
개발

[쉐이더 프로그래밍] OpenGL GLSL 내장 함수

by su00224 2026. 5. 5.

GLSL 내장 함수

 

sin(x)

사인함수

값은 -1 ~ 1사이를 반복한다

 

ex)

sin(t * 2 * 3.141592)
sin(a_RV * 2.0 * c_PI)
sin(periodX)
sin(d * 4 * c_PI * count - t * 10)

 

활용

 

  • 좌우 흔들림
  • 파동
  • 원형 배치
  • 깃발/불꽃 흔들림
  • 선 반복 패턴

 

mod(x,y) 

mod (시간, 주기)

나머지 연산

주로 시간을 반복시키는 데에 자주 사용한다

 

float t = mod(u_Time * 10, 1.0);
float t = mod(newTime, 1.0);
float t = mod(newTime, Lifetime);
float seg = floor(mod(t, 5.0));

 

 

  • 시간이 계속 증가해도 0~1 범위로 반복
  • 파티클 재생성
  • 주기적인 움직임
  • 반복 애니메이션

 

 

fract(x)

소숫점 부분만 가져온다.

fract(3.75) = 0.75

 

 

  • 0~1 반복 시간 만들기
  • 랜덤 함수 만들기
  • UV 반복
  • 텍스처를 여러 칸으로 나누기

 

 

floor(x)

소숫점 버리고 내림

floor(2.9) = 2.0
floor(2.1) = 2.0

 

 

  • 현재 몇 번째 구간인지 구하기
  • 텍스처 atlas에서 몇 번째 칸인지 계산

 

abs(x)

절대값

abs(-0.5) = 0.5
abs(0.5) = 0.5

 

 

  • 음수 제거
  • 선 패턴 만들기
  • 좌우/상하 대칭 만들기
  • sin 파형을 모두 양수로 바꾸기

 

pow(x,y)

거듭 제곱

pow(x, 2.0) = x²
pow(x, 16.0) = x^16

 

 

  • 선을 얇게 만들기
  • 파동의 밝은 부분만 강조
  • 흐릿한 값을 날카롭게 만들기

 

clamp(x, min, max)

값을 특정 범위 안으로 고정한다.

clamp(x, 0.0, 1.0) -> x가 0보다 작으면, 0, 1보다 크면 1

 

 

  • 밝기 범위 제한
  • 색상 값이 0~1 밖으로 나가지 않게 하기
  • 빗방울 파동의 영향 범위 자르기

 

 

distance(a,b)

두 점 사이의 거리

distance(v_Texture, vec2(0.5, 0.5))

현재 픽셀이 화면 중앙에서 얼마나 떨어져 있는지 구하는 식으로 사용 가

 

  • 원 만들기
  • 동심원 만들기
  • 빗방울 파동 만들기

 

 

max(a,b)

둘 중 큰 값을 선택

 

FragColor = vec4(max(valueX, valueY));

 

세로줄과 가로줄을 합쳐 격자 만들기

mix(a, b, t)

선형보간

mix(a, b, 0.0) = a
mix(a, b, 1.0) = b
mix(a, b, 0.5) = a와 b의 중간

 

 

  • 두 위치 사이 이동
  • 깃발/불꽃 폭 조절
  • 색상 그라데이션

 

 

radians(x)

도를 라디안으로 반환한다

radians(90.0)

 

  • 별 모양 꼭짓점 각도 계산

 

 

texture(sampler, uv)

텍스처에서 특정 UV 좌표의 색을 가져온다.

texture(u_RGBTex, vec2(v_Texture.x, v_Texture.y))
texture(u_RGBTex, tex)

 

 

  • 이미지 출력
  • UV 반전
  • 텍스처 반복
  • 텍스처 분할
  • 블러

 

 

int(x)

float를 int로 변환한다

int i0 = int(seg);
int i1 = int(mod(seg + 1.0, 5.0));

 

discard

함수는 아니지만, fragment shader에서 현재 픽셀을 그리지 않고 버린다.

 

 

  • 깃발 바깥 영역 제거
  • 불꽃 바깥 영역 제거