DirectX

This page was last edited on 15 October 2020, at 06:15.

DirectXMicrosoft의 저수준 API군의 하나로, 게임멀티미디어 등에 사용되는 COM 인터페이스 집합이다. 대한민국 내에서는 보통 다이렉트엑스로 읽거나 표기하고 있다. 2016년 8월 3일 기준 최신 버전은 DirectX 12이다. 본래 Microsoft에서는 Khronos Group 멤버 회사로써 OpenGL 1.0 및 1.1을 3D 게임 개발을 위한 저수준 API로 지원했다. 그러던 중 RenderMorphics사를 인수하면서 해당 회사가 개발하던 3D API인 Reality Lab를 개량하여 Direct3D로써 내놓는다. 또한 2D나 오디오의 경우 기존 API는 존재하지 않아 GDI라는 API를 통해 화면에 이미지나 도형을 그리도록 했었으나 하드웨어 가속을 전혀 받지 않고 그렸기 때문에 매우 느렸다. 이를 개선하기 위해 DirectDraw와 DirectSound가 DirectX 1.0으로 포함되어 선출시되었다. Direct3D는 DirectX 2.0에서 처음 포함되었다. Microsoft 독점 API이기 때문에 Windows 환경만을 지원하고 있으며, 그 외에도 Xbox 시리즈도 일부 지원하고 있다. 사람에 따라 다르지만 국내 및 영국 등지에서는 보통 다이렉트-엑스라고 읽고 있으며, 북미권에서는 디렉트-엑스라고 읽고 있다.

1 역사

초창기의 Windows에서는 프로그램에서 하드웨어에 접근할 수 있는 방법을 제공하지 않아 게임 개발에 어려움을 겪었으나, DirectX 출시 후 좋은 성능을 뽑아내는 게임이 점차 출시되기 시작했다.

API의 성능을 최대한 끌어내기 위해 최근의 DirectX는 초기의 DirectX와 달리 운영체제의 저수준 코드와 밀접한 관계를 맺고 있어, 운영체제의 업데이트에 따라 DirectX의 버전도 업데이트되고 있다.

2 API의 종류

레거시 API는 ♨ 표시로 구분한다.

2.1 DirectDraw♨

DirectX 7.0까지 포함되었던 2D 가속 API로, 당시 2D 게임을 개발한다고 하면 DirectDraw를 사용하는 것이 일반적이었다. 그러나 점차 비디오카드가 3D 위주로 출시되면서 DirectDraw를 사용하는 것보다 Direct3D를 사용하여 2D를 구현하는 것이 일반화가 될 것이라는 판단 하에 DirectX 8.0부터는 탑재되지 않았다.

2.2 DirectSound♨

오디오 출력을 위해 사용하는 API로, DirectX 8.0까지 업데이트되었고, DirectX 9.x 버전대에서는 포함은 되었으나 버전업은 되지 않았다. 게임 이외에도 동영상 재생기 프로그램, 음악 재생기 프로그램 등에서 계속 사용되고 있다. 3D 입체 오디오 재생이 지원된다.

2.3 DirectInput♨

키보드, 마우스, 조이스틱 등의 입력 장치로부터 입력을 받기 위해 사용하는 API로, DirectX 8.0까지 업데이트되었고, DirectX 9.x 버전대에서는 포함은 되었으나 버전업은 되지 않았다. 버그가 많았으나 고쳐지지 않고 그대로 지원이 종료되었다. 따라서 개발자들은 키보드나 마우스의 입력에 한정하여 DirectInput을 사용하는 것보다 그냥 순수 Windows API를 사용하는 것을 선호했다.

2.4 DirectMusic♨

DirectSound의 상위 호환격인 API로, MIDI를 재생할 수 있었다. DirectX 8.0을 끝으로 업데이트되지 않았다. 현재도 MIDI 재생을 하는 응용프로그램이나 게임에서는 웬만한 경우에는 DirectMusic을 사용하고 있지만 MIDI 자체가 수명이 다 해서 찾아보기 어렵다.

2.5 DirectPlay♨

네트워크 통신 API로, 사용이 불편하여 이를 이용해 개발하려는 개발사가 많지는 않았다. DirectX 8.0을 끝으로 업데이트 되지 않았다.

3 구성

DirectX의 2017년 1월 기준 구성은 아래와 같다.

이전에는 구성에 포함되어 있었으나 현재는 레거시 API나 Windows API로 빠지거나 지원을 중단한 요소는 아래와 같다.

4 Direct3D

4.1 Direct3D 2~7♨

Direct3D 2부터 6까지는 OpenGL에 밀려 그리 널리 사용되지 않았다. 개발이 불편하기도 했고 당시 3D 프로그래머의 거장인 존 카멕이 선호하지 않는 API였기 때문에 많은 개발자들이 꺼려했다. Direct3D 7부터 OpenGL보다 성능이 좋고 편의성이 증가하여 널리 사용되기 시작했다.

4.2 Direct3D 8~9♨

Direct3D 8에서는 PC 최초로 프로그래밍 가능한 쉐이더가 추가되었다. 쉐이더 어셈블리 언어로 직접 작성해야 됐기 때문에 불편함은 있었지만 그동안 게임들이 비슷해 보이는 현상을 탈피하는데 도움이 많이 되었다. Direct3D 9에서는 Direct3D 8의 API 구조를 크게 변경하지 않는 선에서 HLSL 쉐이더 언어, 2D 스프라이트 가속 렌더러 등이 추가되어 개발 편의성이 크게 향상되었다. 2004년에 출시된 Direct3D 9는 Windows Vista가 출시되기 직전에 9.3 버전까지 나온 뒤에도 2011년이 다 되어가도록 사용된 장수 API이다.

4.3 Direct3D 10~11

Direct3D 10은 Windows Vista부터 사용이 가능한 API이며, Windows Vista부터 적용된 WDDM 1.0 드라이버 모델이 반드시 필요했기 때문에 Windows XP를 지원하지 않아 악평을 많이 들었다. Direct3D 10부터는 기하 쉐이더 및 상수 버퍼를 지원하기 시작했다. Direct3D 11은 Windows 7부터 사용이 가능한 API이며, Windows Vista를 지원하지 않는데 마찬가지의 이유로 WDDM 1.1 드라이버 모델이 필요했기 때문이다. 멀티스레드 렌더링을 지원하고 GPGPU API인 DirectCompute가 내장되었다. 또한 테셀레이션 지원을 위해 헐 쉐이더 및 도메인 쉐이더를 지원하기 시작했다. 이후 Windows 8, Windows 8.1, Windows 10에서 각각 추가적인 API 보완이 더해져 현재 기준으로 Direct3D 11의 최신 버전은 Direct3D 11.3이다.

4.4 Direct3D 12

Direct3D 12는 Direct3D 11을 대체하지 않는 API로, 하드웨어 저수준 접근 API로써 사용된다. Direct3D 11에 있었던 일부 기능들이 빠졌기 때문에 이를 사용하기 위해서는 Direct3D 11을 같이 사용해야 한다. WDDM 2.0 드라이버 모델이 필요하므로 Windows 10에서만 사용할 수 있다. AMD가 개발한 하드웨어 저수준 접근 3D API인 Mantle의 아이디어를 차용했으며 개발 난이도는 훨씬 높지만 게임 최소 프레임이 향상되고 비동기 쉐이더 기법을 사용해 그래픽 쉐이더와 계산 쉐이더를 동시에 구동할 수 있다. 또한 Direct3D 11에서 처음 적용되었던 멀티스레드 렌더링 기법에 비해 매우 큰 성능 향상이 있어 CPU와 GPU를 모두 활용할 수 있는 API로 기대되고 있다. 다만 역시 개발 난이도가 높기 때문에 Microsoft에서는 Direct3D 11로 일단 먼저 개발해보고 성능을 더 뽑아야 될 때 Direct3D 12로 포팅할 것을 당부하고 있다.

4.5 XInput

XInput은 DirectInput을 대체하는 API로, 게임패드 입력을 위해 사용한다. Xbox 360 호환 컨트롤러라면 모두 XInput을 통해 입력받을 수 있다. Xbox에 들어갔던 API가 첫 버전으로, Windows에 최초 도입되었을 때는 XInput 2라는 이름으로 불리며 DirectX API에 포함되었다. DirectInput에서 기본 지원하지 못했던 진동 기능을 기본적으로 지원하며, 컨트롤러 탑재 키보드, 컨트롤러 탑재 헤드폰 마이크 입력도 지원한다.

4.6 XAudio

XAudio는 DirectSound를 대체하는 API로, 오디오 출력을 위해 사용한다. XInput과 마찬가지로 Xbox에 들어갔던 API가 첫 버전으로, Windows에 최초 도입되었을 때는 XAudio 2라는 이름으로 불리며 DirectX API에 포함되었다. 다만 Windows Phone 앱을 응용프로그램 한정으로 개발하거나 Windows 8 앱, UWP 앱 개발을 하지 않는 한 잘 사용되지는 않고 있다.

4.7 Direct2D

Direct2D는 DirectDraw가 아닌 Windows GDI API 및 GDI+ API를 대체하는 API이다. 내부적으로 Direct3D를 사용해 2D 렌더링을 수행하며, 따라서 Direct3D와 병행하여 사용하는 것이 가능하다.

4.8 DirectWrite

DirectWrite는 텍스트 출력을 위해 사용되는 API로, Direct2D와 함께 해야만 사용할 수 있다.


5 DirectX 최종 사용자 런타임

DirectX 최종 사용자 런타임(DirectX End-User Runtime)은 설치 파일로 배포되는 형태의 DirectX 확장 라이브러리이다. 기본적인 DirectX 구성요소는 운영체제에 이미 내장되어 있으나, d3dx9_43.dll과 같은 추가적인 요소들을 사용하기 위해서 런타임을 설치한다.

보통은 설치하지 않아도 게임을 이용할 수 있으나, 확장 라이브러리를 사용한 게임의 경우 DirectX 최종 사용자 런타임의 설치가 필수적이다. 그러나 최종 사용자 런타임의 최신 버전은 2010년 6월 버전이 마지막이고, 한국 온라인 게임을 제외한 최신 게임에서는 더 이상 사용되지 않고 있다.

예를 들어, 최종 사용자 런타임에 들어가는 구성요소인 Direct3D 9 Extension(D3DX9)의 경우 텍스처 로드, 쉐이더 컴파일, 스프라이트 등의 기능이 들어가있지만, 최신 Direct3D의 경우 텍스처 로드는 Windows Imaging Components를, 쉐이더 컴파일은 Direct3D Compiler 구성요소를, 스프라이트 기능은 Direct2D를 활용할 수 있다.

확장 라이브러리는 DLL 파일 이름의 중간이나 맨 끝에 x가 들어가는 파일을 말하며, 대표적으로 D3DX_41.DLL 파일과 같은 것들이 여기에 포함된다. 일반적인 DirectX 구성요소는 Windows 내에 모두 포함되어 있기 때문에 예를 들어 Windows XP에서 Direct3D 11을 사용하고 싶다고 최종 사용자 런타임을 설치한다고 해도 Direct3D 11을 사용하기 위해 꼭 필요한 D3D11.DLL 파일 등은 설치되지 않는다.

6 같이 보기

Retrieved from "https://femiwiki.com/index.php?title=DirectX&oldid=170685"