Game Building 2010 その2
NickがGame Buildingで作ったゲームの紹介と、XNA Game Studio 4.0を使っての製作過程の紹介を複数回に渡って紹介しています。
The delights of DualTextureEffect
4.0で追加されたDualTextureEffectを使ってライトマップを実現しています。ライトマップ自体は3D World Studioを使って生成しています。
Batch your polygons
3D World Studioから出力されたモデルをそのまま使うと実行時のDraw呼び出しの回数が増え、4画面分割の場合には716回の呼び出しになってしまうという問題がありました。Nickはランタイム時にビューカリングするのではなく、複数のモデルをまとめるカスタム・プロセッサを作ることで描画関数呼び出しの回数を716回から20回にまで減らすことでパフォーマンスが劇的に向上しました。
ここでのポイントは実装に時間の掛かるポータルカリングなどの実行時の最適化をせずにコンテント自体を最適化することで少ない労力で効果的に最適化したということでしょう。
Don’t reinvent those wheels
限られた時間の中でゲームを作るというGame Guildingはいかにして効果的にゲームを作ることができるかという事が課題になります。
そこでNickは、EasyConfig、BoxCollider、パーティクルサンプルなどの既存のコードを組み合わせることで製作時間の短縮を実現しています。パーティクルサンプルはグレネードの表現に使ったそうです。
Nickはゲームを完成させたいのであれば、世の中に流用できるものが無いかを探すのにほんの少し時間を掛けることで開発速度のアップにつながるとしています。
Don’t build more than what you need
Nickは、最初のうちは空き時間を使って作っていた3Dゲームエンジンを完成させ、自分のゲームに使おうと思いましたが作っているうちに開発速度が思ってたよりも遅いということに気づきました。
そこでNickは途中で自作の3Dゲームエンジンを捨てて、Game Buildingに必要な部分だけを作るようにしたことで殆ど時間を費やすこともなくエンジンを使っていたところまで組みなおし、その後も理想的な開発速度を保ちながら開発を続けることができました。
ここでの教訓として、3Dゲームエンジンを自作するのは技術的に楽しいものですが、作りたいゲームが定まらない状態だと、不必要な機能を盛り込んだりして終わりが見えず、時間が掛かりすぎて最終的にモチベーションが続かずに放置するなんてことを経験した人は少なからず居ることと思います。
逆に自分が作りたいゲームをしっかりと把握していると迷うことなく短い時間でゲームを完成させることができます。大事なのは「ゲームを作りたい」よりも「ゲームを完成させる」という目的意識を持つことです。
Beers of War
と、まじめな話になってしまったので、ここでちょっと一息。
昨日の投稿で紹介し忘れたゲームがひとつありました。作成したCooperは、グラフィクスよりもオーディオ部分に気合を入れて作っていたので残念ながらゲームシーンのスクリーンショットはありませんが、そのタイトルは
です。私はこのタイトル画面を見た瞬間にあのテーマ曲が頭の中で再生されました(笑)
内容は、缶ビールと瓶ビールの壮絶な戦いを描いたゲームだそうです。プレイヤーが操るのは缶ビール側で、南部訛りの英語で喋るカウボーイタイプなキャラクター(でも缶)のBud(バド)、筋肉ムキムキタイプ(でもやっぱり缶)のColt(コルト)、45才。某ゲームに出てくるマーカスタイプ(だから缶だって)のFlask(フラスク)、そしてオーストラリア訛りのFosters(フォスタース)の4人のキャラクターを操ることができる予定だったようです。
ゲームは一般的なFPSなのですが、ビール瓶の敵を倒すたびに
「バド、なんでお前はワインクーラー臭ぇんだ?」
「今日はリサイクル業者が大忙しだな」
「なんで、この町はこんなに見てくれが悪いんだ?」「ライトマップが無いからであります、サー」
という、ユニークな台詞が大うけでした。
是非、このまま続けて作って欲しいですね。