Table of Contents

ヘッドセットで EasyAR をサポートする

この記事では、EasyAR Sense Unity Plugin のヘッドセット拡張パッケージテンプレートを使って、ヘッドセットデバイスに対応した EasyAR 拡張パッケージを開発する方法を説明します。

始める前に

開発に入る前に、まず EasyAR Sense Unity Plugin の使い方を理解しておく必要があります。

  • クイックスタート
  • AR Session のサンプル、画像トラッキングのサンプル ImageTracking_Targets、密な空間マップのサンプル SpatialMap_Dense_BallGame を実行してください。スマートフォンとヘッドセットでの動作は似ています。

ヘッドセット向けプラグインの開発では基本機能を扱うため、次の内容も先に理解しておく必要があります。

さらに、Unity で package を開発する方法 にも慣れておく必要があります。

AR/MR 用にデバイスを準備する

  • モーショントラッキング/VIO システムを準備する

    デバイスのトラッキング誤差が制御されていることを確認してください。Mega などの EasyAR 機能は、ある程度デバイスの累積誤差を抑えられますが、局所的な誤差が大きいと EasyAR のアルゴリズムも不安定になります。一般的には、VIO のドリフトを 1‰ 以内に収めることを想定しています。

  • 表示システムを準備する

    現実の物体と同じサイズと輪郭を持つ仮想物体を仮想世界に配置し、その仮想カメラとの相対変換関係が、現実世界での対応する実物とデバイスの変換関係と同じであるとき、仮想物体が実物にぴったり重なって表示され、デバイスを動かしたり頭を動かしたりしても表示効果が崩れないことを確認してください。Vision Pro のような表示を参考にできます。

  • デバイス SDK を準備する

    外部入力フレームデータ を提供できる API がすでにあることを確認してください。これらのデータはシステム内のちょうど 2 つの時点から生成される必要があり、データが整列できない状況が起きないようにする必要があります。

ヘッドセット拡張パッケージテンプレートを使う

Unity の Package Manager window から、ローカル tarball ファイルを使ったインストール により EasyAR Sense Unity Plugin(package com.easyar.sense)を導入します。ヘッドセット拡張テンプレート(package com.easyar.sense.ext.hmdtemplate)を Unity プロジェクトの Packages ディレクトリに解凍し、Samples~ フォルダを Samples にリネームします。

このとき、次のようなディレクトリ構成が見えるはずです。

.
├── Assets
└── Packages
    └── com.easyar.sense.ext.hmdtemplate
        ├── CHANGELOG.md
        ├── Documentation~
        ├── Editor
        ├── LICENSE.md
        ├── package.json
        ├── Runtime
        └── Samples
            └── Combination_BasedOn_HMD
ヒント

必要に応じて、Unity で許可されている任意の方法で EasyAR Sense Unity Plugin を導入し、ヘッドセット拡張テンプレートを配置できます。

テンプレートを使わない場合でも、Unity のカスタム package 作成ガイド を参考に新しい package を作成できます。

デバイス SDK が Unity の package として整理されていない場合は、ヘッドセット拡張テンプレートを Unity プロジェクトの Assets フォルダに解凍し、解凍したファイルから package.json と .asmdef 拡張子の付いたファイルを削除してください。この使用方法では、デバイス SDK と EasyAR を併用するユーザーは適切なバージョン依存を得られません。

実行時入力拡張を完成させる

デバイスの動きと画像データの入力拡張を作成する方法 に従って、Runtime/HMDTemplateFrameSource.cs を修正し、ヘッドセット向けの入力拡張を完成させます。これが拡張パッケージの最も重要な開発作業です。

エディタメニューを完成させる

MenuItems クラス内の "HMD Template" 文字列を、デバイス名を表すものに変更します。必要であれば、他のカスタムエディタ機能用のスクリプトも追加できます。

開発者が Hierarchy ビューで AR Session (EasyAR) を選択して右クリックすると、次のメニュー項目が表示されます。

  • EasyAR Sense > Extensions > Frame Source : [Device Name]:現在の session にそのデバイスの frame source を追加します。
  • EasyAR Sense > Extensions > Frame Source : [Device Name (keep it only)]:現在の session にそのデバイスの frame source を追加し、1 つだけ保持します。

alt text

アプリケーションサンプルを完成させる

サンプルは Samples/Combination_BasedOn_HMD にあります。簡潔にするため、サンプルテンプレートにはコードがなく、AR 機能はすべてシーン内容と設定だけで完成できます。

  1. デバイス上で動作するコンテンツをシーンに追加します。

    ヒント

    必要に応じて逆に進めても構いません。つまり、デバイス上で動作するシーンを用意し、そこに EasyAR コンポーネントやサンプルシーンの他のオブジェクトを追加します。

  2. session の原点の下に置くよう設計されたオブジェクトを修正します。

    シーンで session 原点が定義されている場合は、EasyARPandaUI を原点ノードの下に移動します。

    alt text

    EasyARPanda はデバイスのモーショントラッキング動作の参照になります。トラッキングが不安定なときの原因把握に役立ちます。

    これらのオブジェクト名の括弧内の文字は拡張開発者向けのヒントなので削除できます。

    • (Move into Origin if there is any)
    • (Move into Origin if there is any, set constraint source to your rendering camera)
  3. HUD ボタンの挙動を設定します。

    UI の constraint source を仮想カメラに設定し、HUD ボタンが期待どおりに動作するようにします。

    alt text

  4. Canvas の raycast 機能を設定します。

    UI ノード配下の Canvas を修正し、raycast が動作してすべての UI ボタンとスイッチが期待どおりに動くようにします。

    テンプレートにはすでに Canvas ノードの下へ XR Interaction ToolkitTracked Device Graphic Raycaster が追加されています。対応する package をインポートすると確認できます。

    alt text

    デバイス上で実行する際に XR Interaction Toolkit を使わない場合、次のようなスクリプト不足の警告が表示されます。これを削除し、デバイスに必要な raycaster コンポーネントを追加できます。

    alt text

次のステップ

関連トピック