スマホで2次元と出会える 夢のGoogle Tangoを触ってみた
※本稿は個人開発者である青木そらす氏の寄稿になります。
皆さんこんにちは、青木そらす(@open_sorasu)です。エンジニアとして働きつつ、VRで金魚を見ることのできる『VR Aquarium -雅-』(HTC Vive)を開発し、現在配信しています。
今年のゴールデンウィーク、皆さんは如何お過ごしだったでしょうか?
私は、Tango搭載端末であるLenovoのPhab2Proを手にする機会があり、ゴールデンウィークの期間にちょっとしたアプリ開発をしていました。
触ってみると、Unityに慣れている人であればすんなりと分かるような構成になっていました。どんな感じだったか、Tangoを使って何ができるのかを皆様にお伝えできればいいなと思っています。
そもそもTangoって何?まずはアプリを遊んでみよう!
Tangoとは、グーグルが提供しているARプラットフォームです。搭載端末では空間を認識することができます。
Tango搭載端末には予めTangoアプリのマネージャーが入っており、幾つかのアプリを遊んでみました。
Dinosaurs Among Us
現実世界に恐竜を呼び出すことができるARアプリです。
Tangoを搭載していない端末では、平面を検出するためにマーカーを用意したり、地面を撮影してマーカーを作成する必要がありました。
しかし、GoogleTangoでは地面が検出できます。ARマーカーや、動的にマーカーを作成する必要がなく、認識した地面に合わせて恐竜を立たせることができます。また、モーショントラッキング機能も入っているので、カメラを動かしても恐竜が一緒に動くことはありません。 別の方向に向けて、再度同じ方向に向き直すと、同じ位置に恐竜が居ます。
https://www.youtube.com/watch?v=_w1V0VyVsPM
Domino World
地形を認識してドミノを並べることができるARドミノ倒しアプリです。
これも地面を認識しているので、高低差を考慮してドミノを並べることができます。
https://www.youtube.com/watch?v=GV8NuGcOu1w
このように、Tangoの機能を使えば空間測位と自己測位を行うことができます。
実際に開発!
では、実際に開発をする場合は、どんなことができるのでしょうか。
TangoのSDKはUnityパッケージが用意されており、これを入れるだけで簡単に作ることができます。また、基本的なサンプル用のExamplesも入っており、上記のアプリのモックアップであれば、簡単に作ることができます。
今回は、空間測位と自己測位を分かりやすく表現するARキャラクター召喚にチャレンジしてみました。
使用したのは、AugmentedRealityとExperimentalMeshBuilderWithPhysicsのサンプルです。
キャラクターを立たせるだけならAugmentedRealityのサンプルだけでも十分です。
AugmentedRealityは、現実空間を測位してタッチした場所にGoogleMapのマーカーを出現させることができます。
このマーカーを出現させる箇所を出現させたいキャラクターに差し替えるだけで、現実世界に召喚することができます。
動画にして見たけど、こりゃ実際に見ないと分からんかも
Tangoでゆかりさん召還して遊んで見たよ pic.twitter.com/m2mhEv0R3A
— [email protected] (@open_sorasu) 2017年5月3日
ここから、歩かせたり地形で何かをする場合は、ExperimentalMeshBuilderWithPhysicsを見るといいでしょう。
ExperimentalMeshBuilderWithPhysicsは、地形をメッシュ化して記録します。画面をタップするとボールが飛び出て、記録した地形メッシュにぶつかって跳ねさせることができます。
この生成された地形メッシュに対してデプスマスクを加えてあげると、キャラクターを物陰に隠してあげることができます。
オクルージョンゆかりん pic.twitter.com/7e0z38QtXl
— [email protected] (@open_sorasu) 2017年5月5日
また、影を落としてあげたり、FinalIKのGrounder機能によって足の接地を制御してあげると、よりリアルに感じられるのではないでしょうか。
地形に沿って影を落とす pic.twitter.com/HwrvUN5524
— [email protected] (@open_sorasu) 2017年5月5日
行儀の悪いゆかりん pic.twitter.com/RnFkCbDqoR
— [email protected] (@open_sorasu) 2017年5月5日
経路探査にはNavMeshを用いています。下記資料を参考にして、動的にNavMeshを作ってあげます。
(参考)HoloLensで実現する動的経路探索
http://qiita.com/morio36/items/d75228d2ccdb9c24574b
経路探索ゆかりん pic.twitter.com/NtpePwLcFX
— [email protected] (@open_sorasu) 2017年5月5日
NavMeshによる経路探査、IKによる接地制御、影、召喚を実装してあげると、階段を上ったり、下りたりすることができます。
ふぁー! pic.twitter.com/XDml2TKaNu
— [email protected] (@open_sorasu) 2017年5月6日
階段下りるの下手やな pic.twitter.com/oIiK9SGwtZ
— [email protected] (@open_sorasu) 2017年5月6日
ゆかりちゃん階段を上がる
(IK直した pic.twitter.com/VVAgwvjWOX— [email protected] (@open_sorasu) 2017年5月9日
ゴールデンウィークの期間に触ってみてできたのはここまででした。
Tangoの使い道
実際に触ってみるまでは「『ソードアート・オンライン オーディナルスケール』みたいなものを作れるのではないか!?」という気持ちでいましたが、Tangoで長所と短所が見えてきました。
・位置測位ができるので、近寄ったりすることができて楽しい。(所謂スマホVRではできないことができ出来る)
・SDKに参考資料が入っていて、制作自体は簡単に行うことができた。
Tangoで苦手なこと
・空間測位をする場合、何もない空間だと認識することができない(屋外は辛い)
・地形のメッシュ生成は細かすぎると生成に時間が掛かり、大雑把にするとメッシュがガタガタになってしまうので調整が難しい。
まとめ
このアプリ自体は、床を認識しているだけで「階段」だとか「椅子」だとかを判断していません。 例えば、「椅子があったら座る」みたいな動きをしたら面白いかもしれませんね。
また、ライティングも間に合っていないので、動的にライティングができれば、より馴染ませてあげられるのではないでしょうか。
いかがでしたでしょうか。GoogleTangoには夢が詰まっています。記事執筆時点ではLenovoのPhab2 Proのみ販売されており、夏にはASUS Zenfone ARが発売予定です。対応端末が2機種と限られていますが、今後Tango搭載端末が増えていくことにも期待したいところです。
今回開発に使用したもの
開発環境・Unity 5.6.0f3
TangoSDK・Version 1.53, May 2017
使用端末・Phabe2Pro