記事

ARKitのワールドトラッキングについて

優れた拡張現実体験を構築するため、ARKitがサポートするコンセプト、特徴、ベストプラクティスを確認しておきましょう。

概要

AR体験において、基本的な要件でありARKitの特徴となるのは、ユーザーが住む現実の空間と、ビジュアルコンテンツをモデリングできるバーチャル空間との対応関係を確立し、トラッキングする能力です。Appで、このコンテンツをライブカメラの映像と組み合わせて表示したとき、ユーザーが体験することになるのが拡張現実であり、仮想コンテンツが現実の空間の一部分になるという錯視の世界です。

すべてのAR体験において、ARKitは、右利きの慣習に従ったワールド座標系とカメラ座標系を使用します。右手系ではY軸が上、(該当する場合)Z軸が手前、X軸が右を指します。

セッション設定で、リアルワールドに関して座標系の原点と向きを変更できます(worldAlignment(英語)を参照)。ARセッションの各アンカーもやはり右利きの、Z軸が手前を向く慣習に従いローカル座標系を定義します。たとえば、ARFaceAnchor(英語)クラスは顔のフィーチャ(特徴)を位置を表すための座標系を定義します。

ワールドトラッキングの仕組み

現実空間とバーチャル空間との対応関係を確立するため、ARKitは、Visual Inertial Odometry(VIO)と呼ばれる技術を採用しています。このプロセスでは、iOSデバイスのモーションセンサーから得られる情報を、デバイスのカメラで捉えたシーンのコンピュータビジョン解析と組み合わせます。ARKitは、シーン画像に含まれている注目すべきフィーチャ(特徴点)を認識し、それらのフィーチャについて、ビデオフレーム間での位置の違いをトラッキングし、その情報をモーションセンサーのデータと比較します。結果として得られるのは、デバイスの位置とモーションに関する高精度のモデルです。

ワールドトラッキングでは、シーンの内容の解析と認識も行われます。ヒットテストメソッド(ARHitTestResult(英語)クラスを参照)を使って、カメラ画像内の点に対応するリアルワールドの面を探します。セッション設定でplaneDetection(英語)を有効にした場合、ARKitによってカメラ画像内の平面が検出され、その平面の位置とサイズが報告されます。ヒットテストの結果または検出された平面を使って、シーンに仮想コンテンツを配置したり、それらのコンテンツとやり取りしたりできます。

ベストプラクティスおよび制限事項

ワールドトラッキングは、正確性が保証されていない技術です。このプロセスでは、多くの場合、精度の高い結果データが生成され、リアルなAR体験につながります。その一方で、拠り所となるデバイスの物理的環境は常に一貫しているわけではなかったり、ある程度の誤差なしではリアルタイムの計測が困難であったりします。質の高いAR体験を構築するには、ここで紹介する注意点やヒントを常に意識してください。

識別可能な照明条件を対象としてAR体験をデザインする。ワールドトラッキングでは画像解析を行いますが、そのためには鮮明な画像が必要です。何もない壁にカメラが向いているときや現場が暗すぎるときなど、カメラで細部を捉えることができない場合はトラッキングクオリティが低下します。

トラッキングクオリティ情報を利用してユーザーフィードバックを提供する。ワールドトラッキングは、デバイスモーションの画像解析と互いに関係があります。ARKitは、デバイスの位置が動いている場合、ごくわずかな動きであっても、シーンについての理解をより発展させます。距離が遠すぎる、速すぎる、シェイクが激しすぎるなど、モーションが極端な場合は、画像がぶれたり、ビデオフレーム間でフィーチャのトラッキング距離が大きくなりすぎたりして、トラッキングクオリティが低下します。ARCamera(英語)クラスで提供される「トラッキング状態低下の原因」の情報を利用すると、トラッキングクオリティが低くなる状況の解決方法をユーザーに通知するためのUIを生成できます。

平面検出の時間を考慮して明確な結果が得られるようにし、必要な結果が得られた時点で平面検出を無効にします。平面検出の「結果」は、時間の経過とともに変化します。平面が最初に検出された時点で、その位置と範囲は正確ではない場合もあります。その平面が継続的にシーンに入っている場合は、ARKitによって、位置と範囲の判定値が微調整されます。大規模な平面がシーンに含まれている場合、ARKitは、デベロッパがコンテンツを配置するのに使った後でも、その平面のアンカーの位置、範囲、トランスフォームを継続的に更新することがあります。

関連項目

ワールドトラッキング

初めてのAR体験の構築(英語)

ARセッションを実行し、平面検出機能を使ってSceneKitで3Dコンテンツを配置するAppを作成します。

class ARWorldTrackingConfiguration(英語)

バックカメラを使って、デバイスの向きと位置を追跡し、リアルワールドの面、既知の画像やオブジェクトを検出する設定です。

class ARPlaneAnchor(英語)

ワールドトラッキングARセッションで検出された、リアルワールドの平面の位置と向きに関する情報。