잡담

MonoGame이 Unity를 따라가지 못하는 이유?

최근에 Unity를 공부할 겸 2011년에 Android 기본 API로 만들었던 게임을 Unity로 포팅했었는데 몇 가지 귀찮은 점을 빼면 상당히 편리하게 만들었다.

대충 1차 완성을 끝내고 이번엔 2008년에 SK-VM API로 만들었던 게임을 Unity로 포팅하려는 와중에 이미지 크기가 너무 작아서(무려 해상도가 176 * 178이다.) 유니티 내에서 사용하기가 어려워(Unity의 기본 2D 타일 렌더링 기능이 정상 작동하지 않았다. 이미지 크기를 키운다면 가능은 하겠지만…) 이번에는 MonoGame으로 만들기로 결정했다.

여기서 문제점이 발생한다. MonoGame의 전신은 XNA Game Studio고, XNA Game Studio의 API는 DirectX 10이 막 출시됐던 1.0과 큰 차이가 없다. 그리고 DirectX 10은 싱글스레드 기반의 렌더링 시스템이고, 멀티스레드 기반 렌더링 시스템인 DirectX 11과는 기본적으로 API 설계 자체가 호환되지 않는다. 물론 MonoGame의 윈도우 버전 라이브러리는 DirectX 11을 이용해 개발됐지만 DirectX 11의 멀티스레드 기능은 전혀 사용하지 않는다.

MonoGame은 XNA Game Studio의 API를 크게 벗어나지 않는 한에서 API를 수정하고 있기 때문에 멀티스레드 기반 렌더링을 지원하지 않는다. 논의가 계속 진행됐지만 결국 다 포기했는지 2018년 4월 이후로는 논의가 없다.

고수준 엔진인 Unity와 저수준 프레임워크인 MonoGame을 비교하는건 의미가 없긴 하지만 MonoGame을 기반으로 하는 고수준 엔진과 비교한다면 의미가 있겠지. MonoGame부터가 멀티스레드를 제대로 지원할 수 없으니 Unity와 비교했을 때 성능 차이가 발생하게 된다.

이 때문에 MonoGame은 주로 소규모 인디 게임에서 활용되고 있고 대규모 게임으로 가면 갈 수록 볼 수가 없게 된다. 물론 성능 문제 이외에도 손쉬운 에디터의 유무도 갈리겠지만.

어쨌든 개인적으로 MonoGame은 슬슬 XNA의 틀을 벗어나 API를 전체적으로 현대적인 하드웨어를 제대로 활용할 수 있도록 개선하는 방향으로 가야되는 것 아닌가 하는 생각이 든다. 그것만 된다면 이를 이용한 고수준 게임 엔진이 나오기도 쉽겠지.

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.