3Dモデルの問題点
前回の記事では、簡単なロボット……といいますか、ぶっちゃけドロイドくんの3Dモデルを作成しました。しかしながら、最大の特徴であるアンテナを作るのを失念していたため、3Dモデルにアンテナを追加して、ついでに頭と胴体の空洞を埋めておきました。この3DモデルをXファイル形式で出力し、前回作成したサンプルに上書きして実行すると、以下のように頭部にアンテナのあるドロイドくんが描画されます。しかしながら、メタセコイア上で表示される3Dモデルと比較してみると、どうもアゴ周りや胴体がもっさりしている印象を受けます。
このように、3Dモデルを異なるファイル形式に出力すると、情報の欠落により差異が生じる場合があります。それでは、このもっさり感を簡単かつ無償で解消するには、どのようにすればよいのでしょうか? 方法はいろいろと考えられますが、今回はメタセコイア形式の3DモデルをWindows Phoneに直接読み込む方法をご紹介します。
XNAでは、メタセコイア形式の3Dモデルを標準でサポートしていません。しかしながら、XNAにはさまざまな形式のファイルを読み込めるようにするための仕組みとして「コンテント・パイプライン」が存在します。そもそも、Xファイル形式の3DモデルがXNAで利用できるのは、Xファイルを読み込むためのコンテント・パイプライン用アセンブリが標準で用意されているためです。このため、メタセコイア用のコンテント・パイプライン用アセンブリを用意すれば、メタセコイア形式の3DモデルをXNAで利用することが可能となります。
幸いなことに、XNAの開発メンバーである伊藤雄一氏が運営している「ひにけにXNA」というサイトでは、「メタセコイア・パイプライン」というコンテント・パイプライン用アセンブリが無償(商用利用も可能)で公開されています。このため、このアセンブリをContentプロジェクトから参照すれば、いとも簡単にメタセコイア形式の3Dモデルを直接読み込むことが可能となります。それでは、実際に手順を見ていきましょう!
3Dモデルを直接読み込む
メタセコイア・パイプラインを利用してメタセコイア形式の3Dモデルを直接読み込むためには、まず以下のページから「MetasequoiaPipeline-1.0.101222.0-bin.zip」をダウンロードし、解凍した「MetasequoiaPipeline.dll」をソリューションのディレクトリに配置します。
この際、「MetasequoiaPipeline.dll」のプロパティ画面に[ブロックの解除]ボタンが表示されている場合は、ボタンを押下してファイルのブロックを解除してください(下図参照)。
次に、「MetasequoiaPipeline.dll」をContentプロジェクトから参照するため、Visual Studioのソリューションエクスプローラから「SlXnaAppLibContent」プロジェクトを選択し、コンテキストメニューから[参照の追加]を選択します。これにより表示される画面の[参照]タブから「MetasequoiaPipeline.dll」を選択して[OK]ボタンを押下します。
さらに「SlXnaAppLibContent」プロジェクトの「Droid.x」を選択し、コンテキストメニューから[削除]を選択します。再度、コンテキストメニューから[追加]-[既存の項目]を選択し、表示される画面から「Droid.mqo」を選択して[追加]ボタンを押下します。この際、「Droid.mqo」が表示されない場合は、画面右下のリストボックスから[すべてのファイル(*.*)]を選択してください。
これにより、追加したファイルの拡張子が自動的に識別されて、メタセコイア用のコンテント・パイプラインがプロパティに設定されます。
最後に、メインメニューから[ビルド]-[ソリューションのリビルド]を選択して実行すると、以下のようにメタセコイア上で表示されるものと遜色のない3Dモデルが表示されます。
このように、ソースコードに手を加えることなく、3Dモデルのファイル形式を変更し、問題を解消することができました。このことからも、コンテント・パイプラインが非常に強力な機能であることが分かります。これで後顧の憂いなく、開発に専念することができます。次項では、UIコントロールと3Dモデルを同一の画面で描画してみましょう!