• 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. 주요 컴포넌트

  1. Direct3D(D3D)

    • 3D 그래픽 렌더링 API로, GPU 파이프라인을 제어(버텍스 처리, 래스터라이징, 픽셀 셰이딩 등)

    • 현대 게임 엔진의 핵심

  2. Direct2D

    • 2D 그래픽 렌더링 API. 역할 자체는 D3D와 동일
  3. DirectCompute

    • GPU 범용 연산(GPGPU, 그래픽 연산 뿐 아니라 행렬 연산 등 보다 일반적인 연산에서 GPU를 활용하는 것)

    • 그래픽 외 물리, AI, 후처리 계산 등에 활용

  4. XAudio2

    • 사운드 재생 및 믹싱
  5. XInput

    • 키보드, 마우스, 게임패드 입력 처리

    • Deprecated 수준은 아니지만 GameInput이 나온 뒤로는 하위 호환성을 제외하면 GameInput을 권장. 개발 자체는 중단됨

3. 버전별 변화

  • 한 문장으로 요약하면 GPU 자동 관리 라이브러리에서 개발자의 명시적 제어 기능으로 발전해온 것
  1. DirectX 9(2002) / DirectX 10(2006)

    • 시대적으로 고정 파이프라인 중심

    • 일부 셰이더 도입

    • GPU 상태 관리 대부분을 드라이버가 수행

      • 덕분에 성능은 드라이버 품질에 크게 의존
    • API 사용이 단순

    • DX10부터 완전한 프로그래머블 파이프라인이 도입되었지만 Windows Vista 전용이라는 치명적 한계가 있었기 때문에 과도기적 버전으로 취급됨

  2. DirextX 11(2009)

    • 현대 그래픽 API의 기준점

    • 완전한 프로그래머블 파이프라인 도입

    • Tessellation(도형을 빈틈없이 채우는 Hull / Domain Shader) 도입

    • Compute Shader 도입

    • 드라이버의 안정적인 추상화

    • 핵심 철학은 GPU 관리는 드라이버가 해주고, 개발자는 랜더링 로직과 셰이더 설계에 집중하는 것

      • 덕분에 고성능과 생산점의 균형점으로 통함
  3. DirectX 12(2015)

    • 저수준 API 시대로 전환

    • 명시적 리소스 관리, Command Queue / Command List

    • 멀티스레드 렌더링을 고려하여 설계됨

    • 드라이버로 인한 오버헤드 최소화

    • 핵심 철학은 Vulkan과 유사하게, 모든 것을 개발자가 책임진다는 것

      • 덕분에 개발 결과에 따라 큰 성능 최적화가 가능하나, 코드 복잡도가 급증하고 개발자의 실수에 프로그램이 매우 민감해짐(성능 저하 / 심할 경우 크래시 직결)
  • DX12는 성능을 얻는 대신 안정성을 포기한 API로, 처음 그래픽스를 공부하는 입장에서 랜더링 개념이나 엔진 구조를 이해하는 과정에 전혀 친절하지 않음

    • Fence, Barrier, Heap, Descriptor, 커맨드 동기화 디버깅, GPU / CPU 타이밍 이슈 등…

4. Graphics Pipeline

0.jpg

  • 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 스테이지