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에서 현재 픽셀을 그리지 않고 버린다.
- 깃발 바깥 영역 제거
- 불꽃 바깥 영역 제거
'개발' 카테고리의 다른 글
| [데이터베이스] SQL (1) | 2025.12.18 |
|---|---|
| [데이터베이스] 트렌젝션 (0) | 2025.12.17 |
| [데이터베이스] 관계대수 (Relational Algebra) (0) | 2025.12.17 |
| [데이터베이스] 정규화 (1) | 2025.12.16 |
| [데이터베이스] ER 모델에서 관계형 데이터 모델로의 변환 (1) | 2025.11.25 |