TrackingImageDatabase の生成を理解する

概要

ImageTracking を行うためには予め NRKernalSessionConfig に追跡対象を登録した TrackingImageDatabase (NRTrackingImageDatabase) を設定する必要があります。 TrackingImageDatabase は Unity Editor で生成します。 この記事では、TrackingImageDatabase の生成方法を説明し、生成を行っているソースコードを解読してみます。 個人的な読解結果であるため誤りが含まれている可能性があることをご了承ください。

目次

確認環境

  • NRSDK 1.2.1

解説

TrackingImageDatabase の生成方法

TrackingImageDatabase を生成する手順は以下のとおりです。

  1. Texture を用意する
    • Requirements は要注意
      • JPEG (コードを読むと PNG にも対応している様子)
      • grayscale or RGB color
      • 150 dpi
      • The dimensions of printed reference images < 1m2
      • well-distributed feature points
      • low degrees of self-similarity
      • Adobe Photoshop よりは Adobe Illustrator で書き出すことを推奨
  2. Texture を選択する
    • 複数登録する場合は複数選択する
  3. コンテキストメニュー Create/NRSDK/TrackingImageDatabase を選択する
  4. TrackingImageDatabase が生成される

TrackingImageDatabase を生成しているソースコードを解読する

TrackingImageDatabase を行っている Script は TrackingImageDatabaseContextMenu です。 TrackingImageDatabaseContextMenu では以下の処理を行っています。

  • MenuItem に Assets/Create/NRSDK/TrackingImageDatabase を追加する
  • 選択した ImagePath を取得する
    • サポート対象となる拡張子 : .png, .jpg, .jpeg
    • 警告ダイアログを表示する拡張子 : .psd, .tiff, .tga, .gif, .bmp, .iff, .pict
    • スルーする : 他
  • サポート対象となる ImagePath が指定されたときのみ以下を行う
  • NRTrackingImageDatabase (ScriptableObject) を生成する
  • 各 ImagePath に対して、NRTrackingImageDatabaseEntry を生成する
    • imageName, Texture2D を指定
  • NRTrackingImageDatabaseEntry を imageName 順に並べ替え
  • NRTrackingImageDatabase に NRTrackingImageDatabaseEntry を追加する
  • NRTrackingImageDatabase を TrackingImageDatabase.asset として保存する

NRTrackingImageDatabase

NRTrackImageDatabase は ScriptableObject です。 Unity Editor で NRTrackingImageDatabaseEntry を登録し、実機で動かす場合には NRTrackingImageDatabaseEntry の参照だけを行います。 そのため、Add, RemoveAt, NRTrackingImageDatabaseEntry の set などの編集 API は Unity Editor のときのみ有効になっています。 また、NRTrackingImageDatabaseEntry の Width, Heigh, Quality を編集する処理は含まれていません。 これらの処理は TrackingImageDatabaseInspector で行っています。

NRTrackingImageDatabaseEntry

以下を保持する構造体です。

  • Name : string
  • Width : float
  • Height : float
  • Quality : string
  • TextureGUID : string

TrackingImageDatabaseContextMenu では、Name と Texture を指定して生成しています。 Texture 自身を保持せずに Texture の識別子 TextureGUID を保持して、Texture を求められた際には Texture を Load しています。 Width, Height, Quality は 0 や空文字列が設定されます。