2013年8月22日木曜日

福島GameJam 2013に参加しました

2013年8月3、4日に開催された東北ITコンセプト 福島GameJam2013に参加してきた。 これは、プロや若い人たちが一緒になって即席のチームで30時間でゲームを開発するイベントだ。

東日本大震災では、津波により大きな被害が東日本沿岸に発生し、特に福島県では原発事故が起こり復興を困難にした。 ITで復興を支援することを目的にはじまった福島GameJamは、今年3年目をむかえ、さまざまな広がりを見せている。

昨年度は地元(南相馬)の高校生が参加した。「女子高生とゲームが作れるのは、福島GameJamだけ!」みたいな。そして、今年度はそれに加えてITの研修を受講した地元の技術者も参加した。更に、当日に開発見学や制作体験ワークショップも開催された。また、福島GameJamがきっかけとなり、昨年度から郡山でFUSEというゲーム開発イベントが立ち上がり、毎月のように開催されている。仙台でもCORONAというゲーム開発イベントが立ち上がっている。

今回は、本会場として南相馬に加えて郡山も加わり、サテライト会場も国内各地に海外の台湾、コロンビア、チリなど多数になり、参加者も500人を越える大きなイベントになった。また、参加者向けに事前にゲーム開発ツールのセミナーも開催された。即興のチームで開発手法をゼロから相談してゲームを作るのもいいけれど、それは大変でもあるので、こういう事前セミナーがあると、開発しやすくなると思う。ぼくは青森に住んでいるので、参加しなかったけれど。

今回、ぼくは、思い出深い南相馬会場に参加した。南相馬会場は、これまでと同じ、市役所の向かいの「ゆめはっと」という施設だった。これまでは、近くに買い物ができる場所がなかったため、30時間過ごすためにさまざまなものを持ち込む必要があり、荷物が増える傾向があった。今年からは、近くにコンビニも開店したおかげで、参加しやすくなった。

現地でチーム分けとテーマが発表となり、開発に入った。南相馬のチーム7「Kine Kine 7」。1回目でも一緒だった山口さんや、学生時代に読んでいた「ゲーム批評」の小野さんほか、なかなか濃いメンバーだった。Kinectを持ち込んだ方がいて、テーマが「Jump」だったので、Kinectでジャンプするゲームを作ることになった。

悪のフランチャイズ菓子チェーンが攻めてきて、さらわれた姫が赤ベコに姿を変えられてしまった。天空に囚われた姫を救いに行くというゲームだ。

開発ツールは、Unity。Unityは使ったことがなかったので、その場でオライリーの『Unityによる3Dゲーム開発入門』のPDFをネットで購入。と言っても、ぼくは実際にはUnityは触らなかった。今回は(前回に引き続き今回も?)、プログラマ系の人ばっかりだったので、IGDA東北の菅浪さんとぼく(授業でコンピュータグラフィックスの制作も教えていたり…)はグラフィック素材を作ることにした。

メイングラフィックスは菅浪さんに担当していただき、ぼくはもっぱら子供たちの描いた絵を、Kinectで操作する人形のモデルにはるためのテクスチャーに変換するプログラムや「ゆめはっと」の3D CGを作成した。

福島GameJamでは伝統的に、地元の子供たちが描いてくれた絵を、素材として使うように推奨されている。今回、これらの絵は、WebのAPIから取得できるようになった。
そこで、まず、shellスクリプトで、curlを使ってすべての画像を取得するプログラムを作成した。

子供たちは円と長方形の枠線が描かれた型紙の中に顔と胴体を描いている。また、腕のパーツもある。

福島GameJamのサイトより

これらを切り抜いて別パーツにするプログラムをProcessingで作成した。Processingは、Javaをベースとしたオープンソースのアーティスト向けのプログラミング環境で、短いコードでインタラクティブなアプリや画像処理ソフトを作ることができる。ゲームを作るのにも向いている。青森大学では、ソフトウェア情報学部の1年生のプログラミングの入門の授業で利用しているが、初心者でもゲームが作れるようになったりする。

切り抜いた画像のうち、顔の部分は加工が必要だった。人形のモデルの顔の部分に相当するのは球形だ。円の中に描かれた顔をテクスチャーとしてはるため、画像の投影法を正射影から正距円筒図法に変換する必要があった。そこで、変換式を紙に書いて計算して、プログラムをProcessingで作成した。座標変換はまじめにやっているが、画像のピクセル補間はかなり適当にした。

「ゆめはっと」の3D CGは、ロケを行なって写真を撮影し、ネットで「ゆめはっと」の図面を探した。これらを元に、3D CGツールでモデリングし、写真をテクスチャーとして使用した。

一方、Unityでゲームのプログラムを書いていたメンバーは苦戦していたようだ。課題となったのはバージョン管理で、今回はDropboxを使っていた(Unityにはアセットサーバーというバージョン管理ツールがある。こちらを使うと以下の問題は発生しないのかもしれない)。Dropboxの場合、画像などのバイナリデータの共有には向いている。また、一応、履歴も取ってくれる。でも、差分やマージ機能があるわけではないので、プログラムなどを共有するのには必ずしも向いていない。また、Unityとの相性もあまりよくなく、更新していない3Dオブジェクトが上書きされたりして、作業が煩雑になっていたように見えた。
それでも、子供たちが遊びにくる、2日目午前中までにはなんとか動くようになった。そして、子供たちの反応を見て、ゲームを改良していく。

また、作品制作ルールになるべく適合するように、チューニングしていく。「会場周辺の情景」を取り入れるという項目があったので、近隣のお菓子屋さん(お菓子がテーマのゲームを作成したので)を背景に使用しようと、撮影に出かけた。日曜日だったが、ほとんどのお菓子屋さんが営業していなかった。地方都市ではありがちな光景だが、震災の影響もあるのかもしれない。撮影中に大きな地震が発生し、電信柱がグラグラ揺れる事態に遭遇した。幸い、ぼくにも会場にも大きな影響はなく、ゲーム制作は続けられた。

そうして完成した作品が「福島Game de Watch〜赤べこ救出編」。当初の構想のすべてが反映されたわけではないが、Windows版のバイナリをダウンロードしてKinectを接続すると、プレイすることができる。また、Web版(現在のUnityのバージョンだとMacだと動かない不具合があるっぽい)もあるし、キーボードでも操作できる。

「福島Game de Watch〜赤べこ救出編」
ぼくは、スキルとしてはゲーム開発者というよりはWeb開発者やサーバ屋さんだ。 これまでの福島GameJamでは、ゲーム・プログラミングという、ふだんの仕事とはかなり異なるチャレンジングなタスクを担当して、エキサイトする体験だった。 今回は、シェル・スクリプトを書いたり、今年から担当している「画像処理」の授業で教えた画像処理プログラミング、研究室でやっている研究の一つである街の景観の3D CG制作、説明資料の作成など、ふだんやっている仕事に近いものを担当した。 「ああ、なんか、いつもと同じような仕事をしているよ」と思った。 日常感が満載だったが、仕事はスムーズにできた。 ゲーム開発者の人は、GameJamに参加すると、こんな感じだったのだろうか。

それから、プログラマが多い場合の即興チームでの共同作業については、いろいろ考えさせられた。昨年度の福島GameJamでも全員がプログラマというチームで、JavaScriptで書かれたenchant.jsのコードをDropboxで共有していたが、今回同様にコードのバージョン管理とマージが煩雑になった。 たぶん、このような作業には、gitなど(Unityならアセットサーバーなども)のバージョン管理ツールを使った方がいいのだろう。 たとえば、Pro Gitの「Chapter5 Git での分散作業」で紹介されている「中央集権型のワークフロー」を用いて、自分の作業はトピックブランチを作成して行ない(masterで細かい作業をしない)、ひとまとまりの作業が完了したらmasterブランチにマージするとか。

また、今やほとんどのゲーム開発ツールはオブジェクト指向言語を使っていると思われるが、そのクラスの継承や合成の機能(JavaScriptの場合は相当する方法)を使って、全体で共有するべきコードと自分で個別にいじるコードを分離するという方法もあると思う。

とは言え、ふだんから一緒に仕事をしていれば、開発ツールや開発ルールの共有は簡単だが、即興のチームで行なうのはなかなか難しいかもしれない。

でも、習得のしきいが高かったgitも、最近はSourceTreeなどのクライアントも出てきたので、もっとみんな使ってもいいような気がする。

福島GameJamで学んだことは、いろいろ学生の指導にも参考にしている。なるべく上級者の開発ではバージョン管理システムを使うようにしたり、共同開発ではオブジェクト指向言語の機能を活用して自分がいじる部分を切り分けるなどの工夫をするようにしている。

0 件のコメント: