DirectX 8, 새로운 게임환경을 꿈꾸며 ! [1]

중앙일보

입력

마이크로소프트의 DirectX 는, 지난 몇 년동안 PC용 게임을 작성하기 위한 다양한 방법들을 제시하는 API(애플리케이션 프로그래밍 인터페이스)로써 그 기능을 충실히 수행해 왔다. 최근에 시장에 출시되는 거의 모든 게임들은 어떠한 식으로든 DirectX의 기능을 사용하고 있다. 심지어 OpenGL 지원 게임으로 유명한 퀘이크 계열 같은 경우도, 사운드나 기타 입력장치 제어에 관한 부분은 DirectX 의 기능을 사용하고 있다. 마이크로소프트는 개발자들이 자신들의 게임을 만들 때 근본적으로 필요로 하는 기본적인 기능들을, DX7 API 에서 거의 대부분 포함하고 안정화하는데 성공을 했다. 장기적인 안목으로 볼 때, DX7 은 1단계 기반다짐 작업에 성공한 최초의 DirectX API 라는 것이다.

하지만 지금 마이크로소프트(이후 MS 라 지칭한다)는 DirectX 8로, 기능적인 성능향상을 꽤하려고 하고 있다. DX7에서 도로평탄작업은 끝난 상태이므로, 이제는 보다 더 고품질의 기능 및 이미지를 제공하는 API 로 도약하려고 준비중에 있는 것이다. 과연 DirectX 는 어떠한 기능을 제공함으로써, 개발자들에게 보다나은 프로그래밍 환경을 제시하고, 사용자들에게 새로운 게임 그래픽의 영역을 보여줄 것인지 이제부터 차근차근 살펴보기로 하자.

더 나은 그래픽 카드 최적화 프로그래밍 환경 지원
DirectX 8 에서 눈치챌 수 있는 가장 큰 성과는 Direct3D 에서 그래픽 인터페이스 개선이다. DX8에서 Direct3D 는 더욱더 향상된 예제 코드 및 참고 자료가 포함되어 있으므로, 개발자들이 코드를 사용하거나 이해하는 것이 더욱더 쉬워졌다. 가장 큰 장점은 그래픽 카드의 동작방식을 지정할 수 있는 프로그램 방식의 도입이다. DirectX 에는 Vertex 와 Pixel shader 라는 기능이 추가되었는데, 이것은 개발자로 하여금 그래픽 카드에게 특정 방식으로 동작하라고 명령을 내릴수 있는 프로그램을 작성할수 있게 만들어 준다.

진정한 의미의 T&L, Vertex shader
Vertex shader 인터페이스는 vertex 데이터를 운용하는 프로그램을 동작시키는 환경을 의미한다. 우리는 흔히 트라이앵글 이라고 언급을 하지만, 비디오 카드는 그러한 트라이앵글을 vertics 라고 부르면서 기본적인 연산의 기초로 삼는다. DirectX 8 의 vertex shader 인터페이스는, 3D 장면에서 vertex 데이터를 다루는 방식에 있어서 매우 간단한 언어로 최적화되어 있다. vertex shader 는 간단히 128개의 명령어와 128개의 레지스터 만을 포함하고 있는데, 거기에는 무한 루프나 분기 패쓰 같은 것에 신경쓸 필요가 없게 설계되어 있다. 이 간편화된 구조는 상당히 파워풀한 것이어서, 기나긴 프로그래밍 방식을 상당히 간편화 해줄것으로 기대되고 있다.

만약 개발자가 비교적 간단한 지오메트리 셋업가지고 있지만 (=적은수의 폴리건을 사용하지만), 복잡한 라이팅 환경을 갖춘 게임을 개발하고 싶다면, 이제는 기존의 방식은 던져버리고, 새롭게 도입된 vertex shader 인터페이스를 활용하여, 모든 연산작업을 그래픽 카드에서 수행하도록 간편화된 프로그램을 작성할수 있다. 현재의 비디오 카드들은 조금 이상한(?) 방식의 T&L을 지원하고 있는데, 그 이유는 그들이 주장하고 있는 Hardware T&L 기능에는 프로그래밍 접근면에서 다양한 유동성이 제공되지 못하고 있기 때문이다.


고수준의 주변환경 반사 효과

Vertex shader 는 진정한 의미의 반사(reflections)를 구현, 곡선모양의 표면을 구성하는 트라이앵글을 간단한 포인트 조작만으로 생성, level-of-detail(LOD) 값을 지정, vertics를 블렌딩하거나 생성, 그리고 복잡한 애니메이션 계산을 예전에 비해 훨씬 간소화된 함수만으로 프로그래밍 할 수 있는 환경을 제공해 준다. 게임 프로그래머들은 마침내 거의 모든 지오메트리 연산을 그래픽 카드상에서 구현할수 있게 된것이다.

(역주 : 물론 이러한 모든 기능들은 그래픽 카드 차원에서 Vertex shader 기능을 기본적으로 제공했을 때 가능하다는 이야기다. 그와함께 CPU 의 연산과정이 예전에 비해서 더 줄어들었음은 물론이고.)

통합화된 픽셀 처리 기능 Pixel shader
3D 그래픽을 구현한다는 것은, 지오메트리 연산을 마치고 화면상에 픽셀들을 그려주는 것을 의미한다. DirectX 8 에서는 3D 그래픽 구현의 첫 번째 단계로 vertex shader를, 두 번째 단계로 pixel shader 기능을 준비해 두었다. Pixel shader 는 벡터나 텍스쳐 데이터를 처리함에 있어서, 각 픽셀들 사이의 연산과정을 통합화하여 연산하는 기능이라고 볼수 있다. 기존의 DirectX 버전에서는 환경 범프매핑(Environment mapped bump mapping=EMBM), 광원 반사, 반사, 그리고 기타 독자들이 생각할수 있는 모든 텍스쳐 활용 기법을 고전적인 방식으로 처리해 왔다.

이러한 이펙트들은 기본적으로 다중 렌더링 과정을 통하여 화면상에 구현되게 되는데, 비디오 카드는 일단 오브젝트에 기본 텍스쳐를 입히고, 거기에 다른 텍스쳐를 덧씌우고, 또다른 텍스쳐를 덧씌우고, 덧씌운다. 이 과정은 최종적으로 원하는 화면이 구현될때까지 계속된다. 이 과정을 Pixel shader 를 통하게 되면, 최종적인 색상 값을 결정하는 계산이 픽셀이 화면상에 그려지기 전에 완료된다. 결과적으로 메모리 대역폭과 필레이트를 절약하는데 큰 도움이 될 수 있을 것이라고 한다. Pixel shader 기능을 지원하는 비디오 카드는, 기존의 방식대로 처리한다면 8단계나 혹은 그 이상의 멀티 렌더링을 수행해야만 구현할수 있는 하나의 픽셀을, 단지 한번의 패스만으로 생성할수 있다는 것이다.

이제까지의 모든 설명이 복잡하다고 생각한다면, 단 한가지 말만을 기억하자. DirectX 8 은 그래픽 카드를 위한 프로그래밍 언어를 포함하고 있다는 사실을. 일단 이 프로그래밍 언어를 사용할 수 있는 그래픽 카드가 출시가 된다면, 게임의 그래픽은 비쥬얼 측면에서 보다 더 화려해질 것이고, 내부적으로 보다 더 다양한 잠재적인 기능향상 요인을 가지고 있다는 점을 기억하자.

이창선
자료제공:pcBee(http://www.pcbee.co.kr)

ADVERTISEMENT
ADVERTISEMENT