連載
.NET&Windows Vistaへ広がるDirectXの世界

第3回 .NET開発者のためのDirectX連携手法

―― 既存技術とXNAの比較 ――

NyaRuRu
Microsoft MVP Windows - DirectX(Jan 2004 - Dec 2006)
2006/10/04
2006/11/09 更新
Page1 Page2 Page3

Back Issue
1
DirectXの真実
2
DirectXマスターを目指すあなたが持つべき視点

 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++)を用いて開発されている。

 この関係を表したものが次の図だ。

Windows環境でのMDXとXNAの動作の仕組み
アプリケーションを作成するうえで、開発者はMDX/XNAをネイティブDirectXのラッパー・ライブラリとして使用することができる。また、アプリケーションは必要に応じてほかのアンマネージ・コードを併用することもできる。OSから見た.NETアプリケーションは、Win32プロセスの1つにすぎない。

 一方、Xbox 360環境でのXNAは、WindowsにおけるネイティブDirectXのように、魔法の世界の入り口に相当する。次の図をご覧いただきたい。

Xbox 360環境でのXNAの動作の仕組み
Xbox 360環境にもCLRとXNAランタイム・ライブラリが提供され、開発者の作成した.NETアプリケーションをロード/実行可能にするというのがXNAの特徴である。
この実行環境については公式のFAQのほかにもXNA Blogでの「What is the XNA Framework」というエントリやMSDN Forumsでいくつか情報が明らかにされており、例えばアンマネージ・コードの使用が禁止されるといった制限があるようだ。また、提供されるCLRについてもCompact Framework用のものをベースとし、Windows用のフル機能のCLRに比べればいくつかの使用できない機能があるらしい。例えば、実行時コンパイルやLightweight Code Generation(LCG)といった機能は使用できないとのことである。同機能に依存したIronPythonも、このカスタムCLRでは動作しないとの話だ。

 これを、XNA Frameworkの視点から整理し直してみると以下のようになる。

XNA Frameworkのアーキテクチャ
MSDN Blogで述べられているXNAのアーキテクチャ図。Platform層は、WindowsとXbox 360それぞれのネイティブAPIで吸収し、Core Framework層よりも下側がマネージな世界という扱いである。Core Frameworkはそれぞれ同名の名前空間に対応している。なお、XInput、XACTについては後述の「コラム:DirectX 10? Direct3D 10?」を参照のこと。

 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”という言葉はあまり見掛けないことにお気づきだろうか? この背後には、次の表に示すような、基盤技術の世代交代がある。

DirectX関連のテクノロジの変遷図
現在DirectX SDKに付属し、アクティブに開発が行われているのはDirect3D、XACT、XInputのみである。もちろんWindows VistaでもLegacy DirectXを使用したアプリケーションは動作可能だが、Vistaにおける新機能は新APIを通して提供される。このように、Direct3D以外の新APIはもはやDirectの名を冠していない。こうしてみると、Xbox 360とのクロス・プラットフォーム開発を行うライブラリは、Direct3Dを除いてすべて“X”で始まっていることが分かる。そしてそれはXNA Frameworkにも当てはまる、というわけだ。

 このように、“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開発を始めようという方へ

更新履歴

【2006/11/09】本記事の一部に以下のような誤りがありました。お詫びして訂正させていただきます。

図:XNA Frameworkのアーキテクチャ
図:DirectX関連のテクノロジの変遷図
XConnect
XContent

なお、XInput、XACT、XConnectについては後述の「コラム:DirectX 10? Direct3D 10?」を参照のこと。
なお、XInput、XACTについては後述の「コラム:DirectX 10? Direct3D 10?」を参照のこと。

インデックス・ページヘ  「.NET&Windows Vistaへ広がるDirectXの世界」



Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間