Twitter @HigenekoTwitter #XNA
XNA Game Studio Connectに関連する新機能として以下の二つがあります。
スクリーンキャプチャー
以前から要望として多かった機能の一つとしてXbox 360上で動作しているゲームのスクリーンキャプチャーがあります。XNA GS 3.0ではこのスクリーンキャプチャーが使えるようになりました。
スクリーンキャプチャーはゲームをデバッガにアタッチした状態、つまりVisual Studio上からF5キーを押して実行した時と、XNA Framework Remote Performance Monitorを使った時にしか使えないことに注意してください。
キャプチャ自体は非常に簡単でXNA Game Studio Device Centerでキャプチャーしたいデバイスのアイコンの右クリックメニューからTake Screen Captureを選択するだけです。
スクリーンキャプチャーされた画像はピクチャフォルダにデバイス名-番号というファイル名、PNG形式で保存されます。複数のスクリーン画像を続けてキャプチャーすると、デバイス名-1.png、デバイス名-2.pngといった感じに複数の画像ファイルが作られます。
Xbox 360上で動作しているゲーム画面をブログなどで紹介するときには、今まではデジカメで画面を撮ったり、自前でキャプチャープログラムを書かないといけませんでしたが(こんな方法もあったりしました)、これからはキャプチャー、ブログ書き込みプログラム上にドラッグ&ドロップするだけで、以下のようなスクリーンショットをブログに載せることが簡単になりました。
配置の高速化
XNA GS 2.0以前ではXbox 360上でゲームを開発している時にゲームの配置、特にコンテントの配置に時間が掛かるという問題がありました。XNA GS 3.0ではこの問題を解決するために二つの改良が施されました。
一つ目はファイルの圧縮です。
XNA GS 3.0ではプロジェクトプロパティにContent Buildタブが追加され、その中にコンテントパイプラインの出力ファイルの圧縮オプションが追加されました。
デフォルトではWindows用プロジェクトでは圧縮せず、Xbox 360用プロジェクトでは圧縮するようになっています。Windows用とXbox 360用のプロジェクトでデフォルトの設定が違うのは次の理由があります。PCにはXbox 360より高速で大容量なHDDがあり、圧縮に掛かる時間に見合うだけのメリットが少ないのに対して、Xbox 360ではコミュニティゲームの150MBという容量制限���あるのと、圧縮した方がコンパイルと配置の全体時間の短縮になるからです。もちろん、このオプションは自由に変えられるようになっています。
圧縮率はコンテントによって左右されますが、通常は元のサイズの70%~50%程度です。中には元のサイズの25%まで圧縮されたというケースもありました。この圧縮効果によって、配置に掛かる時間は三割から二倍程度速くなりました。
そして、二つ目は配置用のプログラムのチューニングです。
XNA Game Studio Connectの待機画面では、メインスレッド以外の5つのスレッドは暇を持て余していたので配置プログラムをマルチスレッド用に特化させることで配置に掛かる時間が大幅に短縮されました。
この二つの相乗効果によって、Xbox 360へのコンテントの配置が劇的に速くなりました。
XNA Game Studio 3.0がリリースされました。ここからダウンロードすることができます。細かい注意点などはReadmeページが参考になりますが、ここではPCへのインストールと、Xbox 360用の新しいXNA Game Studio Connectの導入の仕方について説明します。
XNA Game Studio 3.0がサポートしてる開発環境はVisual Studio 2008とVisual C# 2008 Express(無償)です。これらの開発環境を持っていない場合はXNA Game Studio 3.0をインストール前にあらかじめインストールする必要があります。
XNA Game Studio 3.0 Beta版をインストールした人への注意点
XNA Game Studio 3.0のベータ版をインストールしてた人は、リリース版をインストールする前にベータ版をアンインストールする必要があります。ベータ版がアンインストールされていない状態でリリース版をインストールしようとすると以下のメッセージが表示され、インストールが終了します。
ベータ版では以下の3つのコンポーネントがインストールされています。
これらのコンポーネントを全てアンインストールしてください。特に3番めのコンポーネントはアンインストールし忘れることが多いようです(私もよく忘れてました)。
XNA Game Studio Connectの導入について
Xbox 360上でゲームを開発するには、1.0と2.0で別々のプログラムを実行する必要がありましたが、3.0の新しいXNA Game Studio Connectは2.0と3.0の両方のゲームを実行、開発することができます。
Xbox 360の通常のゲームの場合、ゲームのバグなどを修正することができるタイトルアップデートという仕組みがありますが、新しいXNA Game Studio Connectはバグ修正ではないこと、そしてタイトルアップデートの枠内に収まりきらないということで、新しいXNA Game Studio Connectをインストールするには古いXNA Game Studio Connectを消して、新しいXNA Game Studio Connectをダウンロードするという二つのステップを踏む必要があります。
古いXNA Game Studio Connectを消す
古いXNA Game Studio Connectを起動しようとすると、アップデートを促す画面が表示されるだけになっています。
重要:新しいXNA Game Studio Connectをダウンロードする前に、古いXNA Game Studioを消すようにしてください。新しいXNA Game Studio Connectをダウンロードした後に古いXNA Game Studio Connectを消した場合、Xbox 360自体がフリーズするので電源ボタンを押して電源を切る必要があります。
新しいXNA Game Studio Connectをダウンロードする
先に新しいXNA Game Studio Connectをダウンロードしてしまうと、画面上には二つのXNA Game Studio Connectが表示されますが、新旧のXNA Game Studio Connectではアイコンが違うので見分けがつきます。
PIXとは
3Dゲームを開発している時に必ずといってあるのが、モデルが意図しない状態で表示されるという問題です。「色が変」や「形が変」と言う比較的原因が予想しやすい問題から「画面になにも出ない」といった原因を判断するのが困難な場合まで様々な問題があります。特にシェーダープログラムを使っているとこういった問題に直面する機会は多くなります。
こういった問題の原因を見つけるのに非常に有用なツールとして、Direct X SDKに付属するPIX for Windowsがあります。このツールは元々、初代Xbox用に開発されたPerformance Investigator for Xbox (PIX)だったのですが、これを使った人達からの強い要望でWindows版が作られました。
XNA FrameworkはDirect X上で動作しているので、XNA GS用に作られたゲームもPIX for Windowsを使うことができます。
PIXの主な機能としては
があります。
PIXの基本的な使い方
Direct X SDKをインストールした状態で(ここではAugust 2008を例にします)、スタートメニューからMicrosoft DirectX SDK (August 2008)/DirectX Utilities/PIX for Windowsを選択してPIX for Windowsを起動します。
FileメニューからNew Experimentを選択すると以下の画面が表示されます。
Program pathに対象となる実行ファイルを指定し、"A single-frame capture of Direct3D whenever F12 is pressed"のラジオボタンを選択して、右下にある"Start Experiment"ボタンを押すと、Program pathに指定した実行ファイルが実行されます。ここではSkinningSampleを使っています。
単独で実行させるのと違うのは、画面の左上にフレーム数などの情報が表示されています。キャプチャしたいシーンになったらF12キーを押してフレーム情報をキャプチャします。レンダリングするシーンの複雑さによってキャプチャに掛かる時間は変わってきます。
キャプチャした後にゲームを終了させると、PIX for Windowsに複数のウィンドウが表示されます。
この複数のウィンドウは上から順にCPUの作業時間をグラフで示すTimelineウィンドウ、グラフィクスリソース確保状況を表示するObjectsウィンドウ、左下はキャプチャしたフレーム内で起きたイベントを表示するEventsウィンドウ、そして右下が詳細を表示するDetailsウィンドウとなっています。
ここで、Eventsウィンドウで調べたいフレームを選択したあとに、Detailsウィンドウ内のRenderタブをクリックすると以下の画面になります。
PIXをシェーダーデバッガとして使う
このRenderタブにはフレームのレンダリング結果が表示されます。また、Eventsウィンドウの選択したフレームを開くと中には複数のイベントが表示されていますが、ここにはXNA Frameworkではなく、Direct Xのイベントが表示されます。ここからデバッグしたいDrawIndexedPrimitiveメソッドを探し出すのは面倒なので、今回は簡単な方法を紹介します。
それはRenderタブに表示されている画面上でデバッグしたいモデルの場所で右クリックして表示されるメニューからDebug This Pixel...を選択する方法です。ここでは、おっさんのアーマー部分を選択しました。
Debug This Pixel...を選択すると、DetailsウィンドウにDebuggerタブが追加され、選択したピクセルがどのようにレンダリングされたいるかの情報が表示されます。レンダリング開始時のフレームバッファーの色、クリアーした時の色、モデルをレンダリングしたときの色と、時系列に表示されています。もし、ここで表示されるリストが多い場合は重ね塗りが何度も起こっているのでフィルレートに影響しているということが判ります。
今回デバッグしたいのはおっさんのアーマー部分のシェーダーなので、リストの中からDrawIndexedPrimitiveメソッドを使って赤っぽくなっているピクセルを探します。
DrawIndexedPrimitiveを使っているピクセルでは、そのピクセルを描画するのに使われた三角形の各頂点の頂点シェーダー、そしてピクセルシェーダーをデバッグすることができます。ここでは"Debug Vertex 0"をクリックして頂点シェーダーのデバッグをすることにします。"Debug Vertex 0"をクリックすると以下のように、Debuggerタブ内に更にシェーダーアセンブリを表示するDisassemblyタブ、ソーソコードを表示するタブ(ここではSkinnedModel.fx)が表示されます。
ここで、ソースコードをPIX上で表示するにはシェーダーソースコードにコンパイル元のファイル情報が記載されている必要があります。XNA Frameworkではデバッグ設定でシェーダーをコンパイルすると、この情報を自動的に追加するようになっているので、プロジェクトをデバッグ設定でコンパイルすることでPIX上でソースコードレベルでのデバッグができるようになっています。逆に言えば、アセンブリしか表示されない場合はプロジェクトのコンパイル設定がリリースになっているのが原因と思われます。
Visual Studio上で提供されているデバッグ機能には及ばないにしても、ステップ実行や実行後の変数の状態表示など、デバッグするのに必要最低限の機能はあるので、シェーダーコードのデバッグをするのに大いに役立ちます。
PIXをシェーダーデバッガとして使うときの注意点
次回に続く
スタートメニューの登録名を変更する
デフォルトの状態でClickOnceを使うと、インストール時にスタートメニューにはプロジェクト名/プロジェクト名のように登録されます。前回の例ではSuperCatsというプロジェクトを作ったので、SuperCats/SuperCatsのようになります。
この設定の変更はプロジェクトプロパティの発行タブで行います。
発行タブページは上図のようになっていて、この中のオプションボタンを押すと、以下の発行オプションダイアログが開きます。
このダイアログ内の発行者名と製品名を変更することで、スタートメニューには発行者名/製品名のように登録されます。ここでは、発行者名を「ひげねこ」、製品名を「超猫」とします。
この状態で発行されたパッケージをインストールすると、上図のようになります。
配置マニフェストにマシン名とユーザー名が記載されるのを防ぐ
ここでは、デフォルトの状態で配布するパッケージにはパッケージを作ったマシン名と、ユーザー名が含まれている問題を解決する方法を紹介します。これでも構わないと言う人は読み飛ばして下さい。
アプリケーションを発行すると、発行先のフォルダにはアプリケーション名.applicationという配置マニフェストファイルが生成されます。このファイルはXMLファイルで中には発行者の情報が書かれおり、デフォルトの状態では発行者の情報はマシン名/ユーザー名のようになります。
なぜこうなっているかを簡単に説明すると、ClickOnceは発行者が発行したアプリケーションが第三者によって発行者の意図しない変更がされるのを防ぐために電子署名をするようになっていて、配置マニフェストには署名に使われた証明書の発行者名が記載されるようになっているからです。
デフォルトでは自動的に電子署名が作られ、上図のようにプロジェクトにテンポラリ証明書が追加されます。
この証明書の詳細は、プロジェクトプロパティの署名タブで見ることができます。上図では、私がテストに使っているノートブックのマシン名とユーザー名が発行者情報になってしまっています。
殆どの場合は問題ないのですが、個人的な情報、例えば彼女やお嫁さん(現実、非現実含む)の名前とかをマシン名やユーザー名に使ってい場合には、その情報をネットに流出するといろいろと問題があるという人も居ると思うのでここでは電子証明書の生成のしかたを紹介します。
個人でゲーム制作をしている場合、電子証明書を取得するには以下の二種類が考えられます。
作ったゲームを商品として販売するには1にするべきですが、ここでは自己署名証明書の作り方を紹介します。ただ���、この証明書は誰にでも作ることができるので信頼できる証明書では無いことに注意して下さい。
証明書を作るにはmakecert.exeを使います。このツールは.Net Framework SDKやWindows SDKに付属しています。SDKのコマンドプロンプトを開いて、以下のコマンドを実行します。
makecert -r -n "CN=John Smith" -b 01/01/2008 -e 12/31/2008 -sky exchange -ss my
それぞれのオプションの意味は以下のようになっています。
ここでは、発行者名を"John Smith"としましたが、自分の好きな名前に変更することができます。また、Windows OSには電子証明書を入れておくストアと呼ばれる金庫のようなものがあり、ここでは生成した証明書をこのストアに格納しています。
証明書を作ったら、プロジェクトプロパティの証明タブにあるストアから選択ボタンを押して以下の証明書選択ダイアログを表示します。
ここに、先ほど作った証明書が表示されるので、使いたい証明書を選びます。署名タブに選択した証明書が表示されているのを確認したら、発行タブを開いて、今すぐ発行ボタンで発行すると配置マニフェストには新しい発行者が記載されることになります。
まとめ
二回に渡って、ClickOnceの使い方を簡単に紹介してきました。ClickOnceはもともと.Net 2.0から導入された.Netベースのアプリケーションを簡単に配布する為の仕組みです。より細かい仕組みについて興味がある人は以下のURLが参考になると思います。
ClickOnceの真実 http://www.atmarkit.co.jp/fdotnet/clickonce/index/index.html
ClickOnceを使うことで手軽にXNA Game Studio 3.0で作られたゲームを配布することができ、配布先でも必須コンポーネントを自動的にインストールしてくれるので、ゲームを遊ぶ側の負担が大幅に減っています。
また、ClickOnceのサポートに伴ってXNA Framework 3.0のランタイムを必須コンポーネントとしてインストーラープロジェクトから参照できるようになったのでClickOnceではサポートされていない細かいカスタマイズを含むインストーラーも作りやすくなっています。
XNA Game Studio 3.0の新機能の一つにClickOnceのサポートがあります。今まではWindows用に作ったゲームを配布するには多くのランタイムを手動でインストールする必要があり、非常に不便だった問題を解決するためのものです。
ClickOnceの他にも、Visual Studio上でプログラムインストール用のプロジェクト用のコンポーネントも用意されているので、簡単にXNA Game Studioで作られたゲームを再配布できるようになりました。
今回は、ClickOnceを使ったゲーム配布の流れを紹介します。
ゲーム配布用のパッケージを作る
ゲームが完成したら、Visual Studio 2008上のビルドメニューから{プロジェクト名}の発行を選択します。ここでは例としてSuperCatsという名前のプロジェクトを使います。
以下の様な発行ウィザードが表示されます。もっとも手っ取り早い方法は、アプリケーションを発行する場所を適当な位置を指定した後に、完了ボタンを押すだけでプロジェクトのビルドと、配布用のパッケージが作られます。
パッケージの内容
ウィーザードで発行先に指定したフォルダ(ここではtmp/public)には以下のフォルダやファイルが作られます。
パッケージ全体のサイズは元々のゲームのサイズ+500KB程度になります。注:ベータ版では+5MB程になっていました。
後はこの二つのファイルとフォルダをzipファイルなどにまとめて自分のサイトにアップするだけです。
インストールの振る舞い
配布用のパッケージをダウンロードし、setup.exeを実行するだけで、ゲームのインストール、そして実行までが自動的に行われます。
この時、setup.exeはゲームを実行するのに必要な以下のコンポーネントがインストールされているかをチェックします。
もし、これらのランタイムがシステムにインストールされていない場合は、自動的にそれらのコンポーネントをネットからダウンロードし、インストールします。.Net Framework 3.5をインストールしていない環境の場合、最初のインストールに時間が掛かる事に注意して下さい。
XNA GS 2.0の時にはフレームワークが使っているDirectXのランタイムは別途インストールする必要がありましたが、XNA GS 3.0ではそれらのコンポーネントもXNA Framework 3.0のランタイムにまとめられています。
また、インストールされたプログラムはデフォルトの状態ではスタートメニューにのプロジェクト名のフォルダと、その下にショートカットが作られます。
アンインストールする場合は、他のアプリケーションと同じようにプログラムの追加/削除メニューからアンインストールすることができます。
注意点
ClickOnceのサポートによってゲームの配布が簡単になりましたが、残念ながらGame for Windows Liveのランタイムは再配布パッケージの中には含まれないので、ネットワーク対応のゲームやGamerServices名前空間の機能を使っているゲームを他のマシンで遊ぶにはXNA GS 3.0をインストールする必要があります。
また、今回紹介した方法だと.applicationファイル内に発行したマシン名とユーザー名の情報が記録されるので、これらの情報を公開したくない人は注意して下さい。この解決方法と、スタートメニューに登録される名前をプロジェクト名から好きな名前に変更する仕方などは次回紹介します。
XNA Game Studio 3.0のリリース日が正式決定されました。
北米西海岸時間で10月30日、日本時間の10月30日の夕方~31日早朝頃までにリリースされます。
また、11月の19日のXbox 360アップデートと同時に北米、カナダ、イギリス、フランス、イタリア、そしてスペインの6カ国でコミュニティゲームが正式運用開始になります。
コミュニティゲームへ投稿するゲームはXNA GS 3.0で作られている必要があるので、サービスが開始される国に住んでいて、サービス開始初日にゲームを投稿したい人達にとっては20日間ほどの2.0から3.0へ移行、そしてテスト期間があります。
日本でも来年前半にコミュニティゲームが正式運用される予定なので、日本への配信はもちろん、世界へ向けての配信もできるので自分の作ったゲームを配信してみたいという人は是非3.0を使ってみて下さい。