SATOXのシテオク日記

~ふもっふ、ふもふも~

XNAなんて腐ってる

GDCに行ってきました。
会場のあちらこちらにXNAの文字が……。
XNAは本当にゲーム開発者にとって幸福をもたらすか……否否。

中でも大規模なスペースを占めていたのはマイクロソフト。『Windows Vista』や、『Xbox360』など、開発者の興味をそそるアイテムの展示などをおこなっていたが、このような状況下で発表されたのがウィンドウズとXbox間のクロスプラットフォーム化を容易に達成する『XNA Framework』だ。

XNAとはWindowsXbox360で共通で動作する開発環境およびAPI。PC上でXNAで開発されたソフトはXbox360上でもそのまま(正確には同じソース)動作するのだ。
確かによさそうに聞こえますが、この道は間違っているとSATOXは思うのです。
まず、Windowsが動作するのはx86のコード。SSEが使えるといってもXbox360PowerPC系のCPU。さらに3コアのデュアルコアエンディアンシステムバスも違えばキャッシュも違う。もちろんGPUも異なるわけです。Xbox360の性能を100%引き出そうと思ったとき、PCと互換性をもたらすXNAのせいで100%の性能は引き出せないんじゃないかと思います。
また、PC上でちゃんと動作していたとしても、Xbox360でまったく同じ動作をするわけがないんです。結局Xbox360の開発機材を使って詳細なデバッグを行わなければならないわけだ。
また、百歩譲ってPCとXbox360で同じソフトを提供できるとしたとき、ユーザにもたらす利益とは何だろうか。Xbox360も持っていないユーザはPC版で遊ぶのだろうか。このとき、Xbox360を買って遊ぶ大きなメリットがなくなるわけだ。
さらに、XNAで開発したゲームをPS3に移植することは不可能だろう。まず言語がC#。この時点でアウトだろう。C#C++/CLIなどと同様に標準化されているけども、これをPS3、言い換えればGCCに移植する人間が果たしているだろうか……難しいと思う。PS3で標準的に提供されているコンパイラはCとC++。移植性を考えるならCやC++を使うしかない。
XNAWindowsXboxクロスプラットフォーム化が実現!」とかかっこよく語ってますが、これは「WindowsXbox以外への移植を難しくさせる足かせ」に他ならないと言い切ってしまいましょう(笑)。
将来、PCでもDirectXに変わってXNAが使われてくるとは思いますが、これはマイクロソフトのタダの悪ふざけ。移植性の面でDirectX+Win32APIの状況と何にも変わらないと思います。
ゲームアプリは基本的に動的メモリアロケートを嫌います。メモリが小さく、限られているのがその理由です。malloc/freeやnew/deleteなどを繰り返したとき、メモリの断片化が起きて、いつメモリのアロケートに失敗するか分からないためです。
C#の基本はnewし放題、メモリのガベージコレクションはお任せという事なんですが、ぼーっと作ると突如ガベコレが起きて画面の更新が止まるなんて事が頻繁に起きるわけです。こんなんでホントにいいのだろうかって思っちゃいます。
アメリカ人のフレームレート命コマ落ちなんのそのみたいなおおざっぱな思想と、日本人のVsync同期でいつでも均一スムーズみたいな職人芸風なゲームの作りの違いがこの辺りに現れてるんですよね。
話が脱線しましたが、XNAなんて腐ってるというのがSATOXの結論です。