교컴로고초기화면으로 header_kyocom
교컴메뉴
교컴소개 이용안내 소셜교컴 나눔마당 배움마당 자료마당 교과마당 초등마당 특수마당 글로벌교컴 온라인프로젝트학습 교컴 UCC
회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.
교컴 키우기 자발적 후원


:::: 교컴가족 로그인(0)


교컴 포토갤러리

3D자료 강좌

OpenGL 2.0 과 DirectX 9.0 비교

유춘모 | 2005.04.04 21:53 | 조회 3170 | 공감 0 | 비공감 0

Fahrenheit블로그에서 발췌한 글로서 그래픽의 양대 산맥 OpenGL 2.0 과 DirectX 9.0 비교 내용으로 앞으로  그래픽카드 구입에도 영향을 줄 수 있다고 생각되어 올립니다. 

쩐있으면 Nvidia의 Gforce나 ATI계열의  Readon 보다 쿼드로FX계열이 최고입니다. 돈이 웬슈죠~

 

Fahrenheit의 꿈

 

평범한 게임 개발자들로서는 하드웨어 사양 및 API가 단일할수록 작업이 편한다. 한 곳에 집중할 수 있기 떄문이다. 콘솔 플랫폼이 매력적인 이유 중의 하나도 그것일 것이다. OpenGL은 업계 표준의 그래픽 API로 멀티플랫폼과 쉽고 간단한 API를 주무기로 실시간 그래픽스계의 표준으로 자리잡았다. 3D 게임의 등장과 함께 OpenGL은 자연스럽게 게임에 도입되기 시작한다. 항상 특유의 뚝심으로 시장을 독차지하는데 익숙한 마소가 가만히 있을리 없을터 DirectX 3.0부터 일반에 공개가 되면서 OpenGL에 선전포고를 하게 된다. 조잡한 API와 모자란 기능으로 초장부터 OpenGL에게 상대가 되질 않았으나 그를 밀고 있는 것이 마소이기에 그 승부는 누구도 쉽사리 예측할 수 없는 것이었다. 게임 개발자들도 3D 게임을 개발하기에 앞서 먼저 선택을 해야만 했다. 능력이 출중한 일부는 모두를 다 지원하는 길을 택했으나 바쁜 일정과 자원 안에서 그런한 옵션이 누구에게나 가능한 것은 아니었다. 그런 와중에 Fahrenheit라는 공통 인터페이스로 두 API를 통합할 것이라고 OpenGL의 창시자 SGI와 마소가 발표한 적이 있었다. 하지만 각자의 동상이몽 속에서 모든 게임 개발자들의 속을 편하게 했을지 모를 통합 API 프로젝트는 끝내 그 빛을 보지 못하고 말았다. 엄청난 버전업으로 시장 지배를 위한 돌진한 DirectX은 어느덧 9.0을 눈앞에 두고 ARB라는 그룹에 의해 공동 관리되는지라 지지부진할 수 밖에 없는 OpenGL조차 2.0이라는 메이저 버전업을 눈앞에 두기에 이르렀다. 눈부신 컨슈머 하드웨어 그래픽 가속 기술의 발전 덕분이리라. 항상 반갑지만은 않은 기술의 발달은 우리 소시민 개발자들에게 또다시 선택을 강요하고 있는 것이다.

 

열린 표준, 늦은 발걸음 2.0에 희망을 건다

 

OpenGL은 나온지 10년이 지난 API이다. 그래픽스 워크스테이션계의 선두주자였던 실리콘 그래픽스가 개발한 IrisGL에 그 뿌리를 둔 이 API는 자연스레 프로슈머 시장에서 업계 표준으로 자리 잡기 시작한다. 한편, 울펜스타인을 시작으로한 3D 게임의 등장과 함께 게임계에도 그러한 API의 필요성이 대두되기 시작한다. 초창기에는 소프트웨어 렌더링이라는 이름으로 개발자가 오늘날에는 API가 담당하는 하부 알고리즘까지 모두 코딩하였다. 하지만 컨슈머 3D 가속 하드웨어의 등장과 함께 3D를 위한 표준 API 사용은 피할 수 없는 흐름이 되었고 자연스레 OpenGL이라는 API가 게임계에도 도입되기 시작한다.

부두를 만든 3dfx같이 하드웨어 가속 시장에 대한 지배력을 바탕으로 자체 API(부두의 경우 GLIDE라는)를 제시한 곳도 있었지만 그외에는 다른 분야에서 이미 표준으로 인정받은 OpenGL과 마소가 새롭게 만들어낸 DirectX를 지원하는 길 뿐이었다. OpenGL은 초기 그 명쾌한 API를 강점으로 Quake같은 유명 게임의 후원을 받으면서 그 세를 확장하게 된다. DirectX는 통합 패키지라는 강점에도 불구하고 초기 떨어지는 기능과 API의 복잡함으로 어느 정도 외면받았다.

하지만 세월의 흐름 속에 마소는 DirectX를 고치고 또 고치고 개발자들이 원하는 기능이라면 과감히 라이브러리에 도입함으로써 7.0때에 이르러서는 OpenGL과 기능적으로 차이가 없어지고 제반 지원면에서 앞서가기 시작한다. DirectX가 3번 이상의(일반에 공개된 DirectX 3.0 버전부터 고려할 때) 메이저 리비전을 거치는 동안 OpenGL은 현재의 자리에 안주하고 단지 1.2버전에 머무르게 된다. 하드웨어의 신기능들은 쉽사리 OpenGL 표준으로 통합되지 못하고 수많은 확장(extension) 스펙들만 난무하게 된다. 그러나 이때까지만해도 선두주자로서의 위상이 무너지긴 했지만 플랫폼 호환과 깔끔한 API로 어느 정도의 경쟁력은 남아 있었다.

한편, 하드웨어 업계에서는 하드웨어 T&L(Transform & Lighting) 기능과 함께 GPU라는 개념이 대두된다. 이 와중에 3dfx라는 거목이 시대의 흐름에 발맞추지 못하다 쓰러지고 업계는 NVIDIA와 ATI의 양강 체제로 서서히 굳어져 간다. 하드웨어 발전에 따른 DirectX 8.0과 쉐이더의 등장은 OpenGL에 치명타를 날리고 OpenGL은 더 이상 구식 API라는 오명을 벗어날 수 없게 된다. OpenGL 신봉자였던 필자의 믿음이 흔들렸던 것도 이 순간이었다. 하지만 그래도 OpenGL을 사랑하는 사람들이 많이 있었으니 그러한 발전에 자극받아 GL계도 점차 페이스를 올리게 된다. 1.3, 1.4로 이어진 버전업으로 어느정도 DirectX의 그것을 따라잡을 수는 있었다. 하지만 그러한 마이너 리비전으로는 과거의 선도 API로서의 위상을 되찾는데는 한참 역부족이었다. 이때 주로 프로슈머용 그래픽 가속 카드를 만들던 3Dlabs라는 한 회사가 망하고 사운드 블라스터로 유명한 Creative에 흡수되더니 뜬금없이 GL 2.0을 스펙을 제안하고 나선다. 좀더 파워있는 회사가 나섰으면 하는 아쉬움은 남지만 어쨌든 GL의 과감한 버전업을 고대하던 많은 신봉자들에겐 가뭄의 단비와 같은 발표였으리라. ARB 회의를 거치면서 그러한 제안은 거의 표준으로 받아들진 듯이 보인다. 제안된지 어느덧 1년 이상 지나고 아직 2.0이 언제 나올 것이라는 소식은 없지만 그래도 우리는 희망을 가져야 한다. GL 2.0은 그러한 기다림의 가치가 있어 보인다.

 

OpenGL 2.0 그 실체

 

게임 개발자로서는 우리가 관심있는 것은 GL 2.0이 과연 예전의 위상을 되찾을 수 있을 만큼 혁신적이며 앞으로 등장할 최신 하드웨어를 뒷받침할 수 있을 것인가 하는 점이다. 그러한 점이 2.0에서도 충족되지 않는다면 적어도 게임내의 3D API로서 GL은 역사의 뒤안길로 사라질 수 밖에 없을 것이기 때문이다.

아직 확정된 것은 아니지만 지금까지 3Dlabs가 제안하고 있는 GL 2.0의 스펙을 살펴봄으로써 우리는 그 해답을 얻고자 한다. 결론적으로 GL 2.0의 주요 특징은 다음의 요약될 수 있다.

- 쉐이딩 언어(vertex processor, fragment processor)

- 객체(objects)

- 비동기 동작(asynchronous behavior)

- 메디아 라이브러리로의 확장(OpenML과의 통합)

- 하위 호환성

 

쉐이딩 언어

프로그래머블 그래픽스 파이프라인 개념을 공격적으로 수용한다. 그러한 파이프라인으로 GL 2.0은 vertex, fragment, unpack, pack processor의 4가지를 제공한다. 앞의 2개는 흔히 말하는 정점, 픽셀 쉐이더에 해당하는 개념이다. 언팩, 팩 프로세서는 다양한 이미지 파일 포맷을 지원하고 뒤에 나오는 메디아 라이브러리로서의 기능을 위한 것으로 pixel값을 얻어오고 다시 쓰는 과정에서 특정한 프로세싱을 가능하게 해준다. 게임 개발자로서 우리에게 관심있는 것은 무엇보다도 vertex, fragment 프로세서일 것이다. 정점을 위한 쉐이딩 언어는 C에 기반을 두고 조건문, 반복문, 서브루틴 호출 등도 지원할 것이다. Fragment 프로세서도 거의 동일한 언어 제반 함수들을 제공하게 될 것이다. 필자가 그러한 쉐이딩 언어 스펙을 자세히 살펴보고 난 후의 느낌은 상당한 하이 레벨의 언어라는 것이다. 고차원 언어라는 관점에서 오름 차순으로 정리하자면 어셈블리 쉐이더<Cg<GL 2.0 쉐이더<스탠포드 쉐이딩 언어<렌더맨이 될 것이다. 과거 OpenGL이 처음 나왔을 때처럼 향후 몇 년간은 충분히 뒷받침해줄 수 있으리라 기대될 정도의 융통성을 가진 시스템이다.

 

객체

OpenGL 1.1에서도 텍스쳐 객체(texture object)와 같은 개념이 있었다. 이러한 그래픽 객체의 개념은 C++ 및 COM에 기반을 둔 DirectX에서는 당연하게 받아들여지고 있는 것이다. GL은 2.0에서도 C에 기반을 둔다는 점에서는 변함이 없다. 하지만 매끄러운 API를 위해서는 객체 지향에서와 같은 객체의 개념은 필요불가결한 것이 되었다. 이에 GL 2.0에서는 객체의 개념을 적극 활용하여 텍스쳐 객체, 큐브맵 객체, 정점 배열 객체, 이미지 객체, 디스플레이 리스트 객체, 쉐이더 객체, 프로그램 객체, 프레임 버퍼 객체 그리고 버퍼 객체의 총 9가지 종류의 객체를 제공하게 된다. 몇몇 객체들(큐브맵, 텍스쳐, 프레임 버퍼 객체 같은) 은 별도의 데이터 없이 단순히 다른 객체들을 담는 컨테이너이다. 다른 객체들(이미지, 정점 배열, 디스플레이 리스트, 쉐이더, 그리고 버퍼 객체 같은)은 고유의 자료구조를 담는 저장소로서 역할하게 된다. 프로그램 객체는 쉐이더 객체에 대한 컨테이너 역할도 하면서 한번 링크 과정이 끝나면 실행 프로그램에 대한 데이터를 저장하게 된다는 점에서 약간 독특하다 하겠다.

 

비동기 동작

GPU가 복잡한 작업을 하는 동안에 API가 리턴하지 않아 CPU도 놀아야 한다면 상당한 낭비가 될 것이다. CPU 및 GPU가 비동기적으로 동작할 수 있도록 하기 위해 Nvidia가 관련 확장(GL_NV_fence)을 내놓았었다. GL 2.0에서는 이러한 개념을 더욱 확장하여 비동기 동작을 가능하게 하고 그의 적절한 동기화 메카니즘도 지원하게 된다. GLsync라는 데이터 타입이 생기고 그 생성 및 소멸을 담당하고 그 완료를 기다리는 관련 함수들이 새로이 등장한다. 이러한 것들은 간단하지만 강력한 동기화 툴을 제공하게 될 것이다.

 

메디아 라이브러리로의 확장

크로노스 그룹(Khronos Group)에서 제안하고 있는 매체 저작 및 재생을 위한 API 스펙인 OpenML의 개념을 도입하여 GL을 매체 라이브러리(DirectShow와 유사하지만 좀더 저차원의 개념이라 여기진다)로 확장시킨다. 이를 위해 다음과 같은 기능들이 지원된다.

- 높은 정밀도 및 더 넓은 범위를 가지는 색상

- 텍스쳐로 렌더링하기

- 메모리 및 텍스쳐 관리 개선

- 2의 자승꼴이 아닌 텍스쳐의 지원

- Fragment 및 정점 쉐이더

- 긴 동작의 비동기 바인딩 지원

- 인터레이스드 비디오를 위한 텍스쳐 필터링

 

하위 호환성

OpenGL과 같은 넓은 분야에서 광범위하게 쓰이는 API는 업그레이드 시에 항상 하위 호환성이라는 문제가 걸리게 된다. 업그레이드가 잦은 DirectX같은 경우 기존 버전에 대한 COM 인터페이스도 얻어쓸 수 있게 하여 이를 해결하고 있다. 이를 위해 GL 2.0에서는 점진적 과정을 취하게 된다. 즉, 바로 간소화되고 새로운 기능에 최적화된 순수 2.0 API로 급선회하는 대신 일단 기존 버전에 대한 API를 포함하는 포괄적인 2.0 API를 제시하고 점진적으로 순수 2.0 API로 전향할 수 있도록 배려하겠다는 것이다.

 

마소의 강력한 추진력으로 이제는 우리가 선도한다

 

마소는 얼마전 Xbox를 출시하였다. 많은 기대와 희망 속에 야심차게 내놓은 마소의 첫 게임기는 현재로서는 전체적으로 볼 때 고전을 면치 못하고 있는 실정이다. 하지만 마소는 웹 브라우저 전쟁에서도 종국에 승리하였고 3D API 표준에서도 점차 DirectX를 표준으로 만들어가고 있다. 광속으로 날아오르는 가속기의 성능에 힘입어 마소는 DirectX로 단순한 게임 API 이상의 것을 꿈꾸고 있는 것이다. 하드웨어 쉐이더의 등장과 더불어 DCC(Digital Contents Creation) 툴과 이러한 실시간 API 사이의 연동은 하나의 대세가 되었고 실시간과 비실시간의 격차는 점점 좁혀지고 있다. 이러한 시점에서 마소가 내다보는 다음 세대의 API가 무엇인지는 그의 아홉번쨰 DirectX에서 살펴볼 수 있을터. 마소의 추진력을 알기에 우리는 싫던 좋던 그를 알아야 한다.

 

DirectX 9.0의 참모습

 

필자가 이 글을 써나가고 있을 무렵 DirectX 9.0이 출시되었다. 덕분에 좀더 자세한 정보를 얻을 수 있었다. 예정보다 늦기는 했지는 막강한 기능으로 무장하여 등장한 마소의 아홉번째 작품은 다시금 우리 소시민 개발자들을 조롱하고 있는 것이다. 이제 막 8.0에 익숙해져 가고 그를 제대로 지원하는 하드웨어가 보편화되고 있는 시점에서 다음 버전이 나와 버린 것이다. 먼저 드러난 그 실체를 자세히 살펴보고 그 지향점을 찾아보자. 여기서는 DirectX Graphics만을 다루도록하겠다. 다음은 그 주요 특징이다.

- 대폭 강화된 쉐이더 2.0 그리고 3.0

- 변위맵

- 오클루전 컬링

- 양면 스텐실

- GDI와의 통합

 

대폭 강화된 쉐이더 2.0 그리고 3.0

일단 쉐이더가 단순한 핸들에서 하나의 객체로 승격되었다. 버텍스 쉐이더는 256개의 명령어와 최소 256개의 상수 레지스터를 지원한다. 상수 기반의 정적 흐름 제어가 가능하고 서브루틴 개념도 지원한다. 픽셀 쉐이더는 샘플러 레지스터를 도입하여 텍스쳐 데이터와 그의 샘플링을 구분하였고 96개의 명령어 슬롯을 가지며 레지스터 수도 증가하였다. 더 이상 텍스쳐 어드레싱 연산과 산술 연산을 구분할 필요가 없어졌으며 부동 소수 데이터형도 지원하게 되었다. 그 외에 두 쉐이더 모두 막강한 새 명령어들로 무장하였다. 하드웨어의 눈부신 발전에 대비한 듯 DirectX 9.0은 놀랍게도 3.0버전의 쉐이더 스펙도 제시하고 있다. 버텍스 텍스쳐링, 스탠포드 쉐이딩 언어에서의 그것과 유사한 버텍스 스트림의 프리퀀시 개념, 동적 흐름 제어, 렌더맨이 지원하는 것과 같은 그레디언트 명령어 등 렌더맨의 파워에 근접하고 있다. 아직까지는 기본적으로 어셈블리 언어를 고수하고 있지만 D3DX 확장 라이브러리를 통해 Cg와 같은 HLSL(High Level Shading Language)도 지원하고 있다.

변위맵

범프맵의 발전된 형태인 변위맵을 지원한다. 범프맵과는 달리 실제 지오메트리를 변경시키는 것이다. 렌더맨에서의 변위 쉐이더와 유사한 역할을 하게 된다. 반면, 어댑티브 테셀레이션과 더불어 정점 단위로 이루어지게 된다는 점에 픽셀 단위로 이루어지는 렌더맨의 그것과 차이가 난다. 즉 정점 파이프라인에서 텍스쳐에 접근하는 일이 요구되는 작업이다. 이 기법이 대중화되면 기존의 메쉬 단순화 기반의 기법들을 대신하여 매우 효율적인 LOD 체계로 사용될 수 있을 것이다. 범프맵을 대신하는 고품질의 렌더링 기법으로 지형 렌더링에도 유용하게 쓰일 수 있다.

오클루젼 컬링

하드웨어적으로 현재 어떤 지오메트리가 보일지 안보일지를 질의할 수 있게 해주는 기능이다. Nvidia가 얼마전부터 GL 확장으로도 지원을 시작한 기능이다. 기존의 BSP나 포탈 기법 등과 연동하여 사용하면 매우 효율적인 가시성 판정 파이프라인을 꾸밀 수 있다. 단순한 렌더링 API 이상의 것을 지향하는 DirectX의 면모를 보여주는 부분이다.

양면 스텐실

스텐실 버퍼를 사용한 쉐도우 볼륨 기법과 관련된 기능이다. 쉐도우 볼륨 기법은 가리개 물체와 광원에 의해 만들어지는 쉐도우 볼륨을 한번은 앞면만, 그 다음엔 뒷면만 그리면서 적절히 스텐실 버퍼를 조작하여 볼륨 안에 있는(즉, 그림자를 드리워야 할) 픽셀들을 골라내는 기법이다. 따라서 스텐실 버퍼에 똑 같은 지오메트리를 두번 렌더링해야 한다. 이것은 분명이 하드웨어의 정점 대역폭을 낭비하는 것이다. 양면 스텐실은 한번의 렌더링만으로 앞면, 뒷면을 모두 고려할 수 있게 해주는 기능이다. 현재에도 다소 부담되는 쉐도우 볼륨 기법의 사용을 한층 가볍게 해줄 것이다.

GDI와의 통합

GDI와 제대로 통합되었다. 이제 DirectX 서피스에서 DC를 얻어낼 수 있다. 더 이상 폰트 렌더링과 같은 GDI 상에서 매우 간단한 일을 DirectX 상에서 구현하기 위해 고생할 일이 없어진 것이다. 그 밖에도 DirectX 윈도우가 대화 상자 같은 표준 윈도우 컴퍼넌트들과 좀더 호환되게 동작할 수 있게 되었다.

 

개발자의 변 그리고 미래

이상으로 양 API가 제공하려는 것들을 살펴보았다. 언뜻 비슷하면서도 상당히 틀려 보인다. GL이 그 출발대로 렌더링 API로서의 기능에 중점을 두고 있는데 반해 DirectX는 종합 게임 그래픽스 API로서 렌더링과 직접 관련되지 않은 최신 하드웨어 테크닉들도 과감히 도입하고 있는 모습을 볼 수 있다. 쉐이더 지원 면에서도 둘의 차이는 확실하다. DirectX가 2.0과 3.0의 단계를 통한 과감하지만 상당히 현실적인 길을 제시하고 있는데 반하여 GL은 당장의 풀 스펙 지원 하드웨어 출현은 어려워 보이지만 향후 10년간은 버틸 수 있을만한(과거의 GL이 그러했듯이) 하이레벨 언어를 제시하고 있는 것이다.

필자의 견해로는 둘 모두 나름대로 바른 방향성을 제시하고 있는 것 같다. 두 API의 양립은 일견 공부해야할 부분을 두배로 늘리는 듯 보이지만 다른 쪽으로 생각하면 우리에게 선택의 여지를 주는 것이다. 좋든 싫든 선택의 여지가 없기 때문에 한 API만 써서 프로그래밍해야 한다면 그 얼마나 따분한 일일 것인가. 현재까지처럼 두 API가 서로 경쟁하면서 발전해나갔으면 하는 것이 필자의 바램이다.

한가지 걱정되는 것은 OpenGL 2.0의 출시가 아직 확정되지 않았다는 점이다. 초기 스펙이 발표된지 1년도 더 지났고 그 사이에 DirectX 진영은 한번더 메이저 버전업을 수행했다. 지금까지의 습관대로 GL이 느린 행보를 고수한다면 GL 2.0은 DirectX 9.0이 아닌 10.0과 싸워야 할 것이다. 그리고 그것은 매우 힘겨운 싸움이 될 것이다. GL로 게임 프로그래밍에 발을 들여놓은 한 사람으로서 필자는 GL이 2.0으로 화려하게 컴백하길 기대하고 있다. 3Dlabs여,  그리고 ARB여, 더 이상 머뭇거릴 시간은 없다. 이제 행동할 떄다.

 

 

<참고>

OpenGL 2.0 proposals

DirectX 9.0

좋아요! 싫어요!
twitter facebook me2day
110개(1/6페이지)
3D자료 강좌
번호 제목 글쓴이 조회 날짜
110 방송화면에 쓰이는 light burst효과는 어떻게 만들수 있을까? 첨부파일 [1] 유춘모 2337 2007.02.04 18:25
109 영상편집활용 회전하는 지구-3 첨부파일 유춘모 2326 2006.11.28 21:59
108 영상편집활용 회전하는 지구-2 첨부파일 유춘모 1903 2006.11.28 21:57
107 영상편집활용 회전하는지구-1 첨부파일 유춘모 2067 2006.11.28 21:54
106 3D 판타지 무협의 진수; 구룡쟁패 [2] 함영기 2347 2005.05.01 17:09
105 [vue 5] 바다의 여인 만들기 유춘모 2570 2005.04.09 23:17
104 Poser 6으로 Figure 애니를 만들었는데... 유춘모 2190 2005.04.05 19:25
>> OpenGL 2.0 과 DirectX 9.0 비교 유춘모 3171 2005.04.04 21:53
102 그래픽에서의 웹인쇄 강좌(1)시작 첨부파일 유춘모 2020 2005.03.09 10:07
101 Poser 5가 Poser 6으로 업그레이드 되었습니다. 첨부파일 [1] 유춘모 1920 2005.03.01 22:25
100 백두산 - 위성 사진으로 제작한 3D영상 [2] 함영기 3529 2004.12.12 21:46
99 3d프로그램 sketch up을 소개합니다. 이찬규 3240 2004.11.30 14:48
98 답글 RE:3d프로그램 sketch up을 소개합니다. 유춘모 2086 2004.12.03 21:44
97 heho applet3d 소개 유춘모 1969 2004.10.03 21:52
96 [소개] spaceillusion소개 8175 1743 2004.08.19 23:55
95 [after effects] 서드파디 플러그인 Final Effects 사진 첨부파일 8175 2072 2004.08.16 00:14
94 [포저]잔디밭에서 장애물 뛰어넘기 첨부파일 8175 2559 2004.08.10 13:31
93 시감상에 응용 8175 2137 2004.08.06 15:45
92 바닷속 돌고래 첨부파일 8175 2830 2004.08.01 15:37
91 [소개] Xfrog 3D소개 첨부파일 8175 2183 2004.07.30 23:16