컴퓨터 관련 글

제가 알고 있는 DirectX 역사

Bret Hanson 2010. 5. 22. 19:36

DirectX 가 나오기 전 대부분 게임들은 DOS 기반이었습니다.

 

게임을 개발할 때 왜 DOS 기반으로 했을까요? 그건 바로 DOS 게임을 만들때 좀 더 빠른 입출력 처리가 가능한데, 이에 비해 Windows 는 리소스 자원을 한쪽으로 독점하는 기반이 아니기 때문입니다. 그래픽 처리에서 Windows 는 GDI 란 API 가 존재합니다. 따라서 대부분 윈도우 창이나 모든 그래픽 처리는 전부 GDI 에서 처리합니다. 그렇지만 GDI 는 한계가 항상 존재하는데 그 이유는 바로 '게임'때문입니다. 게임은 멀티미디어에서 굉장히 중요한 부분이라 엄청나게 빠른 입출력 처리를 요구하지만, GDI 는 그래픽 처리속도가 상당히 느려서 게임용 API 라고는 보기에는 미약하며 그다지 적합하지 않습니다. 안그래도 Windows 는 게임에 취약하다는게 말이 나올 정도인데, 그래픽 처리속도를 빠르게 처리할 수 있는 API 를 개발했는데 바로 WinG 입니다. WinG 기반의 대표적인 게임은 삼국지 5 와 심타운 등 입니다. 그렇지만 이러한 API 로는 빠른 입출력로는 역부족이니까 MS 는 DOS 처럼 처리가 가능한 API 를 개발하게 되었는데, 바로 개발사가 널리 쓰고 있고 표준이 된 DirectX 입니다. 한마디로 말하자면 Windows 에 게임을 위해서 빠르게 처리가 가능한 API 가 없었으니 당연히 Windows 점유율을 늘리는데 지장을 줄 수 밖에 없어서, 게임 개발자들이 Windows 로 넘어가기 위해서 DirectX 가 개발한 것입니다. 물론 DirectX 에서는 한 가지 단점은 있는데, 어떠한 OS 기반에서 돌아가지 않고 오로지 Windows 기반 아래에서만 돌아간다는 것입니다.

 

그렇지만 빠른 입출력이 가능한 DOS 게임의 문제점은 항상 존재하는데, 바로 드라이버 문제와 메모리 관리 문제 등입니다. 특히 사운드 드라이버는 일일히 설정해줘야 하는데, 제가 어릴때 DOS 게임을 할때 setup.exe 에 들어가서 사운드 드라이버를 선택해야만 했던 시절이었습니다. 그렇지 않을 경우 제대로 안되는 경우가 허다했었습니다. 그리고 그래픽 드라이버도 역시 일일히 맞게 설정해줘야 되는데 해상도 설정할때는 setup.exe 에 들어가서 설정할 정도이니, 지금이야 요즘 게임들은 DirectX 기반이라 자체 옵션에서 해상도 설정만 하기만 하면 바로 되지만 그때 당시에는 그래픽 관련 부분을 개발하기가 어려울 정도였습니다. 그런데 96 년쯤에 들어서야 univesa 가 등장하게 됩니다. 게임을 실행하기 전에 항상 univesa 가 뜰 정도였으니, 이것을 쓴게 바로 툰스럭터 등이 대표적입니다. 메모리 관리는 90 년대 초반까지 만해도 DOS4GW 가 없었던 시절이라 그때 당시 메모리 관리를 하기 위해 config.sys 에서 설정하지 않으면 게임 실행할때 메모리 부족이란 메세지가 뜰 정도였습니다. 초기의 DOS 는 640KB 를 넘으면 부족하니까 새로운 메모리 관리 프로그램(EMS, emm386.exe, himem.sys 등)이 나오긴 했으나 제가 봤을땐 대용량 게임에서는 그다지 적합하지 않아 보입니다. 일례로 어릴때 했던 게임인 어스토니시아 스토리는 전투 시작하기전 메모리 부족 메세지가 나오면서 DOS 화면으로 튕겼을 때가 제일 기억이 납니다. (오죽할래야 게임잡지 부록의 정품 CD에 메모리 관리란 말이 나올 정도임) 94년 전후로 들어서니까 DOS4GW 기반을 쓴 게임이 나오게 되는데, Watcom C 기반으로 해서 만든걸로 알고 있습니다. (위키백과에 가보면 DOS4GW 는 최대 64MB 메모리 주소를 다룰수 있음) DOS/4GW 기반 게임들을 실행하면 항상 'DOS/4GW Professional Protected...' 란 글자가 항상 뜹니다.

 

DOS 게임을 만들 때 그러한 문제점 때문에 DirectX가 나옴으로 인해 96년도부터 Windows 기반 게임들이 조금씩 나오게 됩니다. 97년도에는 DirectX 가 버전업과 함께 Windows 기반 게임들이 급속도로 증가되지만 DOS 게임들의 비중은 급속도로 줄어지게 됩니다. 98년도에 들어서야 DOS 게임은 드물 정도이며 자취를 감춘 걸로(2000년대 이후) 알고 있습니다. 이때 전부 Windows 기반 게임이 통일되는 시기와 함께 DirectX 가 표준에 잡히게 되었습니다. 이때 게임 개발사는 전부 Windows 로 넘어간건 MS 의 최종 목표라고 보시면 됩니다. 게임에 취약한 Windows 의 오명에서 벗어나기 위함이라고 할 수 있을까요? 한마디로 말하자면 DirectX 는 DOS 게임처럼 되기 위한 목표라고 할 수 있습니다. DirectX 의 편리한 점은 DOS 처럼 드라이버와 메모리 관리의 중요성이 없었졌다는 점입니다. 그리고 DirectX 의 보급으로 DOS 게임은 거의 사라지게 되며 DOS 에서 Windows 로 완전히 대체하게 되는데, 그 후로 DOS 하위 호환성을 유지한 Windows 9x 계열로는 불안정한 이유때문에 Windows XP 로 대체되고 후에 안정성이 좋은 NT 계열로 사용자 통합에 성공하고 멀티미디어에서 취약한 NT 란 오명에서 벗어나게 되는 계기가 되었습니다.

 

DirectX 의 등장은 바로 Windows 95 와 Windows NT 4.0 에 내장하고 나서부터 입니다. DirectX 에서는 DirectDraw, DirectSound, DirectMusic, DirectInput, DirectPlay 등으로 구성되어 있는데, 그 중 그래픽 처리부분에 대해서 말하겠습니다. 일단 그래픽 처리할 때 쓰는 DirectDraw 부분인데, DirectDraw는 GDI 보다 훨씬 빠른 그래픽 처리가 가능해서 초기에 나온 대부분 게임들은 이 기반으로 해서 만든겁니다. 그런데 DirectX 가 등장하기 전에도 MS 는 영국의 Render Morphis 사를 인수해서 Reality Lab 2.0 기반으로 Direct3D가 등장하게 됩니다. 그렇지만 Direct3D는 그 때 당시에는 표준이 아니었고 게임 개발사들은 대다수 3Dfx의 Glide를 널리 쓰이고 있었습니다. 90년대 중반에 가장핵심은 3D였는데, 오락실에서 이걸 쓰이고 PC용 게임에서도 쓰이게 됩니다. 게다가 92년도에 OpenGL이 등장하고 나서부터였는데 Windows NT 3.5 에 이걸 내장하게 됩니다. 그 때 당시 게임들은 OpenGL를 쓰는 경우가 꽤 있었는데, 게임을 개발할 때 대표적인 엔진이 바로 퀘이크 엔진입니다.

 

후에 Direct3D 는 DirectX 5 때부터 새로운 기능이 추가 되었는데, 바로 텍스쳐 압축 기술 등입니다. 텍스쳐 압축 기술은 S3TC 가 먼저 발표되었는데, 이를 S3TC 라고 부르는데, Direct3D에서는 DXTC 라고 부르게 됩니다. 그 시기에 GPU 업체들은 Direct3D를 지원하게 됩니다. 시간이 지나면서 Direct3D 가 발전하게 되는데, DirectX 6 이 나오고 나서 Direct3D에 새로운 기능이 추가되면서 Direct3D 가 점점 Glide 를 앞지르게 됩니다. 그러나 3D의 발전에서는 문제점이 있었는데 바로 좌표변환과 광원처리는 CPU 에 의존하고 있었습니다. 그 전에는 3D게임이 나오고 나서부터 점차 3D 의 처리량이 증가하다보니 CPU 에 의존할 수 밖에 없었는데, 제일 부담이 가는 건 바로 렌더링 처리입니다. 그래서 렌더링 처리에 부담을 줄이기 위해서 3D 가속 카드가 나오게 됩니다. 그래서 게임들의 설정창에서는 H/W Rendering 과 S/W Rendering 이 항상 나옵니다. 그렇지만 폴리곤이 점점 증가하면서부터 CPU의 부담이 커지게 되니 그 문제점을 해결하기 위해서 DirectX 7 에 H/W T&L 이 등장하게 됩니다. T&L 은 Geforce256 에 내장하면서 처음으로 등장하게 됩니다. 한마디로 말하자면 지오메트리 발전의 기초 단계 이며 폴리곤을 좀 더 섬세하게 표현하면서 프레임 하락을 줄이는 역할로 봅니다. 그 시기에 DirectX 7 의 등장으로 인해 Glide 는 엄청난 타격을 입히게 되어 3Dfx 는 Glide 코드까지 공개하기 이르렀음에도 불구하고 자체 생산으로 인해 결국 Nvidia 에 인수되는 비운의 업체로 전락됩니다.

 

3D의 API 의 자사규격이 존재하고 있었는데, ATI 의 3DCIF(POD 란 게임에서 이걸 지원함), S3 의 MeTal(언토에서 이걸 지원함), PowerVR 의 SGL, 3Dfx 의 Glide 가 존재하고 있었습니다. 그런데 게임 개발자들은 Glide 를 널리 쓰이게 되었습니다. Unreal Tournament 데모만 봐도 Glide 만 지원할 정도였으니, 그 때 당시 3Dfx 가 주류를 잡고 있을 시기였습니다. 그러나 Nvidia 의 TNT 2 의 공세로 3Dfx 는 흔들거릴 것 같았지만, DirectX 7 등장과 3Dfx 의 자체 생산으로 인한 Nvidia 의 인수로 인해 결국 3Dfx 와 Glide 는 자취를 감추게 됩니다. 그리고 OpenGL 게임의 비중은 줄어지고 Direct3D 가 표준으로 널리 쓰이게 됩니다. 한마디로 2D 에서 3D 로의 진화라고 보면 되겠습니다.

 

3D의 발전의 큰 화두가 되었는데 바로 요즘 게임에서 널리 쓰이던 것이 바로 '세이더'입니다. 세이더를 처음으로 내장하게 되는건 DirectX 8 때부터 입니다. 그 때 당시 세이더는 두 종류가 있었는데, 버텍스 세이더와 픽셀 세이더입니다. 3D의  발전에서는 문제점이 있었는데, 고정 기능으로는 제대로 구현하는데는 한계가 있었습니다. 그래서 프로그래머블 방식의 세이더가 나온 것도 이러한 문제점 때문입니다. 초기의 세이더는 어셈블리 수준으로 구현했지만 Direct3D 9 때부터는 HLSL 이 등장하게 됩니다. 세이더의 등장으로 GPU 는 결국 SIMD 방식으로 진화되었다는 점이 있습니다. 그런데 DirectX 8 의 큰 핵심은 2D 및 3D 가 통합되었다는 점입니다. 기존의 DirectX 7 까지는 DirectDraw 와 Direct3D 로 되어있지만 DirectX 8 에서는 이러한 것이 없었다는게 특징입니다.

 

그렇지만 DirectX 9 의 문제점은 존재하게 되는데, 바로 높은 CPU 의 오버헤드 등입니다. 퀄리티는 결국 CPU 성능의 의해 좌우가 되는데, 이러한 문제점을 해결하기 위해 Windows Vista 출시와 함께 DirectX 10 이 나오게 됩니다. DirectX 10 의 핵심은 CPU 의 오버헤드를 줄이고 지오메트리 세이더가 추가 등입니다. 그리고 GPU 는 기존의 세이더 파이프라인 방식을 버리고 스트림 프로세서로 진화되었다는 점입니다. G80 부터는 큰 변화가 있었는데, SIMD 에서 MIMD 로 진화했다는 점이고, 8 개의 ALU 는 전부 스칼라 방식으로 처리가 가능해졌다는 점입니다. Vista 의 변화점은 바로 WDDM 이란 개념이 생기게 되는데, 이를 Windows Display Driver Model 이라고 부르며, Vista 에서 버전은 WDDM 1.0 입니다. 이때 GPGPU 는 업계의 큰 화두가 되었는데, Nvidia 가 밀고 있는게 바로 CUDA 입니다. 한마디로 말하자면 GPU 로 CPU 를 대체하겠다는 뜻인데, AMD 가 ATI 를 인수 하고 나서부터 퓨전(CPU+GPU)이 나올 예정이지만 그렇지 못해서 R600 은 결국 G80 보다 늦게 나왔지만 결국 실망스러운 성능이 나오는 처참한 결과가 나오게 됩니다. 후에 Radeon 3xxx 계열에 DirectX 10.1 이 처음으로 나오게 되었지만 이를 지원한 게임이 그렇게 많지가 않았습니다. 대신 H.A.W.X. 란 게임은 10.1 을 활성화하면 SSAO 에서 성능향상이 있다는 점입니다.

 

DirectX 10 의 문제점은 GPGPU 규격이 없으며 멀티 스레드 미지원 등인데, 이때까지 DirectX 는 싱글 스레드였다는 점입니다. 그래서 게임들은 멀티 쓰레드 지원 여부가 갈리지만, DirectX 11 때부터는 멀티 스레드를 기본으로 지원하게 됩니다. DirectX 11 의 등장은 바로 Radeon 5870(Cypress)이 등장한지 한달 뒤에 Windows 7 의 출시하고 나서부터 입니다. DirectX 11 의 가장 핵심은 Tessellation 과 GPGPU 규격인 Direct Compute 입니다.

 

Tessellation 은 ATI 가 예전에 추진한 규격을 DirectX 11 에 표준에 들어간 것입니다.Tessellation 의 시초는 바로 Radeon 8xxx 부터 내장된 Truform 이었습니다. 이를 지원하는 게임은 Return to Castle Wolfenstein 과 Counter Strike 등이 대표적입니다. 일단 Tessellation 으로 Factor 를 높여서 폴리곤을 세분화한 다음, 입체적으로 표현하기 위해 Displacement Mapping 을 입히는 과정을 말합니다. 그리고 멀리있는 시점에는 폴리곤은 적어지고 가까이있는 시점에는 폴리곤이 많아지는데, 이를 LOD(Level of Detail)라고 합니다. LOD 는 GPU 의 성능에서 자원을 아낄수 있다는 장점이 있습니다. 참고로 Tessellation 의 레벨은 Xenos, R6xx, R7xx 계열이 최대 15 까지이며 DX 11 레퍼 GPU 는 최대 63 까지 입니다. 3D의 발전에서는 문제점이 있었는데 폴리곤이 조잡하거나 세밀해질 수록 버텍스 데이터 등이 증가한다는 점입니다. 버텍스 데이터가 많아지면 대역폭을 많이 먹으며 비효율적입니다. 그래서 이러한 문제점 때문에 적은 버텍스 데이터로 효율을 개선을 한 기술이 Tessellation 입니다. 3D 발전 초기에는 폴리곤이 점점 많아지면서 CPU 의 부담에서 벗어나기 위해서 H/W T&L 이 등장했지만, 그럼에도 불구하고 폴리곤이 점점 세세 해지면서 버텍스 데이터 등을 줄이기 위해서 Tessellation 이 나오게 되는 것입니다. 좀 더 실사로 표현하기 위해서지만, 한마디로 말하자면 지오메트리의 발전 단계 중에 하나라고 봅니다. 물론 테셀레이션을 지오메트리 세이더로 처리할 수도 있습니다. 현재 GPU 의 테셀레이터는 고정기능으로 되어있지만 세월이 지나게 되면 테셀레이터를 스트림 프로세서로 대체할 가능성이 클 것 같습니다.

 

Direct Compute 는 GPGPU 규격이며 최신 버전은 Direct Compute 5 입니다. 물론 기존의 R7xx, G8x 및 GT2xx 계열은 Direct Compute 4.x 의 하위 호환이 가능합니다. Nvidia 는 CUDA 를 중점으로 두면서 지원하는 프로그램이 많다는 점인데 반해, AMD 는 ATI Stream 이 존재하고 있지만 이를 지원하는 프로그램이 많지 않다는 점입니다. GPGPU 로 물리연산, 레이트레이싱, AI 등 처리가 가능한데 이를 실용화 할려면 근본적인 아키텍쳐 개선과 성능 향상을 해야 실현이 가능하지 싶습니다.

 

Windows 7 에서는 많은 변화가 있었는데, 바로 WDDM 1.1 로 버전이 올라가면서 추가 되었는게 Direct2D, DirectWrite 와 Direct3D 10Level 입니다. Direct2D 는 2D 표시를 GPU 로 처리가 가능해져서 CPU 의존을 줄이는 역할을 한게 특징인데 이를 지원하는 프로그램은 바로 Internet Explorer 9 입니다. DirectWrite 는 폰트의 표시를 GPU 로 처리가 가능해져서 CPU 의존을 줄이는 역할을 한게 특징입니다. Direct3D 10Level9 는 DirectX 9 세대 GPU 를 DirectX 10.1 의 호환이 가능하게 만들며 Windows 7 제공된 GPU 드라이버에서 지원이 가능합니다. 참고로 Radeon 9550 에서도 Windows 7 의 에어로 활성화가 가능합니다.

 

그리고 에어로는 Windows Vista 에서는 DirectX 9(Pixel Shader 2.0 으로 처리)로 처리하지만 Windows 7 의 에어로(Aero 2)는 DirectX 10.1 로 처리합니다. 기존의 DirectX 9 및 DirectX 10 세대 GPU 도 Windows 7 의 에어로 활성화가 가능합니다. 에어로는 기존의 XP 보다 시각효과가 좋으며 부드럽게 처리가 가능하면서 깨지질 않습니다. 기존에는 윈도우 창을 처리할 때 GDI 로 처리해왔습니다. 한마디로 말하자면 GDI 는 구시대 유물이며 Windows 1.x 부터 존재하고 있었으니, 상당히 구식입니다. 후에 GDI+ 가 나오기도 했었지만, 윈도우 창을 드래그 할때 CPU 의존도가 상당히 크며 창 화면이 깨지게 나옵니다. 이를 대체하기 위해서 Vista 에서는 에어로가 처음으로 등장하게 됩니다. 그 후 Windows 7 이 나오고 나서부터 에어로 뿐만 아니라 2D 와 폰트도 GPU 처리가 가능하게 만들었습니다. Vista 와 7 의 가장 큰 핵심은 모든 그래픽 처리는 CPU 의존율이 큰 GDI 에서 GPU 로 처리가 가능한게 특징입니다.

'컴퓨터 관련 글' 카테고리의 다른 글

VGA 의 드라이버 및 호환성 문제  (0) 2010.07.21
VGA 카드의 불량 유형  (0) 2010.07.19
VGA 의 프레임 드랍의 유형  (0) 2010.07.19
Dithering 에 대해  (0) 2010.05.20
Catalyst 의 설치에 대해  (0) 2009.07.16