- 셰이더는 그래픽스 파이프라인의 다양한 단계에서 실행되는 GPU 프로그램이며, 조명, 텍스처링, 후처리, 연산 등 그래픽스 전반에 걸쳐 광범위하게 사용됨.
- 특히 현대 그래픽스에서는 PBR 기반 셰이딩, Ray Tracing, Compute Shader 등 다양한 기술과 결합되어 더욱 강력한 기능을 제공함.
- 셰이더는 버텍스, 프래그먼트 데이터를 포함한 다양한 GPU 기반 연산을 수행하는 프로그램
대표적인 Shader 종류
(1) 버텍스 셰이더(Vertex Shader)
- 입력: 3D 모델의 정점(Vertex) 데이터 (위치, 노멀, UV 좌표 등)
- 출력: 변환된 정점 데이터 (클립 공간 좌표, 조명 계산 결과 등)
- 역할:
- 모델 공간 → 클립 공간으로 좌표 변환 (월드 변환, 뷰 변환, 투영 변환)
- 정점의 색상, 노멀, 텍스처 좌표 등을 계산
- 조명(Lighting) 계산 (기본적인 퐁(Phong) 모델 적용 가능)
(2) 테셀레이션 셰이더(Tessellation Shader, Optional)
- 입력: 버텍스 셰이더에서 출력된 정점 데이터
- 출력: 세분화된 정점 데이터
- 역할:
- 메시를 세밀하게 세분화(Tessellation)하여 디테일한 모델링을 가능하게 함
- 동적 LOD(Level of Detail) 적용 가능 (가까운 물체는 세분화, 먼 물체는 단순화)
(3) 지오메트리 셰이더(Geometry Shader, Optional)
- 입력: 버텍스 셰이더에서 출력된 정점 데이터
- 출력: 추가적으로 생성된 정점 또는 폐기된 정점 데이터
- 역할:
- 한 개의 정점 또는 프리미티브(Primitive) 정보를 바탕으로 새로운 정점을 생성
- 예: 실시간으로 추가적인 기하 구조 생성 (폭발, 외곽선 그리기 등)
(4) 프래그먼트 셰이더(Fragment Shader, Pixel Shader)
- 입력: 래스터화된 픽셀(Fragment) 정보 (좌표, 색상, 텍스처 좌표 등)
- 출력: 최종 픽셀 색상