쉐이더

최근 편집: 2022년 12월 26일 (월) 02:15

개요

쉐이더(영어: Shader)는 3D 컴퓨터 그래픽스에서 렌더링에 사용되는 프로그램이다. 실시간 렌더링의 경우 쉐이더 프로그램은 그래픽카드에서 동작한다.

한글 표기로 쉐이더와 셰이더의 두 가지가 사용되고 있다.

종류

Direct3DOpenGL, Metal, Vulkan 등의 렌더링 라이브러리들에서는 다음과 같은 쉐이더를 프로그래밍하여 사용할 수 있다.

정점 쉐이더

정점 쉐이더(영어: Vertex Shader)는 폴리곤의 변환 및 빛 처리 등을 계산하는 데 사용되는 쉐이더이다. 렌더링에 필수적으로 필요하며, 정점 쉐이더의 결과물은 헐 쉐이더에 넘어간다.

픽셀 쉐이더

픽셀 쉐이더(영어: Pixel Shader)는 파편 쉐이더(영어: Fragment Shader)라고도 불리며, 픽셀의 색상을 계산하는 데 사용되는 쉐이더이다. 렌더링에 필수적으로 필요하며, 픽셀 쉐이더의 결과물은 렌더 타겟 표면에 기록된다.

초창기 쉐이더를 지원하는 최초의 그래픽카드는 픽셀 쉐이더만을 지원했다.

기하 쉐이더

기하 쉐이더(영어: Geometry Shader)는 폴리곤의 정점 수를 늘리거나 줄이고 폴리곤의 형태를 변경하는 데 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 기하 쉐이더의 결과물은 그래픽카드의 래스터라이저에 넘어간다.

헐 쉐이더

헐 쉐이더(영어: Hull Shader)는 테셀레이션에 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 다만 사용을 한다면 도메인 쉐이더와 같이 사용한다. 정점을 어떻게, 얼마나 분할할 지 결정하는 데이터를 계산하는 데 사용된다. 헐 쉐이더의 결과물은 그래픽카드의 테셀레이터에 넘어가고, 이후 도메인 쉐이더로 넘어간다.

도메인 쉐이더

도메인 쉐이더(영어: Domain Shader)는 테셀레이션에 사용되는 쉐이더이다. 선택적으로 사용할 수 있으며 다만 사용을 한다면 헐 쉐이더와 같이 사용한다. 헐 쉐이더와 테셀레이터를 통해 분할된 정점의 볼륨감을 정하는 데 사용된다. 도메인 쉐이더의 결과물은 그래픽카드의 래스터라이저에 넘어간다.

컴퓨트 쉐이더

컴퓨트 쉐이더(영어: Compute Shader)는 렌더링 파이프라인에 해당되지 않는 독립적인 파이프라인을 가지는 쉐이더로, GPGPU 연산에 사용되는 쉐이더이다.

쉐이더 언어의 종류

실시간 렌더링 쉐이딩 언어

그 외 쉐이딩 언어

쉐이더를 사용하는 잘 알려진 렌더링 기법

  • 카툰렌더링
  • 물리 기반 렌더링
  • HDR(High Dynamic Range) 렌더링
  • 지연 라이팅
  • 블러 및 블룸 렌더링
  • HBAO