動作確認(bring-up)用ヘッドマウントディスプレイ拡張
EasyARをデバイス上で動作させるために最も重要であり、かつ最も困難な作業は、入力データの正確性を確保することです。新しいデバイスで初めてEasyARを実行する際、問題の90%以上は誤ったデータによって引き起こされます。
可能であれば、EasyARを導入する前に、デバイスとそのインターフェースのみを使用したテスト方法で、データの正確性を直接検証することをお勧めします。このドキュメントでは、EasyARの機能を使用してデータを検証する経験則をいくつか紹介します。このプロセスは外部入力フレームデータの理解に役立ちますが、EasyAR自体にも誤差が存在するため、この密結合システムを使用したデータ検証は最善の選択肢ではありません。
開始する前に
- 頭部装着ディスプレイの EasyAR サポート の開発を完了する。
- クイックスタート を読み、EasyAR Sense Unity Plugin の使用方法を理解する。
- 頭部装着ディスプレイサンプルの使用方法 を理解する。
- Android プロジェクト設定 を理解する。
実行ベース機能のサンプル
初めてデバイス上で EasyAR を検証する際は、特に Mega を急いで実行しないよう、これらの機能を順番に実行してください。Mega はある程度のフォールトトレランスを持っていますが、短時間の実行や単一の現実シーンでの実行では問題を検出しにくいためです。
表示されるセッション情報を確認し、予期せぬ事象が発生しておらず、フレームカウントが継続的に増加していることを確認します。
Image、つまり 画像トラッキング 機能を実行し、スマートフォンでの実行結果と比較して一致することを確認します(iPhone を基準とすることを推奨)。トラッキング状態とターゲットのオーバーレイ表示に注目します。モーションフュージョンを有効にしていない場合、画像トラッキングには明らかな遅延感が生じますが、これは予期された動作です。動作プロセスが正しく、デバイスが停止した時に位置が合えば問題ありません。
Dense、つまり 高密度空間マップ 機能を実行し、スマートフォンでの実行結果と比較して一致することを確認します(iPhone を基準とすることを推奨)。メッシュの位置、生成速度、品質に注目します。入力データのフレームレートが低い場合、メッシュの生成速度は低下しますが、品質が明らかに劣化することはありません。
この機能は一部の Android デバイスでは動作せず、メッシュの品質もデバイスによって異なります。
重要
ヘッドマウント拡張パックで使用される入力拡張は、カスタムカメラ の実装です。
カスタムカメラやヘッドマウントディスプレイ上で試供品(個人版ライセンス、試供版XRライセンス、試供版Megaサービスなど)を使用する場合、EasyAR Senseは起動毎に100秒後(MegaユーザーはEasyARビジネスを通じて承認後、時間長を調整可能)に応答を停止します。有償版のEasyAR Senseおよび有償のEasyAR Megaサービスを使用する場合、この制限はありません。
Image および Dense の動作がスマートフォン上のパフォーマンスと同等またはそれ以上であれば、EasyAR のほとんどの機能はデバイス上で正常に動作しており、Mega のテストを開始できます。
解決実行中の異常状況:問題分解
もし携帯電話上と同じ結果を再現できない場合、以下は根本原因を探るための詳細な問題分解プロセスです。system log outputに常に注目することをお勧めします。
ステップゼロ:ヘッドマウントディスプレイ自体のシステム誤差を理解する
デバイスを AR/MR 用に準備する で説明されたモーション追跡と表示の要件を覚えていますか?
重要
モーション追跡/VIO誤差は、常にさまざまな方法で EasyAR アルゴリズムの安定性に影響を及ぼします。
重要
表示システムの誤差は、仮想物体と実物体が完璧に位置合わせされない原因となる可能性があります。
誤差が大きい場合には、仮想物体が実物の上または下に浮いているように見え、その後(見た目上)ずっとドリフトし続けることがあります。この現象は Pico 4E で観察でき、EasyAR を使用せずにその独自の VST を開いただけでも同じ現象が発生します。
ステップ1: セッションの実行状態を確認する
UIメッセージ において、セッション状態が正常と表示されるために必須の機能またはデータ:
- ExternalFrameSource の
可用性 (Availability)- ExternalFrameSource の
仮想カメラ (Virtual Camera)
セッション状態情報が表示されない場合、オプションを Log に変更し、システムログでセッションの状態と使用中のフレームソース名を確認してください。
ARSession ノード配下の他のフレームソースをすべて削除し、変化があるかどうかを試しに確認することができます。
ステップ2:EasyARが受信したカメラフレームカウントを確認する
正常に機能する必要がある機能またはデータ:
- ExternalFrameSource の
カメラフレームデータがUnityコード層でのパス(データの正確性およびネイティブ層へのデータパスは含まない)
この値は時間とともに増加するはずです。そうでない場合、数秒後に警告メッセージが表示されます。
この値が増加しないことが判明した場合は、最初に解決する必要があります。
ステップ3: デバイスでeifを録画し、unityエディタで再生する
正常に機能またはデータが存在する必要があるもの:
- ExternalFrameSource の
カメラフレームデータがネイティブレイヤーに入力される経路(データの正確性は含まない)カメラフレームデータ内のraw camera image dataカメラフレームデータ内のtimestamp(タイミングポイントとデータ同期は含まない)
EIFをクリックして録画を開始し、再度クリックして停止します。
ヒント
ランダムアクセス可能なeifファイルを取得するには、録画を正常に停止する必要があります。
Unityエディタでeifデータを再生する際は、クリーンなEasyARシーンを使用するか、EasyARのサンプルを使用することを推奨します。これにより、シーン内に不正な設定が存在するのを避けられます。
Unityエディタでカメラフレームデータの再生を確認できます。画像データはバイト単位で同一ではなく、プロセス全体で非可逆コーデックが存在します。
EasyARは計算時に歪みパラメータを使用しますが、表示時には画像に対して歪み補正を行いません。そのため、これらのデータを入力した場合、Unityでeifファイルを再生すると、歪み補正されていないデータが観察されます。これは想定された動作です。
ヒント
UnityのGameウィンドウのアスペクト比を入力と同じに変更してください。そうしないと、データがクロップされて表示されます。
データの再生が速すぎるか遅すぎる場合は、timestamp入力を確認する必要があります。
注記
eifを使用して多くのことが可能です。Unityエディタ内でeifを使用して画像トラッキングや高密度空間マッピングを実行できます。ただし、デバイス上で実行した場合の表示効果は異なる可能性があることに注意してください。
ステップ4: EIFを使用した画像トラッキングの実行
正常に機能する必要があるもの:
カメラフレームデータのraw camera image dataカメラフレームデータのintrinsics(データの正確性は完全には保証されません。アルゴリズムはある程度の誤差を許容します)
Unity EditorでEIFを使用して画像トラッキングサンプル ImageTracking_Targets を実行するには、画像が追跡可能なEIFを記録する必要があります。
注記
画像トラッキング では、追跡対象の画像が画面全体にある程度の割合で映っている必要があります。画像が追跡できない場合は、ヘッドをもっとターゲットに近づけて動かしてみてください。
トラッキングが継続的に失敗する場合、または仮想オブジェクトが画像内でターゲットから離れた位置に表示される場合は、intrinsics に問題がある可能性が高いです。
画像データに歪みがある場合、仮想オブジェクトが追跡ターゲットの画像上に完璧に重ならないことがあります。これは想定内の動作です。この現象は、追跡ターゲットが画像の端にある場合に特に顕著になります。
ステップ5:デバイス上で画像トラッキングを実行
正常に機能またはデータが存在する必要があるもの:
- デバイス自身のディスプレイシステム
カメラフレームデータ内のraw camera image dataカメラフレームデータ内のintrinsics(アルゴリズムは誤差にある程度耐性があるため、データの正確性は完全には保証されない)カメラフレームデータ内のextrinsicsカメラフレームデータとレンダリングフレームデータにおけるdevice poseの座標整合性カメラフレームデータとレンダリングフレームデータにおけるdevice poseの時間差
注記
画像トラッキングは、追跡対象が画像全体の一定の割合を占める必要があります。画像を追跡できない場合は、頭を画像にさらに近づけて移動してみてください。
画像トラッキングは、画像の横方向の辺の長さが実世界の物体のサイズと一致している必要があります。このサンプルでは、横置きのA4用紙の長辺いっぱいに広がる画像を追跡する必要があるため、定規を使用して画像の横方向の辺をA4サイズに調整しない限り、コンピュータ画面に表示された画像を追跡しないでください。
EIF使用時に画像トラッキングが完璧でもデバイス上で異なる動作をする場合は、他のテストを進める前にこれを解決する必要があります。後のステップで問題を解決するのははるかに困難です。
仮想物体が実物体から離れた場所に浮いて表示され、人が動いていない場合でもそうであるならば、intrinsicsまたはextrinsicsが正しくないか、カメラフレームデータとレンダリングフレームデータのdevice poseが同じ座標系にない、あるいはディスプレイシステムがこの誤差を生じさせている可能性が高いです。
仮想物体が頭を動かすたびに継続的に移動し、遅延があるように見える場合、device poseが健康でない可能性が非常に高いです。これは以下の状況で頻繁に発生します(他の問題の可能性を排除できません):
device poseとraw camera image dataのデータ時間が同期していないカメラフレームデータとレンダリングフレームデータで同じposeが使用されている
ステップ6: EIFを使用し、デバイス上で高密度空間マップを実行する
正常に機能する、または存在する必要があるもの:
- デバイス自身の表示システム
カメラフレームデータ内のraw camera image dataカメラフレームデータ内のintrinsics(データの正確性は完全には保証されない。アルゴリズムはある程度の誤差を許容するため)カメラフレームデータ内のextrinsicsカメラフレームデータ内のdevice pose
メッシュ生成が非常に遅い、および/または床面の再構築がでこぼこしている場合、device pose に問題がある可能性が非常に高い。poseの座標系が正しくない、またはposeのタイミングが合っていない可能性もある。
ヒント
入力データのフレームレートが低い場合、メッシュ生成速度も遅くなるが、品質が明らかに低下することはない。この状況は予想通りである。
通常、正確なメッシュ位置を識別することは非常に容易ではないため、高密度空間マップ を使用している際に、表示システムの誤差を観察できるとは限らない。
Megaのサンプルを実行
UnityでMegaを使用する方法については以下を参照してください。まだMegaサービスを有効化していない場合は、EasyAR営業に連絡して試用資格を取得する必要があります。
その後、デバイス上でMegaを実行し、スマートフォンでの動作と一致することを確認します(iPhoneを基準とすることを推奨)。以下に注意してください:
- オブジェクトが正しい位置に表示されているか
- 遠距離(10M以上)のオブジェクトの位置とサイズが正確か
- 視野中心から外れたオブジェクトの位置とサイズが正確か
- 頭を回転させた際のオブジェクトの位置とサイズが正確か
解決中の異常事象への対応
正常に機能している必要があるもの、または必要なデータ:
- デバイス自身の表示システム
カメラフレームデータおよびレンダリングフレームデータ内の全データ
画像トラッキング および 高密度空間マッピング の両機能の検証を完了した後、理論上 EasyAR Mega はサポートされているはずです。ヘッドセット上での実行パフォーマンスが明らかにスマートフォンよりも劣る場合、以下の点に注目する必要があります。
カメラフレームデータおよびレンダリングフレームデータ内の pose データと timestamp に注目- モーショントラッキング/VIO システムの出力に注目。
XR Origin配下のパンダは良い参考指標となります
さらに、デバイス自身の表示システム、特に遠方、視野中心の外側、および頭部を回転させた際の物体の表示状態に特に注意を払う必要があります。このようなシナリオはデバイス自身のテストでは見落とされがちですが、多くの場合、問題の根本原因は依然としてデバイス自身の表示システムにあります。これらの問題と潜在的な影響を EasyAR に説明し、開発者に対して合理的な効果の期待値を提供する必要があります。
重要
ユーザーはこれらの表示上の問題を非常に気にする傾向があり、また多くのデバイスは実際に大規模空間シーンにおいて完璧な表示効果を提供できません。EasyAR はデバイス自身の表示問題を解決することはできず、これはデバイスメーカーによる反復的な改善を必要とします。それと同時に、ユーザーもこれらの問題を理解する必要があります。
次のステップ
関連トピック
スマートフォンで実行可能なサンプル:
- 画像トラッキングサンプル ImageTracking_Targets。これにより画像トラッキング機能の期待される動作を理解できます
- 密な空間マップサンプル SpatialMap_Dense_BallGame。これにより密な空間マップ機能の期待される動作を理解できます
- モーションフュージョンサンプル ImageTracking_MotionFusion。これによりモーションフュージョン機能の期待される動作を理解できます
- Mega サンプル MegaBlock_Basic。これによりMega機能の期待される動作を理解できます