Vuforiaを使ってマーカー画像からAR表示をさせましたが、3Dオブジェクトをマーカーとして使うこともできます。
Vuforia Object Scanner
次のページに Vuforia Object Scanner というAndroid用のアプリがあります。現在のところiOS版は無いようです。
ダウンロードはパソコン上で行ったほうが良いです。青文字のリンクをクリックすると、Vuforiaにサインインするように誘導され、その後ダウンロードされます。
VuforiaObjectScanner-X.X.X.zip のような名前のファイル(実際のファイル名はバージョンによって異なります)がダウンロードされるので解凍してください。解凍すると 〜.apk という拡張子のファイルがあり、これがAndroidアプリのインストーラです。Android端末にファイルを転送して、インストールしてください。インストール出来ない場合は、Play Store 以外から入手したアプリをAndroid端末にインストールする方法を調べて、必要な設定を行ってください。
ZIPファイルには次のようなパターンのPDFファイルが同梱されています。A4サイズのものを印刷しておいてください。3Dオブジェクトをスキャンするときに使います。
3Dオブジェクトをスキャンする
今回はラズベリーパイの基板をスキャンします。スキャン用の台紙の4分の1ほどのエリアに座標軸が印刷されていますので、ここにオブジェクトを置きます。
Android端末にアプリをインストールしたら、次のようなアイコンがあるはずです。アプリを起動してください。
「+」のアイコンをタップすると3Dスキャンを行う画面になります。
3次元の座標平面が表示されます。スキャンする対象物が範囲内で、原点近くに配置されていることを確認してください。座標からはみ出した部分はスキャンされません。オブジェクトの一部分だけをスキャン対象にしたい場合は、意図的に対象外の部分を座標外に出しておくという使い方もできます。
赤い●ボタンを押してスキャンを開始します。スキャン中はターゲットを囲む枠が表示され、認識できた部分が緑色に変化します。全角度からまんべんなくスキャンしてください。
赤い■ボタンを押すとスキャンが終わり、チェックマークのボタンで保存されます。”Test” のボタンを押してスキャン結果をテストしてください。正しくスキャンできていればオブジェクトの近く(スキャン範囲の原点の位置)に緑の四角柱が表示され、オブジェクトを動かすと四角柱も追随して移動します。
四角柱が現れなかったり不安定に消えてしまう場合はスキャンが正しくできていません。”Cont Scan” ボタンを押してスキャンを継続してください。
Android端末の VuforiaObjectScanner というフォルダにスキャンした結果が保存されているので、それをパソコンに転送してください。ファイル名は “〜.od” のような拡張子になっています。
スキャンのノウハウ
今回はラズベリーパイの基板をスキャンしましたが、それには理由があります。
はじめに上の写真のアヒルの人形をスキャンしましたが認識に失敗しました。黄色一色で曲面ばかりなので特徴点を捉えることができなかったと思われます。表面に模様があれば成功したかもしれません。中央のレゴブロックも失敗しました。この形状でも特徴点が不十分だったようです。もっと複雑なブロックなら結果は違っていたかもしれません。右端のクマも失敗しました。表面が反射して周囲の照明などが映り込むのが原因と推測します。
このようなオブジェクトをスキャンする際は周囲の関係無いものが写り込まないように配慮してください。また、Vuforiaの公式ページに解説がありますが、背景や照明をセットアップした装置を使うと良いかもしれません。
Unityへの実装
スキャンした結果(〜.odファイル)は、Vuroriaのサイトでデータベースに登録し、そのデータをUnityに実装します。その手順はマーカー画像を使った方法とほとんど同じです。異なる部分についてのみ以下に説明します。
スキャンした結果をVuforiaのサイトでTarget登録しますが、Type は “3D Object” を選択してください。Fileの欄にはスマホでスキャンして作成したファイル(〜.od)を指定してデータベースに読み込ませます。
UnityでターゲットオブジェクトをHierarchyに配置するとき、マーカー画像のときは [Game Object] > [Vuforia Engine] > [Image Target] でしたが、今回は [Game Object] > [Vuforia Engine] > [Object Target (3D scanned)] を選択し、Inspectorの [Object Target] で目的のターゲットを選択してください。
コメント