至高のHoloLensアプリの体験を誰でもカンタンに作れるVuforiaを使ってみよう #アセットアドカレ

この記事は Unity Assets Advent Calendar 2016 3日目の記事になります。

いよいよ12/2に日本でのプレオーダーも開始されたHoloLens!
そこで手軽にHoloLensの魅力を十二分に堪能できるアセットをご紹介します。

開発環境

  • Unity 5.5.0f3
  • Vuforia AR Starter Kit 6.1(6.1からHoloLensに対応 )

Vuforia AR Starter Kit

>> Vuforia AR Starter Kit Guide | Vuforia Library
https://library.vuforia.com/articles/Training/Vuforia-AR-Starter-Kit

Vuforiaとは、スマホやHoloLensのカメラで物体認識してアレコレする実装を手軽に行うことができる基本無料のサービスです。

大まかな利用の流れとしては、ユーザーは認識させたいオブジェクトの情報をVuforiaのサイトでデータベースに登録し、データベースのunitypackageをDLして自分のUnityのプロジェクトにインポートして使う感じになっています。

Vuforiaで認識させたいオブジェクトの情報を登録するページ
Developer PortalのTarget Manager

Vuforiaの仕組みを理解するのには、次のポイントを押さえておくとわかりやすいでしょう。

その1)物体認識の流れ

カメラ画像に対して一意のモノを認識させるのに大きく2つの仕組みがあり、アプリで取得したカメラ画像に対して、「この画像と一致するのはこれですよ」という紐づけ情報のデータベースをアプリ内に持たせるか、Vuforiaのサーバーに持たせるか。
アプリ内でデータベースを持たせると外部との通信がなくAPIの使用制限も無し。Vuforiaのサーバーにデータベースを持たせるとアプリのバージョンアップ不要で認識する対象を増やせるといった利点がある。(利用については一応一定回数以下の無料枠あり)

Create Databaseの時のTypeでDeviceかCloudかを選ぶのがコレ

その2)認識する物体の種類

Vuforiaで認識できる物体は4種類。

・Single Image(QRコードや写真、雑誌などのページの平面画像)
・Cuboid(お菓子の箱などの6つの面に平面の絵が描かれているボックス状のもの)
・Cylinder(建物の柱など)
・3D Object(立体的なものなんでも)

作例

雑誌のページをSingle Imageで登録して物体認識させて、Unityで認識したら花火ができるように実装

こちらはR2-D2を3D Objectで登録して物体認識させて追従性の確認動画

HoloLensではSingle Imageで何かのページを認識させたり、3D Objectで立体の物体を認識させて、認識させたR2-D2からホログラム映像を照射することもできる。

今回は3D Objectでの認識を使ってみます。

UnityでVurofia AR Starter Kitを使うまで

1. Vuforiaユーザー登録
https://developer.vuforia.com/user/register

2. Vuforiaでアプリごとのデータベースを作る
Developer PortalのTarget Managerでアプリのデータベースをcreate

3. 作ったデータベースに物体認識させるターゲットの情報を追加
作ったデータベースをクリックしてターゲットを追加する画面に行く。

Add Targetで3D Objectを追加する。

3D ObjectのFileの作り方

参考  Vuforia Object Scanner | Vuforia Library
https://library.vuforia.com//articles/Training/Vuforia-Object-Scanner-Users-Guide

3D Objectの定義を登録するにあたり、3Dスキャンを行う必要がある。

3DスキャンはAndroid専用アプリのapkが用意されており、手元にGalaxy S6かGalaxy S7 があれば、撮影用のライトなどもろもろ総額一万円くらいで3D Objectのマーカーが作り放題。(自分はGalaxy S6 Edgeでスキャンしてる。)

用意するもの

グレーの背景も付いていておトク

↑これを2つ

60Wの電球が2つ安く手に入る

スキャンする際にこの台に乗せてくるくる回す。

電球2つ分のコンセントが必要。近くにコンセントがなければ

あとは回転台に台紙を乗せるとはみ出てふにゃんとなるので、A4のクリアケースを100均でGet

3Dオブジェクトスキャン環境構築

>> How To Setup an Object Scanning Session | Vuforia Library
https://library.vuforia.com/articles/Solution/How-To-Setup-an-Object-Scanning-Session

ここから Vuforia Object Scanner のAPKを入手して自分のスマホにインストール(Galaxy S6、Galaxy S7に対応)

上記ページにあるObject Scanning Targetの画像をプリントアウト。
100均で買ったクリアファイルに入れて台座の上に置いて台座完成。

両サイドにライトが当たるようにしてスキャン対処も置けば配置完了。

Vuforia Object Scannerの右上の+からスキャンを行うが、スキャンの際に邪魔となる余計な影が物体に落ちないようスマホのカメラを通して確認。適宜両サイドのライトの位置を調整してスキャンする。

スキャンが終わったら結果のTestを行う。スキャンしていた物体にスマホをかざし、うまく認識すれば緑の柱でて追従する。

スキャン時に余計なノイズが入っていると角度によってはうまく認識されず、緑の柱が追従しなかったりするので、再度ライトの位置を変えてスキャンしなおす。

>> How To Test the Results of an Object Scan | Vuforia Library
https://library.vuforia.com/articles/Solution/How-To-Test-the-Results-of-an-Object-Scan

スキャンが終わったら結果のファイルをPCにメール等で転送してVuforiaのDeveloper Portalでアップロードする。

>> How To Edit and Upload Object Data Files | Vuforia Library
https://library.vuforia.com/articles/Solution/How-To-Edit-and-Upload-Object-Data-Files

UnityのプロジェクトにインポートするデータベースのUnitypackageを入手

Target Managerで作ったDatabaseのページにて、Add Targetで3D Objectを追加する。先ほどの手順で作ったファイルをアップロードして登録。

登録したらDownload Database(All)から、開発プラットフォームでUnity Editorを選んでDownloadを押すと作ったデータベースのUnitypackageを入手できる。

Unityでプロジェクトの設定をする

HoloLensはUWPアプリなので次のようにSwitch Platformする。

Player Settingsを開き、Other SettingsからVirtual Reality SupportedをON

Publishing SettingsのCapabilitiesから、アプリに与える実行権限を指定。

!!重要!! Vuforiaの動作にはInternetClientとWebCamが必須。あとボイスコマンドでいろいろやりたいのであればMicrophoneや、Xboxコントローラーを使いたければBluetoothとHumanInterfaceDevice。HoloLensの空間認識を利用して遮蔽物で隠れたり等を行う場合はSpatialPerceptionをONにしておく。

プロジェクトを新規に作成してVuforia AR Starter Kitを入れておく。

データベースのUnitypackageをUnityにインポートする

ダウンロードした~.unitypackageを突っ込む

データベースのunitypackageを入れたら毎回プロジェクトのプロパティーに反映する。

反映すると、ARCameraプレハブにアタッチされているDatabase Load Behaviourに表示される。

で、このチェックを入れる。Activeにも忘れずに。ちなみにうまく認識しない人の原因の第一位がここのチェック忘れ。(Vuforiaのデータベースのunitypackageを更新して入れ直した後とかよく忘れる)

 

VuforiaのLicense Keyを入手してUnityのプロジェクトに設定する

License ManagerでLicense Keyを次のような感じで追加する

登録できたら開いてLicense Keyをコピー

今回はシンプルなデモシーン Vuforia-3-ImageTargetsをベースに使う。

ARCameraにアタッチされているVuforia BehaviourのApp License KeyへLicense Keyをペースト

ざっくりVuforiaのUnityプロジェクトの構成としては、次の2つを押さえておけばOK

  • Vuforia\Prefabs\ARCamera.prefab
    Vuforia用のカメラプレハブ
  • Vuforia\Prefabs\ImageTarget.prefab
    Vuforia Developer Portalで登録したTargetごとの仕掛け

ARCameraプレハブをHoloLens用にカスタマイズする

Cameraオブジェクトをシーンに配置して適当な名前(HoloLensCamera)を設定。パラメーターは上記の図を参照

ARCameraプレハブにアタッチされているDigital Eyewear BehaviourのEyewear TypeをOptical See-Through。See Through ConfigをHoloLens、Central Anchor Pointに先ほどシーンに配置したHoloLensCameraオブジェクトを指定

ちゃんと物体認識されるかまずはPCのカメラで確認してみる

HoloLensの実機へ転送する前に、ちゃんとVuforia関係の設定がちゃんとできているのか、まずはPCのカメラにターゲットマーカーを映して確認してみます。

Unityでシーンを再生し、この画像をiPadで表示してPCのカメラの前に持って行ってティーポットが表示されればOK。実機で確認してみよう。

HoloLensの実機で確認してみる

残念ながらHolographic Remoting PlayerだとHoloLensのフロントカメラではなくPCのカメラになってしまうため、面倒ではあるが実機へ転送して確認する必要がある。

適当なフォルダを作ってBuild

生成されたC#のプロジェクトのソリューションファイルをVSで開く

x86、Deviceに変更して、DebugメニューからStart Without DebuggingでUSB接続したHoloLensにアプリがインストールされて自動的に実行される。

これで表示されればOK。

ここまでで基礎はクリアー

Image Targetsのサンプルシーンについては、ImageTarget~のプレハブをカスタマイズ。アタッチされているImage Target Behaviourスクリプトで物体認識させる対象を選択。認識したら子のオブジェクトが表示されるシンプルな仕組み。

また複数認識や追従のカスタマイズやチューニング。認識がされた/失われたのコールバック等様々なカスタマイズを行うことができる。詳細はこちらを参照

>> Image Targets | Vuforia Library
http://library.vuforia.com/articles/Training/Image-Target-Guide

また今回説明していないほかのサンプルシーンやそれに付随するベンリ機能についてはこちらから探してみよう。

>> Guide View | Vuforia Library
http://library.vuforia.com/guide

Unity Assets Advent Calendar 2016 記事一覧へ

HoloLensオススメ周辺機器

ゆーじさんのほしい物リスト
http://www.amazon.co.jp/registry/wishlist/1PVLXLR7OIEG1/