HoloLens上でVuforia 入門編

HoloLensタグの記事が100件を超えたようで。この時期にHoloLensを使った開発に関われていることはラッキーですね。

Vuforiaに関する記事、特に導入編は溢れており、私がまとめる必要もないのですがHoloLens開発にあたり欠かせないツールの一つであることは間違いないのでここで軽くまとめておきます。

#ゴールまで
Unity上でテスト -> HoloLens上で実用

#Version

- Unity 5.6.1f1 Personal
- vuforia-unity-6-2-10.unitypackage

#Vuforia Developer Portal
[Vuforia Developer Portal](https://developer.vuforia.com/)
##Vuforiaができること
- 多様なマーカの認識 (記事内でTargetをほぼ同じ意味合いで使ってます)
    - ２Dイメージ
    - ３Dボックス
    - ３Dシリンダー
    - ３Dオブジェクト
- クラウドから認識（有料版）
- 画像の認識可能性をレーティング(星5つまで)
- 導入がめちゃくちゃ楽(とくに内蔵カメラとの連携が超楽)
- 無料でも十分その機能を楽しむことができる

##まず
アカウント登録してください。

…

##準備

###ポータルサイト側
1. Downloads -> SDK -> Download for Unity でパッケージ取得
2. Develop -> License Manager ->Add License Keyでライセンスキー取得
3. ライセンスキーの名前をクリックし、License Keyをコピー
4. Develop -> Target Manager -> Add Database でDatabaseを作成。今後その中に認識用マーカーを保存していく。
![Capture.png](https://qiita-image-store.s3.amazonaws.com/0/186209/74efcf7f-ddba-91a6-585e-1e8d2b07b36c.png)

5.  Develop -> TargetManager -> [Database名] ->AddTargetでマーカーの登録
6. 今回はSingleImageを選択。Widthは適当に100(あとでUnity上のインスペクターで調節可)、Heightは勝手に計算してくれるそうです。
![Cap3.png](https://qiita-image-store.s3.amazonaws.com/0/186209/c7e2a777-f14d-8685-b4b9-a27487afd36d.png)

7. Target一覧に追加したTargetが表示される。Ratingは画像認識のしやすさを表す。

![Cap4.png](https://qiita-image-store.s3.amazonaws.com/0/186209/1c82db30-bc68-eb04-53fb-08e2dddacd1e.png)


8. Doznload Database(All)クリックでUnityPackageファイルをダウンロード


![Cap5.png](https://qiita-image-store.s3.amazonaws.com/0/186209/bf81e03e-2305-bbb4-5ed2-e8e568825d07.png)

###Unity側

まず、ここまでダウンロードした2つのPackageをインポート。(`Database`のアセットは`StreamingAssets`に入っており、このフォルダの価値を再認識。(再掲)[ HoloLens上でスクリプトを用いて外部ファイルの読み込みをしたい](http://qiita.com/gshirato/items/dbefd28b570d98cb4da9)

`MainCamera`の代わりに`ARCamera`プレハブを、認識したい２Dターゲットの数に合わせて`ImageTarget`プレハブをシーンに追加(ScreenShot内ではKing二回目済)。
`ImageTarget`認識時に表示したいオブジェクトを`ImageTarget`の子オブジェクトとして追加。

![CapUni1.png](https://qiita-image-store.s3.amazonaws.com/0/186209/2dbd09d8-a535-2805-3e5c-e6aaea9c5be7.png)

####ARCamera
- `ARCamera`のインスペクターから`Open Vuforia configuration`をクリック。`Vuforia` -> `Add License Key`欄に記事最初部分でコピーしておいたライセンスキーをコピペ。
- `Database`をインポートすると`DataSets`欄に`Load [Database名] Database`があるのでチェック→Activateもチェック (※この欄はデータベースを追加するごとにチェックする必要があるので、後からデータベースを加える場合は忘れないように注意。)

####ImageTarget
`ImageTarget`のインスペクター上の`Image Target Behaviour`の`Database`と`ImageTarget`をそれぞれ指定。

####内蔵カメラ
とくに何もする必要なし！

####ターゲットの用意
もちろんプリントしてもいいし、パソコン画面やiPhone画面からの画像でも認識可。

##実行！(Unity Editor上)

こんな感じです




![Ye.png](https://qiita-image-store.s3.amazonaws.com/0/186209/9abc8110-deb7-bde8-511e-920aa5febacd.png)

なおiPhoneがバッキバキになっているのはこの記事とは何の関係もありません。(これくらいのひび割れなら認識に問題はなさそうです。)

画像の角度が際どく認識が難しい場合、画像認識後であればある程度までは追跡して子オブジェクトを追跡してくれる。

|認識前|認識後|
|:---:|:---:|
|![before.png](https://qiita-image-store.s3.amazonaws.com/0/186209/ec48d71e-1a56-cdbb-bfc9-5ec08b5bc90a.png)|![after.png](https://qiita-image-store.s3.amazonaws.com/0/186209/4addf21a-1b12-a1c7-ca9d-c5c4b18c4bc9.png)|

#以上
HoloLensへの導入も簡単そう、あとはどう使うかですね

#ところが… [追記]

HoloLensで動作させて見るとビームが前進しておらず、自分に逆流している。
![BUt.png](https://qiita-image-store.s3.amazonaws.com/0/186209/58d22075-588c-5b77-bfa7-eec385b8e86f.png)

`Vuforia`は`バージョン6.1`からHoloLensに対応しました。HoloLens上でしっかりと動かすためには設定をかえなければ行けないようです。

##Vuforia Configuration

`ARCamera`の子オブジェクトカメラは以下の設定により非アクティブ化されるので`HoloToolKit`の`HoloLensCamera`を`MainCamera`として追加することをおすすめします。また、`Camera`の`Near`設定は手元の物を認識させたいため`0.01`にしました。

- `DigitalEyewear` -> `Eyewear Type`を`Optical See-Through`に
- `DigitalEyewear` -> `See Through Config`を`HoloLens`に


`ARCamera`インスペスクタの`Vuforia Behaviour`の`Central Anchor Point`に`HoloLensCamera`を設定

![Afterbut.png](https://qiita-image-store.s3.amazonaws.com/0/186209/938d2ff3-7a2a-726e-6aba-adba55b2ae68.png)

無事、ビームが口からでました。

#HoloLens開発記事一覧
[こちら](http://qiita.com/gshirato/items/6c026f2c67dc332f829b)から