Silverlight5 Tools 日本語版も公開され、やっと日本語開発環境でもSilverlight5の3Dグラフィック機能が試せそうなので、ちょっといじってみました。
Silverlight5の3Dグラフィック機能は、XNA Frameworkのサブセットになっていて、だいたい同じ感じのインターフェースですが、本家と比べるといくつか機能が削られています。例えばモデルデータを扱うModelクラスがSilverlight5にはありません。
ただし、Modelクラス等はSilverlight5 Toolkitで用意されていて、こちらを利用することでContentManager、Model、SpriteFont、SpriteBatchなどが使えるようになります。
VWDではSilverlight 3D Applicationテンプレートが使えない!?
Silverlight5 Toolkitをインストールすると、XNAを使ったプロジェクトの雛形を作ってくれる、Silverlight 3D Applicationというテンプレートがインストールされるはずですが、このテンプレートはVWDでは使えないようです。
無料のExpress系開発環境ではプロジェクト構成に制限がありますが、Silverlight 3D Applicationでは特殊なプロジェクト設定を使用しているので、VWDでは駄目なようです。サンプルのプロジェクトもVWDでは読み込めません。
ただし、このテンプレートに関しては、VS2010の評価版を入れてみてもインストールされませんでした。同じようにテンプレートがインストールされないという報告は何件かあるので、現在のバージョンではインストーラに不備があるかもしれません。
ContentManagerはSilverlightには合わないと思う
XNA Frameworkでは、プログラムコード以外のコンテンツ(テクスチャやモデルデータ等)を、ContentManagerを経由して読み込むようになっています。このContentManagerは、コンテンツファイルの解析などをコンパイル時に済ませてしまって、実行時には最小の手順で読み込めるようにネイティブに近い形式に変換しておきます。
コンテンツが高速なローカルディスクに格納されている場合はそれでいいと思いますが、ブラウザ上で実行されるSilverlightでは事情が違います。Silverlightではコンテンツは低速なネット上からダウンロードしないといけないので、最小化しないといけないのは読み込み処理量ではなくダウンロードサイズです。
例えばBloomというサンプルでは、コンテンツとしてsunser.jpgという画像が使われていますが、これが元は79KBしかないのに、コンテンツインポーターによって変換されたsunser.xnbでは1.5MBものサイズになっています。また、これらのコンテンツが全てxapファイルに含まれていて、Bloom.xapが4.8MBもあります。
ブラウザゲーム等は、一般的に最初に読み込むプログラムサイズは小さくしておき、開始ボタンが押された時点で時間のかかるダウンロード処理を始めますが、xapに全て入れられてしまうと最初の読み込みに時間がかかってしまいます。コンテンツファイルをxapから分離できるかは試していないので分かりませんが(ContentManager.OpenStreamを置き換えれば可能?)、分離できてもxnbファイルが大きいのでイマイチです。
他のXNA環境とクロスプラットフォームな開発をする場合はContentManagerはいいと思いますが、Silverlight専用で3Dを扱いたいだけだと使いにくい仕様です。
ContentManagerを使わなくても3D機能は使えますが、JPEGをデコードする機能などがビルトインで用意されていないので面倒です。(Image ControlからWriteableBitmapに変換すると画素データへのアクセスが拒否されて使えない)