개요
쉐이더(영어: Shader)는 3D 컴퓨터 그래픽스에서 렌더링에 사용되는 프로그램이다. 실시간 렌더링의 경우 쉐이더 프로그램은 그래픽카드에서 동작한다.
한글 표기로 쉐이더와 셰이더의 두 가지가 사용되고 있다.
종류
Direct3D 및 OpenGL, Metal, Vulkan 등의 렌더링 라이브러리들에서는 다음과 같은 쉐이더를 프로그래밍하여 사용할 수 있다.
정점 쉐이더
정점 쉐이더(영어: Vertex Shader)는 폴리곤의 변환 및 빛 처리 등을 계산하는 데 사용되는 쉐이더이다. 렌더링에 필수적으로 필요하며, 정점 쉐이더의 결과물은 헐 쉐이더에 넘어간다.
픽셀 쉐이더
픽셀 쉐이더(영어: Pixel Shader)는 파편 쉐이더(영어: Fragment Shader)라고도 불리며, 픽셀의 색상을 계산하는 데 사용되는 쉐이더이다. 렌더링에 필수적으로 필요하며, 픽셀 쉐이더의 결과물은 렌더 타겟 표면에 기록된다.
초창기 쉐이더를 지원하는 최초의 그래픽카드는 픽셀 쉐이더만을 지원했다.
기하 쉐이더
기하 쉐이더(영어: Geometry Shader)는 폴리곤의 정점 수를 늘리거나 줄이고 폴리곤의 형태를 변경하는 데 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 기하 쉐이더의 결과물은 그래픽카드의 래스터라이저에 넘어간다.
헐 쉐이더
헐 쉐이더(영어: Hull Shader)는 테셀레이션에 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 다만 사용을 한다면 도메인 쉐이더와 같이 사용한다. 정점을 어떻게, 얼마나 분할할 지 결정하는 데이터를 계산하는 데 사용된다. 헐 쉐이더의 결과물은 그래픽카드의 테셀레이터에 넘어가고, 이후 도메인 쉐이더로 넘어간다.
도메인 쉐이더
도메인 쉐이더(영어: Domain Shader)는 테셀레이션에 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 다만 사용을 한다면 헐 쉐이더와 같이 사용한다. 헐 쉐이더와 테셀레이터를 통해 분할된 정점의 볼륨감을 정하는 데 사용된다. 도메인 쉐이더의 결과물은 그래픽카드의 래스터라이저에 넘어간다.
컴퓨트 쉐이더
컴퓨트 쉐이더(영어: Compute Shader)는 렌더링 파이프라인에 해당되지 않는 독립적인 파이프라인을 가지는 쉐이더로, GPGPU 연산에 사용되는 쉐이더이다.
쉐이더 언어의 종류
실시간 렌더링 쉐이딩 언어
- DirectX 어셈블리 언어
- GLSL
- SPIR-V 중간 언어
- 메탈 쉐이딩 언어
- NVIDIA CgFX 쉐이딩 언어
그 외 쉐이딩 언어
쉐이더를 사용하는 잘 알려진 렌더링 기법
- 카툰렌더링
- 물리 기반 렌더링
- HDR(High Dynamic Range) 렌더링
- 지연 라이팅
- 블러 및 블룸 렌더링
- HBAO