3 minutes
❎ Direct3D 11 Graphics Pipeline - 1. DirectX
Microsoft에서 개발한 멀티미디어 및 게임 개발용 API 집합. 주로 Windows와 Xbox 플랫폼에서 그래픽, 사운드, 입력, 네트워크 등 하드웨어 기능을 일관된 방식으로 제어할 수 있게 해주는 기술 스택
게임 업계에서 Windows가 사실상 표준 운영체제로 통하는 만큼, 게임 개발, 실시간 렌더링, 멀티미디어 애플리케이션에서 사실상 표준으로 사용됨
1. 목적과 역할
하드웨어 추상화: GPU, 사운드카드, 입력장치 등 제조사가 다른 하드웨어를 동일한 API로 제어할 수 있도록 함
고성능 접근: 운영체제의 일반 API보다 하드웨어에 더 가까운 저수준 접근 제공
개발자는 타겟 하드웨어를 신경 쓰기보다 DirectX API 규약에 맞추어 개발할 수 있음
상용 게임 엔진과의 관계
Unreal Engine: Windows에서 기본적으로 DirectX 11 / 12 사용
Unity Engine: Windows 개발 시 DirectX, Vulkan 선택 가능
자체 엔진 개발 시 Windows를 타겟으로 하는 경우 그래픽스 API는 거의 반드시 DirectX가 채용
2. 주요 컴포넌트
Direct3D(D3D)
3D 그래픽 렌더링 API로, GPU 파이프라인을 제어(버텍스 처리, 래스터라이징, 픽셀 셰이딩 등)
현대 게임 엔진의 핵심
Direct2D
- 2D 그래픽 렌더링 API. 역할 자체는 D3D와 동일
DirectCompute
GPU 범용 연산(GPGPU, 그래픽 연산 뿐 아니라 행렬 연산 등 보다 일반적인 연산에서 GPU를 활용하는 것)
그래픽 외 물리, AI, 후처리 계산 등에 활용
XAudio2
- 사운드 재생 및 믹싱
XInput
키보드, 마우스, 게임패드 입력 처리
Deprecated 수준은 아니지만 GameInput이 나온 뒤로는 하위 호환성을 제외하면 GameInput을 권장. 개발 자체는 중단됨
3. 버전별 변화
- 한 문장으로 요약하면 GPU 자동 관리 라이브러리에서 개발자의 명시적 제어 기능으로 발전해온 것
DirectX 9(2002) / DirectX 10(2006)
시대적으로 고정 파이프라인 중심
일부 셰이더 도입
GPU 상태 관리 대부분을 드라이버가 수행
- 덕분에 성능은 드라이버 품질에 크게 의존
API 사용이 단순
DX10부터 완전한 프로그래머블 파이프라인이 도입되었지만 Windows Vista 전용이라는 치명적 한계가 있었기 때문에 과도기적 버전으로 취급됨
DirextX 11(2009)
현대 그래픽 API의 기준점
완전한 프로그래머블 파이프라인 도입
Tessellation(도형을 빈틈없이 채우는 Hull / Domain Shader) 도입
Compute Shader 도입
드라이버의 안정적인 추상화
핵심 철학은 GPU 관리는 드라이버가 해주고, 개발자는 랜더링 로직과 셰이더 설계에 집중하는 것
- 덕분에 고성능과 생산점의 균형점으로 통함
DirectX 12(2015)
저수준 API 시대로 전환
명시적 리소스 관리, Command Queue / Command List
멀티스레드 렌더링을 고려하여 설계됨
드라이버로 인한 오버헤드 최소화
핵심 철학은 Vulkan과 유사하게, 모든 것을 개발자가 책임진다는 것
- 덕분에 개발 결과에 따라 큰 성능 최적화가 가능하나, 코드 복잡도가 급증하고 개발자의 실수에 프로그램이 매우 민감해짐(성능 저하 / 심할 경우 크래시 직결)
DX12는 성능을 얻는 대신 안정성을 포기한 API로, 처음 그래픽스를 공부하는 입장에서 랜더링 개념이나 엔진 구조를 이해하는 과정에 전혀 친절하지 않음
- Fence, Barrier, Heap, Descriptor, 커맨드 동기화 디버깅, GPU / CPU 타이밍 이슈 등…
4. Graphics Pipeline

D3D 11 API를 사용하여 모든 단계를 구성할 수 있으며, Hull Shader 스테이지부터 Stream Output 스테이지까지는 부가적인 스테이지라 생략해도 3D 그래픽 표현에는 문제 없음
셰이더 코어(Vertex Shader, Pixel Shader 등)를 특징으로 하는 단계는 HLSL을 사용하여 프로그래밍 할 수 있음
HLSL(High Level Shader Language, 고급 셰이더 언어): DX 그래픽 파이프라인에서 GPU가 실행하는 프로그램을 실행하기 위한 셰이딩 언어로, GPU에서 어떻게 계산해서 픽셀을 만들지를 결정. D3D의 셰이더 스테이지에서 사용됨
프로그래머블 셰이딩의 핵심!
다음 글: ❎ Direct3D 11 Graphics Pipeline - 2. Input-Assembler 스테이지