凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

OMMF2014 で レゴ x プロジェクションマッピングなゲーム Mont Blanc Pj. を出展してきた

f:id:hecomi:20140910003725p:plain

はじめに

仕事が立て込んでいて書くのが遅れてしまいましたが、8/23、24 でソフトピアジャパンで行われた Ogaki Mini Maker Faire 2014 (OMMF2014) に、レゴで出来た自由に組み替えられるステージにプロジェクションしてインタラクティブに遊べるゲーム Mont Blanc Pj.(もんぶらんぷろじぇくと)を出展してきました。

Mont Blanc Pj. は以下の3つのコンセプトを主軸において、友人の id:jonki と趣味で開発しているゲームです。

  1. レゴで作成した立体ステージにプロジェクションしたゲーム
  2. レゴを自由に組み替えることでゲームの世界も連動して変化
  3. ゲーム中のオブジェクトハードウェアが連動

現実の世界とバーチャルな世界を良い感じに融合させることで、小さいお子さんでも直感的に楽しく遊べるゲームを目指して、昨年の Maker Faire Tokyo 2013 で出展し、その後昨年末の第5回ニコニコ学会で発表させて頂きました。大きく仕組みは変化していないので、詳細につきましては、以前の情報をご覧ください。

私はソフトウェア(認識周り・ゲーム)を担当しているので、本エントリでは、ソフトウェア側の改良点や発表しての感想、今後の展望などについてご紹介したいと思います。ハードウェア、本体の改良についてなどは後ほど id:jonki がエントリを書いてくれると思います(きっと)。

コード

利用しているコード一式は以下にあげています。

今回の改良点

ゲームの見た目

ニコニコ学会で発表した時のものがベースになっています。ロボット君(仮)が工場を駆け回ってるイメージです(世界観やストーリーは未設定です...)。

f:id:hecomi:20140909202814j:plain

f:id:hecomi:20140910003252p:plain

1日目の展示ではジャンプブロックが毒々しい赤色だった点など諸々実際に展示してみると見栄え的に辛いところが多かったので、懇親会後にドット打ちなおしたりして色々デザイン修正しました。

認識の高速化

以前は認識に2〜3秒かかっていたのですが、これは Qt で作成している認識プログラムにおいて QML 側(JavaScript 側) に多くのロジックを追いやっていたこと等が大きな原因でした。そこで今回は認識用のプログラムを全面的に書きなおして、ロジックはなるべく C++ 側に持たせ、QML 側では極力 UI 構築とデータの受け渡しのみにするよう注意しました。手が入っていないかを判断するために一定の判断時間を設けているのですが、感覚的には手をどけて直ぐに反応するようになりました。

キャリブ方法の改善

まだ自動化にまでは至っていないですが、レゴの位置合わせ(キャリブレーション)を大幅に改良しました。グリッドを微調整したりどうしても認識が暴れる部位はダブルクリックで除外(緑色のところ)するようにしたりなどの対応もしています。前回同様、突然の死(強制終了)に備えて、すべてのパラメタはリアルタイムに保存するようにしています(が、今回は1度も落ちませんでした)。

機材の削減(Xtion の利用)

以前は赤外線投光機 + 赤外線カメラを用いて赤外領域による認識を行っていましたが、赤外投光機がかなり大きく重いのと、散乱光を用いる(直接光だとムラができてしまう)関係上、展示員の立ち位置による影響が大きかったりと様々な問題が有りました。

そこで今回は Xtion を用いて投光機と赤外線カメラ両方の役割を果たしてもらうことにしました。Xtion は基本的にはデプスセンサなのですが、赤外画のみを利用しています。レーザーによる赤外パターン光は色々と試した結果、ティッシュ2枚が一番散乱したので、これを全面につけ投光機代わりに利用しています。

f:id:hecomi:20140823103936j:plain

正面から当てると中心部の明るい光が見えてしまいますが、側面からだとそれほどムラなく全体を照らすことが出来ました。結果として、USB ケーブル 1 本のみで電源供給&投光が可能になりました。

また、タブレットで行っていたブロック変更操作を物理ボタンにしたことから無線ルータも不要になりました。

ハードウェアの追加 / 改良

ゲーム上のキャラがブロックを叩くと実際の世界のブロックも壊れる(ように見える)ギミックを追加しました。場所は決め打ちで特殊なブロックが追加され、叩くとゲームの世界で壊れるエフェクトを出す & ソレノイドによって裏からついて実際のレゴブロックを吹っ飛ばす、というものです。

なるべくインタラクションはブロックの付け外しのみに拘りたかったのですが、それによって単にブロックが出たり消えたりでは単調になってしまうので、3つ目のコンセプトを活用して、こういった特殊なルールを設けるとちょっとした味付けになるかなと思って作成しました。何だ何だと見に来てくれたり、面白がって何度もつけてくれるお子さんもいて、作ってみてよかったなと思いました。大人は突然吹っ飛ぶとビクッとするのですが、お子さんはほとんどビクッとしないのが面白かったです(慣れてるのかな?)。

ギミック作成を頑張ってくれた相方に感謝です。その他の改良もあるので id:jonki の執筆に期待。

今回の反省・今後の改良について

認識の高速化

小さいお子さんだとブロックを付けた後になかなか手を引っ込めてくれなかったりしました。そこで次は領域分割して手が画面に入っていてもある程度認識をさせようかなと考えています。現在は全体が安定したら差分でブロック追加/削除を判断、としているのですが、ここを全体でなくて複数領域に分割するイメージです。

これに加えて、手を引っ込めたら面白いことが起こりそうだという表現で自然に促せたら良いなと思うので、なにか考えたいです。

1ポチ認識

今は 2x2 のブロックを認識して計 24 x 24 ステージを構成しているのですが、奇数位置に 2x2 をつけてしまうと誤認識(2x4 や 1 ポチズレた 2x2 等)してしまい、これに惑わされる方々が多かったです。そこで、次回は 1x1 を認識するようにして奇数位置も認識できるようにしたいです。

おそらく Xtion 化で解像度が高くなったので問題なく認識はできると思うのですが、問題はゲームの方で色々と整合取れなくなるところが多いので、そこをうまく何とかしたいです。

レゴのみによるブロックの出し分け

今回一番失敗したな、というのがスイッチによるブロック種別選択です。追加できるブロックには普通のブロックと接地状帯で触れるとジャンプするブロックがあるのですが、以前はタブレットでブロックを切り替えできるようにしていたところを、物理的なスイッチで切り替えるようにしてみました。

f:id:hecomi:20140909214224p:plain

が、そもそもブロックの切り替えは説明しないと絶対に分からない点、ボタンを押すと新たに取り付けたレゴブロックがゲームに反映されると勘違いされてしまった点など、色々な反省点が有りました。

ただこれはレゴブロックの識別が難しいために直前でえいやで作った苦肉の策でもあったので、淡色レゴやレゴの凸部にパターンを描くなど色々と試して、次回こそはなんとかこの点を修正したいと思います。

ハードウェアのモジュール化

ハードウェア連動についてはもっと色々と出来るのではと考えていて、その中で最もやりたいのがハードウェアを搭載したレゴブロックです。現在1ブロックしかない光るブロックを任意の位置につけれたり、スイッチを押すとアイテムが出てくるブロックがあったり、スライダでゲーム内のギミックを動かせるブロックがあったりなどです。

レゴの付け外しのインタラクションからルールは増えてしまいますが、何が出来るか(スイッチを押す、スライダを動かすなど)直感的に分かる範囲内では色々挑戦してみたいです。

1段以上の段差の取得

複数段の取得については以前 Kinect で試して失敗した(うまく取れなかった)経緯あったのですが、近距離ならいけるかなと思い、今回 Intel Createive Camera でも試してみました。が、精度は出ていると思うのですが綺麗に認識できなかったので保留にしています。

f:id:hecomi:20140909205020p:plain

取り敢えず Kinect v2 も手に入れたので試してみます。

画面のズレ

Unity のゲーム画面とレゴブロックの位置調整のために、カメラの位置移動、回転を用意していたのですが、いざやってみると微妙に位置が合わなかったりして残念だったので、次回は Image Effect で簡単に射影変換出来るようにしておこうと思います。

教えていただいた先行事例

ぶろっくぴーぽー

Eric さんに SEGA が 2009 年の CEDEC にて発表した資料を教えて頂きました。プロジェクションと液晶の違いはあれど、実際のブロックの赤外線による認識、そのゲームへの反映などかなり共通点があるなと感じました。アーケードゲームにまで仕上げるのはさすがプロですね...。

よく頂いた質問

売らないの?

今のところ販売やビジネス化は考えていません。2点理由があり、1点目は機材がまだ高過ぎること(特にプロジェクタ)で、2点目はビジネス化しようとすると楽しくならなくなりそうだな...、と思ったからです。特に2点目について、まだまだ掘り甲斐のある分野だと思うので、体験を縮小させずに純粋に楽しさの部分を色々改良していきたいと思っています。あと単純に我々が作ってるのが好きなので、あまり別のことに時間を割きたくない...、というのも大きいです。

ただ、ご要望も頂いたので、色々な方に体験してもらうためにソフト / ハード両面から設置の簡単化や耐久性の向上をして、我々以外でもいろんな場所で展示してもらえるようにする、といった改良につきましては、可能な限り進めていきたいと思います。

次回出展予定

Maker Faire Tokyo 2014 に出展したいと思っています。

おわりに

今回は展示のお手伝いに id:AMANE に参加してもらったお陰で、去年の MFT と比べてかなり楽させてもらうことが出来ました。ありがとうございます。また、色々な方と交流できる素敵な場を提供して頂いた OMMF2014 の運営の皆様、ありがとうございました!