連載 .NET&Windows Vistaへ広がるDirectXの世界 第3回 .NET開発者のためのDirectX連携手法 ―― 既存技術とXNAの比較 ―― NyaRuRuMicrosoft MVP Windows - DirectX(Jan 2004 - Dec 2006) 2006/10/04 2006/11/09 更新 |
|
Back Issue
|
||||
|
2006年8月14日〜15日にシアトルで開催されたGamefest 2006にて「XNA Game Studio」が発表され、同月30日に「XNA Game Studio Expressベータ版」のダウンロードが開始された。
ちょうどこのころ日本国内のゲーム開発者向けイベントであるCEDEC 2006も開催されていたのだが、3日目に当たる9月1日のマイクロソフトによる基調講演では、さっそくXNAについて大きく取り上げられたことから、ニュース・サイトなどでXNAについてすでに目にされた方も多いのではなかろうか。
今後の本連載では.NETからのDirectX開発(具体的にはXNAを用いたDirectX開発)というテーマを取り扱っていくが、まず今回はこのXNAとはどのようなものかについて紹介し、.NETにおけるそのほかのグラフィックス・テクノロジと比較して、その使い分けの指針を提示する。
1. XNAとは
XNAが何であるか、という質問に答えるのは難しくて、Microsoft .NETにおける“.NET”やWindows Liveにおける“Live”といった単語と同様、マイクロソフトがゲーム業界と連携して、ゲーム開発のプロセスやエコシステム*1の改善に取り組んでいくうえで、繰り返し用いられていくことになるキーワード*2である、というのが筆者の認識である。
*1 ゲーム開発におけるエコシステムとは、マイクロソフトとさまざまなゲーム会社がシームレスに、ゲーム開発に対して協調・協業することにより、その価値をそれぞれが連鎖的に高め、ともに成長していくという仕組みを意味する。 |
*2 余談だが、FAQによると“What does XNA stand for?”(XNAは何の略なのか?)の答えは“XNA's Not Acronymed”(XNAは3文字略語ではない)だそうだ。 |
今回登場したのは、ホビー開発者や学生向けのゲーム開発環境である「XNA Game Studio Express」と、Managed DirectX(以下MDX)の後を受け継ぎ、WindowsとXbox 360環境でのクロス・プラットフォームを実現する「XNA Framework」、それぞれのベータ版だ。
このほか、実際にXbox 360向けの商用ゲーム開発をターゲットとした「XNA Game Studio Professional」や、大規模ゲーム開発向けの「XNA Studio」、ゲーム制作に用いるコンテンツに対するビルド・ワーク・フローをサポートする「XNA Framework Content Pipeline」といった製品・技術が今後登場するとされている。
本連載でXNAを取り上げるのは、まず何よりXNA Frameworkがその位置付け的にも開発チーム的にも、MDXの後継的存在であるからだ。XNAは基盤技術としてCLRや.NET言語を使用しており、統合開発環境であるVisual Studioを核とした.NET世界の一翼を担うことになる可能性が高い。
実際、次のようにトピックのみを並べてみると「野心的な.NET開発環境」という印象を受けるのではなかろうか。
- Xbox 360をターゲットとした、CLRベースのクロス・プラットフォーム開発
- MSBuildを使用したコンテンツ・ワーク・フロー・エンジンの開発
- Visual Studio拡張による、特定用途に特化した開発環境の構築
他方、Windows Vista世代に向けて本格化する「Live Anywhere戦略」ではXbox 360も重要な役割を占めており、ゲーム制作という表現形態とコミュニケーション・ツールの融合についても模索されているようである。実際、CEDEC 2006の講演でも、ゲーム制作の世界にホビー開発者や学生をもっと招き入れ、活性化させていきたいという発言がなされていた。
このように大きく動きだしたXNAであるが、まず以下のコラムで、MDXからXNA Frameworkに至る流れを説明していこう。
【コラム】MDX/XNAは魔法か? アプリケーション・プログラマーの視点から見ると、DirectXの内部というのは手の出しようのない魔法の世界である。Direct3Dランタイム・ライブラリの内部動作は、技術資料やWindowsドライバ開発キット(DDK)などからうかがい知ることはできても、アプリケーションから直接利用することはできず、またユーザー・モードでまったく同じものを作り上げることもできない。その意味で、ネイティブDirectXの中身は魔法である。 では、MDXやXNAは魔法だろうか? 少なくとも、Windows上で動作させる限りにおいて、これらは魔法ではない。Windowsプラットフォーム上で動作させる場合のMDXやXNAは、ただのユーザー・モード・ライブラリである。実際、MDXやXNAのアンマネージ・コードとの境界部はC++/CLI(初期のMDXについてはManaged C++)を用いて開発されている。 この関係を表したものが次の図だ。
一方、Xbox 360環境でのXNAは、WindowsにおけるネイティブDirectXのように、魔法の世界の入り口に相当する。次の図をご覧いただきたい。
これを、XNA Frameworkの視点から整理し直してみると以下のようになる。
XNAのクロス・プラットフォーム開発は、ネイティブAPIの段階で、ある程度共通化がなされているものを選び、その上にCore Frameworkを構築することで実現されていると見ることができる。 実際には、この図以外にもスレッド・サポートなどCLRと.NET(Compact)Frameworkの移植にもネイティブ・サポートが必要になるため、従来アンマネージDLLやOSの機能で実現されてきたBCL(Base Class Library)の機能の多くは使用できなくなる可能性が高い。 また、従来の.NET Frameworkのフォント描画などはGDIやGDI+に任されてきたが、Xbox 360ではこの方法は使えない。しかし、マネージ言語で開発したライブラリであれば、OpenTypeFontのフォント・データから直接レンダリングしたり、x86 CPUをエミュレートする仕組みを実装して、x86実行ファイルを実行したりといった可能性は考えられる。 実際、XNAではXbox 360でも動作するフォント描画の仕組みを新たに開発するようである。同様に、C++で作成されているD3DXライブラリへの依存性も廃する方向に向かっており、現在リリースされているXNA Frameworkベータ版ではすでに算術ライブラリの.NET言語による再実装が完了している。 |
【コラム】DirectX 10? Direct3D 10? 最近のDirectXチームの発言を注意深く聞いていると、“Direct3D 10”や“D3D10”という言葉が前面に押し出され、“DirectX 10”という言葉はあまり見掛けないことにお気づきだろうか? この背後には、次の表に示すような、基盤技術の世代交代がある。
このように、“Direct”で始まる技術のうちDirect3D以外のコンポーネントはいずれも開発が中止されており、何らかの後継技術に取って代わられることが決まっている。そのため、「DirectXのアップデート=Direct3Dのアップデート」ということになってしまい、もはや“DirectX 10”という用語はふさわしくない、という思いがあるのかもしれない。 |
ここでXNA Framework以外の選択肢についても見ておこう。.NETアプリケーションからDirectXを利用するための手段として、WPF、MDX、そして自作のラッパー・ライブラリについて考える。
INDEX | ||
.NET&Windows Vistaへ広がるDirectXの世界 | ||
第3回 .NET開発者のためのDirectX連携手法 | ||
1.XNAとは | ||
2.どの技術を採用すべきか? | ||
3.XNA開発を始めようという方へ | ||
更新履歴 | |||||||||
|
「.NET&Windows Vistaへ広がるDirectXの世界」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|