【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

Game Developers Conference 2008 現地レポート

GDC 2008 チュートリアルセッションレポート
“XNA Game Studio Developer Day”

2月18日~22日 開催(現地時間)

会場:サンフランシスコ Moscone Convention Center

 現地時間の2月18日、世界最大のゲーム開発者向けカンファレンスGDC (Game Developers Conference) 2008が米国で開幕した。初日と2日目は「チュートリアル(Tutorials)」として、開発者向けの基礎的な内容を中心としたセッションが設けられ、会場全体がまるで学園であるかのような様相を呈する。本稿では、テクノロジーから経営戦略まで多岐にわたる十数のチュートリアルセッションの中から、米Microsoft主催のXNA関連チュートリアルの内容をご紹介したい。

 2007年12月にリリースされた「XNA 2.0」の様々な新機能は、個人レベルのゲーム開発を楽しむユーザーにとって大きなトピックであると同時に、商業コンテンツ製作へのレベルアップに具体的な方法を提供するものだ。しかし、XNA開発の実例については具体的な情報が乏しい状況が続いており、今回のチュートリアルセッションは開発者にとっての貴重な学習機会といえる。


■ エンドユーザー向けゲーム開発環境“XNA”は次のステージへ
  チュートリアルのキーワードは「ネットワーク」と「パフォーマンス」

写真はXNAにおけるコーディング技法を熱い語り口で解説するMatthew Picioccio氏
 「XNA」とは、Microsoftがエンドユーザーに提供している、Xbox 360とWindows向けのマルチプラットフォームのゲーム開発環境である。2006年12月にリリースされた「XNA Game Studio 1.0」では、Xbox 360とWindowsで動作するシングルプレイのゲームを、Microsoft Visual Studio 2005(Express版)を使って作成することができた。そして2007年12月には「XNA Game Studio 2.0」がリリース。マルチプレーヤーに対応したうえ、「Xbox Live Arcade」で配信するためのゲーム作成も可能となり、プロユースも一挙に視野に入った。

 本日、“XNA Game Studio Developer Day”と題された「XNA Game Studio 2.0」開発者向けのチュートリアルセッションは、午前の開場時間から午後の閉場時間まで、みっちり6本のセッションで構成される濃密なものとなった。

 チュートリアル全体としては、「XNA Game Studio 2.0」の新機能であるマルチプレーヤー機能の開発手法に続き、「LIVE Arcade」対応のゲームを作成する方法、そして第一線のゲームに必要となるパフォーマンス向上テクニックの紹介へと続くという構成だ。特に興味深いのは、「XNA」の開発言語である「Managed C#」とコンパイラ特性に着目したコーディングテクニックに2セッションを割き、高速に動作するコードを生成するための細かな手法を解説していたことである。

 これは、「XNA」が本質的な変革期を迎えたということを如実に物語っている。従来の「XNA 1.0」は、エンドユーザー個々人のホビーユースという「閉じた世界」で終始しており、ゲーム開発そのものに興味のないユーザーには関係ないものだった。しかし、「XNA 2.0」は「Xbox LIVE Arcade」での配信に対応し、エンドユーザー向けのコンテンツを開発・配信することができる。XNA開発コミュニティは、Xbox 360のすべてのユーザーを巻き込む、いわばXbox 360のコンテンツファームとでも呼ぶべきものになる可能性がある。ゆえに、リッチなコンテンツを実現するための「マルチプレーヤー」と「パフォーマンス」がキーワードとなるわけである。以下、この2つを中心にご紹介していきたい。


■ 「XNA 2.0」のキーフィーチャー「ネットワーク」と「LIVE Arcade」

会場でデモされたマルチプレーヤーゲーム。ネットワーク部分のプログラムは10分ほどで完成していた
メッセージング処理のコード作例。可読性の高さが特徴的である
 最初の2セッションでは、「XNA 2.0」でサポートされた新フィーチャーの具体的なHow Toの紹介が行なわれた。1番目のセッションではXNAフレームワークの主要開発者であるMicrosoftのShawn Hargreaves氏が登壇し、「XNA 2.0」におけるマルチプレーヤーゲームの開発方法を解説した。

 「簡単に使えること (Easy to use)」を目標に掲げた「XNA 2.0」のネットワーク機能を使うと、1台のPCとXbox 360でマルチプレーヤーゲームを開発できる。高度に抽象化されたプログラムオブジェクトを利用し、マッチメーキング、ゲームセッション、メッセージングなど必要機能を簡単に実装できる上、ボイスチャットは自動的にサポートする。

 セッションでは、Hargreaves氏が実際にコードを書き、“NetworkSession”や“NetworkGamer”といったXNAフレームワークのプログラムオブジェクトを使い、実際に動作するマルチプレーヤープログラムを、ものの10分ほどで作成して見せた。ポイントとしては、ひとつのプログラムで「Games for Windows - LIVE」と「Xbox LIVE」の両方に完全に対応できる上、セッションの検索やマッチメーキングといった面倒な部分が完全に内部化されているというところだ。非常に優れたRAD (高速開発) 環境と言えるだろう。

 しかし、実のところ、「XNA 2.0」でサポートされている「Achievements (実績)」、「Ranked Matchmaking (ランクマッチ)」といった、ユーザープロファイルに影響する機能は、個人ユースのデベロッパーは利用できない。これらの機能を利用するには、コンテンツ提供者としてMicrosoftからの承認を受ける必要がある。

 その部分が、まさに「XNA 2.0」の「Xbox LIVE Arcade」への対応である。Xbox 360のエンドユーザーは「Xbox LIVE Arcade」を利用して無料・有料の膨大なカジュアルゲームを入手できる。そして、Microsoftの承認を受けた「XNA 2.0」の開発者は、「XNA」の「Xbox LIVE Arcade Extension」を利用することで、そこにゲームを供給し、商機を得ることができるのだ。

 これを解説するため、Microsoft XNA Community Game Platform teamのシニアプログラマーMitch Walker氏は、壇上で実際に「Xbox LIVE Arcade」機能を実装して見せた。

「XNA」の「Xbox LIVE Arcade」拡張による初タイトルとされる「Rocket Riot」。軽快で自由度の高い2Dアクションゲームだ
 デモされたのは「Aボタンを押す」という簡単な「実績」の機能で、これは専用のエディタ「XLAST」を使って数分で作成。プログラムを実行してMitch氏がボタンを押すと、ゲームごとに作成されるプロファイルに「実績」がしっかりと反映、記録されていた。実績まわりも含め、「LIVE Arcade」対応のXNAゲームは、商用ゲームと同じレベルの機能を持つことができるということである。

 またWalker氏は「Xbox LIVE Arcade」向けに「XNA 2.0」で作られた、初のゲームを実演。これは「Rocket Riot」という、2Dのスプライトで描かれた世界をところ狭しと暴れまわるアクションゲームだ。マップは細かなブロックで構成されていて、すべてが破壊可能。動きもスムーズ。凄いテクノロジーが使われているわけではないが、「LIVE Arcade」で見かけたら思わずプレイしたくなるようなクオリティだ。

 公式には、「XNA」開発者向けの「Xbox LIVE Arcade」機能提供はこの春に開始するという。「XNA 2.0」そのものはすでにリリースされており、本格的なゲーム開発を始めている開発者もいることだろう。春以降、Xbox 360のゲームシーンに「XNA」コミュニティ生まれのカジュアルゲームが大きな潮流を生み出す予感がある。しかし、セッション中では「Xbox LIVE Arcade」開発者となるための具体的な手順やコストについては触れられず、消化不良感が残った。興味のある開発者はまずコンタクトしてほしいとのことである。

【Networkging With Game Studio 2.0】
「XNA 2.0」のネットワーク機能を使えば、WindowsとXbox 360の両方に対応でき、クロスプラットフォームの通信ができるようになる。プログラムサンプルなど詳細な情報はXNAサイトより入手できるようだ
【XNA Game Studio 2.0 for Xbox LIVE Arcade】
「Xbox LIVE Arcade」対応のデモでは、「XLAST」と呼ばれるツールでゲームの「実績」データを編集し、実際に動作する様子が実演された


■ 「XNA 2.0」プログラマーのための最適化テクニック

後半のセッションはきわめて専門的な内容で、その中でXbox 360版「.NET」のメモリ管理の詳細が説明された
 ネットワークと「Xbox LIVE Arcade」に続き、XNAチュートリアルの主要な部分を占めたのがプログラミングテクニックのトピックである。こちらはきわめて開発者向けの内容となってしまうため、要点だけに絞ってお伝えしたい。

 “CLR Performance on Windows and Xbox 360”と題されたセッションでは、XNA Community Game Platform Framework and Tools teamの主要メンバーであるFrank Savage氏が登壇。ここでは「XNA」の開発言語であるC#と、その実行形式“CLR (Common Language Runtime)”におけるメモリ管理とコード最適化の要点が紹介された。

 「XNA」はPC版とXbox 360版で共通して「.NET Framework」をベースにしているが、ゲーム開発において問題になるのが「.NET」の“GC (ガベージコレクション)”のパフォーマンス問題である。PC版に比べてXbox 360版の実装はシンプルで、「.Net」のGCはメモリアロケーション1MB毎に駆動する。このため、無秩序にオブジェクトを生成・開放するプログラムを書いてしまえば、フレーム内でGCが何度も駆動してしまい、大きなパフォーマンスロスとなってしまう。

 Frank氏が語った結論から先に触れてしまうと、Xbox 360向けのXNA開発における鉄則は「メモリは最初に確保して長期間利用し」、「短命なオブジェクトは再利用し」、「GCが駆動する機会を最小限にせよ」ということだ。どちらかというとアルゴリズムの最適化に属する話題である。

 次のテーマはコードの最適化。議論の大前提として、壇上のShawn Hargreaves氏は、「XNAのユーザーコードを実行するJIT Compiler (ジャスト・イン・タイム・コンパイラ)は、'90年代中盤のC++コンパイラと同程度」と語った。つまり、いまだ十分に洗練されておらず、得られる最速のバイナリコードを生成できないのである。

 この理由により、プロユースのXNA開発者は'90年代のC++プログラマと同じようなコードレベルの最適化技法を用いることが求められる。Xbox 360のXNAプログラムが、「C#」と「.Net Framework」という環境で動作する以上、システムコールによるタイムロスや、実行時型安全や暗黙の配列チェックなどによる「隠れたパフォーマンスロス」が発生するが、これを明示的に避けようというわけだ。

 XNA開発において、プログラマが徹底的に最適化したコードは、そうでないコードに比べて、何倍もの高速化が達成される場合もあるという。しかし、そのためのコーディングは、「C#」の便利さを捨てて処理を分解・手動で再構成するものであり、とてもホビーユースとは言えない作業コストになりそうだ。

 というのも、詳しくは下記スライドを参照していただきたいが、現時点の「C#」および「JIT Compiler」では「C++」に存在するような自動的・暗黙的な処理のインライン化がサポートされておらず、最適化に際して、プログラマが直接、細かい処理を書き下ろす必要がある。このあたりは、XNAによるプロユースのゲーム製作においてボトルネックになりそうだ。コンパイラの進化が熱望される所以である。

【Understanding XNA Framework Performance】
パフォーマンス向上を意図したもうひとつのセッションでは、Xbox 360はXNAプログラムコードがユーザーモードで動作するため、システムコールのコストが高くなっている (1コールで最低4マイクロ秒) という実情が解説され、それを軽減するための技法が紹介された。基本は「処理をバッチ化する」、「GPUにまかせる」、「スレッド化する」の3点のようだ。また、演算処理をインライン化することで数倍の高速化が達成される例も紹介
【Advanced Debugging With Game Studio 2.0】
XNAチュートリアル最後のセッションのテーマは「デバッグ」。ホビー向けのセッションであれば軽視されるジャンルになりそうだが、ここは統合環境のデバッグ機能をカスタマイズする方法まで詳しく紹介され、プロ志向を強く感じさせる内容だった


■ プロユースが強く意識されたXNAチュートリアル
  XNAコミュニティが商業志向へ変貌していく前兆か?

 その他、続くセッションでもXNA開発者向けの細かなコーディングテクニックやデバッグ技法が披露された。セッションの内容として全体的に共通するのは、ホビーユースが強く意識された「XNA 1.0」とはうってかわって、商用ゲームレベルのコンテンツ開発を予感させるようなプロ志向の内容が中心であったことだ。

 その背景には、「XNA Game Studio 2.0」でサポートされた2つのメインフィーチャー、ネットワーク対応と「Xbox LIVE Arcade」のサポートという存在があるだろう。

 特に「LIVE Arcade」への対応は、独立系の小規模デベロッパーにとって相対的に大きなビジネスチャンスを作り出す存在になりうる。また、大手デベロッパーがアンテナ的な作品を送り出す手段としてもXNAに利用価値が認められるかもしれない。それは結果として、エンドユーザーが安価で面白いゲームを多数入手できるといった利益につながる。

 しかし、「Xbox LIVE Arcade」のゲームを商業ベースで提供する手段として「XNA」を利用する明確なメリットとは何だろうか? 「XNA」で実行パフォーマンスが深刻な問題になったとき、「XNA」にこだわって大きな開発コストを掛けるよりは、公式のデベロッパーとなってネイティブの開発環境を使用したほうがよいケースもあるのではないだろうか。

 それを踏まえ、XNA開発者にとってひとつの「理想的な」風景といえるのは、ホビーユースで始まった個人開発者が「Xbox LIVE Arcade」を通して商業的な成功を収め、プロの開発者へレベルアップしていくというものになるだろう。プロとなった開発者がもはや「XNA」を必要としないとしても、その過程が生み出す副産物 (具体化されたゲームの存在) には大きな価値がある。

 ゲーム機の性能が向上し、最新ゲームが映像や内容の「リッチさ」を競うようになって久しい。Microsoftが掲げる「XNA」は、そこにまったく別の潮流を作り出そうというものに見える。果たして、Xbox 360のカジュアルゲームは本格的に離陸していくのか。GDC 2008初日の今日、チュートリアルとしてXNA開発者向けの情報を提供した背景には、そんな思惑がありそうだ。

□Game Developers Conference(英語)のホームページ
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
□関連情報
Game Developers Conference 2007 記事リンク集
http://game.watch.impress.co.jp/docs/20070308/gdclink.htm

(2008年2月19日)

[Reported by 佐藤“KAF”耕司]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2008 Impress Watch Corporation, an Impress Group company. All rights reserved.