2009/04/02 16:10

게임과 OpenGL 이야기

Active X 까는 건 좋은데...

오픈지엘 말이 나와서 한번 글이나 써볼까 합니다.


이런 글은 정리좀 하고 나서 블로그스팟 같은데서 쓸까 했는데
이놈들은 언제나 트랙백을 지원할 건지 원. (구글 일 좀 해!)


일단 전 D3D랑 OpenGL은 둘 다 써봤습니다.
요즘엔 PC 외 플랫폼으로 게임을 주로 만들다보니 오픈지엘 3.0대 함수라더가
D3D 10 11은 잘 모르겠군요. 비스타쪽도 잘 모르겠습니다.




많은 분들이 생각하시는게 [오픈지엘은 기능이 떨어져서 버림받았다.]
라고 하시는데 실상은 좀 다르죠. 오픈지엘쪽이 조금 (정말 조금) 유리합니다.

오픈지엘은 그래픽 드라이버 업데이트로 할 수 있지만,
DX는 SDK 자체 버전업을 해야하니까요. 덕분에 비스타를 깔지 않아도 오픈지엘로
사용한 기능도 있습니다.

하지만 이게 좀 문제입니다.


사실 게임을 만들때는 방금 막 나온 따끈따끈한 최신 기술 같은건
그다지 급하지 않습니다. 그 그래픽카드가 깔리는데 시간도 있고
그 기술에 맞춰서만은 게임을 만들 수 없는게 PC 니까요.


자, 그럼 뭐가 문제냐.
오픈지엘은 새로 함수를 추가하는데 확장 함수라는걸 사용합니다.

[API 사용자] - [OpenGL] - [그래픽카드 드라이버]

이렇게 있는 상태면 사용자 측에서 확장 리스트를 요청합니다.
그럼 오픈지엘쪽에서는 그래픽카드 드라이버에 있는 확장 리스트를 받아다
사용자에게 줍니다. 그럼 사용자는 이 확장을 보고 함수 포인터를 받아다 씁니다.

(오픈지엘 속도 느리다는 분들 중에선 확장 함수 안 쓰고 그러시는 분도 있는것 같습니다만 ^^;)

근데 그 확장함수들은 각 그래픽카드 벤더에서 따로 만듭니다. 여기서 문제가 생기죠.

NVIDIA나 ATI 같은 경우는 확장에 GL_NV 나 GL_ATI 같은 접두어가 붙죠.
네, 게임 프로그래머(혹은 엔진)는 이 두 개에 대한 코딩을 해야하는 것입니다.



....무진장 짜증납니다.

옛날에는 비디오메모리쪽에 올리는 확장함수도 회사가 나눠져서 따로 코딩해야하는데
객체지향이라던가 정리라던가를 잘 생각 안 해 놓으면 그야말로 삽질이 따로 없죠.

이 문제를 해결하는것이 OpenGL ARB, 일종의 심의위원회 같은 곳에서 나오는
GL_ARB 라는 확장인데.. 이게 나오는게 느린겁니다.
이쪽에서 나오는 확장이 DX랑 비슷한 속도라면 문제가 되지 않습니다만,

핫.. 핫.. 2.0때 생각해보면 참.. -┏

재밌는 것은 여기에 마소도 들락날락 했다는겁니다. 마소가 방해한다던 소문도 있었는데
일단 소문이니 그러려니 하고.



프로그래머 입장에서 봅시다.
기능이 나오는데 시간차이는 그다지 크지 않습니다.
하지만 DX쪽은 구현을 하나 하려면 하나면 되지만,
OpenGL 은 두 개 이상 (요즘엔 ATI랑 NV 빼곤 생각을 안하지만 :) ) 을 만들어야하는거죠.
거기다 DX는 동영상이라던지 입력기능도 같이 지원해줍니다! (사실 오픈지엘에서도 갖다 쓸 수도 있긴 하지만)


뭐 답은 간단하겠죠. MS WIndow 게임 만드는데 맥이나 리눅스 신경 쓸 리도 없고,
신경 쓰더라도 맥 정도인데, 맥은 기계가 일정해서 저런 다중 작업을 크게 안해도 됩니다.



회사서 땡땡이 (...) 치면서 쓴 글이라 퇴고고 두서고 없는데
결론을 이야기하자면, 결국 기술 구현은 드라이버에서 하는 것이고
성능차이는 벤더들이 삽질하지 않는 한 둘 사이에 큰 차이는 없습니다.

ATI는 드라이버가.. 후.. 후후후.. 넵. DX도 위태위태한데 OpenGL을 잘 할까요. -┏

다만 편의성 (개발에서 엄청 중요합니다)이 D3D쪽이 우세해서 밀린거라고 생각하시는게
옳지 않을까라고 생각합니다.


참고자료 [오픈지엘 확장기능 리스트] 입니다.

엄청 많죠? 저것도 옛날 건 좀 사라진겁니다. -┏



좀 긴 덧글 )
사 실 D3D도 좀 불만인 점이 있습니다.
수시로 구조라던가 전처리기를 바꾸는 것.

D3D 7 이전에는 확실히 바꾸는게 좋다고 생각했습니다.
3D 만들때 무지 짜증나는게 많았거든요.
이때가 오픈지엘 전성시대(?) 였죠.

하지만 8.0에 들어오면서 구조를 대폭 변경하고 편해졌습니다.
오오 마소 제법인데 라는 생각이 들었죠.
9.0대도 전처리기라던가 약간 수정이 있었습니다만
뭐 허용범위내였는데, 10.0 오면서 많이 바뀐다는 소리를
듣고, 더군다나 비스타 전용이란 말을 듣고 그냥 관심을 끊게 되었습니다.

사실 미니 게임기 쪽 손대다보니 틈이 없었습니다만. ^^;

아 잘못된 부분 있으면 지적 좀 해 주십시요.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://arvid.egloos.com/tb/4105044 [도움말]
  • Active X 까는 건 좋은데... 2009/04/02 22:20 #

    MS 독점 문제로 가다보니 Direct X 까지 까는 경우가 종종 보인다. Open GL이 표준 아니냐고...Open GL, 물론 그래픽 표준 API 맞다. 근데 컨소시엄 시스템이라 버전업에 시간이 너무 오래 걸린다. 언제나 최신기술 내보여서 카드 팔아먹고 싶어하는 엔비디아나 ATi에겐 속터질 수밖에. 그나마 게임 업계가 원하는 대로 업데이트 해주는 것도 아니다. 근데 DX는 MS 혼자 개발하고 내놓기 때문에 빨리빨리 나온다. 요...... more

덧글

  • 계란소년 2009/04/02 22:25 # 답글

    일단 Open GL을 표준 규격이라서 더 낫다고 주장하는 쪽은 기본적으로 Open GL ARB를 얘기한다고 봐야죠. 확장형은 일단 논외란 거죠. 게다가 지금은 (렌더링 업계 쪽은 모르겠지만) 게임쪽 확장함수라는 게 D3D 신버전엔 있고 ARB엔 아직 없는 걸 카피해놓는 수준인지라 일방적으로 따라가는 모양새라 Open GL 확장형의 이득이 거의 없는 거죠. 좀 더 수고하는 대신 D3D에 없는 게 가능하다면 모르겠지만...

    엔비디아는 Open GL 확장형으로 DX에 어느정도 대항하려는 모양새도 보입니다만,(DX에 자신들이 개발한 기술을 관철시키는 협상카드로써의 효과도 있고) 이 세상에 엔비디아 카드만 깔린 게 아닌 이상 실제 활용에 있어 크게 의미있는 부분은 아니고...다른 절반인 ATi가 MS의 비전을 충실히 따라주는지라 되려 차기 DX에서 주도권을 빼앗겼다는 얘기도 있죠. DX10.1을 ATi가 먼저 도입했고, DX11도 ATi의 기술 비전에 입각해 만들었다는 얘기도 있고...

    D3D 10의 경우 D3D 10 신기능 외에도 D3D 9 까지 구현됐던 기능들을 전부 다 새로 최적화 해서 코딩했습니다. 그래서 D3D 10의 새로운 쉐이더 같은 걸 안 쓰더라도 D3D 10으로 돌리면 D3D 9보다 프레임이 더 잘 나오죠. 물론 호환도 안 되지만...그런 관계로 비스타엔 DX10과 DX9이 같이 들어갑니다.
  • 아르비드 2009/04/03 10:22 #

    ARB에 없는걸 한다기 보다는 보통은 벤더에서 만든 확장을 ARB로 승격시키는 쪽이죠. 어차피 ARB쪽도 확장이니 엔비디아 확장형이라고 따로 구분짓는건 코딩하는 입장에선 그렇게 크게 의미가 없다고 생각합니다. 뭐 확실히 표준이라 더 낫다고 주장하는건 저도 별로 안 좋아합니다만. OpenGL 이 표준 규격이라고 정해진 것도 아니고.

    ATi는 비협조적인 측면이 많아서 참 애매하죠. 윈도우쪽 드라이버 불안정한것도 그렇지만 리눅스쪽은 아예 손 놔버렸고. 개인적으로 좋아하는 회산데 말이죠. :)

    확실히 엔비디아는 개발자 사이트를 봐도 참 잘 해놨습니다. 오픈지엘이나 리눅스쪽 지원도 잘 하는 편이고.

    비 스타에서는 구조만 봤는데 DX가 OS 적으로 포함이 되어서 향상이 있는거 같습니다만, 사실 그 중간에 SDK는 그렇게까지 바꿀 필요가 있었나 생각이 들어서요. 사실 이것도 꽤 귀찮거든요. 새로 만드는거면 몰라도 기존거 바꾸긴.. -.-; (뭐 저하곤 상관 없어졌습니다만. ^^;)
※ 로그인 사용자만 덧글을 남길 수 있습니다.