Unity AR FoundationGoogle AR CoreApple ARKitUnity上で統合して、マルチプラットフォームで ARアプリを開発できるフレームワーク です。
Unityは AR Foundationを簡単に理解できるように、いくつものシーンを含んだサンプルプロジェクトをGitHubにあげています

そのサンプルの中の ARで一般的な機能、マーカーの認識とトラッキングの機能サンプルImageTrackingの使用法を前回から紹介しています。

Unity AR Foundation のサンプルを試してみた(ImageTracking)Part.1

今回はその応用編として、マーカー画像や表示画像を変更したり、3Dモデルをマーカー位置に表示させたりしてみます。
ARF_ImageTracking_08

【マーカー画像の変更】

最も簡単な方法として Reference Image Library の登録済みの Imageを直接変更してみます。

Reference Image Library とはこのアプリで使用するマーカーのライブラリです。
本サンプルでは、Projectビュー内の Assets > Scenes > ImageTracking > Images フォルダ配下にあるReferenceImageLibrary
ファイルがそれにあたります。
ARF_ImageTracking_02

それをクリックすると、Inspectorビュー上にライブラリの中身が表示されます。デフォルトで3つの画像が登録されています。
その画像を1つ直接変更します。
ARF_ImageTracking_09

そして、再ビルドしてデバイスにインストールすると、もうその画像がマーカーとして使えます。
ARF_ImageTracking_10



【Reference Image Libraryを作成】

次に、「Reference Image Library」自体を自分で作ってみます

Projectビューより Create > XR > Reference Image Library をクリックして Reference Image Library を新規作成します。
ARF_ImageTracking_11

すると空の Reference Image Library が Projectビュー上にできますので、それをクリックしてInspectorビュー上から「Add Image」ボタンでマーカー画像を追加していきます。
ARF_ImageTracking_12

[Reference Image Library の設定項目]

Name:実行時に利用可能な名前。同名チェックはされない。
Specify Size:現実世界の大きさ。設定しなくても良い。外部からこの値を使用する場合は設定する。幅か高さのどちらかを入れると、画像のアスペクト比からもう一方が自動計算される。
Keep Texture at Runtime:Texture自体を実行ファイルに含めるかどうか。何かに使う場合は含める。含めない方が、当然ファイルサイズは小さくなる。
ARF_ImageTracking_13

最後に、その新規作成した Reference Image Library を AR Session Originオブジェクトの AR Tracked Image Manager コンポーネントにある Serialized Libraryにアタッチすれば、マーカーとして使用可能です。
ARF_ImageTracking_14

新しい Reference Image Libraryを試してみます。Merlionのアイコンのみを登録して、サンプルにあった Unityのロゴは登録していないので、新しい Reference Image Libraryが使われていることが確認できます。
ARF_ImageTracking_16



【表示ロジックの説明】

表示関連で重要となるのが、Session Spaceと言う ARの座標と Unity Space:Unityの座標の変換を行う AR Session Originクラスが付いた AR Session Origin オブジェクト。 
ここには、Image Tracking で重要となる「AR Tacked Image Manager」と「Tacked Image Info Manager」がアタッチされています。
 
これらを利用して画像やオブジェクトを AR表示するのに必要となるのがTacked Image Info Manager」クラス 内の UpdateInfoメソッドです。
ARF_ImageTracking_15

表示の仕組み:
毎フレーム ARTrackedImageの追加・更新・削除に関する情報と共に、ARTrackedImageManagerクラスの trackedImagesChangedが呼び出される。
その際に、TrackedImageInfoManagerクラスの OnTrackedImagesChangedメソッドが呼び出され、そこから TrackedImageInfoManagerクラスの UpdateInfoメソッドがコールされる。
この UpdateInfoメソッドが画像情報の表示や画像自体の表示を行っている。
ARF_ImageTracking_17



【表示イメージの変更】

サンプルのデフォルトでは登録されたマーカー画像自体をマーカーに重ねて AR表示する作りとなっています。
その表示する画像をマーカー画像とは別に、自分の好きな画像に変えてみましょう。

上記した TrackedImageInfoManagerクラスの UpdateInfoメソッド内で画像を内で AR表示する部分を他の画像に変更します。
以下のように変更してみました。
ARF_ImageTracking_18

public Texture targetTexture;

material.mainTexture = 
(trackedImage.referenceImage.texture == null) ? defaultTexture : targetTexture;

すると、以下のような感じで表示されます。
ARF_ImageTracking_19



【3Dモデルを表示】

次に、マーカーの位置に3Dモデルを表示してみます。ARでよくあるパターンかと思います。

また TrackedImageInfoManagerクラスの UpdateInfoメソッドの画像を AR表示するあたりに、3Dモデルの表示を追加します。
以下のように変更してみました。
ARF_ImageTracking_20

public GameObject targetPrefab;
private GameObject instantiatedGO;

if (instantiatedGO == null)
instantiatedGO = 
Instantiate(targetPrefab, planeGo.transform.position, Quaternion.identity);

すると、以下のような感じで表示されます。
ARF_ImageTracking_08


このように、このサンプルを修正していくと、自分の必要な形になっていくと思います。

こんな形で、他の Unity AR Foundationのサンプルも、今後 紹介・説明をしていこうかと思っています。


Sponsored Link