오랜만에 글을 남겨보렵니다...
요즘 모바일게임의 경쟁이 치열한 관계로 살아남기 위해서 과하게 일하다가 이렇게 살다가는 재미없어서 죽을 것 같아서, 올 해부터는 조금씩 개인적으로나마 엔진 쪽 작업을 하기 시작했습니다. 개발하기 앞서 준비 작업을 하다가 정리한 내용 중에 상식적으로 알면 좋을 것 같은 내용을 적어보려고 합니다. (아마 다들 아실 내용 같은데.. 음...). 최근에는 다들 유니티 엔진이나 언리얼 엔진을 사용하고 계실 것이기 때문에, 특별히 엔진 코어한 내용에 대해서는 이야기 하지 않겠습니다. ㅎㅎㅎ
엔진에서 멀티플랫폼을 지원해야 한다는 것은 이제는 너무 당연한 이야기입니다. 사실 유니티, 언리얼도 국내에서는 모바일에만 주로 사용하지만, PC, 모바일, 콘솔 거의 모든 플랫폼을 지원하니까요. 이런 플랫폼에서 기반이 되는 Graphics API가 존재합니다. DirectX, OpenGL 뭐 이런 것들입니다. 현재는 아마 모바일에서 OpenGL ES을 가장 많이 사용하겠죠...
저도 이전 엔진 개발하면서 이 부분을 좀 무식하게 처리한 부분이 있어서 깔끔하게 하고 싶어서, 이런 저런 준비를 하면서 과연 어떤 그래픽 API들을 지원해야 하나? 라는 고민을 하기 시작했습니다. 지금 세대에서 많이 사용하는 그래픽 API를 정리해보면 이런 것들이에요.
- DirectX9, DirectX11 - Windows
- OpenGL 3.x ~ OpenGL 4.x - Windows, Linux, Android 상위 기종, Console
- OpenGL ES 1.1, 2.0, 3.x - Android, iOS
그런데, 재미있는 일이 벌어지고 있습니다. 이런 API 벤더들이 차세대 API를 만들고 있다는 것이에요.
- DirectX12 - Windows
- glNext - Windows, Android, Linux, ....
- Metal - iOS
- Mantle - AMD
여러가지 큰 변화들이 있겠지만, 방향성은 좀 더 직접적으로 그래픽 드라이버를 컨트롤 해보겠다는 것으로 알고 있습니다. 그래서, 렌더 상태 변화에 따른 OVERHEAD도 없어지구요. 뭐 이런 겁니다. 예를 들어서 iOS 계열에서만 사용할 수 있는 Metal API의 경우에도 이런 이유로 10배나 빨라질 수 있다고 (뻥?!)홍보를 하구요.
이 중에 가장 핫(?)한 이슈가 해외 개발자 포럼에서 있었는데, "과연 APPLE이 OpenGL ES의 차기 버전을 계속 지원할 것인가?"라는 거에요. 갑론을박이 있었는데, 이건 지켜봐야 알 것 같네요. 애플에서 앱스토어에만 게임을 출시하게 만드려고, Metal을 사용하게 하려고 하지 않을까? 라는 이야기도 있고, 그럴리가 없다는 의견도 있고 그렇습니다.
암튼 이런 이유로 이전에 모바일 초창기에 플랫폼 파편화 같은 이야기가 있었는데, 이제는 그래픽 API 파편화("API Fragmentation") 현상이 심합니다. 지금 당장 1년 안에 게임을 만들어서 출시한다면 아마 현세대 API 중에 하나를 사용하면 될 것 같아요. 하지만, 좀 장기적으로 퍼포먼스를 극대화해서 퀄리티를 죽여주겠다면 아마 차세대 API를 생각해보는 것도 좋을 것 같아요. 물론 아직은 더 기다려보는 것이 좋겠지요?!
저는 일단 DirectX11과 OpenGL ES 2.0 ~ 3.x를 선택해서 출발을 했습니다. 앞으로 어떤 API가 어떤게 엔진에 추가될 수 있을지 모르기 때문에, 최대한 새로운 API를 추가하기 쉽도록 엔진 구조를 잡아가는 중입니다.
앞으로 아마 점점 엔진을 구매해서 사용해야 하는 이유가 점점 많이지는군요. ㅎㅎㅎ. 엔진을 구매하더라도 엔진에서 그래픽 API를 선택할 수 있을텐데, 어떤 것들이 있고, 어떤 특성이 있는지 한번 확인하고 사용해보시면 좋을 것 같습니다.
(나중에 기회가 되면 차세대 그래픽 API 특징에 대해서 한번 정리해보도록 할게욤... 아직 저도 깊게 보지는 않아서 몰라요. 그리고 GDC15에서 DirectX12, glNext 발표가 내정된 것으로 알고 있으니, 기대해보셔도 좋을 듯 합니다.)
그럼 늦었지만 새해 복 많이 받으세요.
'프로그래밍' 카테고리의 다른 글
The Modernest C++ #0 - 시작하며 (4) | 2015.10.06 |
---|---|
구조체 멤버 정렬 (Struct Member Alignment) (0) | 2015.08.04 |
실시간 그림자를 싸게 그리자! 평면상의 그림자 ( Planar Shadow) (4) | 2015.02.23 |
템플릿 특수화 ( Template Specialization ) (2) | 2015.02.05 |
C# Boxing과 Unboxing (1) | 2015.01.30 |