XNA Game Studio に関わる派生ソフトウェア
今回の話の周辺には Microsoft にとっての派生ソフトウェアが沢山登場します.そのあたりから見ていきましょう.
CLR
スクリプト言語が様々なプラットフォームに移植されているように,.NET の実行エンジンである CLR も,元々マルチプラットフォーム展開が示唆されていました.その移植にあたって,.NET アセンブリファイルの解析や,MSIL の JIT といった,本質的な部分の移植がそこまで難航する理由は思い当たりません*1.
また,.NET Framework 1.x/2.0 の CLR ですら,通常は数 MB のワーキング・セットで十分動作可能と言われています*2.Windows 環境での .NET アプリケーションのワーキング・セットが大きく見えることは,GC アルゴリズムがメモリの断片化耐性とパフォーマンスを重視していることと関係が深いと考えられ,搭載メモリが少ないからといって必ずしも CLR が移植できないとは限りません*3.
さて,現状で明らかになっている CLR 派生品を挙げると,次のようなものがあります.
- .NET Framework の CLR
- .NET Compact Framework の CLR
- .NET Micro Framework の CLR
- XNA で用いられる Xbox 360 用のカスタム CLR
Xbox 360 用の CLR は,少なくとも初期バージョンでは,Compact Framework の派生品となり,フルセットの CLR が持っているゲーム開発に魅力的な機能のいくつかは,残念ながら使用できない可能性が高そうです.
MSDN Forums のこのスレッドによれば,例えば以下のような機能は現在使用できないとされています.
- C# の実行時コンパイル
- Lightweight Code Generation (LCG)
- IronPython
これらの機能はゲーム向けのスクリプティングや,パフォーマンス分野での最適化手法として期待が大きいだけに,サポートが待たれるところになりそうです.
また,Xbox 360 のようなマルチプロセッサ環境では,Microsoft Robotics Studio で用いられる Concurrency and Coordination Runtime (CCR)*4 のようなライブラリが使用可能かどうかは興味のあるところです.
いずれにせよ,CLR の凝った技術を使用したライブラリほど,XNA のクロスプラットフォーム環境では使用できない可能性があることは意識しておいた方が良いでしょう.
DirectX の Managed Code からの利用
DirectX は歴史的にも色々なプラットフォームに移植されていますが,CLR が移植され,かつ Microsoft による .NET ラッパーが一般に公開されていること (またはその予定),という条件では次の 3 つが挙げられます.
- Windows 向けの DirectX
- Windows Mobile 向けの DirectX
- Xbox 360 用の DirectX
このうち,(1) と (2) については,元々 C++/COM のネイティブインターフェイスが公開されていて*5,そのネイティブインターフェイスの上に構築された .NET ラッパーが Managed DirectX (DirectX for Managed Code) や,.NET Compact Framework 2.0 の Microsoft.WindowsMobile.DirectX 名前空間ということになります.これらについては,CLR が元々想定している相互運用の範疇内のライブラリに過ぎず,気に入らなければこれらの代わりに自分専用の .NET ラッパーを自作することも可能です.
これらの Microsoft 製マネージドラッパーのうち,正式にリリースされているのは以下の 2 つです*6.
- Managed DirectX (.NET Framework 1.1 用)
- Managed DirectX (.NET Compact Framework 2.0 に同梱)
一方,.NET Framework 2.0 向けの Managed DirectX 2.0 は,現在再配布不可能のベータ版が SDK に付属していますが,これが正式にリリースされることはなく,最終的には XNA に取って代わられることが既にアナウンスされています.
XNA 用の新しいマネージド・ライブラリは,D3DX への依存を排除したり,標準の座標系を右手系に変更したりと,(シーングラフ API が提供されるかは不明ですが) Direct3D RM のように,ライブラリ・データ形式・ツールといった多方面での同時展開が予想され,ネイティブインターフェイスの薄いラッパーを目指していた Managed DirectX 2.0 とは一線を画すものになりそうです.
またこれは Windows と Xbox 360 で共通に利用可能なインターフェイス / ライブラリの整備という意味も持ち,従来の Direct3D の API セットとは今後別の進化を辿る可能性もあります.
繰り返しになりますが,C++/COM のネイティブ・インターフェイスとの親和性が重要な場合では,自分でマネージドラッパーを作成するというオプションが依然として存在することを忘れないでください.
Visual Studio
XNA Game Studio は Visual C# 2005 Express Edition をベースにしていると言われています.元々 XNA は Visual Studio 2005 Team System の応用例として紹介されていましたし,XNA Build などは明らかに MSBuild *7 の派生物です.
Visual Studio のノウハウを相互に共有する意味が増すという点で,VSUG などにとってもチャンスかもしれませんね.
WPF (MIL)
WPF のアンマネージド・コンポーネントである MIL (milcore.dll) も,CLR 同様,移植できればそれなりにリターンの大きなコンポーネントです.現時点では XNA に絡んではいませんが,その立ち位置はかなり似ています.
MIL と CLR が移植できれば,その上で動く WPF ランタイム・ライブラリと WPF アプリケーションが (制限付きとはいえ) 動くようになるわけですから,「〜で Avalon が動いた」というマスコミ受けのよいデモにはもってこいです.
MIL の移植ですが,DirectX が移植されている環境であれば,ソースコードのリコンパイルするだけでもかなりの程度互換性が期待できますし,そもそも MIL は互換用途のソフトウェアレンダラを含んでいますから,とりあえずデモを動かす程度の移植はそこまで困難というものでもないでしょう.
とまあこの界隈,状況整理だけで一苦労で,記事を書くときにどうしたものか,という感じなわけですが.
*1:ただし,CLR 1.1 から CLR 2.0 の間で[https://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx:title=こっそりメモリモデルが変更された]ように,そう単純な話でもないことも確かです.
*2:.NET Micro Framework に至っては 300 KB と言われています.
*3:.NET Compact Framework の使用経験がある方はそのあたりにも注目してみるとおもしろいかもしれませんね
*4:タイムリーに Jeffrey Richter 氏の記事が MSDN Magazine に登場しています.[http://msdn.microsoft.com/msdnmag/issues/06/09/ConcurrentAffairs/default.aspx:title=ConcurrentAffairs]
*5:Windows Mobile 5.0 の DirectX については[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mobilesdk5/html/mob5oriDirect3DMobile.asp:title=こちら]を参照のこと.Direct3D 8 ベースで,固定小数点対応などいくつかの独自機能を持つ.[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceddk5/html/wce50concommandbufferstructure.asp:title=Command Buffer]は使用されている模様.
*6:この他に .NET Framework 1.0 のバージョンもありますが,まともにメンテナンスされていないので既に Obsolete と見た方が良いでしょう
*7:MSBuild という言葉は初耳,という人は @IT の[http://www.atmarkit.co.jp/fdotnet/special/msbuild01/msbuild01_01.html:title=一色さんの記事]参照のこと