セッションの現在の状態についてユーザーに継続的に情報を提供します。また、中断から復帰します。
概要
ワールドトラッキングARセッションは、Visual Inertial Odometry(VIO)と呼ばれる技術を使います。このプロセスは、モーションセンサーのデータとカメラ画像のコンピュータビジョン解析を組み合わせ、リアルワールドの空間においてARCamera
(英語)transform
(英語)プロパティで表されるデバイスの位置と向き(姿勢)をトラッキング(追跡)します。最適な結果を得るため、ワールドトラッキングには、継続的なセンサーデータと、視覚的複雑性または認識可能なフィーチャ(特徴)を持つカメラ画像が必要です。
セッションを開始してから、ARKitがデバイスの姿勢を正しく把握するために十分なデータを収集するまでに少し時間がかかります。セッション中に、ワールドトラッキングクオリティに影響する条件が変わることがあります。ARSession
(英語)デリゲートメソッドとARCamera
(英語)プロパティを使うと、この変化を把握できます。
ARセッションの基本的なライフサイクル
下の図は、ARセッションを開始したときのトラッキング状態の変化を示しています。
新しいセッションの開始直後、提供されるフレームのトラッキング状態はARCamera
(英語)であり、ARKitがまだデバイスの姿勢を推定するために十分な情報を収集していないことを示しています。
数フレーム後に、トラッキング状態はARCamera
(英語)に変わり、デバイスの姿勢情報は利用可能であるもののその精度は不明であることを示します。limited状態では常に、トラッキングクオリティの低下の理由が含まれます。この場合、セッションの状態はまだARCamera
(英語)です。
しばらくするとトラッキング状態がARCamera
(英語)に変わり、デバイスの姿勢情報が正確であり、ARKitのすべての機能を利用できることを示します。
トラッキングクオリティの変化に関するフィードバックの提供
下の図は、ユーザーの操作や環境の変化によって発生する可能性のある、トラッキング状態の変化を示しています。
トラッキングクオリティがARCamera
(英語)になっている間、ARKitがユーザーの周囲の状況をマッピングすることに依存する機能は利用できません。
-
平面検出機能は、平面アンカーの追加や更新を行いません。
-
ヒットテストメソッドの結果が提供されません。
ユーザーの周囲の状況が変化したり、ユーザーがデバイスを動かしたりすることによって、セッションのトラッキング状態はいつでもARCamera
(英語)になる可能性があります。たとえば、ユーザーが何もない壁にデバイスを向けたり、部屋の明かりが消えたりすると、ARCamera
(英語)のためトラッキングクオリティが低下する場合があります。
関連するARCamera
(英語)の値を使ってフィードバックを提供し、ユーザーが問題を解決してトラッキング状態をARCamera
(英語)に戻せるようにしてください。
セッション中断からの復帰
ARKitは、ARSession
(英語)を実行中でないとデバイスの姿勢をトラッキングできません。デフォルトで、(たとえば別のアプリに切り替えることによって)セッションが中断すると、そのセッションの仮想コンテンツは、リアルワールドの環境に対して不自然なものになり得ます。
relocalization(場所への復帰)を使って、中断からの復帰を試みることができます。session
(英語)メソッドでtrueを返すと、ARKitは、中断前のユーザー環境について持っている情報と、現在のカメラおよびセンサーのデータとのマッチングを試みます。このプロセスの間、トラッキング状態はARCamera
(英語)(理由はARCamera
(英語))になります。成功してしばらくすると、トラッキング状態がARCamera
(英語)に戻ります。
relocalizationが成功するためには、セッションが中断されたときと同じような位置と向きにデバイスを戻す必要があります。このような状態にならない場合(デバイスをまったく別の場所に移動した場合など)、セッションの状態はいつまでもARCamera
(英語)のままです。
重要
アプリがARCamera
(英語)状態でrelocalizationが成功しない場合は、(run(_:
(英語)とreset
(英語)を使って)セッションをリセットする方法をユーザーに提供してください。
持続するAR体験の作成
iOS 12.0以降では、ARWorld
(英語)クラスに、ARKitがセッションの再開に使用する情報が保存されます。ワールドマップをファイルに保存することによって、同じrelocalizationプロセスを使って短い中断から復帰するのと同様に、アプリを再起動した場合でも以前のセッションから再開できます。ワールドマップにはアンカーが含まれるので、以前のセッションと一致するように仮想コンテンツを再配置することもできます。
重要
ARWorld
(英語)を使ったセッション再開の信頼性は、リアルワールドの環境に大きく依存します。たとえば、一定の人工照明の屋内で記録されたマップや、ほんの少し前にキャプチャされたマップに対してrelocalizationを行うのは、それほど難しくありません。時間を経て照明の状態や周囲のフィーチャ(特徴)が変わると、難しくなります。
ユーザーがアプリを閉じた後に同じARセッションに戻れるようにするには、ユーザーの操作によって明示的にワールドマップを保存するか、application
(英語)で暗黙的に保存します。ワールドマップの保存は、ARセッションの状態が保存に値する場合にのみ行ってください。たとえば、ユーザーが配置した仮想オブジェクトの位置を覚えて置きたい場合などは、セッションがARFrame
(英語)状態である(またはセッション中に少なくとも一度はその状態にあった)必要があります。
保存されたワールドマップに対してrelocalizationを行うには、セッションの実行時にinitial
(英語)プロパティを使います。中断から復帰する場合と同じように、セッションはARCamera
(英語)(ARCamera
(英語))のトラッキング状態で開始します。ARKitが現在の環境とワールドマップをマッチングできると、しばらくしてトラッキング状態がARCamera
(英語)になり、セッションが記録されたワールドマップに一致していることを示します。
ヒント
relocalizationが成功するためには、デバイスが、マップの作成時にあったエリアを訪れる必要があります。ワールドマップのスクリーンショットを保存し、relocalizationの実行時に配置ガイドとして表示することで、ユーザーがこのタスクを実行するのをサポートできます。
ワールドマップから再開されたセッションには、そのワールドマップに保存されたすべてのアンカーが含まれます。name
(英語)プロパティを使ってアンカーに配置した仮想オブジェクトを特定できるようにしておき、再開したセッションでアンカーから参照した仮想コンテンツをもう一度作成します。コンテンツを正しく配置するには、セッションのトラッキング状態がARCamera
(英語)になってから表示してください。
ARKitが、記録されたワールドマップと現在の環境をマッチングさせることができない場合(たとえば、ワールドマップが記録された場所とまったく異なる場所にデバイスがある場合など)は、セッションがいつまでもARCamera
(英語)の状態のままになります。セッションを再開できない場合は、セッションを再起動する方法をユーザーに提供してください。ワールドマップのrelocalizationをやめるには、セッションでもう一度run(_:
(英語)を呼び出します。このとき、reset
(英語)オプションと、initial
(英語)がnil
の設定を使います。