XNA의 몰락. 그리고 대안

김포프 2013-01-09

XNA가 처음 나왔을 때부터 열심히 사용했었다. 첨에는 PC와 Xbox 360용으로 돌 수 있는 게임을 만들 수 있다는게 맘에 들어서였고, 또 Xbox 360에 올리면 수익모델이 있다는 것도 맘에 들었었다. 하지만 불행히도 엑박에서 XNA 게임이 차지하는 비중이 매우 미미한 수준에서 그친 이후 XNA는 여러번 변화를 겪게 된다. XNA 4.0부터던가… 윈폰 7.0용으로 게임을 만들려면 XNA를 써야 했다. 모바일 플랫폼을 지원하려고 노력을 퍼붓다 보니 당연 PC나 엑박용 지원은 미미해졌고 그로 인해 XNA의 입지가 조금씩 애매해져갔다.

물론 그럼에도 난 XNA를 자주 사용했는데… 스크린 스페이스 데칼 프리젠테이션에 사용한 데모 프로그램도 XNA로 만든 거였다. XNA가 가지고 있는 컨텐츠 파이프라인이라던가 C#으로 쉽게 DirectX 기능을 사용할 수 있다는 사실이 프로토타입을 만드는데는 아주 적합했다고 할까?

하지만 이제 윈폰 8이 XNA 지원을 중지한다고 한다. 그 대신 WinRT를 사용한다고… Visual Studio 2012도 XNA를 지원하지 않는다. 뭐 어떻게 사용할 수 있는 꼼수는 있다 물론 Visual Studio 2010을 사용하며 XNA 4.0을 계속 사용할 수는 있지만 XNA에는 다음과 같은 제약이 있다.

  • 64비트를 지원하지 않음
  • DirectX 9기능까지만 지원함. (즉 DX11 기능을 쓸 수가 없음)

이제 대안을 찾을 때… 결국 XNA가 좋았던 이유는 다음의 두가지였다.

  • C#지원
  • 컨텐츠 파이프라인

그러니 이것만 어떻게 해결할 수 있는 대안을 찾으면 되는 게 아닌가…?

C# 지원

C#을 지원하는(정확히 말하면 어떤 .NET 언어 라도 지원하는) DirectX 로는 SharpDXSlimDX가 있다. 둘다 API도 매우 비슷하고 사용법도 거의 같다. 그리고 둘다 64비트를 지원한다. 최근에 64비트용 프로토타입을 만들 일이 있어서 둘다 사용해봤는데… 사용해본 바로는 SharDX가 SlimDX보다 낫다. 이유는 다음의 2개:

  • SharpDX가 속도가 더 빠름 (API 호출의 부하가 적음)
  • SharpDX가 설치가 더 쉬움(그냥 DLL파일만 복사해놓으면 끝)

고로 SharpDX를 사용하면 C# 지원문제는 해결..

컨텐츠 파이프라인

사실 이 부분은 딱히 방법이 안보인다. 아직… 물론 C#자체 또는 SharpDX자체에서 텍스처 파일 로딩기능은 거의 다 구현해놨으니 이건 큰문제가 아닌데… 오디오 라던가 메쉬 같은건 여전히 좀 문제다.

하지만 비주얼 스튜디오 2012에 FBX를 이용하는 예제가 이미 포함되어있고, MS에서 WinRT를 더 제대로 지원하려면 컨텐츠 파이프라인을 좀더 낫게 만들어 주지 않을까? 하는 기대만 한다.

아니면 내가 시간이 좀 나면 짬짬이 이런걸 만들어서 공개하고 싶기도 한데… 현재 내 스케줄을 봤을때 그건 거의 불가능할듯…

결론 - SharpDX

난 일단 SharpDX로 갈아타기로 했다. 프로토타입이나 툴에서 필요한 메모리가 32비트에서 지원할수 있는 용량을 이미 넘어섰기때문이다. 컨텐츠 파이프라인은 텍스처나 메쉬정도는 이미 지원되니.. 나머지 거야 어떻게든 닥칠 때마다 해결하면 되겠지.