yotiky Tech Blog

とあるエンジニアの備忘録

HoloLensでVuforiaを使う (Unity&MRTK 2017世代)

サンプルやデモ用のアプリを作るに当たり、Unityプロジェクトを作成し、Vuforiaの設定まで終わらせる一連の流れがよくでてきます。参考にさせて頂いているサイトはいくつかありますが、情報が古くなって所々違いが見られるため、手順の覚書として書き記しておきます。(主に私用)

Vuforiaに関してはこちらにもまとまってますのでぜひご一読ください。 github.com

目次

TL;DR;

Vuforiaのポータルでマーカー画像を登録します。
そのデータをもとにHoloLensでマーカーを認識し、マーカーの上に3Dオブジェクトを表示します。

サンプルで使用したソースコードは下記を参照ください。

github.com

開発環境

  • Unity:2017.4.5f1
  • MRTK:2017.4.1
  • VisualStudio:2017
  • OS:HoloLens RS4

内容

マーカーの準備

適当な画像を用意してください。
もしくは、QRコード生成サイトなどでQRコードの画像をマーカーとして入手しましょう。

image.png (22.2 kB)

上記はサイト「QRのススメ」さんで作成した例です。 小さいとHoloLensが認識しづらいのでなるべく大きなサイズで作ります。 また、VuforiaのターゲットにPNGが使えないためJPGで保存します。

VuforiaポータルでDatabaseを取得

ライセンスの発行

Vuforiaのポータルサイトに行ってログインします。 アカウントを作っていない人は作りましょう。

ログインしたら、Develop > License Manager > Get Development Keyをクリック。
ライセンスについては各自調べてください。開発用には無料のDevelopmentで大丈夫(なはず)。

image.png (20.5 kB)

App NameをつけてチェックボックスにチェックしてConfirmをクリック。

image.png (42.8 kB)

作成したアプリケーションのページを開いてライセンスキーをコピーしておきましょう。あとでUnityで使います。

screenshot.206.png (14.2 kB)

Databaseの作成と取得

Develop > Target Manager > Add Databaseをクリック。

image.png (18.8 kB)

名前をつけて、Deviceを選択してCreateをクリック。

image.png (21.9 kB)

作成したデータベースを開いて、Add Targetをクリック。

Single Imageを選んで、用意した画像またはQRコードを選択します。 WidthはUnity上でも変更できるので1(単位はm)、NameをつけてAddをクリック。

image.png (53.0 kB)

これでターゲットに登録されます。
Ratingは特徴点で、星が多いと画像が認識されやすくなります。 対象のターゲットを開いて、画像下のShow Featuresを押すと特徴点を確認できます。

image.png (36.4 kB)

Databaseに含めるマーカーを選択してDownload Database、もしくはDownload Database(All)をクリックでもOK。
Unity Editorを選んでDownloadをクリック。

image.png (26.6 kB)

[Database名].unitypackage が保存されます。後ほどUnityにインポートします。

プロジェクトの初期設定

Unity を起動して、新しいプロジェクトを作成します。
まずはMRTKのunitypackageをインポート。

続いてメニューから、Mixed Reality Toolkit > Configure の項目を上から順に実行します。

  • Apply Mixed Reality Project Settings > そのままApplyをクリック。

    上記Applyで変更される箇所を補足しておくとつぎの通りです。 撮り忘れましたがQuality SettingsもHoloLens用にVery Lowで設定されているかと思います。

    Build Settings

    変更前 変更後
    -PlatformをUWPに変更
    -Target DeviceをHoloLensに変更

    Player Settings

    変更前 変更後
    -Scripitng Backendを.NETに変更
    -Virtual Reality Supported をHoloLens用に設定

    Tag & Layers

    変更前 変更後
    -Layer31にSpatial Mappingを設定
  • Apply Mixed Reality Sceen Settngis > そのままApplyをクリック。

    開いているシーンをHoloLens用にカスタマイズされるので、Ctrl + S でシーンに名前をつけて保存します。

    image.png (15.8 kB)

    ついでに Ctrl + Shift + B でBuild Settingsを開き、忘れがちなビルドにシーンの追加をしておきましょう!

  • Apply UWP Capability Settings > 以下のように設定してApplyをクリック。

    これでPlayer Settings > Publishing Settings > Capabilities に設定が反映されます。

    image.png (18.4 kB)

ここまでがHoloLensの実装を始める前の一般的なプロジェクトの準備でした。 使いたい機能に応じて設定の内容は適宜変更してください。

実装

続いて、Vuforiaの機能を使ったアプリのコンテンツを実装していきます。
予めダウンロードしておいたVuforiaのDatabaseをインポート。

image.png (56.1 kB)

Player Settings > XR Settings を開いて、Vuforia Augmented Reality Supported にチェック。

image.png (11.5 kB)

HierarchyにVuforia > Image を追加します。
Vuforiaのアセットをインポートするか聞かれるので、Importをクリック。

image.png (39.1 kB)

Assets > Resources > VuforiaConfiguration を開いて次のように設定します。

  • 予めコピーしておいたライセンスキーを入力します。

    image.png (10.4 kB)

  • Digital Eyewear と Databaseを設定します。

    image.png (17.9 kB)

    Databaseを設定した後にVuforiaのImageオブジェクトを追加するとDatabaseが更新されるので注意してください。
    また、Vuforiaの設定周りをいじくってるときにも、たまにDatabaseの設定が初期化されてることがあるので要注意です。

先程追加したImageオブジェクトの設定に戻ります。
Inspectorを開いて、DatabaseとImage Targetをインポートした画像のものに変更します。
Advancedの項目を開いて、実際にHoloLensのCameraで取り込む際のマーカーの実寸サイズを入力します。(単位はmなので10cmなら0.1など)

image.png (22.5 kB)

Hierarchy上で、Imageオブジェクトの配下に任意の3Dオブジェクトを追加します。配下に追加することで、VuforiaがImageを捉えた時だけマーカーの上に表示されるようになります。 サンプルでは豆腐をマーカーの少し上に浮かせています。

image.png (6.9 kB)

MixedRealityCameraにVuforiaBehaviourコンポーネントを追加します。

image.png (5.9 kB)image.png (28.5 kB)

また、その上にあるMixed Reality Camera ManagerのTransparent Display Setitngs > Near Clip は、3Dモデルが表示される一番短い距離です。 デフォルトの0.85(m)が推奨ではありますが、デスクで作業していると0.85がとても遠いので任意で近くまで表示しましょう。(もちろん非推奨)

ここまででVuforiaに登録したマーカーを使って、マーカーを認識するとその上にオブジェクトが表示されるようになりました。

ビルドして実行

Build Settingsを開き、Unity C# Projectsにチェックを入れてBuildをクリック。
UWPフォルダを作成し、そのフォルダを選択して実行します。Appフォルダを指定するサンプルもありますが、後述のMRTKのBuild WindowのデフォルトはUWPなので、揃えておけば余計なフォルダが増えなくてよいかと思います。
ビルドが成功するとエクスプローラでUWPフォルダが開きますので、Visual Studioでソリューションを開きます。

または、Mixed Reality Toolkit > Build Windowをクリックし、ウィンドウを表示します。
Unity Build Optionsタブで、Unity C# Projectsにチェックを入れてBuild Unity Projectをクリック。
ビルドが成功するとダイアログで教えてくれるので、Open in Visual Studioをクリックすれば直接ソリューションを開けます。

ソリューションを開いたら、プラットフォームをx86にし、実行環境をDeviceに変更して実行します。

以上。

注意事項

執筆時の開発環境であるRS4では、VuforiaをONにしているとCameraを専有するらしく、写真、動画の撮影ができません。 Vuforiaは位置合わせに使われることが多く、不要になったら機能をOFFにすることをおすすめします。

動作の確認は取れていませんが、以下の挙動をするとの情報があります。
バージョンによって挙動が異なるので、VuforiaでCameraを使う場合はそのあたり気にして調べてみてください。

  • RS1:録画のみいける
  • RS4:全部ダメ
  • RS5:録画もPreviewもいけるらしい?

※詳細分かれば更新かけます。ご存知の方ご一報を。