まえがき
Vuforia EngineのArea Targetsという機能を用いて、オフィスの共用部分をスキャンしてオブジェクトを表示してみました。
Area Targetsは、スキャンした空間全体をターゲットにすることができる機能です。
2020/7/11現在では、Matterport Pro2という3Dカメラでスキャンした空間のみターゲットにすることができます。
また、Matteport Pro2でスキャンしたデータをArea Targetsで利用するためには、Matterport Pro Professional(69ドル/月)と、スキャンデータをダウンロードするのにMatter Pak(Professional Planでは49ドル)が必要です。
また、Matterport側にAPIの利用申請をメールで送っておく必要があります。
実行環境
- Unity 2019.3.0f3
- Matterport Pro2
- Vuforia Engine 9.0
- iPhone 11 Pro
Vuforia Engineとは
Vuforia Engineは、iOSやAndroid、PC、HoloLensといったAR/MRデバイスに対応したAR開発プラットフォームです。
Vuforia EngineはPTCが提供していますが、元々はQualcommが開発しており、2015年にPTCがVuforia事業を6500万ドルで買収しています。
マーカートラッキングを非常に得意としており、特徴点の多い(複雑な)画像であればほとんどぶれることなく3Dオブジェクトを配置することができます。
詳しくはこちらをご覧ください!
画像をターゲットにするImage Targetsを使っていきたいと思います。
ライセンスの取得とライセンスキーをUnityに設定する方法関しては、ラズパイ4をVuforia Engineで分身させてみた ~Object Recognition編~こちらをご覧ください。
Area Targetsとは
Image TargetsやModel Targetsは視界に捉えられる被写体に対するものに限られており、広い空間をトラッキングするために設計されたものではありません。
Area Targetsはスキャンした空間をトラッキング対象として、AR表現を行うことが可能になります。

今回は、このようにオフィスの共用部をスキャンしてArea Targetsを使用してみました。
スキャンからUnityで実行するまで
Matterport Pro2による撮影
シェアオフィスの共用エリアをMatterport Pro2を用いて3Dスキャンしました。
画像のようにMatterport Pro2を設置します。
そして、iPhoneのMatterport Captureというアプリでスキャンを始めることができます。
実際に撮影している風景がこちらです。
Matterport Pro2によるスキャン風景 pic.twitter.com/a2fIDL7gwX
— こーや (@koyataroo) July 19, 2020
60度ずつ回転してスキャンをしているようです。
実際に撮影する場合は、自分が写ったらダメなのでこのように物陰に隠れて撮影をします。
物陰に隠れてMatterport Pro2で撮影 pic.twitter.com/PhSKcJOfyL
— こーや (@koyataroo) July 30, 2020
複数箇所スキャンすると、以下のようにアプリ上にスキャン結果が表示されます。

公式では、2m間隔でスキャンすることが推奨されています。
窓の位置は、手動で設定をしました。
そうすることで窓ガラスの外を認識してしまった場合、不要な部分は削除することができます。
スキャンデータをクラウドにアップロード
スキャンデータをMatterportのサーバーにアップロードすることで、スキャンデータを作成することができます。
ここで、Matteport Pro2で撮影したデータをアップロードする場合には、69ドル/月のProfessional Planに加入している必要があります。
アプリからアップロードすることができ、3-4時間でスキャンデータの作成が完了しました。
スキャンデータをArea Targetsで利用できるようにする
スキャンデータをクラウドからダウンロードするには、49ドルが必要になります。(Matter Pak)
Matter Pakの購入後、Area Target Generatorを用いてスキャンデータをArea Targetsで利用できる形式に変換します。
MatterportにAPI利用申請のメールを送って承認されると、Tokenが取得できるのでそれを入力します。
Scanned Spaceには、クラウド上のスキャンデータのIDを入力します。(どこにあるのかわからず、URLの???の部分を入力したらいけましたhttps://my.matterport.com/models/???)
すると**.unitypackage**ファイルを作成することができます。
Area TargetsをUnityで使う
Unityでプロジェクトを作成した後、先ほどの**.unitypackage**を読み込みます。
すると、Area Targetsを配置することができます。
あとは通常の開発同様、Area Targets配下にオブジェクトを配置していくといった流れです。
Area Targetsを用いて実装
作成したもの
Vuforia Area Targetsのデモ pic.twitter.com/uAspSz4Al3
— こーや (@koyataroo) July 19, 2020
実装内容
- 室内の温度の表示
実際の気温とは関係なく、1秒おきに変化させています。
今回は行っていませんが、IoTデバイスと連携して、温度センサー情報を取得して表示をする想定です。
アニメーション付きで変化させてみると見栄えもよくなりそうだと感じました。
- 座席の予約切り替え
座席のエリアをタップすることで、AvailableとReservedの切り替えをすることができます。
- プロジェクターの予約切り替え
プロジェクター横のレバーをタップして切り替えることで、プロジェクターの使用可否を切り替えることができます。
- 危険エリアの表示
Dangerと表示されているエリアは侵入禁止エリアを想定しています。
- 目的地(プリンタ)へのナビゲーション
Find Printerボタンを押すと、プリンタの位置を矢印が差してくれます。
Area Targetsによって、カメラがどちらの方向を向いているのかがわかるために実現できています。
ルートを指し示す場合は、通ることのできる道の定義、ルート探索のアルゴリズムを実装することで実現できます。
オクルージョン
オクルージョンとは、現実世界の物体の奥に3Dオブジェクトが存在する場合に、重なっている3Dオブジェクトを表示しない機能です。

こちらの画像のように、壁の奥のDangerの部分は隠れる機能です。
Area TargetsのSimulate Occlusionをオンにすると、オクルージョンされるようになります。
この場合のオクルージョンは、スキャン時に存在していた物体に対してのみ適用されます。
そのため、スキャン時に存在していなかった物体が存在していたり、スキャン時にあったものがなくなってしまった場合、少し違和感のあるオクルージョンが発生します。
スキャン時に存在していなかった物体が存在する場合は、その物体に対してのオクルージョンが行われません。
また、スキャン時にあったものがなくなってしまった場合は、スキャン時の位置に存在していた物体通りにオクルージョンが行われます。
なので、基本的には机など動く可能性のあるものはスキャンに含めない方がよいかと思います。
Image Targetとの併用
Vuforia Area TargetsとImage Targetsの併用 pic.twitter.com/ut2PWUj5ga
— こーや (@koyataroo) July 30, 2020
このように、Area Targetsを利用しているときに、別のTargetも使用することができます。
空間に配置するものはArea Targetsで、何か物体やマーカーに動的に追随するものはImage TargetsやModel Targetsを使うといったユースケースが考えられます。
まとめ
Vuforia EngineのArea Targetsは、精度よくオブジェクトを配置することができました。
Area Targetsは、オフィスや、工場、美術館といった場所で、ゲームやナビゲーションを表示するのにとても有用であると感じました。
現状では、Matterport Pro2と月額69ドルが必要であるため試すのにもハードルがありますが、試す価値は十分にあると思います!
開発者向けのVuforia Slackコミュニティがあり、僕も参加しているので、記事の内容で質問があればそちらから質問下さい!
また今回のコードはGithubに載せているので是非クローンしてお手元で試してみてください!