레슨 8 / 8·15분
GLSL 레퍼런스
GLSL 핵심 레퍼런스
GLSL에서 자주 사용하는 데이터 타입, 내장 함수, 수식어(qualifier), 전처리 지시자를 정리합니다. Fragment 셰이더와 Vertex 셰이더 양쪽에서 공통으로 사용되는 함수와 각 셰이더 전용 변수를 빠르게 참조할 수 있습니다.
glsl
// ══════════════════════════════════════════
// 데이터 타입
// ══════════════════════════════════════════
// 스칼라: float, int, bool
// 벡터: vec2, vec3, vec4 (float)
// ivec2, ivec3, ivec4 (int)
// bvec2, bvec3, bvec4 (bool)
// 행렬: mat2, mat3, mat4
// 텍스처: sampler2D, samplerCube
// ══════════════════════════════════════════
// 수식어 (Qualifier)
// ══════════════════════════════════════════
// attribute — 버텍스 셰이더 입력 (정점 데이터)
// uniform — 모든 셰이더 공통 입력 (CPU에서 전달)
// varying — 버텍스 → 프래그먼트 전달 (보간됨)
// const — 컴파일 타임 상수
// precision — 정밀도 (lowp, mediump, highp)
// ══════════════════════════════════════════
// 내장 변수
// ══════════════════════════════════════════
// [Vertex Shader]
// gl_Position — 출력: 정점 클립 좌표 (vec4, 필수)
// gl_PointSize — 출력: 점 크기 (float)
//
// [Fragment Shader]
// gl_FragCoord — 입력: 픽셀 윈도우 좌표 (vec4)
// gl_FragColor — 출력: 픽셀 최종 색상 (vec4)
// gl_FrontFacing — 입력: 앞면 여부 (bool)glsl
// ══════════════════════════════════════════
// 수학 함수
// ══════════════════════════════════════════
// abs(x) 절대값
// sign(x) 부호 (-1, 0, 1)
// floor(x) 내림
// ceil(x) 올림
// fract(x) 소수 부분 (x - floor(x))
// mod(x, y) 나머지 (x - y * floor(x/y))
// min(x, y) 최솟값
// max(x, y) 최댓값
// clamp(x, a, b) 범위 제한 (a <= x <= b)
// mix(a, b, t) 선형 보간 (a*(1-t) + b*t)
// step(edge, x) x >= edge ? 1.0 : 0.0
// smoothstep(a,b,x) a~b 구간 부드러운 전환
// ══════════════════════════════════════════
// 삼각/지수 함수
// ══════════════════════════════════════════
// sin(x), cos(x), tan(x)
// asin(x), acos(x), atan(y, x)
// pow(x, y) 거듭제곱
// exp(x), exp2(x) 지수 함수
// log(x), log2(x) 로그 함수
// sqrt(x) 제곱근
// inversesqrt(x) 역제곱근
// ══════════════════════════════════════════
// 벡터/기하 함수
// ══════════════════════════════════════════
// length(v) 벡터 길이
// distance(a, b) 두 점 거리
// dot(a, b) 내적
// cross(a, b) 외적 (vec3만)
// normalize(v) 단위 벡터
// reflect(I, N) 반사 벡터
// refract(I, N, r) 굴절 벡터
// ══════════════════════════════════════════
// 텍스처 함수
// ══════════════════════════════════════════
// texture2D(sampler, uv) 2D 텍스처 샘플링
// textureCube(sampler, dir) 큐브맵 샘플링- •float/vec/mat — 스칼라, 벡터(2~4D), 행렬(2x2~4x4)
- •attribute/uniform/varying — 셰이더 간 데이터 전달 수식어
- •mix, step, smoothstep — 색상/형태 블렌딩의 핵심 3 함수
- •fract, mod — 반복 패턴 생성의 핵심
- •length, distance, normalize — 기하 연산 함수
- •reflect, refract — 반사/굴절 연산
- •sin, cos, atan — 파동, 회전, 방사형 패턴에 필수
- •texture2D — 텍스처 샘플링의 핵심 함수
💡
GLSL ES 1.0(WebGL 1)에서는 for 루프의 조건에 상수만 사용 가능하고, 배열 인덱스도 상수여야 합니다. WebGL 2(GLSL ES 3.0)에서는 이 제한이 완화되며, texture() 함수(texture2D 대체), in/out 키워드(attribute/varying 대체) 등 개선된 문법을 사용할 수 있습니다.