DirectX 12
1. 개요
1. 개요
DirectX는 마이크로소프트가 개발한 애플리케이션 프로그래밍 인터페이스(API) 모음이다. 주로 마이크로소프트 윈도우와 엑스박스 시리즈 콘솔 플랫폼에서 멀티미디어, 특히 비디오 게임 및 고성능 그래픽 애플리케이션 처리를 위해 사용된다. 1995년 9월 30일 최초로 발표된 이후, 하드웨어 가속을 통한 효율적인 그래픽 및 사운드 처리를 제공하는 표준으로 자리 잡았다.
이 API 제품군은 Direct3D, Direct2D, DirectWrite, DirectML 등 다양한 하위 구성 요소로 이루어져 있으며, 그중에서도 3차원 그래픽 렌더링을 담당하는 Direct3D가 가장 널리 알려져 있다. 최신 안정화 버전은 2021년 10월 5일 배포된 DirectX 12 Ultimate API이다. DirectX는 게임 개발뿐만 아니라 CAD/CAM, 과학 시각화 등 다양한 실시간 렌더링 분야에서도 핵심 기술로 활용되고 있다.
2. 특징
2. 특징
2.1. 저수준 API
2.1. 저수준 API
DirectX 12의 핵심 특징 중 하나는 이전 버전보다 더 낮은 수준의 하드웨어 제어를 제공하는 저수준 API(Application Programming Interface) 설계를 채택한 것이다. 이는 개발자에게 그래픽 처리 장치(GPU)와 같은 시스템 자원에 대한 더 직접적이고 세밀한 제어권을 부여한다.
기존의 고수준 API가 드라이버가 많은 작업을 추상화하고 관리했던 것과 달리, DirectX 12의 저수준 접근 방식은 명령 목록 생성, 자원 할당, 메모리 관리 등의 책임을 대폭 개발자에게 이전한다. 이를 통해 드라이버 오버헤드가 크게 줄어들고, 멀티코어 CPU를 효율적으로 활용한 병렬 처리가 가능해진다. 결과적으로 하드웨어의 잠재 성능을 더욱 극대화할 수 있다.
이러한 저수준 설계는 개발 복잡성을 증가시키는 대가를 치르지만, 마이크로소프트의 목표는 엑스박스 시리즈 콘솔에서 볼 수 있는 수준의 효율성을 PC 플랫폼에서도 실현하는 것이었다. 이는 애플의 메탈이나 크로노스 그룹의 벌칸과 같은 경쟁 저수준 그래픽 API의 등장과도 맞물린 추세이다.
따라서 DirectX 12는 숙련된 개발자에게 더 높은 성능과 효율성이라는 보상을 제공하는 대신, 더 많은 책임과 낮은 수준의 프로그래밍을 요구하는 패러다임의 전환을 의미한다.
2.2. 멀티스레딩 지원
2.2. 멀티스레딩 지원
DirectX 12의 멀티스레딩 지원은 이전 버전과 구별되는 핵심적인 특징이다. DirectX 11 및 그 이전 버전에서는 드라이버가 대부분의 명령 목록 생성 작업을 단일 스레드에서 처리하도록 설계되어, 다중 코어 CPU를 가진 시스템에서도 병목 현상이 발생할 수 있었다. 반면 DirectX 12는 개발자에게 더 낮은 수준의 하드웨어 제어권을 부여하여, 애플리케이션이 여러 CPU 코어를 활용해 명령 목록을 병렬로 생성하고 제출할 수 있게 한다.
이러한 저수준 접근 방식을 통해 그래픽 파이프라인의 다양한 단계(예: 지오메트리 처리, 셰이더 컴파일, 리소스 업로드) 작업을 여러 스레드에 분배할 수 있다. 결과적으로 CPU와 GPU 간의 작업 부하 분배가 효율적으로 이루어져, 드라이버 오버헤드가 줄어들고 전체적인 렌더링 성능이 향상된다. 특히 복잡한 장면을 렌더링하거나 드로우 콜이 많은 현대 비디오 게임에서 그 효과가 두드러진다.
멀티스레딩 지원은 엑스박스 시리즈 콘솔을 포함한 다양한 플랫폼에서 DirectX 12의 효율성을 높이는 데 기여한다. 개발자는 명령 목록, 명령 큐, 파이프라인 상태 객체와 같은 새로운 개념을 활용해 세밀한 병렬 처리를 구현할 수 있다. 이는 궁극적으로 더 높은 프레임률과 더 풍부한 시각적 경험으로 이어진다.
2.3. 리소스 바인딩
2.3. 리소스 바인딩
리소스 바인딩은 DirectX 12의 핵심 특징 중 하나로, 그래픽 처리 장치(GPU)가 사용할 텍스처, 상수 버퍼, 샘플러 등의 데이터(리소스)를 셰이더 파이프라인에 효율적으로 연결하고 관리하는 방식을 근본적으로 개선했다. 이전 DirectX 11에서는 리소스를 특정 슬롯에 미리 바인딩하고, 셰이더가 실행되는 동안 이 바인딩을 변경하는 데 상당한 오버헤드가 발생할 수 있었다.
DirectX 12는 디스크립터 테이블과 루트 서명이라는 새로운 추상화 계층을 도입하여 이 문제를 해결한다. 개발자는 다양한 리소스를 가리키는 디스크립터(핸들)의 집합인 디스크립터 테이블을 미리 준비하고, 루트 서명을 통해 셰이더가 필요로 하는 리소스의 레이아웃을 정의한다. 그래픽 파이프라인 상태를 설정할 때 또는 명령 목록을 기록하는 중에 이러한 디스크립터 테이블을 루트 서명의 특정 슬롯에 매우 빠르게 바인딩할 수 있다.
이러한 접근 방식의 주요 이점은 CPU 오버헤드의 현저한 감소와 유연성의 증가이다. 게임 엔진은 프레임마다 변경되는 리소스(예: 다른 물체의 텍스처)에 대해 디스크립터 테이블을 동적으로 교체할 수 있으며, 상수 버퍼와 같은 고빈도 데이터는 루트 상수를 통해 직접 셰이더에 전달하여 성능을 더욱 극대화할 수 있다. 결과적으로 개발자는 하드웨어 자원을 더 세밀하게 제어하고, 복잡한 장면에서도 드로우 콜(Draw Call)을 효율적으로 발행할 수 있게 되었다.
2.4. 파이프라인 상태 객체
2.4. 파이프라인 상태 객체
파이프라인 상태 객체(PSO)는 Direct3D 12의 핵심 설계 요소 중 하나로, 그래픽스 파이프라인의 다양한 설정 상태를 하나의 불변 객체로 묶어 관리한다. 이전 DirectX 버전에서는 셰이더, 렌더링 상태, 블렌딩 상태 등을 런타임에 개별적으로 설정하고 변경할 수 있었으나, Direct3D 12에서는 이러한 상태들의 조합을 미리 PSO로 생성하여 GPU에 제출한다.
이 방식은 드라이버 오버헤드를 크게 줄이는 데 기여한다. 애플리케이션이 모든 가능한 상태 조합을 사전에 정의하고 PSO를 생성하면, 런타임에 드라이버가 상태를 검증하고 컴파일하는 작업이 불필요해지기 때문이다. 이는 특히 상태 변경이 빈번한 복잡한 장면에서 CPU 부하를 경감시키고 성능을 일관되게 유지하는 데 도움이 된다.
PSO는 주로 버텍스 셰이더, 픽셀 셰이더, 기하 셰이더, 헐 셰이더, 도메인 셰이더 등의 셰이더 단계와, 입력 조립기 설정, 래스터라이저 상태, 출력 병합기 상태 등을 포함한다. 개발자는 필요한 모든 파이프라인 상태를 정의한 후 ID3D12Device::CreateGraphicsPipelineState 메서드를 호출하여 PSO를 생성하며, 이 객체는 이후 명령 목록에서 바인딩되어 사용된다.
3. 구성 요소
3. 구성 요소
3.1. Direct3D 12
3.1. Direct3D 12
Direct3D 12는 DirectX 12의 핵심 구성 요소로, 마이크로소프트 플랫폼에서 고성능 3D 그래픽을 렌더링하기 위한 저수준 API이다. 이전 버전인 Direct3D 11과 비교하여 하드웨어에 대한 세밀한 제어와 효율성을 극대화하는 것을 목표로 설계되었다.
주요 설계 철학은 GPU와 CPU의 활용 효율을 높여, 엑스박스 시리즈 콘솔과 유사한 수준의 성능을 PC와 모바일 장치에서 달성하는 것이다. 이를 위해 개발자에게 명령 목록과 자원 할당에 대한 직접적인 제어권을 부여하며, 다중 CPU 코어를 활용한 병렬 명령 제출을 효율적으로 지원한다. 또한 멀티스레딩 처리와 리소스 바인딩 모델이 크게 개선되었다.
Direct3D 12는 윈도우 10 및 이후 버전의 운영 체제와 엑스박스 시리즈 콘솔을 위한 기본 그래픽 API로 통합되었다. 이 API는 AMD, 엔비디아, 인텔의 최신 그래픽 하드웨어에서 지원되며, Vulkan 및 메탈과 같은 다른 현대적 저수준 그래픽 API들과 경쟁 관계에 있다.
3.2. Direct2D
3.2. Direct2D
Direct2D는 마이크로소프트가 개발한 하드웨어 가속 2D 그래픽 API이다. DirectX 제품군의 구성 요소로, 텍스트, 기하 도형, 비트맵을 고품질로 렌더링하는 데 중점을 둔다. Direct3D 10.1 이상을 기반으로 구축되어 GPU의 하드웨어 가속을 활용하므로 GDI나 GDI+에 비해 현대적인 그래픽 하드웨어에서 훨씬 높은 성능을 제공한다.
이 API는 즉시 모드 렌더링 방식을 채택하여 복잡한 장면 그래프 없이도 효율적인 드로잉이 가능하다. 알파 블렌딩, 안티앨리어싱, 변환, 계층화 등 고급 2D 그래픽 기능을 지원하며, DirectWrite 및 Direct3D와의 긴밀한 통합을 통해 텍스트와 3D 콘텐츠를 함께 사용하는 복합 응용 프로그램 개발을 용이하게 한다.
주요 사용처는 사용자 인터페이스, 벡터 기반 일러스트레이션, 차트 및 그래프, 멀티미디어 응용 프로그램의 시각적 요소 등이다. 특히 윈도우 7 이후의 윈도우 데스크톱 및 유니버설 윈도우 플랫폼 앱의 시각적 구성 요소를 렌더링하는 데 핵심 기술로 사용된다. Direct2D는 DirectX 12의 일부로 계속 발전하며, 최신 그래픽 파이프라인과의 통합을 강화하고 있다.
3.3. DirectWrite
3.3. DirectWrite
DirectWrite는 마이크로소프트의 DirectX 제품군에 포함된 고품질 텍스트 렌더링 및 레이아웃 API이다. 이 API는 윈도우 애플리케이션에서 유니코드 텍스트를 정밀하게 표시하고 서식을 지정하는 데 사용된다. DirectWrite는 하드웨어 가속을 지원하여 글리프 렌더링, 텍스트 레이아웃, 안티앨리어싱 등의 작업을 효율적으로 처리한다.
DirectWrite는 GDI나 GDI+와 같은 이전 윈도우 그래픽 시스템의 텍스트 렌더링 한계를 해결하기 위해 개발되었다. 이 API는 클리어타입 서브픽셀 렌더링 기술을 완벽하게 지원하여 LCD 모니터에서 가독성을 극대화하며, 다양한 글꼴 형식(OpenType, TrueType, 비트맵 글꼴 등)을 처리할 수 있다. 또한 텍스트 레이아웃 엔진은 복잡한 스크립트와 국제 언어의 올바른 표시를 보장한다.
DirectWrite는 Direct2D 및 Direct3D와 긴밀하게 통합되어 2D 그래픽 애플리케이션이나 게임 내에서 하드웨어 가속된 텍스트 렌더링을 구현할 수 있게 한다. 이를 통해 개발자는 사용자 인터페이스나 게임 내 헤드업 디스플레이에 선명하고 유연한 텍스트를 통합할 수 있다. DirectWrite는 또한 텍스트 측정, 히트 테스트, 그리기 등 풍부한 프로그래밍 인터페이스를 제공한다.
DirectWrite는 윈도우 비스타부터 공식적으로 도입되었으며, 이후 윈도우 7, 윈도우 8, 윈도우 10 및 윈도우 11을 포함한 최신 마이크로소프트 윈도우 운영 체제의 핵심 구성 요소로 자리 잡았다. 이는 웹 브라우저, 워드 프로세서, 디지털 출판 소프트웨어 등 텍스트 표시가 중요한 다양한 애플리케이션의 기반 기술로 널리 사용된다.
3.4. DirectML
3.4. DirectML
DirectML은 마이크로소프트가 DirectX 12 제품군에 포함시킨 GPU 가속 머신러닝 및 인공지능 API이다. DirectX의 전통적인 그래픽 및 컴퓨팅 구성 요소들(예: Direct3D, DirectCompute)과 함께 동작하도록 설계되어, 개발자가 윈도우 플랫폼과 엑스박스 시리즈에서 고성능 AI 추론 작업을 통합할 수 있게 한다.
이 API의 주요 목표는 하드웨어 가속을 통해 인공 신경망의 실행을 최적화하는 것이다. DirectML은 다양한 연산자(Operator) 라이브러리를 제공하여, 합성곱 신경망(CNN)이나 순환 신경망(RNN)과 같은 일반적인 딥러닝 모델의 레이어를 효율적으로 구현할 수 있게 한다. 이를 통해 게임의 업스케일링, 화질 개선, 지능형 NPC 행동, 또는 실시간 컴퓨터 비전 애플리케이션 등에 AI를 활용할 수 있다.
DirectML은 저수준의 하드웨어 추상화 계층을 제공하여, 서로 다른 벤더(엔비디아, AMD, 인텔)의 GPU에서도 일관된 프로그래밍 모델을 사용할 수 있게 한다. 이는 Direct3D 12의 리소스 관리 및 명령 큐 시스템과 긴밀하게 통합되어, 그래픽 렌더링 작업과 머신러닝 작업 간의 효율적인 자원 공유와 동기화를 가능하게 한다.
DirectML의 도입으로 DirectX 생태계는 전통적인 실시간 렌더링 영역을 넘어 AI 연산 영역으로 확장되었다. 이는 DirectX 12 Ultimate 사양의 일부로 포함되어, 최신 그래픽스 파이프라인 기술과 함께 차세대 게임 및 멀티미디어 응용 프로그램의 핵심 요소로 자리 잡고 있다.
4. 버전 역사
4. 버전 역사
4.1. DirectX 12
4.1. DirectX 12
DirectX 12는 마이크로소프트가 2014년 3월 20일 게임 개발자 회의에서 발표하고, 2015년 7월 29일 윈도우 10과 함께 정식 출시한 그래픽 및 멀티미디어 API 세트의 주요 버전이다. 이 버전의 핵심 목표는 하드웨어에 대한 저수준 접근을 제공하여 드라이버 오버헤드를 크게 줄이고, 멀티코어 프로세서와 현대 GPU의 병렬 처리 능력을 효율적으로 활용할 수 있도록 하는 것이다.
주요 구성 요소인 Direct3D 12는 이전 버전과 달리 개발자가 명령 목록과 자원을 보다 직접적으로 관리할 수 있는 프로그래밍 모델을 도입했다. 이를 통해 애플리케이션은 CPU와 GPU 작업을 더 세밀하게 제어하고 분배하여, 특히 PC와 엑스박스 시리즈 콘솔에서 "콘솔 수준의 효율성"을 달성하는 데 기여했다.
DirectX 12는 멀티어댑터 지원을 공식적으로 도입하여, 개발자가 시스템 내 여러 GPU(예: 외장 GPU와 내장 그래픽을 함께 사용)를 동시에 활용할 수 있는 새로운 가능성을 열었다. 이 기술은 AMD의 크로스파이어X나 엔비디아의 SLI와 같은 벤더 종속적 솔루션을 넘어서는 유연성을 제공한다.
이 API는 엔비디아의 맨틀, 애플의 메탈, 크로노스 그룹의 벌컨과 같은 동시대의 다른 저수준 그래픽 API들과 경쟁하며 등장했다. 이후 2020년에는 실시간 광선 추적, 가변 속도 셰이딩, 메시 셰이더 등 향상된 기능을 포함하는 DirectX 12 Ultimate로 업데이트되어 최신 그래픽 하드웨어의 성능을 극대화하는 표준으로 자리 잡았다.
4.2. DirectX 12 Ultimate
4.2. DirectX 12 Ultimate
DirectX 12 Ultimate는 2020년 3월 마이크로소프트가 발표한 DirectX 12의 최신 기능 세트이자 최상위 에디션이다. 이는 윈도우 10과 엑스박스 시리즈 X/S 콘솔 간의 그래픽스 API를 통합하여, 개발자가 두 플랫폼에서 동일한 최신 그래픽 기능을 활용할 수 있도록 하는 것이 주요 목표이다.
이 에디션은 실시간 광선 추적 성능을 개선한 DirectX Raytracing 1.1, 렌더링 효율성을 높이는 가변 속도 셰이딩, 기하 도형 처리 파이프라인을 혁신하는 메시 셰이더, 그리고 텍스처 스트리밍 효율성을 최적화하는 샘플러 피드백 등 핵심적인 차세대 렌더링 기술을 표준으로 정의한다. 이러한 기능들은 더욱 사실적인 조명 효과, 향상된 성능, 그리고 더 복잡한 장면의 효율적인 처리를 가능하게 한다.
DirectX 12 Ultimate는 호환되는 GPU 하드웨어와 이를 지원하는 최신 그래픽 드라이버가 필요하다. 마이크로소프트는 이 표준을 엔비디아, AMD, 인텔과 같은 주요 그래픽스 하드웨어 파트너들과 협력하여 수립했으며, 해당 로고가 표시된 하드웨어와 게임이 모든 Ultimate 기능을 완벽하게 지원함을 보장한다. 이는 PC와 엑스박스 콘솔 생태계 간의 그래픽스 기능 일관성을 유지하는 데 중요한 역할을 한다.
5. 시스템 요구사항
5. 시스템 요구사항
DirectX 12를 실행하기 위한 시스템 요구사항은 크게 운영 체제와 하드웨어 두 가지 측면에서 살펴볼 수 있다. 기본적으로 DirectX 12는 마이크로소프트 윈도우 10 이상의 운영 체제에서만 네이티브로 지원된다. 윈도우 7이나 윈도우 8.1에서는 공식적으로 DirectX 12를 사용할 수 없으나, 일부 특정 게임이 플러그인 형태로 제한적으로 지원하는 경우가 있다.
하드웨어 측면에서는 그래픽 처리 장치(GPU)가 가장 중요한 요소이다. DirectX 12를 완전히 지원하려면 GPU와 해당 디스플레이 드라이버가 기능 수준 12_0 이상을 지원해야 한다. 대표적으로 엔비디아의 맥스웰(GeForce 900 시리즈) 이후 아키텍처, AMD의 그래픽스 코어 넥스트(GCN) 1세대 이후 아키텍처, 그리고 인텔의 하스웰(4세대 코어) 이후 내장 그래픽이 이에 해당한다. 일부 구형 GPU는 DirectX 12 API를 부분적으로만 지원할 수 있다.
다른 시스템 구성 요소로는 최신 보안 업데이트가 적용된 운영 체제와 GPU 벤더로부터 제공된 최신 윈도우 디스플레이 드라이버 모델(WDDM 2.0 이상) 호환 그래픽 드라이버가 필수적이다. 중앙 처리 장치(CPU)나 메모리(RAM)에 대한 특별한 최소 사양은 공식적으로 명시되지 않았으나, DirectX 12 게임이나 응용 프로그램 자체의 요구사항을 충족시켜야 한다. 엑스박스 시리즈 콘솔도 DirectX 12 Ultimate를 지원하는 자체 하드웨어 플랫폼이다.
6. 개발
6. 개발
6.1. 도구 및 SDK
6.1. 도구 및 SDK
DirectX 12를 개발하기 위한 주요 도구는 마이크로소프트의 윈도우 SDK에 통합되어 제공된다. 이전에는 별도의 DirectX SDK가 존재했으나, 윈도우 8 개발자 프리뷰 출시를 기점으로 모든 개발 도구와 라이브러리가 통합된 윈도우 SDK로 이관되었다. 개발자는 이 SDK를 통해 DirectX 12 API를 위한 헤더 파일, 라이브러리, 샘플 코드 및 문서에 접근할 수 있다.
주요 개발 환경으로는 마이크로소프트 비주얼 스튜디오가 널리 사용된다. 비주얼 스튜디오는 DirectX 12 프로젝트 템플릿, HLSL 셰이더 디버깅 및 편집 기능, 그리고 그래픽스 디버거를 통합하여 개발 과정을 지원한다. 특히 PIX라고 불리는 성능 분석 및 디버깅 도구는 DirectX 12 애플리케이션의 GPU 작업을 세밀하게 분석하고 최적화하는 데 필수적이다.
또한, 다이렉트ML이나 DirectStorage와 같은 최신 구성 요소를 실험하고 학습하기 위한 샘플 프로젝트와 문서는 마이크로소프트의 GitHub 저장소나 공식 개발자 블로그를 통해 지속적으로 제공된다. 이러한 리소스들은 저수준 하드웨어 제어와 복잡한 멀티스레딩 모델을 이해하는 데 도움을 준다.
6.2. 프로그래밍 모델
6.2. 프로그래밍 모델
DirectX 12의 프로그래밍 모델은 이전 버전과 근본적으로 다르다. 핵심은 개발자에게 그래픽 처리 장치에 대한 더 직접적이고 세밀한 제어권을 부여하는 저수준 API를 제공하는 데 있다. 이는 드라이버의 중재 역할을 최소화하고, 멀티코어 CPU를 효율적으로 활용하며, GPU의 병렬 처리 능력을 최대한 끌어내기 위한 설계 철학에서 비롯된다.
개발자는 명령 목록, 명령 큐, 파이프라인 상태 객체 같은 새로운 개념을 직접 관리해야 한다. 특히 리소스 바인딩 모델이 근본적으로 변경되어, 셰이더가 접근할 수 있는 버퍼와 텍스처를 디스크립터 힙과 디스크립터 테이블을 통해 유연하게 구성한다. 이러한 모델은 초기 학습 곡선이 가파르지만, 숙련된 개발자가 하드웨어의 잠재력을 충분히 활용할 수 있게 해준다.
또한 멀티스레딩 지원이 강화되어, 여러 스레드에서 명령 목록을 병렬로 기록하는 것이 핵심 최적화 기법이 되었다. 이를 통해 CPU 병목 현상을 줄이고 더 복잡한 장면을 효율적으로 렌더링할 수 있다. 이 프로그래밍 모델은 마이크로소프트의 엑스박스 시리즈와 윈도우 10 이상 플랫폼에서 공통적으로 적용되어, 크로스 플랫폼 개발 효율성을 높이는 기반이 된다.
7. 호환성
7. 호환성
7.1. 운영 체제
7.1. 운영 체제
DirectX 12는 주로 마이크로소프트 윈도우 플랫폼을 위해 설계된 API이다. DirectX 12의 공식 지원 운영 체제는 윈도우 10과 윈도우 11이다. 이전 버전의 윈도우, 예를 들어 윈도우 7이나 윈도우 8.1은 기본적으로 DirectX 12를 포함하지 않으며 공식적으로 지원되지 않는다. 다만, 일부 특정 게임 타이틀의 경우 개발사가 플러그인 형태로 윈도우 7에 DirectX 12 런타임을 별도로 제공하는 예외적인 경우가 존재한다.
마이크로소프트의 게임 콘솔인 엑스박스 원과 엑스박스 시리즈 X/S 또한 DirectX 12를 기반으로 한 그래픽 API를 사용한다. 이를 통해 윈도우 PC와 엑스박스 콘솔 간의 게임 개발 및 이식이 보다 수월해지는 크로스 플랫폼 이점을 제공한다. 특히 DirectX 12 Ultimate는 윈도우 10, 윈도우 11 및 엑스박스 시리즈 X/S에서 공통으로 지원되는 통합 기능 세트를 정의한다.
이전 세대 운영 체제인 윈도우 비스타와 윈도우 8은 DirectX 10 또는 DirectX 11까지만을 공식적으로 지원한다. 따라서 DirectX 12의 고급 기능을 활용하는 최신 게임이나 응용 프로그램을 실행하려면 지원되는 최신 버전의 윈도우로 업그레이드하는 것이 필수적이다. 이는 새로운 API가 하드웨어와 소프트웨어 스택에 대한 현대적인 요구사항을 반영하기 때문이다.
7.2. 하드웨어
7.2. 하드웨어
DirectX 12를 실행하기 위해서는 특정 하드웨어가 필요하다. Direct3D 12는 이전 버전과 달리 윈도우 디스플레이 드라이버 모델 기반의 새로운 드라이버 모델을 사용하며, 이에 맞는 그래픽 처리 장치가 필요하다.
주요 그래픽 카드 제조사인 엔비디아, AMD, 인텔은 각각의 아키텍처에서 DirectX 12를 지원한다. 엔비디아의 경우 파미 이후의 아키텍처를, AMD는 그래픽 코어 넥스트 기반의 칩을, 인텔은 하스웰 이후의 프로세서 내장 그래픽 유닛에서 공식 지원을 제공한다. 사용자는 자신의 GPU가 최소 기능 수준을 만족하는지 확인해야 한다.
멀티 GPU 구성도 DirectX 12에서 개선되었다. 명시적 멀티어댑터 기능을 통해 개발자는 서로 다른 벤더의 외장 그래픽 카드와 내장 그래픽을 함께 활용하는 등 더 유연한 하드웨어 구성을 할 수 있다. 그러나 이러한 고급 설정은 게임이나 응용 프로그램 측에서의 명시적 지원이 필요하다.
8. 비교
8. 비교
8.1. 이전 DirectX 버전
8.1. 이전 DirectX 버전
DirectX 12는 이전 버전인 DirectX 11 및 그 이전 API들과 비교했을 때, 설계 철학과 개발자에게 제공하는 제어 수준에서 근본적인 차이를 보인다. DirectX 11은 비교적 고수준의 API로, 그래픽 드라이버가 많은 세부 사항을 추상화하고 관리했다. 이는 개발 편의성을 제공했지만, CPU와 GPU 사이의 효율적인 작업 분배에 있어 드라이버 오버헤드가 발생할 수 있는 구조였다.
반면, DirectX 12는 저수준 API를 표방하며, 하드웨어 추상화 계층을 최소화하는 설계를 채택했다. 이는 멀티코어 프로세서를 보다 효율적으로 활용할 수 있는 향상된 멀티스레딩 지원과 함께, 개발자가 GPU에 직접 명령 목록을 제출하고 메모리 자원을 세밀하게 관리할 수 있는 권한을 부여한다. 결과적으로, 지원되는 하드웨어에서 정교하게 최적화된 코드는 DirectX 11 대비 상당한 성능 향상과 CPU 사용률 감소를 달성할 수 있다.
이전 주요 버전들의 흐름을 보면, DirectX 9는 셰이더 모델 2.0과 3.0을 도입하며 프로그래머블 셰이더의 시대를 열었고, DirectX 10은 윈도우 비스타와 함께 완전히 새로 작성된 그래픽 파이프라인과 통합 셰이더 모델을 선보였다. DirectX 11은 테셀레이션과 다이렉트컴퓨트를 통해 GPU의 범용 컴퓨팅 능력을 본격적으로 활용하기 시작했다. DirectX 12는 이러한 진화의 연장선상에 있으면서, 콘솔 게임기 수준의 하드웨어 제어와 효율성을 PC 플랫폼에 가져오는 것을 목표로 삼았다는 점에서 이전 세대와 구분된다.
8.2. Vulkan 및 기타 API
8.2. Vulkan 및 기타 API
DirectX 12는 마이크로소프트가 개발한 저수준 그래픽 API로, 주로 마이크로소프트 윈도우와 엑스박스 시리즈 콘솔에서 사용된다. 이는 크로노스 그룹의 벌컨, 애플의 메탈, AMD의 맨틀과 함께 현대적인 저오버헤드 그래픽 API의 흐름을 형성한다. 이러한 API들은 기존의 고수준 API보다 하드웨어에 대한 직접적인 제어권을 개발자에게 부여하여 CPU 오버헤드를 줄이고 멀티코어 프로세서 활용을 극대화하는 것을 공통된 목표로 한다.
DirectX 12와 벌컨은 특히 유사점이 많다. 둘 다 C++ 기반의 네이티브 저수준 API이며, 명령 목록과 명령 큐를 직접 관리하는 방식, 효율적인 멀티스레딩 지원, 하드웨어 자원에 대한 세밀한 제어 등을 핵심 특징으로 공유한다. 이로 인해 두 API 간의 코드 변환이 상대적으로 용이한 편이며, 일부 게임 엔진은 두 API를 동시에 지원하기도 한다. 그러나 DirectX 12는 마이크로소프트 생태계인 윈도우와 엑스박스에 최적화되어 깊이 통합된 반면, 벌컨은 리눅스, 안드로이드, 스테이디아 등 다양한 플랫폼을 지원하는 크로스 플랫폼 API라는 근본적인 차이가 있다.
이전 버전인 DirectX 11과 비교했을 때 DirectX 12는 프로그래밍 모델이 훨씬 복잡해진 대가로 잠재적인 성능 향상을 제공한다. 반면, OpenGL은 여전히 높은 이식성과 비교적 쉬운 학습 곡선으로 교육 및 특정 분야에서 널리 사용되지만, 최신 게임 개발의 최적화 요구사항을 충족시키기에는 한계가 있다. DirectX 12의 등장은 게임 산업에서 그래픽 API의 패러다임을 고수준의 편의성에서 저수준의 효율성으로 전환시키는 중요한 계기가 되었다.
9. 응용 분야
9. 응용 분야
9.1. 게임
9.1. 게임
DirectX 12는 마이크로소프트 플랫폼에서 게임 개발의 핵심 기술로 자리 잡았다. 이 API는 주로 윈도우 10 및 이후 운영 체제와 엑스박스 시리즈 콘솔에서 게임의 그래픽 렌더링, 사운드 처리, 입력 장치 관리를 담당한다. 특히 Direct3D 12는 고성능 3D 그래픽을 구현하는 데 필수적인 구성 요소로, 현대적인 비디오 게임의 시각적 품질과 실행 효율성을 크게 높이는 데 기여한다.
DirectX 12의 저수준 API 설계와 향상된 멀티스레딩 지원은 개발자에게 CPU와 GPU 자원을 더 세밀하게 제어할 수 있는 권한을 부여한다. 이를 통해 《애쉬즈 오브 더 싱귤래리티》와 같은 게임에서 더 높은 프레임률과 더 복잡한 장면을 구현할 수 있게 되었다. 또한 DirectX 12 Ultimate의 등장으로 실시간 광선 추적과 같은 차세대 그래픽 기술이 게임에 본격적으로 도입되기 시작했다.
이 기술은 엑스박스 시리즈 X/S와 같은 콘솔과의 통합을 통해 크로스 플랫폼 개발을 용이하게 하여, 개발자가 PC와 콘솔 간에 보다 일관된 게임 경험을 제공할 수 있는 기반을 마련했다. 결과적으로 DirectX 12는 고사양 AAA 게임부터 다양한 규모의 인디 게임에 이르기까지 마이크로소프트 생태계 내 게임 개발의 사실상 표준이 되었다.
9.2. 실시간 렌더링
9.2. 실시간 렌더링
DirectX 12는 게임 분야를 넘어 다양한 실시간 렌더링 응용 분야에서 핵심적인 역할을 한다. 이 API의 저수준 접근 방식과 효율적인 자원 관리 덕분에 가상 현실 및 증강 현실 애플리케이션에서 높은 프레임률과 낮은 지연 시간을 달성하는 데 필수적이다. 특히 시뮬레이션 및 훈련 시스템과 같이 복잡한 3D 환경을 실시간으로 구축해야 하는 분야에서 DirectX 12의 성능 이점이 두드러진다.
또한 건축 시각화, 제품 디자인, 의료 영상과 같은 전문 분야의 실시간 렌더링 도구에서도 DirectX 12가 채택되고 있다. 엔지니어링 및 CAD 소프트웨어는 복잡한 모델을 실시간으로 조작하고 렌더링하기 위해 이 API의 고급 기능을 활용한다. 영화 및 방송 산업에서도 실시간 시각 효과와 가상 프로덕션 파이프라인에 DirectX 12 기반 렌더링 엔진이 점차 통합되고 있다.
DirectX 12의 멀티스레딩 지원과 개선된 GPU 활용도는 대규모 데이터 세트나 복잡한 알고리즘을 실시간으로 처리해야 하는 과학 시각화 분야에도 유용하다. 이를 통해 연구자들은 기상학 모델, 분자 구조, 또는 우주 탐사 데이터와 같은 정보를 동적으로 시각화하고 분석할 수 있다. 결국, DirectX 12는 단순한 게임 API를 넘어, 고성능 실시간 그래픽이 요구되는 현대적 컴퓨팅 환경의 광범위한 분야를 지원하는 핵심 기술로 자리 잡았다.
10. 여담
10. 여담
DirectX 12는 게임 산업과 개발 커뮤니티에 상당한 영향을 미쳤다. 이 API의 등장은 기존의 고수준 API가 가진 드라이버 오버헤드 문제에 대한 해결책으로 주목받았으며, AMD의 맨틀, 애플의 메탈, 크로노스 그룹의 벌컨 등 다른 저수준 그래픽 API들의 개발 경쟁을 촉발하는 계기가 되었다. 이는 개발자에게 하드웨어에 대한 더 세밀한 제어권을 부여하고, 멀티코어 프로세서와 현대 GPU의 병렬 처리 능력을 더 효율적으로 활용할 수 있는 길을 열었다.
초기 DirectX 12를 지원하는 게임들의 벤치마크 결과는 흥미로운 차이를 보여주었다. 예를 들어, 《애쉬즈 오브 더 싱귤래리티》와 같은 타이틀에서 AMD GPU는 이전 DirectX 11 대비 상당한 성능 향상을 보인 반면, 일부 엔비디아 하드웨어에서는 초기 드라이버 최적화 부족으로 인해 미미한 성능 변화나 오히려 저하가 관찰되기도 했다. 이러한 결과는 새로운 API에 대한 하드웨어 벤더별 구현과 최적화의 중요성을 부각시켰다.
마이크로소프트는 DirectX 12의 생태계를 확장하기 위해 윈도우 10 및 엑스박스 시리즈 X/S에 이어, 제한적으로 윈도우 7에도 특정 게임을 위한 플러그인 형태로 API를 제공했다. 또한 DirectX 12 Ultimate의 발표를 통해 윈도우 PC와 엑스박스 콘솔 간의 그래픽 기능 세트를 통합하고, 실시간 광선 추적과 같은 차세대 기술을 표준화하여 개발자에게 일관된 플랫폼을 제공하고자 했다.
