픽셀 셰이더(pixel shader, 간단히 PS)는 그래픽 처리 장치(GPU)가 수행하는 셰이더 프로그램 중 하나로, 렌더링될 각각의 픽셀의 색을 계산하는 역할을 담당한다. 컴퓨터 그래픽스 분야에서 널리 알려진 개념이며, OpenGL 계열에서는 프래그먼트 셰이더(fragment shader)라고도 불린다.
픽셀 셰이더는 그래픽 파이프라인에서 정점 셰이더(vertex shader)와 래스터화(rasterization) 과정을 거친 뒤 실행된다. 래스터화 과정에서 삼각형 등의 기본 도형 내부로 판정된 각 픽셀(또는 프래그먼트)에 대해 호출되며, 보간된 색상, 텍스처 좌표(UV) 등의 입력을 받아 최종 색상을 결정한다. 이 때문에 픽셀 셰이더는 최종적으로 화면의 픽셀이 어떻게 보일지를 결정하는 단계로 이해된다.
픽셀 셰이더가 수행할 수 있는 작업의 범위는 넓다. 단순히 항상 같은 색을 출력하는 간단한 연산에서부터, 텍스처로부터 색을 읽어오는 작업, 조명(라이트) 적용, 범프 매핑, 그림자, 반사광, 투명 처리 등 복잡한 시각 효과까지 구현할 수 있다. 또한 픽셀 셰이더는 픽셀의 색뿐만 아니라 깊이 값(Z 버퍼에 사용됨)이나 추가적인 색(다른 렌더 목표물에 사용됨)을 출력할 수도 있다.
픽셀 셰이더는 각각의 픽셀이 렌더링될 때 개별적으로 수행되므로, 다른 픽셀들과 직접적인 연관을 가지지 않는다. 즉, 픽셀 셰이더는 오직 하나의 픽셀만을 연산하며, 주변 픽셀이나 그리는 도형 전체에 대한 정보를 직접 알 수 없다. 이러한 특성 때문에 픽셀 셰이더 단독으로는 매우 복잡한 전역적 효과를 만들어 내기 어렵다.
픽셀 셰이더 프로그램은 주로 어셈블리어, Cg, GLSL(OpenGL Shading Language), HLSL(고급 셰이더 언어) 등의 언어로 작성된다. Direct3D 환경에서는 픽셀 셰이더 버전(PS 1.0부터 PS 4.1 등)이 그래픽 하드웨어의 기능 수준과 연동되어 정의되며, 각 버전은 특정 DirectX 버전 및 그래픽 카드 세대와 호환된다. 예를 들어 PS 1.0/1.1은 DirectX 8.0과 지포스 3 시리즈에 대응하고, PS 3.0은 DirectX 9.0c와 지포스 6·7 시리즈, PS 4.0은 DirectX 10과 지포스 8·9 시리즈 등에 대응한다. 그래픽 칩은 대개 하위 호환성을 가지므로, 상위 버전을 지원하면 하위 버전도 함께 지원한다.
픽셀 셰이더는 게임, 시각 효과, 실시간 3D 렌더링 등 다양한 분야에서 널리 사용되는 핵심적인 그래픽 프로그래밍 개념이다.