'shader'에 해당되는 글 1건

  1. 2009.12.07 GPU와 셰이더(shader) 기술의 기초지식


아래에서 퍼옴

http://allosha.tistory.com/category/니시카와%20젠지/셰이더%20기술의%20기초지식


2008-01-25 22:20:00
この連載は、最新のパソコンやゲームに用いられている3Dグラフィックス技術を気が向くままに紹介していくものだ。 方針としては、ひとまず、比較的最新のPCゲームや、PS3、Xbox 360などの新世代ゲーム機のゲームで用 ...... >> Read more

(C) Mainichi Communications Inc. All rights reserved.



이 연재는 PC나 게임에 이용되는 최신 3D그래픽스 기술을 마음이 가는대로 소개해 나가는 글이다.

방침은 우선, 비교적 최신의 PC게임이나, PS3, Xbox 360등의 신세대 게임기들의 게임에서 사용된 기술들을 계보를 세워 소개해 나갈 생각이다.

그럼 처음에는 최근 몇 년까지 3D그래픽스 기술이 진화해 온 역사를 돌아 보고 싶다.

실시간 3D그래픽스 기술의 진화 계보


오늘날, 소니 PS3, 마이크로소프트 Xbox 360, 닌텐도 Wii라는 최신 게임기는 물론, 최신의 마이크로소프트 윈도우즈 비스타에서는 유저인터페이스까지 3D그래픽스로 되어 있으며, 닌텐도 DS PSP 휴대게임기,  일부 최신 휴대전화기에도 실시간 3D그래픽스기술이 탑재되어 있다.

대체, 리얼타임 3D그래픽스라는 것은 어떤 진화를 거쳐 어떤 미래로 향하고 있는 것일까? 앞으로 오랫동안 실시간 3D그래픽스와 함께 하려는 사람들을 위해서 우선은 기초지식을 정리해
보자.

1980년대 후반부터 1990년대 전반까지 ~ 플랫셰이딩(Flat shading)에서 텍스쳐매핑(Texture Mapping) 시대로


그 당시까지는 3D
게임에 응용을 안한것은 아니지만, 기본적으로 「 3D그래픽스」는 기술훈련용 시뮬레이터나 자연현상, 광학현상 설명을 위한 학술연구, 또는 영상표현에의 응용등, 프로페셔널한 분야나 연구분야 쪽에서 진화하고 있었다. 1980년대 후반부터 1990년대가 되면서 대형 게임 메이커들이 아케이드 업무용 게임시스템에 실시간 3D그래픽스 시스템을 채용하기 시작하면서 그때부터 게임에 3D그래픽스가 본격적으로 활용되기 시작했다.

이때의 대표적인 작품이라 하면 나무코(Namco)의 「 위닌그란 」(1988), 세가의 「 버추얼레이싱」(1992), 「 버추얼파이터 」(1993)등이 있다. 이때는 폴리곤 모델을 사용했지만 리얼타임으로 표시 가능한 폴리곤 수가 적었고, 라이팅도 폴리곤 단위의 플랫셰이딩이 주류였다.

하지만, 게임과 3D그래픽스의 만남은 「실시간 3D그래픽스」라는 분야를 확립했고 그 진화를 단숨에 가속시켰다.

나무코의 「리지레이서, Ridge Racer」(1993)에서는 텍스쳐매핑이 적용된(화상을 폴리곤에 붙인) 3D 모델이 자유자재로 움직여, 이전의 각각의 쌓여진 나무들 같았던 3D그래픽스로부터 단숨에 리얼리티가 향상되었다.

「 버추얼파이터 」(1993). 폴리곤단위의 라이팅이 기본인  「플랫셰이딩」뿐이였고, 텍스처매핑이라는 개념도 없었다. 그래서 얼굴이나 옷은 "그런 형태의 폴리곤"을 렌더링해서 표현하고 있었다.(C)SEGA

1990년대 중반 ~ 가정용게임기가 문을 연 민간용 실시간 3D그래픽스

특수한 그래픽스 워크스테이션을 제외하고, 「게임플랫폼」이라고 하면, 당시 3D게임그래픽스기술이 가장 앞서 있던 것은 아케이드 게임시스템이였다. 그런데 1994년에는 역사적인 역전극이 일어났다. 그것은 소니 플레이스테이션(PS1)과 세가 새턴(SEGA SATURN)등장이다.

해상도는 그리 높지 않았지만, 텍스쳐매핑까지 대응한 실시간 3D그래픽스가 일반 소비자에게까지 전달 되었다는 점이 의미가 크고, 이것을 계기로 실시간 3D그래픽스와 3D게임그래픽스는 거의 함께 병행하는 관계성을 가지고 급속한 진화를 시작한다.

한편 이 즈음 PC의 일반 유저들을 향한 3D그래픽스기술은, 유감스럽게도 게임기 보다 많이 늦어 있었다. PC에서 일반 유저들을 겨냥한 실시간 3D그래픽스 기술의 본격적인 보급은 1995년에 등장한 새 OS 윈도우즈95의 시대가 되고서 부터이다.

마이크로소프트는 윈도우즈 환경하에서 사운드, 그래픽스, 네트워크, 게임컨트롤러등의 멀티미디어 API 콤포넌트들을 통합한 「 다이렉트X 」를 발표했고, 이것을 윈도우즈95에 채용했다. 다이렉트X는 버전 번호를 뒤에 추가해서 부르는 것이 관례가 되었고, 윈도우즈 환경에서의 본격적인 3D그래픽스 카드가 보급되어 갔다. 실시간 3D그래픽스가 다루어질 수 있게 된 것은 1997년에 릴리즈된 「 다이렉트X 5 」가 되고 부터였다.

정확히 이 타이밍을 전후로 대형 CPU/칩셋 메이커인 인텔은 새로운 그래픽스 인터페이스로써 AGP(Accelerated Graphics Port)  버스의 실용화를 시작했고, 지금도 유력한 그래픽스칩 메이커인 NVIDIA RIVA128 시리즈를, ATI(2006년에 AMD와 합병) RAGE3D시리즈를 출시했고, 이것들은 인기를 얻게 된다. PS1의 등장으로부터 3년 늦게 드디어 PC플랫폼이 PS1과 동등한 실시간3D그래픽스를 다룰 수 있게 된 것이다.

 

                      NVIDIA의「RIVA 128」


  

다이렉트X 5 시대에, 「 PC3D게임을
플레이 한다」는 것을 널리 퍼뜨린
Quake2 」(1997, 아이디소프트)
(C)1997 id Software,Inc.All Rights Reserved.

다이렉트X 6 시대에, 비디오카드의 기본게임으 로써 이름을 널리 알린 「 Incoming 」(1998, Rage)  
   (C)Rage Games Ltd 1998



 

1990년대 후반 ~ 다이렉트X의 급속한 진화의 역사


1990
년대 후반, PC업계가 하나가 되어 강화에 나섬으로써, PC 그래픽스는 급격한 진화를 이뤘다.

1998
년에는 당시까지 발표된 다양한 실시간 3D그래픽스 기능들을 넣은 다이렉트X 6이 발표되었고, 다음해인 1999년에는 그 이후의 PC 그래픽스 진화의 방향을 결정지은 다이렉트X 7도 발표 된다.

다이렉트X 6
이전까지는 3D그래픽스 처리 하드웨어는 폴리곤과 픽셀의 대응을 계산한다든지(래스터라이즈 처리), 화상텍스처를 붙이는 처리를 한다든지…, 하는 픽셀단위의 처리만을 담당하고 있었다.

다이렉트X 7
에서는 그때까지 CPU가 담당했던 정점단위(폴리곤단위)의 좌표변환 처리나 광원처리를
3D
그래픽스 처리 하드웨어가 담당할 수 있는 체계가 구현되었던 것이다. 그래픽스하드웨어로 정점단위의 좌표변환(Transform)과 광원처리(Lighting)을 할 수 있는”  기능을, 특히 이때는「 하드웨어 T&L 」 (T:Transform L:Lighting)이라고 불렀다.

덧붙여,
이 타이밍에서 PC업계는 「 그래픽스처리 전반을 담당하는 프로세서 」의 의미를 헤아려, 이런 하드웨어(프로세서) GPU(Graphics Processing Unit)라고 부르기 시작했고 이후 정착 되었다여담이지만, GPU라는 호칭은 물론, 음운이나 의미는 CPU(Central Processing Unit)를 모방한  것이 다. 다이렉트X 7 대응 GPU로는 NVIDIA의 지포스 256, ATI의 초기 RADEON등이 등장했다.

「NVIDIA GeForce 256」을 탑재한 그래픽스 카드


실시간 3D그래픽스 기술은, 그때까지 가정용 게임기 쪽이 앞서있는 느낌이 강했지만, 다이렉트X 7 시대에 들어서면서 부터는 완전히 PC가 역전한 구도가 되었다. 이것은 가정용 게임기가 보급이 최우선시 되던 전략적인 제약으로 약 5년 싸이클 밖에 하드웨어의 사양 변경을 할 수 없었던 것에 반해서, PC는 최신 기술을 매년 흡수해서 진화할 수 있었기 때문이다. , 당시 게임기의 시장점유율 싸움은 3사 정도의 메이커 사이에서 벌어진 것에 반해, PC그래픽스는 10개사 가까운 메이커들 사이에서 경쟁이 있어났기 때문에 극심한 경쟁원리가 작용했던 것도 적지않은 영향이었을 것이다. 다만, 이어진 다이렉트X 8시대에 돌입할 때까지 큰 도태의 파도가 밀어닥쳐 GPU메이커들도 수개의 회사로 감소한다.


「GIANTS:CITIZEN KABUTO」(2000年、PLANET MOON STUDIOS)。다이렉트X 7시대가 되어, PC의 실시간 3D그래픽스의 표현력은 가정용 게임기를 확실히 앞질렀다.
(C)2000 Planet Moon Studios. All Rights Reserved. Planet Moon and the Planet Moon logo are trademarks of Planet Moon Studios. Giants, Giants: Citizen Kabuto, Interplay, the Interplay logo, and "By Gamers. For Gamers." are trademarks of Interplay Entertainment Corp. All Rights Reserved. Exclusively licensed and distributed by Interplay Entertainment Corp. All other copyrights and trademarks are the property of their respective owners.

 

2000~ 프로그래머블 셰이더 아키텍쳐의 개막.
GPU
메이커들이 도태하는 다이렉트X 8 시대


1998
년에는 세가의 드림캐스트, 2000년에는 대망의 소니의 플레이스테이션2가 발표되지만, 3D 그래픽스의 처리능력에서는 각각의 시점에서의 최신 PC 그래픽스와 비슷했다.

확실히, 선진성은 PC/다이렉트X 쪽에 있었지만, 하드웨어(GPU)의 급격한 진화가 소프트웨어업계를 견인하지 못해, PC쪽은 기술의 동시대성을 얻지 못해왔다.

그렇다고는 해도, PC업계로써는 어떻게든 매년 전세계의 연구자들의 손에 의해 만들어지는 혁신적인 최신 3D 그래픽스 기술을 적극적으로 도입해 가려는 기본방침을 유지해 가고 싶다. 왜냐하면, 최신 기술이 견인해 가는 PC업계로써는 가정용게임기 같은 여유로운 진화 싸이클을 도입하는 것은 어렵기 때문이다.  그렇다고 해서 신기능을 새 GPU에 탑재하고 그때마다 다이렉트X에 그 기능을 활용하기 위한 API를 새로 추가하는 것은 다이렉트X만 증식되어 갈 뿐이다.

, 추가된 신기능을 실제의 어플리케이션에서 (반드시) 이용한다고도 할 수없고, 그런 기능은 다이렉트X 내의 죽은기능(화석기능)으로 계속 남는다. GPU쪽에서도 죽은기능을 위해서 트랜지스터를 잡아 먹는 것은 비용과 전력을 부당하게 잡아 먹어 의미가 없다.

거기서 그래픽스 처리를 소프트웨어 형태로 가능하게 하는 기능(구조)을 GPU에 도입하면 어떨까라는 아이디어가 제창되었다. 그것이 「 세이더를 프로그래밍 가능 」이라고 하는 의미를 담은「 프로그래머블 셰이더 」(Programmable Shader) 라는 개념이다.(계속)
 

   

세계 최초의 민간용 프로그래머블이더 아키텍처를 채용한 GPU GeForce 3



    지포스 3의 사람 얼굴 애니메이션 데모로
    부터. 프로그래머블 셰이더를 활용해서
    구현한 노말맵에 의한 범프매핑 표현이
    옷의 부조(릴리프)나 사람 피부의 주름살에
    적용되어 있다.


 

그런데, 전회(前回)의 마지막에 소개한 프로그래머블 셰이더 아키텍처인데, 이것을 최초로 지원한 다이렉트X가, 2000년 말에 발표된 다이렉트X 8이다.

다이렉트X 8 대응 GPU로는 NVIDIA GeForce3, ATI Radeon 8500등이 있다. 또한 2001년에 발매된 마이크로소프트의 윈도우XP에는, 이 다이렉트X 8이 통합되었다.

프로그래머블 셰이더는 정점처리/폴리곤 단위처리를 담당하는 「 프로그래머블 버텍스 셰이더 」(Programmable Vertex Shader)와 픽셀단위의 음영처리나 텍스처관련 처리를 수행하는 「 프로그래머블 픽셀 셰이더 」(Progammable Pixel Shader) 2개의 타입이 있고, 각각의 셰이더유닛 상에서 다양한 셰이더프로그램을 실행시킴으로써 3D그래픽스 처리를 수행하는 구조로 되어 있다. 또한 용어로써 한마디로 “Programmable Shader”라고 했을 때는 양쪽을 모두 가리키는 경우와 그 개념 전체를 지칭하는 경우가 있다.

그리고, 이 셰이더 프로그램 자체가 소프트웨어이며 개발자가 셰이더프로그램을 작성하는 것으로, 그 GPU에 새로운 그래픽스 기능을 구현하는 것이 가능하다.

이것은 매년마다 발표되는 최신 3D그래픽스 기술을 차세대 GPU의 등장을 기다리지 않고도 그 기술을 실현하는 셰이더프로그램만 개발하면(퍼포먼스의 좋고 나쁨은 별도로하고) 실험이나 실행이 가능하다는 메리트와, 산개된 하드웨어 업체와 소프트웨어 업계에 다시 나아갈 방향을 만들어 주는 계기도 되어 주는 것이였다.

다만, 프로그래머블 셰이더 아키텍처의 실현은 GPU 메이커들에 높은 기술력을 요구했기 때문에, 이후 다이렉트X 9가 등장하는 동안에, 초기의 실시간 3D그래픽스를 지탱해 왔던 GPU 메이커들이 문을 닫는 경우가 많았다. 도태의 결과로, 2001년 이후로는 GPU 메이커의 쌍두마차인 NVIDIA와 ATI의 치열한 GPU 전쟁이 두드러졌다.

현재, 이 2개 회사 외에 PC용 민간타겟의 GPU를 양산 개발을 하고 있는 곳은 인텔(단, 통합칩셉쪽으로)과 S3사 정도이다. PC 그래픽스 여명기를 지탱했던 3dfx사는 2000년 NVIDIA사에 인수되었고, 비슷하게 Number Nine사도 1999년에 도산했다. 윈도우즈 9x 시절에 일본에서는 절대적인 인기를 자랑했던 MATROX사도 최후발 주자로 다이렉트X 8 세대 GPU인 Parhelia시리즈을 투입했지만, 이후에는 최신기술에 대응한 GPU 개발로 부터는 멀어졌다. 프로페셔널한 워크스테이션용 GPU를 개발했던 3Dlabs사도 윈도우즈 9x 시절에 민간용 Permedia시리즈를 투입했지만 성과없이 2002년에 크리에이티브사에 매각되었고, 2006년에는 프로페셔널 지향의 GPU사업에서 은퇴를 발표했다. 칩셋 메이커인 SiS사에서 독립한 GPU 전문 신생 메이커였던 XGI사도 2006년 최신 기술에 대응하는 새로운 GPU 개발에서 사실상 물러났다.

그런데 다이렉트X 8 발표로 부터 약 1년 후인 2001년 말에는 다이렉트X 8 베이스의 게임기인, 초대 「 Xbox 」가 마이크로소프트로 부터 발매되었다. 별로 이점이 화제가 될 만한 것은 아니지만 Xbox는 세계 최초의 프로그래머블 셰이더 아키텍처를 채용한 가정용 게임기가 되었다.


   

초대 Xbox. 지포스3을 베이스로 한 GPU를 탑재했고, API로 다이렉트X를 채용










    Xbox용, PC용 양쪽에 발매된 "Splinter
    Cell" (UBI SOFT)은 프로그래머블 셰이더 기반의 3D게임 그래픽스의 가능성을 세상에 보여주었다.

(C)2002 Ubi Soft Entertainment. All Rights Reserved. Ubi Soft Entertainment and the Ubi Soft logo are registered trademarks of Ubi Soft Entertainment. Splinter Cell is a trademark of Ubi Soft Entertainment. All other trademarks are the property of their respective owners.


 

 

2002/2003 ~ 프로그래머블 셰이더 2.0 1기 다이렉트X 9 시대

다이렉트X 8 시대의 프로그래머블 셰이더는 GPU 메이커 마다 약간의 아류버전이 몇개씩 혼재되었던 관계로 버전 1.x라고 규정된다. 그리고 2002년에는 새로운 프로그래머블 셰이더인 버전 2.0 사양을 지원하는 다이렉트X 9가 발표된다.

프로그래머블 셰이더 사양은 셰이더 모델(Shader Model, SM) 키워드 뒤에 버전 번호를 붙여 아키텍처 세대를 나타내는 것이 이때 부터 일반화 되었다. 즉, 예를 들면, 다이렉트X 9 세대는 「 SM 2.0 」대응 GPU가 대두하는 시대가 되었다....라고 하는 것이다.

SM 2.0에서는, SM 1.x와 비교해서 보다 긴 셰이더 프로그램이 실행 가능하고, 명령어의 종류가 증가했고, 사용할 수 있는 명령어의 조합 제한도 감소 되었다. 또, 지금까지 정점 셰이더만 활용되던 부동소수점 연산이 픽셀셰이더에서도 사용 가능하게 되었고, 픽셀단위의 음영처리의 연산 정밀도와 표현할 수 있는 다이나믹 레인지도 넓어졌다. 이 확장이 High Dynamic Range 렌더링: HDR 렌더링이라고 불리는 그 이후의 실시간 3D 그래픽스에서의 새로운 트렌드를 만드는 계기가 되었다.

다이렉트X 7 / 하드웨어 T&L 시절의 1호 GPU와 다이렉트X / 최초의 프로그래머블 셰이더 대응 GPU가 모두 NVIDIA로 부터 릴리즈 되었던 것에 반해서 다이렉트X 9 / SM 2.0 대응 GPU 1호기는 ATI로 부터 릴리즈 된 Radeon 9700이였던 것도 감개무량한 일이였다. NVIDIA도 이것에 대항해 GeForce FX로 대응했지만 제조 상의 문제와 더불어 퍼포먼스적으로도 고전했고, 이 SM 2.0 시절은 ATI 우세인 채로 지나갔다.

SM 2.0 대응 최초의 GPU는 ATI로 부터 릴리즈된 Radeon 9700이였다. 이후의 9800, 아래의 9600/9500 시리즈도 인기가 많았다.

그리고 SM2.0 시절 ATI 우세를 결정지었던 것은 이때 가장 등장이 기대되었던 VALVE사의 대작게임 「하프라이프2」가 ATI Radeon 9500/9600/9700/9800시리즈를 최적의 GPU로 해서 마케팅전략을 전개했던 일이였다.

「하프라이프2」(VALVE)는 당초 2003년 발매 예정이였지만, 연기에 연기를 거듭해 결국 발매된 것은 2004년말이였다. 그래도 좋든 싫든 하프라이프2는 SM2.0세대 GPU 발전에 기여했다.
(C)2004 Valve Corporation. All rights reserved. Valve, the Valve logo, Half-Life, the Half-Life logo, the Lambda logo, Counter-Strike, the Counter-Strike logo, Source, and the Source logo are trademarks or registered trademarks of Valve Corporation in the United States and/or other countries. All other trademarks are property of their respective owners.

2004/2005/2006년~ 프로그래머블 셰이더 3.0과 2기 다이렉트X 9 시대

SM 2.0은 "2.0"이라고 하면서도 실제는 1.x 때와 똑같이 몇개의 마이너 아류를 낳았다. NVIDIA는 GeForce FX에 프로그래머블 정점셰이더 2.0a 와 프로그래머블 픽셀셰이더 2.0a라는 이름을 붙혀서 지원했다.

다이렉트X 9의 등장부터 약 2년이 경과한 2004년, 마이크로소스트는 다이렉트X 10은 발표하지 않고, 새로운 다이렉트X 9의 마이너 버전업판을 발표해서 프로그래머블 셰이더 사양 3.0, 즉 SM 3.0으로의 대응을 이루어 냈다.

SM 버전이 1.0 올라갔지만 다이렉트X 버전을 올리지 않은 것은 「 뒤에 나올 윈도우즈 비스타에 맞추기 위해서 」「 뒤에 나올 ATI의 SM 3.0 "미"대응 GPU를 배려했기 때문에 」등의 설이 있지만 명확하지는 않다.

SM 3.0에서는 사실상, 셰이더프로그램의 길이 제한이 해제되고, 정점셰이더, 픽셀셰이더 양쪽의 명령어 셋도 확충되었다. SM 2.0에서는 동적 조건분기 반복은 정점셰이더에 제한되어 있었지만, SM 3.0에서는 픽셀셰이더에서도 지원되었고, 사실상,  programmablity 면에 있어서 정점셰이더와 픽셀셰이더의 격차가 없어졌다. 또, 정점셰이더에서도 텍스처를 액세스할 수 있는 새로운 기능 「Vertex Texture Fetching:VTF 」(별명 정점 텍스처링)의 지원도 이때 강하게 어필되었다.

SM 3.0 대응의 최초의 GPU는 NVIDIA로 부터 발표된 GeForce 6800 시리즈이고, 의외였던 건 ATI는 같은 2004년에 등장 시킨 새 GPU, Radeon X800 시리즈에 대해서 SM 2.0 대응에만 머무는 선택을 했다.

NVIDIA GeForce 6800 시리즈. 최초의 SM 3.0 대응 GPU는 다시 NVIDIA로 부터 등장했다.

Radeon X800시리즈는 정점셰이더 2.0a, 픽셀셰이더 2.0b로 확장한 개량판 SM 2.0 대응 GPU가 되었고, 2004년에는 두 쌍두마차의 보조가 맞지않아 유저가 혼란스러웠던 해였다. SM 2.0도 "2.0"이라고 하면서도 이와 같이 ATI 와 NVIDIA가 독자적으로 확장해 버려 작은 버전 번호들이 서로 일치하지 않았다.

2004년은 새로운 버스 인터페이스 「 PCI-Express 」도 제공되기 시작한 해였고, 그래픽스 카드의 버스도 그때까지의 AGP로 부터 PCI-Express x16 버스로의 이동기를 맞았다. 2004년 ~ 2005년, 유저는 그래픽 카드를 교체할 때 「 SM 2.0 (ATI)로 할지 SM 3.0(NVIDIA)로 할지」의 선택과 동시에 「AGP로 할지 PCI-Express로 할지」도 선택하지 않으면 안되었다.

어쨋든, NVIDIA는 다음해 2005년에는 2세대 SM3.0 대응 GPU 「 GeForce 7800 」 시리즈를 투입. 「2004년에는 SM 2.0의 숙성」을 지론으로 했던 ATI 도 2005년에는 NVIDIA에 뒤처진지 1년 반 만에 ATI 최초의 SM 3.0 대응 GPU인 「 Radeon X1800 」시리즈를 내놓았다. 하지만 Radeon X1800은 SM 3.0의 기본 특징에는 모두 맞추었지만 VTF는 지원하지 않았다.

이어서 2006년에는 NVIDIA는 3세대의 SM 3.0 대응 GPU「GeForce 7900 」시리즈를 발표했고, 이것에 대항해 ATI는 Radeon X1900 시리즈를 투입했다. 양사 모두 앞세대의 모델번호에 "+100" 을 한 단지 퍼포먼스 향상판 제품을 내놓아 성능면 이외에 눈길을 끌만한 부분은 없었다. 여전히 ATI는 Radeon X1900 시리즈에서도 VTF는 지원하지 않았다.

SM 3.0 대응 GUP가 ATI, NVIDIA 쌍두마차로 부터 모두 나온 것은 좋지만, VTF 기능의 지원에 대해서는 양사의 보조가 맞지 않아, SM 3.0에 있어서 VTF 기능은 마이너한 기능이 되고 말았다. 이런 근간 기능의 지원/미지원이 유저나 리얼타임 3D그래픽스 기술의 진화에 주는 영향은 적지 않고 반드시 올 다이렉트X 10을 맞아 큰 과제가 된 것 같다. (계속)

SM 3.0  특수기능으로 어필된 「 VTF 」. 하지만 ATI가 VTF를 지원하지 않았기 때문에 VTF의 효과는 이 NVIDIA가 많든 샘플데모 정도에서 밖에 볼 수 없었다.



 

가정용 게임기의 세계에서는 2005년말에 마이크로소프트의 2세대 게임기인 「Xbox 360 」이 발매 되었다. 그래픽스 기술적으로는 다이렉트X 9 세대 / SM 3.0 대응이다. 그리고 자세한 것은 뒤에 기술하겠지만, Xbox 360 - GPU는 ATI 제품으로, 의외로, 동일한 시기에 ATI가 PC용으로 발표한 Radeon X1800 시리즈와는 설계가 완전히 다르다는 점이 매우 흥미롭다. 덧붙여서 먼저 나온 VTF 기능은 Radeon X1x00 시리즈 전체가 지원하지 않지만, Xbox 360 - GPU는 지원하고 있다.

     마이크로소프트「Xbox 360」

 

Xbox 360용 게임소프트웨어「Gears of War」(2006년、Microsoft)로부터. 리얼타임 3D 게임그래픽스는 여기까지 왔다.
Gears of War and the Crimson Omen are either registered trademarks or trademarks of Epic Games, Inc. in the United States and/or other countries. All rights reserved. (C)2007 Microsoft Corporation. All Rights reserved. Microsoft, the Microsoft Game Studios logo, Xbox, Xbox360, the Xbox logos, Xbox Live and the Xbox Live Logo are either registered trademarks or trademarks of Microsoft Corporation in the United States and /or other countries.


2006년말에는, 소니로 부터도 새로운 게임기인 「 플레이스테이션3 」(PS3)이 발매된다. PS3의 GPU는 NVIDIA가 설계를 담당했고(제조는 소니 외), 「 RSX 」라는 전용명칭이 주어졌지만, 기본설계는 지포스 7800 시리즈와 거의 같고, 그래픽스 기술적으로는 경쟁상대인 Xbox 360과 동일 세대인 다이렉트X 9 세대 / SM 3.0 대응이였다.

            소니「 플레이스테이션 3 」


「MotorStorm」(SCE Europe)。그래픽 뿐만 아니라, 물리 시뮬레이션의 리얼리티도 기대되었던 PS3 게임.

MotorStorm TM (C)2006 Sony Computer Entertainment Europe. Published by Sony Computer Entertainment Inc. Developed by Evolution Studios. MotorStorm is a trademark of Sony Computer Entertainment Europe. All rights reserved.

신세대 게임기 전쟁에서는 「 Xbox 360 대 PS3 」이라는 구도이겠지만, 실은 아무일 아닌듯이, 여기에서도 「 ATI 대 NVIDIA 」의 싸움이 전개되고 있는 것이다.  어쨋든 2대 최신게임기의 그래픽스는 모두 프로그래머블 셰이더 3.0 아키텍처이고, PC도, 게임기도 SM 3.0 시대에 돌입했다.

여기에 게임 플랫폼의 또 하나의 영웅, 닌텐도는 신세대 게임기로 「 wii 」를 내놓지만 그래픽스 기술적으로는 진화를 거의 단념한 방침을 채택했다.


2007년~ Programmable Shader 4.0과 다이렉트X10 시대의 시작

1년간격으로 다이렉트X의 버전 번호가 바뀌었던 1990년대 후반과 다르게, 다이렉트X 9는 2002년 부터 4년간, 윈도우즈 XP의 라이프타임 전체를 거의다 차지했다. 2006년 후반에는 ATI가 CPU 메이커인 AMD에 합병된 사건이 일어나지만, 뒤돌아 보면, 2000년 이래로 리얼타임 3D 그래픽스의 역사는 실질적으로는 「 ATI 대 NVIDIA 」의 싸움의 역사였다고 말해도 좋을 것이다.

2007년, 새해가 열리자 마이크로소프트는 서둘러 새로운 OS인 「 윈도우즈 비스타 」를 발표했다. 이와 동시에 새로운 다이렉트X인 「 다이렉트X 10 」이 햇수로는 5년 만에 릴리즈 된다.

다이렉트X 10에서는, 프로그래머블 셰이더의 버전은 4.0에 대응하게 되었다.

SM 4.0에서는, SM 3.0에 비해 명령어 셋의 확충이 한층 더 일어났다. 구체적으로는 정수 연산 명령, 이진 논리 연산 명령 등이 추가되었고, CPU 같은 범용 프로그래밍이 가능한 기능들이 보다더 강화 되었다. 또, 명령어 셋적으로는 정점셰이더와 픽셀셰이더의 격차가 없고, 이것을 마이크로소프트는 「 Common Shader 」(common:공유형/범용형) 아키텍처로도 부르고 있다.

                   SM 3.0 와 SM 4.0 의 비교

동시에 텍스처 액세스 갯수도 SM3.0 때의 16개에서 SM4.0 에서는 128개로 확장되었고, 공통지수항 E를 가진 새로운 텍스처 포맷 RGBE 형식도 지원했고, 리얼타임(게임)을 겨냥한 저부하의 HDR 렌더링을 가능케 했다.

그리고 다이렉트X 10 / SM 4.0에서 최대의 토픽이라고 할 수 있는 세번째 프로그래머블 셰이더인 「 지오메트리셰이더 」(Geometry Shader)가 추가 되었다.

지금까지 정점차원의 것을 「 지오메트리 」라고 부르는 경우가 많았기 때문에 「 지오메트리셰이더 」는 「 정점셰이더 」와 똑같이 들릴지도 모르겠지만, 정점셰이더와는 다른것이다. 다만, 「 다루는 정보는 정점 차원 」이라는 점에서는 같다.

지오메트리셰이더의 역할은 프로그래머블하게 정점을 증가/감소 시키는 것. 정확하게 선분, 폴리곤, 파티클 같은 프리미티브(Primitive)의 증가/감소까지 가능하다.

그리고 정점처리 Phase에 지오메트리셰이더가 추가된 것에 호응해서 정점셰이더나 지오메트리셰이더의 출력을 비디오메모리 쪽에 쓰고(write) 다시 돌려주는 메모리 출력기능인 「 스트림아웃 」(Stream Output) 기능도 추가되었다. 이로인해, 정점처리 Phase에서 「 정점셰이더 -> 지오메트리셰이더 -> 정점셰이더..... 」라고 할수 있는 재귀적인 처리가 가능해졌다.

지오메트리셰이더와 스트림 출력의 구조는 고도의 3D 모델의 변형, 가공을 가능하게 하는데 머물지 않고, GPU를 CPU와 같은 범용처리 목적으로 활용하는 GPGPU(General Purpose GPU) 용도로도 유용하게 되어서 폭넓은 응용이 기대되고 있다.

      

다이렉트X 9 / SM 3.0에서의 렌더링 파이프라인

      다이렉트X 10 / SM 4.0 에서의 렌더링 파이프
      라인





 

다이렉트X 10 / SM 4.0은 윈도우즈 비스타 전용.
엄격한 버전컨트롤로 아류버전 없음.


 

다이렉트X 10 / SM 4.0은 윈도우즈 비스타에만 독점적으로 공급된다는 방침도 발표가 되어서, 윈도우즈 XP 이전 버전에는 제공되지 않게 되었다. 마이크로소프트는 윈도우즈 비스타 발매 직전에 「 윈도우즈 XP 지원 연장 」을 발표했지만, 「 다이렉트X 10 / SM 4.0 이 비스타 이후 버전 전용 」이라는 방침은 바뀌지 않았다. 실질적으로 실시간 3D 그래픽스의 진화는 윈도우즈 비스타 이후에 맡기게 되었다.  

실은, 이 다이렉트X 10 / SM 4.0의 비스타 전용공급은, 드라이버 모델의 큰 변화가 이유 중 하나로 되어 있다.

다이렉트X에 의해서 제공되어 온 그래픽 서브시스템인 Direct3D는, 복수의 어플리케이션으로부터 동시 사용되는 것을 설정하지 않았었다. 비스타에서는 이 GUI가 Direct3D 9(Ex)에 의해서 구현되어 있고, 이것과 별도로 Direct3D 10도 포함되어 있다. 동시에 복수의 3D 어플리케이션을 동작 시키거나, GPGPU 용도로의 대응까지도  고려한다면 이전의 싱글테스크를 전제로한 설계로는 맞지 않았던 것이다. 거기서 비스타라는 큰 변혁에 맞추어 릴리즈된 다이렉트X 10 / SM 4.0에서는, 멀티쓰레드에 대응해서 좀더 동작의 안정도를 향상시킬수 있는 새로운 GPU 드라이버 소프트웨어 아키텍처를 채용했다. 그것이 「 WDDM: Windows (Vista) Display Driver Model  」이다.

WDDM에서는 드라이버 소프트웨어가 유저모드와 커널모드로 나뉘어지고, 어플리케이션에 의한 부당한 드라이버 제어등으로 인한 시스템 크래쉬가 일어나기 힘들도록 설계되어 있다. 또, GPU의 하드웨어적인 멀티쓰레드 대응도에 맞추어 WDDM 1.0 / 2.1 이라는 버전으로 나누어져 있고, WDDM 1.0은 다이렉트X 9 세대 이전의 구설계의 GPU에 WDDM 적용한 것이고, 그리고  미리 다이렉트X 10을 타겟으로 개발된 GPU는 WDDM 2.0과 이후버전이 제공된다. 1.0과 2.0/2.1의 차이는 실질적으로는 멀티쓰레드 대응 레벨의 차이를 나타내며, 1.0는 Non-preemptive(*1)한 멀티쓰레드에 대응하고, 2.0/2.1은 Preemptive한 멀티쓰레드(*2)에 대응한다. 2.0과 2.1의 차이는 주로 멀티쓰레드 조밀성의 차이로, 2.1 쪽이 보다 작은 타겟 단위로 쓰레드를 교체 할 수 있다.

윈도우즈 비스타의 그래픽 서브시스템


(*1, *2) Non-preemptive(비선점)라는 것은 자발적으로 쓰레드 교체를 수행하는 멀티쓰레드 적용 방법. Preemptive(선점)는 타임쉐어링 등을 사용해, 자동적으로 스레드를 교체하는 멀티쓰레드 적용 방법.

다이렉트X 8에서 시작된 프로그래머블 셰이더이지만, SM 1.x / 2.0 / 3.0 이라는 버전 책정은 있지만 사실 GPU 메이커 마다 독자적인 확장이 있었기에 아무래도 최종적으로는 혼돈스런 부분이 있었다. 이런 아류버전의 혼재는 유저의 제품 선택을 어렵게 만들었을 뿐만 아니라, 소프트웨어 업계로 부터의 반발도 컷다. 거기에서 마이크로소프트에서는 다이렉트X 10 이후에서는 다이렉트X 9 이전에 존재했던 Caps(Capability Bits Test)라 불리는 그래픽 서브시스템의 지원을 테스트하는 기능을 없애고, 엄격하게 버전 컨트롤을 행한다는 방책을 명확히 내세우고 있다. 이것에 의해서 다이렉트X 10 세대 / SM4.0 대응을 내세우는 GPU는 다이렉트X 10 / SM 4.0의 모든 기능을 구현하지 않으면 안되게 되었다. 다이렉트X 9 / SM 3.0 시대의 NVIDIA:VTF 지원, ATI:VTF 비지원과 같은 일은 다이렉트X 10 / SM 4.0 시대에서는 일어나지 않는다는 것이다.

이것은, 리얼타임 3D 그래픽스의 기본기능을 갖추는 부분에 대해 일단락을 지은 것으로, 앞으로의 기능 강화가 매우 복잡하고 고도해져서 업계단체 내에서의 엄중한 논의를 거칠 필요가 생겨난 것과도 관계가 깊다.




 

통합형 셰이더 아키텍처와 미래의 다이렉트X


 

다이렉트X 10 세대 / SM 4.0 대응 1번 GPU는, 엔비디아의 GeForce 8000 시리즈였다. 약간 늦게, 경쟁사 ATI(AMD)는 RADEON HD2000 시리즈를 내놓았다.

엔비디아 「GeForce 8800 GTX 」. 최초의 DirectX 10 세대 / SM 4.0 대응 GPU는 앤비디아로 부터 릴리즈됬다.


ATI와 NVida, 양사의 다이렉트X 10 세대 / SM 4.0 대응 GPU는, 그 하드웨어에 「 통합형 셰이더 」아키텍처(Unified Shader Architecture)를 채용한 점이 특징이다.

프로그래머블 셰이더에는 정점셰이더, 픽셀셰이더, 그리고 새로운 지오메트리셰이더라는 3개의 셰이더가 있지만, 그리는 씬에 따라서 정점셰이더와 픽쉘셰이더의 부하는 변하게 되고, 새로운 지오메트리셰이더는 지금까지의 어플리케이션을 이용하는 한 그다지 활용할 만한 곳이 없다. 그럼에도 불구하고, 정점셰이더 몇기, 지오메트리셰이더 몇기, 픽셀셰이더 몇기라고 고정적으로 셰이더 유닛을 나누어서 GPU를 설계해 버리는 것은 낭비가  심하다. 각 셰이더는 확실히 각각의 특유의 역할을 하고 있지만, 실제의 연산내용은 벡터나 행렬 연산이 주이고 각 셰이더간에 그렇게 큰 차이가 없다.

그렇다면, "범용"으로서의 프로그래머블 셰이더 유닛을 많이 준비해서, 필요에 맞게 그것들을 정점셰이더로 쓰거나, 지오메트리 셰이더로 쓰거나, 픽셀셰이더로 쓰거나 하는 방법이 합리적이지 않을까?

이것이 통합형 셰이더 아키텍처의 기본적인 사고방식이다.

이것에 의해서, 정점 부하가 클때는 정점셰이더가 보다 많이 기용될 수 있고, 픽쉘 부하가 클 때는 픽셀셰이더가 많이 기용될 수 있게 된다.

 

종전의 GPU에서는 정점셰이더, 픽쉘셰이더의 어느쪽에서 병목현상이 생기면 성능을 내기 힘들 뿐만 아니라, 한가한 셰이더도 생겨난다.

   통합형 셰이더 아키텍처는 부하가 걸려
   있는 셰이더를 증가 시키는 대응으로
   병목현상을 감소 시킬 수 있다.

좀더 알기 쉽게. 왼쪽이 종전의 고정적으로 나누어진 방식의 아키텍처, 그리고 오른쪽이 통합형 셰이더 아키텍처의 이미지이다.

ATI는 PC 타겟의 다이렉트X 10 세대 / SM 4.0 대응 GPU의 출시에서는 NVIDIA에 비해 늦었지만, 「 통합형 셰이더 아키텍처 」의 구체화는 2005년 등장한 Xbox 360 - GPU에 대해 시행했고, 이 아키텍처에는 ATI 쪽에 좀더 경험이 있다고 말할 수 있다. 다이렉트X 10 세대 / SM 4.0 대응 GPU는 놓쳤지만 통합형셰이더 아키텍처 실용화의 첫번째 주자는 ATI였던 것이다.


 

2008년 이후~
미래의 다이렉트X 「 다이렉트X 10.1」과 「 다이렉트X 11 "이후"」


 

다이렉트X 10이 막 릴리즈된 2007년 3월, 샌프란시스코에서 개최된 게임개발자의회 GDC 2007에서는, 마이크로소프트로부터 다이렉트X 10 이후의 로드맵에 대한 언급이 있었다.

맨 먼저 다이렉트10의 마이너 버전인 다이렉트X 10.1이 릴리즈 되고, 프로그래머블 셰이더 버전은 4.1이 된다.

확장된 기능으로는, WDDM2.1의 본격적인 지원 이외에 멀티샘플방식의 안티에일리어싱(MSAA:Multi-Sampled Anti-Aliasing)의 샘플링 위치의 프로그래머블화, 복수의 렌더타겟 간의 개별 블렌딩 메서드 지원, 큐브맵 텍스처 배열 지원이라는 SM4.0의 기능 확장이 추가된다. 물론, 기능 확장의 보조를 맞추기 위해서 10.1이라는 "0.1" 단수는 포함되지만, 마이크소프트가 빈틈없이 버전 컨트롤을 하기 때문에 작은 아류의 등장은 없다.

다이렉트X 10.1 / SM4.1은 2008년 3월 예정인 윈도우즈 비스타 서비스 팩1에 포함될 예정이고, SP1 적용 후에 이용이 가능하다. 현시점에서 다이렉트X 10.1 / SM4.1 대응의 GPU로는 AMD(ATI)가 Radeon HD 3000 시리즈를, S3 Graphics가 Chrome 400 시리즈를  발표했는데, 한편 NVIDIA는 DirectX 10.1 / SM 4.1 대응 GPU는 당장 내놓지 않겠다는 방침을 분명히 한 상태이므로 다이렉트X 10.1 / SM 4.1이 메이져가 될지는 알 수 없다. 결국, 사실상 다이렉트X 10 세대에서도 AMD(ATI)와 NVIDIA의 방침은 엇갈렸다.

AMD의ATI Radeon HD 3870.
다이렉트X 10.1 / SM4.1 대응 1호 GPU.

S3 Graphics의 Chrome 440GTX.
메인스트림 보다 싼가격의 다이렉트X 10.1 / SM 4.1 대응 GPU로 구매욕구를 사로 잡는다.


그리고, 한층 더, 마이크로소프트는 다이렉트X 11의 릴리즈를 예정하고 있다.

다이렉트X 11 "이후"라는표현을 사용해서, 어떤 기능이 언제 추가될지는 미정이지만 어느정도의 큰 변화가 있을지에 대해서는 분명히 하고 있다.

한가지는 GPU를 보다 범용프로세서적으로 활용할 수있는 기능의 추가이다. 특히 처음에는 미디어프로세서적인 스트리밍프로세서로써 사용하기 쉽게 해줄 계획인 것 같다. 구체적으로는 GPU에 전송되어 오는 벡터 데이터를 보다 유연하게 확장한다든지, GPU에서 처리한 출력 데이터 스트림을 처리결과 단위로 스위칭해서 복수의 하드웨어에 분배하도록 하는 기능을 검토하고 있다고 한다.

또, 3D그래픽스 이외의 과학기술계산 용도에 대응하기 위해서 연산정도를 현재보다 배정도인 64비트 부동소수점(FP64)에도 대응한다고 한다. 기능적으로 이런 대응을 하는 것은 물론이고, 그런 범용 프로세서로써의 성능강화를 위해 아마도 GPU쪽에는 메모리 런타임 Access 기능 강화나 캐쉬시스템 개량도 해줄 것이다.

나아가, 다이렉트X 10 / SM4.0의 지오메트리셰이더에 덧붙여, 다이렉트X 11 이후에서는 렌더링파이프라인에 새로운 처리 스테이지가 추가된다. 그것이 「 테셀레이션」 (Tessellation) 셰이더이다. 테셀레이션은 간단히 말하면, 폴리곤을 어떤 메서드에 따라 분활하는 기능이다. 이미 다이렉트X 9 / SM2.0 시대부터 테셀레이션 지원은 있었지만, 특정 GPU를 활용하는 경우로 한정되어 있었기 때문에 주류적 기능은 아니였다. 하지만 다이렉트X 11 이후에서는 이것을 정식 표준(standard)기능으로 규정한다고 한다. 역시, 테셀레이션을 수행하는 유닛, 즉 「 테셀레이터 」(Tessellator)는 처음에는 프로그래머블 셰이더로서가 아니고, 고정기능유닛으로써 제공된다는 방침도 보여지고 있다. 덧붙여서, 현재 다이렉트X 규격은 아니지만 Radeon HD 3000 시리즈는 고정기능으로 테셀레이션 유닛을 탑재하고 있다. 이것이 다이렉트X 11에서 정식사양이 될지는 명확하지 않다.

테셀레이터는 고정유닛이 되지만, 그 대신 폴리곤 분활을 수행할 때의 제어점을 프로그래머블하게 컨트롤 하는 「 컨트롤 포인트 셰이더 」(Control Point Shader)라고 하는 제 4의 프로그래머블 셰이더가 추가된다. 이것은 실질적으로는 테셀레이터의 작동을 보조하는 프로그래머블 셰이더라고 해야 할 것이고, 다이렉트X 11 이후, 나아가 미래의 다이렉트X 세대에서는 통합될 가능성이 있다.

다이렉트X 11 이후의 렌더링 파이프라인 예상도

이외에, 다이렉트X 11 이후에서는 리얼타임 3D 그래픽스의 다년간의 과제였던 반투명 오브젝트의 그리는 순서에 의한 속박으로부터 해방을 목표로하는 「 A-Buffer 」의 개념을 어떤 형태로라도 도입해 나가고 싶다고 발표가 되었다.

리얼타임 3D 그래픽스에서는 반투명 오브젝트는 뒤에서 앞으로 그리지 않으면 반투명 묘사가 올바르게 재현되지 않기 때문에 그리기 전 준비로 3D 오브젝트를 정렬하는 Phase가 필요했다. 「 A-Buffer 」에서는, 렌더링 시에 셰이더에서 산출된 칼러 외에 윤곽 마스크 정보나 깊이값 정보등을 함께 프레임버퍼에 써 넣는 것으로 최종 렌더링 후에는 앞뒤가 맞도록 영상을 재구성할 필요가 있지만 렌더링 시에는 그리는 순서의 의존성을 완전히 배제할 수 있는 메리트가 있다.

원래 A-Buffer는 죠지 루카스가 이끄는 Lucas Film이 오프라인 렌더링용으로 고안했던 기술이고, 렌더링이 시작된 시점에서는 GPU 쪽으로부터 그런 복잡성을 예견 할 수 없는 구조이다. 그래서, 그 리얼타임/하드웨어 기능은 상당히 복잡한 구조가 될 것이라고 예상된다. 하지만, 이 A-Buffer의 구조는 3D 어플리케이션 개발자나 3D 엔진 설계자에게 있어서는 소프트웨어쪽 부담을 대폭 격감 시킬수 있어서 그 기능추가에는 상당히 기대가 크다.

다이렉트X 11의 등장 시기는 전혀 모른다. 역시 제 4의 프로그래머블 셰이더가 추가되는 것으로 부터 생각해 보면 프로그래머블 셰이더 버전이 "1.0" 올라서, SM5.0이 되고나서 봐야 될 것 같다.

A-Buffer의 개념도.
"A"에는 anti-aliased、area-averaged(영역평균화)、accumulation(연산)이라는 복수의 의미가 들어 있다.




 

Posted by 노을삼킨별
,