Visual Studio 2010 공식 팀 블로그 @vsts2010

Posted by 조진현


한주만 쉰다는 것이, 죄송스럽게도 긴 휴식을 가지고 다시 등장습니다.
지난 시간까지 DirectX11 의 기본 API 를 간단히 언급했었습니다.
쉬는 사이에 안승근님께서 DirectX11과 관련된 기본적인 API 에 대한 글을 작성하기 시작하셨기 때문에
앞으로 기본적인 API 위주로 내용을 언급하지 않습니다.


< DirectX9 까지의 특징 >

DirectX는 Windows95 운영체제와 함께 처음 공개된 후에, 
어느덧 현세대까지 발전을 거듭했습니다.( 세월 참 빠르죠? ^^ )

너무 오랜 시간 전은 저도 잘 몰라서 DirectX7 버전부터의 가장 큰 변화를 하나씩 언급해 보겠습니다.
DirectX7 버전부터 변환과 라이팅(T&L) 을 위한 GPU가 활용되기 시작했고,
DirectX8 버전부터는 'Shader' 라는 GPU 를 활용한 프로그래밍이 도입되어서
현재 가장 개발자에게 주목받는 영역이 되었습니다.
개인적인 견해차이가 있겠지만, 저는 DirectX9 까지의 발전 과정 중에
가장 큰 변화로 바로 이 'GPU 의 활용'
이라고 생각하고 있습니다.

그러면 DirectX9 까지의 발전에서 변심(?)하지 않고,
저희를 언제나 반갑게(?) 맞이해 주었던 부분은 어떤 것이 있을까요? ^^
그것은 바로 API 를 설계할 때 항상 싱글 코어를 고려하고 만들었다는 것입니다.

또 다른 부분은 API 자체가 GPU 의 정점 처리 기능을 규정하고 있다는 것입니다.
언제나 '정점입력-->래스터라이즈-->픽셀처리-->디스플레이' 라는 큰 단계를
API 레벨에서 정의하고 있었습니다.
그 동안 우리는 이것은 Fixed pipeline 이라고 불렀습니다.
아래 이미지는 DirectX8 & 9 의 파이프라인입니다.



이미지 출처 : http://pc.watch.impress.co.jp/docs/column/kaigai/20090804_306876.html

사실 DirectX8 & 9 는 크게 차이가 없습니다.
파이프라인상에서 굳이 찾아야 한다면, 텍스쳐 메모리를 버텍스 쉐이더 단계에서도
참조할 수 있다는 정도일 뿐입니다.

간단히 제가 하고 싶은 말을 정리해 보자면,
'싱글코어 기반의 DirectX 의 시대는 이제 역사의 뒤로 사라지게 될 것이며,
GPU 는 더욱 복잡한 기능을 요구하게 될 것이다'
정도로 정리하겠습니다.
( 예언은 아니고, 이미 이렇게 되고 있는 상황이죠..^^ )


< 새로운 시대를 여는 DirectX11 >

아래는 DirectX11 의 파이프라인입니다.
잘 보시라고 그냥 크게 띄웁니다..^^


이미지 출처 : http://pc.watch.impress.co.jp/docs/column/kaigai/20090804_306876.html


DirectX11 의 가장 큰 특징을 저는 크게 3가지로 나누어 보았습니다.
  • GPU Tessellation.
  • Compute Shader.
  • Multi-threaded rendering.

사실 DirectX11 의 많은 부분은 X-Box360 에서 이미 사용되고 있습니다.
X-Box360 의 ComputeShader 지원은 모르겠으나, 나머지 두가지는 지원하고 있습니다.
X-360을 언급한 이유는 이들 기능이 이미 어느 정도 검증을 받은 기능이라는 점을 강조하고 싶어서 입니다.
( 물론 최신 버전이기 때문에 더 빨라지고, 더 좋아진 부분이 많습니다.^^ )

DirectX11 의 큰 패러다임은 '놀지마' 입니다.
이제는 멀티코어(CPU)와 GPU에게 최대한 많은 일을 시킬 수 있는 구조로
하드웨어를 구성했고, 그것을 기반으로 해서 런타임과 API 를 설계
하고 만들었습니다.

DirectX9 까지는 API 가 변화를 주도했다면,
이제는 DirectX API 변화를 하드웨어가 주도하고 있다고 볼 수 있습니다.
그러다보니 자연스럽게 API 도 더욱 하드웨어에 가깝게 설계되었습니다.
대표적으로 OutputMerge 를 지칭하는 OMxxxx 계열과
InputAssembler 를 지칭하는 IAxxxx 계열 등이 있습니다.

혹시 DirectX8-->9 로 포팅 작업을 하셨던 분들이 이 글을 읽으시는지 모르겠습니다만,
8-->9 의 변화는 API 차원에서 변화가 컸기 때문에 매우 단순했습니다.
하지만 이제는 하드웨어가 크게 변했기 때문에,
단순 포팅 작업 정도로 생각하시면 큰 오산입니다.
물론 단순히 API 만 교체해도 성능 향상을 얻을 수 있습니다.
DirectX11 은 하드웨어 오버헤드를 줄이기 위해 많은 최적화 작업을 수행했다고 합니다.

새로운 DirectX 의 시대가 왔다는 느낌이 드시나요? ^^

크리에이티브 커먼즈 라이선스
Creative Commons License

'DirectX 11' 카테고리의 다른 글

[DX11_#4]텍스트, 버튼 출력  (0) 2009/11/10
[JumpToDX11-6] 커맨드(Command)...  (0) 2009/11/09
[JumpToDX11-5] 새로운 시대를 여는 DirectX11...  (6) 2009/11/02
[DX11_#3]기본적인 설정  (0) 2009/10/22
[DX11_#2]D3D Buffer( 2 / 2 )  (0) 2009/10/13
[DX11_#1]D3D Buffer( 1 / 2 )  (0) 2009/09/22

댓글을 달아 주세요

  1. DX9가좋아서쓰는건아님 2009/11/03 10:42

    중요한 것은 XP 유저가 더 많은데 XP 유저는 DirectX 10 이상의 게임을 돌릴 수 없다는 것이죠. DX8->9 업그레이드는 해도 그만 안해도 그만이었지만 9->10,11은 하면 XP 유저를 잃습니다. 새로운 DirectX 가 온 것은 맞을지 몰라도 새로운 시대는 아직 아네요.

    • 현재 DX9가 가장 많은 유저를 포용할 수 있다는 것에
      저도 부정하지는 않습니다.^^
      단어 선정에 문제가 있다면,
      앞으로 주의하도록 하겠습니다.^^

  2. DX9가좋아서쓰는건아님 2009/11/03 13:33

    단어 선정의 문제는 핵심이 아니고.. MS 를 압박해서 XP에서 DX11 지원을 요구하는 것이 본질 아닐까요.. 혹은 XP 는 DX11 이 정말 안되는가에 대한 분석 기사 라든지.. 현실은 무시한채 DX11 좋아염~ 하면 또 MS 제품 프로모션하는구나 라고 느낌이 듭니다. (하긴 원래 그러려고 만든 사이트에 와서 헛소리하는 저도 좀 미친놈이네요;;)

  3. 지나가던 행인1 2009/11/13 09:53

    안녕하세요. 유익한 포스팅 잘 보고 갑니다만, 조금 아쉬운 부분이 있어 comment 를 남깁니다. 명색이 '공식 팀 블로그' 인데 조금은 formal 한 용어와 분위기의 포스팅이 되었으면 좋겠습니다. (구체적으로 "이미지 출처 : (아마도)ATI";)

    앞으로도 계속 좋은 포스팅 부탁드립니다.

    • 좋게 봐주셨다니, 감사합니다.
      해당 이미지의 출처는 정확하게 수정했습니다.
      지적해 주지 않으셨다면,
      모르고 지나칠뻔 한 문제가 있었습니다.
      ( ATI 가 아니였더군요..^^ )
      감사드립니다.^^

      포스팅의 분위기에 대한 조언은
      적극적으로 개선하도록 하겠습니다.^^

  4. 대체 왜 DX10 부터 XP에 대한 지원을 하지 않는 것인가?
    뭐 결론부터 따지자면 "지원이 불가능 해서" 가 아니라
    "새 운영체제 판매를 위해서" 가 아닐까 싶다..

    GPU Tessellation.
    Compute Shader.
    Multi-threaded rendering.

    이 세가지 XP에서 충분히 구현 가능하다..
    (안될게 없지 않은가? 있다면... 왜 안되는지 말을 해보라)
    새로운 OS가 나오면 최대한 팔아먹어야 하니까..
    M$는 이래서 안된다.. 물론 나도 회사에서 M$의 노예가 되어
    어쩔수 없이 M$기반의 프로그램을 짜야 하지만..
    솔직히 가끔 아니다 싶을때가 많다..ㅎㅎ