Table of Contents

Mega Go のトラッキング処理を制御する

この記事では、さまざまなアプリケーションシナリオの要件を満たすために、Mega Go のトラッキング処理における各機能とパラメータを制御する方法を説明します。

始める前に

tracker のワークフロー

tracker のワークフローは次のとおりです。

flowchart LR
  subgraph startup_graph[起動]
    direction TB
    sstart((session 起動))
    create[ネイティブ作成]
    load(target をロード)
    verify[試用検証]
    init_g[[初期化]]
  end
  
  subgraph init_graph[初期化]
    direction TB
    init_{6DoF 初期化成功<br>または非 6DoF}
    init[[ローカルトラッキング初期化プロセス]]
    detecting[[検出]]
    tracking_g[[トラッキング]]
  end

  subgraph tracking_graph[トラッキング]
    direction TB
    tracking[[継続トラッキング]]
  end

  subgraph stopping_graph[停止]
    direction TB
    unload(target をアンロード)
    dispose[ネイティブ破棄]
    sstop([session 停止])
  end

  sstart --> create --> load --> verify --> init_g
  init --> init_ --> |Yes| detecting --> tracking_g
  unload --> dispose --> sstop
  init_ --> |No| init

  startup_graph --> init_graph
  init_graph --> tracking_graph
  tracking_graph --> stopping_graph

処理はおおまかにいくつかの段階に分かれます。

  • 起動:
    • session の起動後、ネイティブ層の tracker が作成されます。
    • target の Start() の後、その target が対応する tracker に読み込まれます。
    • 試用データの場合は、オンラインで試用資格を検証する必要があり、検証に成功してから次の段階に進みます。
  • 初期化:
    • 6DoF frame source を使う場合、ローカル tracking の初期化処理に入ります。
      • ローカル tracking の初期化には時間がかかることがあり、シーンの複雑さやデバイス性能に関係し、通常は frame source の下位層で使われるアルゴリズムにも関係します。
    • 6DoF ではない frame source を使う場合、ローカル tracking 初期化段階はスキップされ、直接検出が始まります。
    • 検出処理にも時間がかかることがあり、シーンの位置特定のしやすさやデータ取得・マッピング品質に左右されます。
    • 既定の設定では、この段階の内容は表示されません。これは ActiveController コンポーネントのオプションで制御できます。
  • トラッキング:
    • tracker は現在の block を継続的に追跡します。
    • 既定の設定では、tracking 状態(TargetController.IsTracked == true)の target ノード配下の内容のみが表示されます。これは ActiveController コンポーネントのオプションで制御できます。
  • 停止:
    • session 停止後、target はアンロードされ、ネイティブ層の tracker は破棄されます。

デバイスサポートレベルを調整する

MegaGoTrackerFrameFilter の MegaGoTrackerFrameFilter.MinInputFrameLevel プロパティは、Mega がサポートする最低デバイスレベルを指定するために使います。

alt text

Mega Go はほぼすべての種類の frame source で動作できますが、frame source ごとに tracking 結果への影響は異なります。

既定では、Mega はデバイスがサポートする最も高いレベルの frame source を tracking に使います。既定設定で Mega Go に対応した session には、6DoF と 5DoF に対応した frame source がすでに構成されています。

実行時に特定レベルの frame source を Mega にサポートさせるには、2 つの条件を満たす必要があります。

たとえば、既定の session で 3DoF tracking をサポートするには、次が必要です。

別の例として、既定の session から 5DoF tracking のサポートを外すには、次が必要です。

条件を満たす frame source が利用できない場合、session の assemble は失敗します。

現在のシステム状態を把握する

既定の session 構成では、UI メッセージ が画面に表示され、Mega Go の状態情報が含まれます。

tracker の状態は Mega Go: の横に表示されます。たとえば Tracking や VerifyingTrial です。検出と tracking の間は、下に localization の更新も表示されます。

alt text

現在読み込まれている block の tracking 状態は Mega Go: の下に、Block (<trackingStatus>): <name> (<id>) の形式で表示されます。<name> は block 名、<id> は block ID です。trackingStatus は Tracking または NotTracking で、それぞれ現在の block が追跡中かどうかを示します。

alt text

MegaGoTrackerFrameFilter.Status プロパティを使うと現在の状態を取得でき、tracker の動作状況を把握できます。エラー状態が発生した場合は、MegaGoTrackerFrameFilter.Error でエラー状態を取得し、適切に処理できます。

次のコードは、これらのプロパティの使い方と、アプリケーションが注意すべき一般的な異常状態の処理方法を示しています。

void HandleTrackerStatus()
{
    if (tracker.Status == MegaGoTrackerStatus.Error)
    {
        if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
        {
            // ローカル検証に失敗しました。data の期限切れまたは無効化を確認することを推奨します(テスト版から正式版へ切り替えた後、テスト版データは無効になります)。
        }
        else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
        {
            // ローカル検証に失敗しました。target ファイルが完全か確認することを推奨します。
        }
        else
        {
            // その他のエラー。
        }
    }
    else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
    {
        // 試用 target を検証中です。長時間検証が完了しない場合は、ネットワーク接続の確認を推奨します。
    }
    else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
    {
        // VIO 入力を初期化中です。長時間初期化が完了しない場合は、使用方法を最適化するようユーザーに案内することを推奨します。
        // 例:「カメラを斜め前方に向け、デバイスを持ったまま体を左右に大きく 5 回動かしてみてください。」
    }
}

localization の更新を取得するには MegaGoTrackerFrameFilter.LocalizationRespond イベントを使います。

一時停止と再開

tracking を一時停止するには MegaGoTrackerFrameFilter.enabled を false に設定します。

既定では、tracking を一時停止すると、すべての block ノード配下の内容は非表示になります。

関連トピック