Vuforia Targetの準備

Vuforiaを使うと、カメラ映像情報からイメージや3D形状のターゲット(Vuforia Target)を検出して位置と向きを特定するARアプリを作れる。
Vuforiaは無料で使える開発者ライセンスがある。
アカウントを作成して開発者ポータルにログインして、VuforiaSDKとライセンスを入手する。
Vuforia Targetは、開発者ポータルで作成するものと、ツールアプリをダウンロードして作成するものがある。
Vuforiaは、深度センサーやスキャナーを備えるARデバイスでなくてもカメラ入力だけで3D認識して動くので、ARFoundationやMRTK無しでも、 手前のものに隠れるオクルージョン処理などができる。
しかし、スクリーン越しに見るARより立体視で見るARの方が格段に存在感が上なので、 トーレーニングやエンターテイメントなどの体験重視のアプリはHoloLensで動かすと思う。
一方、ガイダンスやナビゲーションなどのビジネスアプリは、Webカメラやタブレットを使うと思う。

HoloLensとVuforiaを使う準備。
HoloLensの場合、シーンをMRTKセットアップするとMainCameraにMRカメラが設定されTrackedDriverを追加すれば シーンカメラ、視界カメラが同期する。
MRTKカメラの前に、VuforiaのARカメラを入れMainCameraを削除しておけば、Vuforiaの設定されたMRTKカメラになる。
MRTKカメラを先に設定した場合は、追加コンポーネントでMainCameraへVuforia Behaviourを設定する。
スクリーンアプリの場合は、VuforiaのARカメラを入れMainCameraを削除する。

Vuforia ターゲットの作成

開発者ポータルで作成するターゲット

Unity内でイメージを指定してターゲットを作ることもできるが、データベース/パッケージ化しておくと使いまわせる。

Unityで使うので、サイズ寸法単位は[m]で数値を入力しておく。
Multiターゲットは、アスペクトレシオが正確な値でないと受け付けてくれない。
寸法数値とピクセル値を合わせる。
w:0.105 h:0.88 → w:1050px h:880px , 525px 440pxはOKだが、520px 436pxではNGになる

作成方法

  1. Vuforia開発者ポータルにログインする。
  2. データベースを作成する。(デバイス)
  3. データベースの中にターゲットを作成する。
  4. イメージをアップロードしてターゲットを完成させる。
  5. 作成したデータベース(unity.package)をダウンロードする。

ツールアプリで作成するターゲット

  1. デベロッパーポータルからツールアプリをインストールする。
  2. ツールアプリでターゲットのUnity.Packageを作成。
  3. Vuforia設定済みのUnityプロジェクトへターゲットのUnity.Packageをインポートする。

  4. クリエイトオブジェクトでVuforiaTartgetオブジェクトを追加し、使用するターゲットを選択する。
  5. シーンビューで、Target検出時に出現させるオブジェクトを、Targetとの相対位置で位置調整する。
  6. ヒエラルキーで、Target検出時に出現させるオブジェクトをTartgetオブジェクトの子供に移動

Vufora Modelターゲット


Model Target Generatorというアプリをインストールして、3Dモデルファイルを読み込んで作る。

カメラ認識は外観表面の輪郭情報を使って行うのでメッシュデータでよく、3D Modelとして読み込めるファイル形式の選択肢は広い。

FBXファイルの、車のデータで作ってみる。

Model Target GeneratorにFBXファイルを読み込む。

単位系を合わせる。

モデルがモノトーンなので部品ごとに着色しますという提案がある。

車や家具のように観察者が周囲を回ってみるものか、工具のようにモデルを動かしてみるものか選択。

データベースを作成したフォルダーを開くと、Unitypackageができている。


データベースをプロジェクトに追加し、新規ゲームオブジェクトとしてVuforiaEngine>ModelTargetオブジェクトを追加し、インスペクターウィンドウでデータベースを選択する。

他のVuforiaTargetと同じように、形状を検出したら表示されるオブジェクトを仕込む。

形状を検出したら ターゲット生成に使った車のカットモデルを現物と同じ場所へ重ね表示するようにした。

アプリをビルド・デプロイしてHololensで動作確認した。 検出スタンバイとわかるようガイドイメージを表示させているが、この向きに一致してなくても検出する。
検出されガイドイメージが消えて、その場所にターゲット生成に使ったFBXモデルが表示されるはずが出てこず、 なんか離れた位置に表示された。

シーンに配置した他のターゲットと位置が被らないようにターゲットを動かしたとき、間違って表示用3Dモデルだけを動かしていた。 間違った位置を修正して再設定したら解決した。


Vuforiaの内容は同じ構成で、Android用にMRTKを外してARカメラへ変更してビルドしたらAndroidスマホでも動作した。



Vuforia Areaターゲット

Area Targetを作成するツールアプリに2種類あり、
Area Target Generatorはスキャン済のデータをもとに作成する。
Area Target Creatorは、Lidar搭載のiOS機器を使ってアプリでスキャンして作成する。

Area Target Generator


Area Target Generatorというアプリをインストールして、スキャン済のデータをもとに作成する。

スキャン済のデータとして、Matterport撮影で作るMatterpackデータにアクセスして作る方法と、 E57形式の点群データを使う方法がある。
3DTは、作成済みデータを再編集するときに使う、

Matterpackは、MatterportPro2カメラかLeicaBLK360で撮影したMatterportスペースに追加できる有料オプションサービスで、注文するとOBJファイルや点群をダウンロードできるようになる。
これに含まれる点群はxyz形式でE57ではない。E57は別オプションとなる。
LeicaBLK360で3DスキャンをすればE57形式にも出来るので。MatteportではE57形式は使わないと思う。
Matterpackは、Area Target Generatorアプリに、11桁のスペースIDを入力してクラウドデータにアクセスさせる。



データアクセスの許可は、Matterportアカウント情報を入力して許可設定するか、Matterport開発者用のAPIアクセスコードを入力する。

アプリにMatterportアカウント情報の利用を許可して進む。


ターゲット用のモデルが作成される。

EDITを押して使用領域を選択可能。

Generateを押して、UnityPacakgeなどを生成する。

Area Target Creator


Lidar付iOS機器にArea Target Creatorというアプリをインストールしてターゲットにしたい場所を3Dスキャンする。
アプリを立ち上げると説明が出てくるので、下欄の「OK」を押す。

開発者アカウントでログインする。(ネット接続が必要)

「+」を押して新規スキャンに名前を付けて、「StartScan」で開始する。

周囲にLidarカメラを向けてスキャンする。
速く動くと警告が出る。スキャンが終わった部分は色付けされる。

切りのいいところで「□」を押して終了する。5分で強制終了するが、 大きすぎるとメモリーオーバーでターゲット作成に失敗することがあるので3分くらいを目安にする。
スキャンを止めたら、エリアターゲットを作成する。




ハードディスクマークを押して作成済のターゲットの名前を選ぶと、撮影場所を認識して輪郭線が出てくる。


ターゲットの名前をスワイプして共有を選び、OneDriveなどでファイルをPCと共有する。

Unityシーンへのターゲットインポート

UnityPackageの形に作成した各種ターゲットを、Vuforia設定済みのプロジェクトへインポートする。
シーンに新規ゲームオブジェクトとして、VuforiaEngineの中にあるTargetオブジェクトを追加する。

インスペクターウィンドウで、使用ターゲットをデータベースのリストから選択する。
新規ゲームオブジェクトとしてVuforiaEngine>ImageTargetオブジェクトを追加し、インスペクターウィンドウでデータベースからイメージを選択する。


imageターゲットを検出した時に表示させるオブジェクトをシーンに追加し、imageターゲットオブジェクトと相対位置を調整する。

出現位置精度のためには、imageターゲットと同じくらいのサイズのオブジェクトがよい。
imageターゲットより大きなオブジェクトは、離れるほどに誤差が大きくなる。

表示させたいオブジェクトの位置が決まったら、ヒエラルキーでimageターゲットの子供位置に移動する。

Playボタンを押してPCのWebカメラにターゲットを映して、AR認識しオブジェクトが出現することを確認する。


エリアターゲットの場合は、シミュレーター機能で場所をオーサリングできる。
ターゲットととの相対位置を調整して、表示させたいオブジェクトをターゲットの子供位置へ移動する。

Window>Vuforia ConfigrationでインスペクターウィンドウにVuforia Configrationを表示する。

Play ModeをWebcamからSimulatorに切り替える。

シミュレーターモードでは、WASDキーでAreaTarget空間内を移動できる。
右クリックドラッグでヘッド方向は変えられるままなので、Hololensで空間内を探索しているシミュレーションができる。

Playボタンを押して空間内でオブジェクトがどのように出現する状態になっているか確認する。

アプリをビルド・デプロイしHololensやモバイルで動作確認する。
データが重いと起動時に止まってしまったり、動きが遅れがちなので、 データベース、モデルとも3Dデータはできるだけ軽めが良い。




プレビューやオーサリングで動きの概要が確認出来たら、アプリをデバイスにビルド・デプロイして動作確認する。
HoloLensカメラのターゲット認識はスマホやWebカメラより少し感度が悪い。
イメージターゲットは、データを印刷してターゲットにするのが一般的だが、 持ち運びたい時は、カタログや雑誌などしっかりとした剛性のある印刷物実物をスキャンして データにする方法もある。
絵柄は、規則的な繰り返しパターンではない書画や写真のような不規則的なものがよい。
ターゲットマーカーのデータと実物とのサイズ誤差は、出現オブジェクトのスケールへ影響するので データベース作成時に正確な寸法で入力しておく。