다이렉트X 9.0이 다이렉트X 10으로 업그레이드되면서 다음과 같은 내용이 추가되었다. 게임 유저의 입장에서 가장 신경 쓰이는 부분은 프로그래머블 셰이더의 변화와 하드웨어 스펙의 제한에 관련된 부분이라 볼 수 있다.
|
다이렉트X 10, 무엇이 달라졌는가? 1. 프로그래머블 셰이더의 변화 2. HLSL 버전 10으로 업그레이드 3. 하드웨어 스펙의 제한 4. 연산 사이클의 축소로 속도 증가 5. 스트림 I/O |
■ 프로그래머블 셰이더의 변화
게임을 즐기는 유저의 입장에서라면, 다이렉트X 10의 그래픽 표현력이 어떻게 바뀌었는지에 가장 먼저 신경이 쓰일 것이다. 이 부분에 관한 내용이 바로 프로그래머블 셰이더의 변화이다. 특히 셰이더 모델 3.0이 셰이더 모델 4.0으로 업그레이드되면서, 게임 상에서 더욱 다양하고 풍부한 그래픽을 접할 수 있게 되었다. 셰이더 모델 4.0에는 3D 오브젝트의 형태에 다양한 바리에이션을 줄 수 있는 지오메트리 셰이더가 추가되었다.
|
다이렉트X의 3D 고정함수 파이프라인
버텍스 데이터(Vertex Data)는 3D맥스 등의 프로그램으로 만들어진 폴리곤 기반의 3D 모델, 프리미티브 데이터(Primitive Data)는 NURBS 기반의 마야 등으로 만들어진 패치(Patch) 방식 모델의 데이터이다. 결국 이 단계는 다른 프로그램에서 만들어진 3D 모델의 데이터를 입력받는 과정을 말한다. 입력받은 데이터는 테셀레이션(Tessellation, 세분화) 단계를 거치게 된다. 이 단계는 폴리곤이 아닌 패치 방식으로 만들어진 모델을 정점(Vertex, 폴리곤을 이루는 기준점)이 있는 폴리곤 모델로 바꾸어주는 역할을 한다. 기준선들을 연결하는 부드러운 곡선으로 이루어진 패치 모델은 그래픽 카드가 인식하지 못하기 때문이다. 버텍스 프로세싱(Vertex Processing)은 앞 단계에서 만들어진 데이터의 정점(Vertex)을 파악해 필요한 연산을 수행하는 단계다. 각 점의 위치를 변환하거나 기본 색상을 결정하고, 안개 요소나 텍스처 좌표를 설정하는 등 전체적인 모양을 결정하게 된다. 지오메트리 프로세싱(Geometry Processing)은 버텍스 프로세싱에서 만들어진 전체의 형태를 관리하는 부분이다. 이 단계에서는 3D 오브젝트를 2D 화면(모니터)에 표현하기 위한 기본적인 속성을 처리한다. 픽셀 프로세싱(Pixel Processing)에서는 실제로 2D 화면에 표시될 각 픽셀의 정보를 처리한다. 3D 오브젝트에 텍스처를 입히고 픽셀의 질감 등을 표시하게 되는 단계이기 때문에, 색상에 관련된 고급 기술들이 대부분 이 단계에서 결정된다. 여기서 결정된 모든 요소들을 실제로 화면에 표시하는 단계가 픽셀 렌더링(Pixel Rendering)이다. |
① 프로그래머블 셰이더
다이렉트X가 3D 오브젝트를 처리하는 과정, 즉 다이렉트X의 파이프라인은 다음과 같다.
다이렉트X는 위와 같은 과정을 거쳐 시스템이 요청한 3D 오브젝트를 화면에 표시하는데, 이 과정을 ‘고정함수 파이프라인’이라 부른다. 이런 과정들은 다이렉트X 안에 함수 형식으로 미리 저장되어 있기 때문에, 개발자가 일일이 저 과정을 하나씩 명령어로 적어 넣지 않아도 입력 명령어를 넣는 것 하나만으로도 쉽게 쓸 수 있다. 이런 식으로 그래픽 표현을 ‘쉽게’ 처리해주는 것이 다이렉트X의 기본적인 역할이고, 개발자들의 수고를 덜어주는 부분이기도 하다.
하지만 초보자용 자전거에 기어의 수가 적듯이, 쉽게 쓰는 것을 목적으로 만들어진 다이렉트X는 기능이 너무 꽉 짜여 있는 것이 문제였다. 예를 들어 안개를 표현하려면 2~5줄의 짧은 명령어만 적어 넣으면 되지만, 그 결과물로 출력되는 안개는 극히 평범하고 뿌연 안개에 지나지 않는다. 만약에 안개가 게임 상의 캐릭터의 움직임에 따라 농도가 바뀌거나 불규칙적으로 퍼져 있는 안개가 조금씩 흘러가는 모습, 안개가 불꽃과 섞여 사라져가는 모습 등은 다이렉트X의 기본 명령어만으로는 표현하기 무척 어려웠던 것이다.
그래서 다양한 표현을 하기 위해 고정함수 파이프라인에서 일부 기능을 유저가 직접 조절할 수 있도록 옵션을 붙일 필요가 있었고, 그 옵션을 ‘프로그래머블 셰이더(Programmable Shader)’ 혹은 그냥 ‘셰이더(Shader)’라 부르게 되었다.
|
|
|
▲ 셰이더는 단순히 표현력을 늘리기 위한 것만은 아니다. 담당 부분의 연산을 CPU 대신 그래픽 카드로 넘기는 역할도 맡는다 |
다이렉트X 8부터 도입되기 시작한 셰이더는 게임 그래픽의 발전에 많은 영향을 미쳤다. 사실 다이렉트X의 기능에 여러 가지 표현을 추가하기 위한 셰이더조차도 다이렉트X와 같은 일종의 함수 개념이라 미리 짜여진 틀 안에서 구동될 수밖에 없었지만, 그래도 다이렉트X의 표현 범위를 크게 넓혔다는 점에서는 큰 의의를 가진다.
셰이더의 이름은 그 셰이더가 조절할 수 있는 과정에 따라 붙여진다. 위의 고정함수 파이프라인에서 버텍스 프로세싱(Vertex Processing)을 관리하는 것을 버텍스 셰이더, 픽셀 처리(Pixel Processing) 부분을 관리하는 것을 픽셀 셰이더라 부른다.
버텍스 셰이더는 3D 오브젝트의 정점, 즉 형태를 만드는 기준점을 관리하는 기능을 담당한다. 단순하게 말하면 화면에 점을 찍고 그 점들을 연결한 면, 즉 폴리곤을 만드는 기능인 셈이다. 픽셀 셰이더는 계산된 폴리곤에 붙여진 텍스처를 컴퓨터 모니터에 표시하는 과정인 렌더링에 다양한 연산을 추가하는 기능을 담당한다.
다이렉트X 10에 들어있는 셰이더 4.0에는 버텍스 셰이더와 픽셀 셰이더 외에도 지오메트리 셰이더(Geometry Shader)가 추가되었다. 지오메트리란 버텍스 프로세싱의 결과로 만들어진, 텍스쳐가 입혀지지 않은 3D 오브젝트를 말한다. 지오메트리 셰이더는 3D 오브젝트의 형태에 다양한 변화를 줄 수 있는 셰이더로, 바위의 굴곡이나 물결 등 형태적인 바리에이션을 갖고 있는 물체를 더욱 현실감 있게 표현하는 역할을 담당한다.
사실 이러한 표현 자체는 다이렉트X 9.0의 기능만으로도 처리할 수 있지만, 지오메트리 셰이더는 그런 표현들을 간단한 명령어로 대체하기 때문에 개발자의 수고를 조금이나마 덜어준다. 또한 지오메트리에 관련된 CPU 연산을 그래픽 카드 스스로 처리할 수 있게 되어, 게임의 전반적인 속도를 높이는 데도 큰 역할을 한다.
|
|
|
▲ 엔비디아가 지오메트리 셰이더의 기능을 보여주기 위해 샘플로 제시한 개구리 모델. 마우스로 얼굴을 잡아당기면 쭈욱 늘어난다 |
② 다이렉트X 8.0 & 셰이더 1.0, 2.X
셰이더가 처음으로 적용된 것은 다이렉트X 8부터였지만, 엄밀히 말하면 다이렉트X 8은 셰이더를 포함하고 있다기보다는 셰이더를 쓸 수 있게 한 것뿐이었다. 이는 셰이더 개발 초기에 엔비디아와 ATi가 자기들만의 표현 방식을 고수하면서 서로 자기네 것이 표준이라고 주장했기 때문이었는데, 그 탓에 셰이더 모델 1과 모델 2에는 너무 많은 표준안이 들어서는 바람에 이도 저도 아닌 물건이 되어버리고 말았다. 앞의 표에서 인스트럭션 슬롯과 입력 레지스터의 수를 보면, 셰이더 모델 1.0과 2.0은 하도 스펙이 자주 바뀌는 바람에 명확한 스펙을 정의하기 어려웠음을 확인할 수 있다.
③ 다이렉트X 9.0 & HLSL
셰이더 개발 초기에는 마이크로소프트조차도 이렇다 할 표준안을 내놓지 못하는 바람에, C언어를 기반으로 하는 다이렉트X에 셰이더에 관련된 명령어를 넣지 못했다. 그래서 셰이더 버전 1을 게임에 적용하고 싶은 개발자는 기계어인 어셈블리어로 명령어를 작성해야 했는데, 개발자들 입장에서는 끔찍한 고역이었다.
이를 해결하기 위해 마이크로소프트가 다이렉트X 9.0과 함께 발표한 것이 바로 HLSL(High Level Shading Language)이다. 개발자들에게 익숙한 C언어로 셰이딩 기술을 쓸 수 있도록 개발된 명령어 세트인 HLSL을 통해, 게임 개발자들은 적은 노력으로도 쉽게 현실감 있는 3D 표현을 할 수 있게 되었다.
다이렉트X 10에는 셰이더 모델 4.0을 지원하는 새로운 개발 언어인 HLSL 10이 들어있다. 셰이더 모델 4.0에는 이전까지 고수해 오던 버텍스 셰이더와 픽셀 셰이더 외에 지오메트리 셰이더가 포함되어 있으므로, 그에 맞추어 HLSL의 버전도 업그레이드되었다.
|
|
|
▲ HLSL의 기본적인 개발 인터페이스 |
④ 셰이더 3.0
엔비디아와 ATi의 자존심 싸움으로 표류하고 있던 셰이더 2.X가 드디어 제대로 된 표준안으로 자리 잡기 시작한 것은 셰이더 3.0이 발표되면서부터였다. 다이렉트X 9.0c에서부터 적용되기 시작한 셰이더 3.0은 2.X 버전에서 내부 레지스터의 수가 변화되고 셰이더의 명령 수가 늘어나는 등 내부적으로는 상당한 변화가 있었다. 하지만 몇몇 유저들은 모션 블러 등의 기능이 조금 추가된 것 외에는 실제로 유저들이 보는 화면 자체에는 큰 변화가 없었다고 불만을 토로하기도 했다.
※ 다이렉트X와 셰이더의 버전
|
다이렉트X 버전 |
픽셀 셰이더 |
버텍스 셰이더 |
|
8.0 |
1.0, 1.1 |
1.0 |
|
8.1 |
1.2, 1.3, 1.4 |
|
|
9.0 |
2.0 |
2.0 |
|
9.0a |
2_A, 2_B |
2.X |
|
9.0c |
3.0 |
3.0 |
|
10.0 |
4.0 |
4.0 |
⑤ 셰이더 4.0
셰이더가 모델 2.X에서 모델 3.0으로 발전해도 실질적으로 유저들에게 보이는 화면에는 큰 차이가 없었던 것에 비해, 다이렉트X 10과 함께 발표된 셰이더 모델 4.0은 눈으로 보이는 화면에서 큰 차이가 보일 것이 예상된다.
가장 큰 이유는 바로 지오메트리 셰이더의 포함이다. 지오메트리 셰이더는 물체의 형태 자체를 변형하는 기능을 담당하기 때문에, 셰이더 3.0으로 표현된 오브젝트와 셰이더 4.0으로 표현된 오브젝트는 오브젝트의 모양 자체가 달라지게 될 것이기 때문이다. 또한 지오메트리 셰이더의 스트림 I/O 기능으로 대량의 그래픽도 빠르게 처리할 수 있게 되었다.
과연 셰이더 3.0과 셰이더 4.0의 그래픽은 어떤 차이를 보일까?
다이렉트X 9.0을 지원하는 윈도우XP와 다이렉트X 10을 지원하는 윈도우 비스타에 동일한 게임을 설치해 그래픽을 비교해 보았다. 백문이 불여일견이라니, 직접 보고 평가해보도록 하자. 게임 상에서의 테스트를 위해 다이렉트X 9.0과 10을 동시에 지원하는 ‘마이크로소프트 플라이트 시뮬레이터 X’를 구동해 보았다.
|
테스트 PC의 사양 CPU : 코어 2 듀오 6300 메인보드 : 아수스 P5B-VM 그래픽 : 엔비디아 지포스 8800GTX 메모리 : 2GB DDR2-800 하드디스크 : 160GB 운영체제 : 윈도우XP 프로페셔널 SP2, 윈도우 비스타 얼티미트 에디션(32비트) |
|
|
|
▲ 윈도우XP에서 구동한 게임 화면 |
|
|
|
▲ 윈도우 비스타에서 구동한 게임 화면 |
아쉽게도 게임의 특성상 배경화면을 찍기 적당한 구도를 잡기 어려워서(이 게임은 조작이 상당히 까다롭다) 비행기의 뒷배경을 클로즈업할 수는 없었지만, 바다의 질감 표현에서 다이렉트X 9.0과 다이렉트X 10이 약간의 차이를 보이는 점을 발견할 수 있었다. 특히 다이렉트X 10에서는 물결이 햇빛에 반사될 때의 질감이 조금 더 현실감 있게 표현된다. 비행기를 몰고 바다로 돌진해본 결과, 다이렉트X 10으로 표현된 바다는 파도의 표현이 더 디테일하게 바뀌는 것을 확인할 수 있었다.
숲의 표현이 조금 디테일해지지 않았을까 싶어 비행기를 몰고 숲속으로 뛰어들기도 했지만, 아쉽게도 나무 하나하나는 그다지 디테일하게 표현되지 않은지라 큰 차이를 발견할 수 없었다. 그러나 비행기 자체의 반사광이나 질감 표현은 다이렉트X 10쪽이 더 디테일한 모습을 보인다.
온라인에 공개된 다음의 두 그림은 조금 더 나은 앵글을 잡았기에 덧붙여 소개한다.
|
|
|
▲ 다이렉트X 9.0에서 구동한 플라이트 시뮬레이터 X의 스크린샷이다 |
|
|
|
▲ 같은 화면을 다이렉트X 10으로 보면 이렇게 다르다 |
테스트에 쓴 지포스 8800의 그래픽 성능이 워낙에 뛰어난지라 프레임이 끊기는 현상이 발생하지 않기 때문에, 다이렉트X 9.0과 다이렉트X 10의 속도 차이는 육안으로 확인할 수 없었다. 후에 성능을 비교한 벤치마크를 진행할 계획이니 기대해주기 바란다.
⑥ 통합 셰이더 아키텍처
엔비디아에서 발표한 다이렉트X 10용 그래픽 카드인 지포스 8800 시리즈의 스펙을 유심히 살펴본 유저라면, 픽셀 셰이더와 버텍스 셰이더의 파이프라인이 통합되었다는 점을 기억하고 있을 것이다. 다이렉트X 10에서 셰이더의 효율을 최대로 높이기 위해 도입된 기술이 바로 통합 셰이더 아키텍처다.
이전까지의 그래픽 카드는 픽셀 셰이더와 버텍스 셰이더의 파이프라인이 분리되어 있었다. 일반적으로 정점의 위치를 계산하는 버텍스 셰이더보다 픽셀의 질감을 계산하는 픽셀 셰이더가 더 많은 연산 분량이 필요하기 때문에, 대부분의 그래픽 카드는 픽셀 셰이더에 더 큰 비중을 두어 제작되기 마련이었다.
하지만 통합 아키텍처에서는 픽셀 셰이더와 버텍스 셰이더의 연산자가 하나로 통합되어, 어느 한 쪽에 부하가 걸렸을 때 나머지의 놀고 있는 자원을 최대한 동원해 연산을 도울 수 있다. 이 통합형 아키텍처를 통해 지포스 8800은 그래픽 성능을 크게 높이는 데 성공했다. 앞으로 출시될 다이렉트X 10용 그래픽 카드에는 모두 이 기능이 지원될 것이므로, 전반적인 그래픽 성능이 대폭 향상될 것을 기대해도 좋을 것이다.
- 지스타 불참사 관계자들이 밝힌 '지스타 패싱' 이유
- "약속 위반" 엔씨, 아이온2 P2W 상품 논란 일자 철회
- 타르코프 스팀판 환불하니, 기존 계정까지 차단 당했다?
- 몬길 PD와 사업부장, 프란시스와 린 코스프레 약속
- 게임 과금에 '배송 실패'가 웬 말? 아이온2의 미숙한 오픈
- 출시 2일 만에 PvP ‘뉴비 제초’ 문제 터진 아이온2
- 최대 96%, 다이렉트 게임즈 ‘블랙 프라이데이’ 할인 시작
- 콘코드 팬 복원 프로젝트, SIE에 의해 중지
- 국산 서브컬처의 희망, 육성 RPG '스타세이비어'
- [순정남] '대책 없는 쓰레기'지만, 평가는 좋은 악당 TOP 5
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|



































