拡張現実
拡張現実 (Augmented Reality、または AR) を使用すると、仮想オブジェクトと現実世界をシームレスに融合させる没入型で魅力的な体験を提供できます。
デバイスのカメラを使用して実際の世界をスクリーン上にライブで表示することで、あなたのアプリは 3 次元の仮想オブジェクトを重ね合わせ、これらのオブジェクトが実際に存在するような錯覚を生み出します。あなたのアプリが提供する体験に応じて、人々はデバイスの向きを変えて、さまざまな角度からオブジェクトを探索したり、ジェスチャーや動きを使用してオブジェクトを操作したり、マルチユーザー AR 体験で他の人々に参加したりすることさえできます。開発者向けガイダンスについては、ARKit (ARKit) を参照してください。
対応デバイスでのみ AR 機能を提供して下さい。 あなたのアプリの主な目的が AR である場合は、ARKit をサポートするデバイスでのみあなたのアプリを利用できるようにします。特定の AR 能力を必要とする機能があなたのアプリに含まれている場合、またはあなたのアプリで AR 機能がオプションの場合、人々がこれらの機能をサポートしていないデバイスでこれらの機能を使用しようとしても、エラーを表示しないでください。代わりに、サポートされていないデバイスで機能を提供することは避けてください。開発者向けガイダンスについては、デバイスサポートとユーザー権限の確認 (Verifying Device Support and User Permission) を参照してください。
魅力的で快適な体験を生み出す
人々がディスプレイ全体を使用できるようにします。 実世界とあなたのアプリの仮想オブジェクトを表示するために、できるだけ多くのスクリーンを使用してください。没入感を損なうコントロールや情報でスクリーンが乱雑にならないようにします。
リアルなオブジェクトを配置するときは、説得力のある錯覚を目指してください。 実物そっくりのテクスチャを使用して詳細な 3D アセットを設計し、それらを配置した実際の環境に生息しているように見えるオブジェクトを作成します。ARKit からの情報を使用して、オブジェクトを適切に拡大縮小し、検出された現実世界の表面上に配置し、環境照明条件を反映してカメラのきめ細やかさをシミュレートし、現実世界の表面にトップダウンの拡散オブジェクトの陰影を投げ掛け、カメラの位置が変化したときに外観を更新することができます。作成した錯覚を壊さないようにするには、オブジェクトがジャンプしたりちらついたりしないように、あなたのアプリがシーンを 1 秒あたり 60 回更新するようにしてください。
反射面を持つ仮想オブジェクトが環境をどのように表示するかを検討してください。 ARKit の反射は、カメラによってキャプチャされた環境に基づく概算です。AR 体験が本物であるという錯覚を維持するために、これらの概算の効果を軽視する、小さいか粗い反射面が望ましいです。
聴覚と触覚を使用して没入体験を高めます。 効果音や衝突の感覚は、仮想オブジェクトが実際の表面または他の仮想オブジェクトと接触したことを確認する優れた方法です。BGM は、また仮想世界で人々を包み込むのにも役立ちます。ガイダンスについては、オーディオの再生 と 触覚の再生 を参照してください。
環境内のテキストを最小限に抑えます。 人々があなたのアプリ体験に必要とする情報のみを表示します。
追加の情報やコントロールが必要な場合は、それらをスクリーンのスペースに表示することを検討してください。 スクリーンのスペース のコンテンツは、仮想世界か、あまり一般的ではないがデバイスのスクリーンのいずれかの一貫した場所に固定されているように見えます。基盤となる AR 環境がデバイスと共に移動する間、コンテンツは静止したままであるため、通常、人々がスクリーンのスペースでコンテンツを見つけて表示するのは簡単です。
永続的なコントロールを提供する必要がある場合は、間接的なコントロールの使用を検討してください。 間接コントロール は仮想環境の一部ではなく、スクリーンのスペースに表示される 2D コントロールです。人々があなたのアプリ内の永続的なコントロールにアクセスする必要がある場合は、人々がデバイスの持ち方を調整しなくてもアクセスできるようにコントロールを配置することを検討してください。また、間接的なコントロールで半透明を使用して、下にあるシーンをブロックしないようにすることを検討してください。たとえば、Measure(測定)アプリは、スクリーンのスペースを使用して、人々が現実世界のオブジェクトを測定するために使用する半透明と不透明のコントロールを組み合わせて表示します。
さまざまな現実世界の環境で人々があなたのアプリを使用することを想定してください。 人々は、動き回る余地があまりない場所や、大きくて平らな面がない場所であなたのアプリを開く場合があります。あなたのアプリの要件と期待を事前に人々に明確に伝えて、実際の環境が AR 体験にどのように影響するかを人々が理解できるようにします。また、さまざまな環境で使用するためのさまざまな機能セットを提供することも検討しましょう。
人々の快適さを心に留めてください。 デバイスを特定の距離や角度で長時間保持すると、疲れます。疲労の原因とならないようにするには、デバイスをオブジェクトに近づける必要が少ない距離にオブジェクトを配置することを検討してください。ゲームでは、レベルを短くし、短いダウンタイムを混在させることを検討してください。
あなたのアプリが人々の動きを促す場合は、徐々に動きを導入してください。 たとえば、人々に AR ゲームに入るとすぐに仮想発射体をかわさせたくない場合があります。人々があなたのアプリでの AR 体験に適応する時間を与えてから、徐々に動きを促してください。
人々の安全に注意してください。 人々が AR 体験に没頭しているとき、必ずしも周囲の実際の環境を認識しているとは限らないため、素早い動き、掃き取る動き、または拡大する動きは危険な場合があります。あなたのアプリを安全に操作できるようにする方法を検討してください。たとえば、ゲームでは、大きな動きや突然の動きを助長することを避けて下さい。
指導を使用して人々を始めさせる
人々があなたのアプリで AR 体験を楽しむ前に、ARKit が周囲を評価して表面を検出できるようにデバイスを動かす必要があります。iOS 13 以降では、組み込みの指導ビューを使用して、人々に何をすべきかを示し、初期化プロセス中にフィードバックを提供できます。また指導ビューを使用して、人々が AR を再初期化するのを支援することもできます (再ローカライズ と呼ばれるプロセス)。たとえば、人々が一時的に別のアプリに切り替えて AR 体験が中断された後です。再ローカライズのガイダンスについては、中断の処理 を参照してください。開発者向けガイダンスについては、ARCoachingOverlayView (ARCoachingOverlayView) を参照してください。
人々が指導ビューを使用している間は、不要なアプリ UI を非表示にします。
デフォルトでは、指導ビューは初期化または再ローカライズの開始時に自動的に表示されるため、人々が指導ビューの指示に集中できるように、無関係な UI を非表示にする準備をする必要があります。必要に応じて、カスタム指導体験を提供します。 人々が特定の情報 (水平面または垂直面の検出など) を提供できるように、システム提供の指導ビューを構成できますが、追加情報が必要な場合や、別の視覚スタイルを使用したい場合があります。カスタムの指導体験を設計する場合は、システム提供の指導ビューを参考にしてください。
人々のオブジェクトの配置を支援
表面を見つけてオブジェクトを配置するタイミングを人々に示します。 システム提供の指導ビューを使用して、人々がオブジェクトを配置する水平または垂直の平らな面を見つけやすくすることができます。ARKit が平らな面を検出した後、あなたのアプリはオブジェクトの配置が可能であることを示すカスタムの視覚インジケーターを表示できます。インジケーターを検出された表面の平面に合わせることで、配置されたオブジェクトが環境内でどのように見えるかを人々が理解できるように支援できます。
アプリ特有のインジケーター
人々がオブジェクトを配置したら、すぐにそのオブジェクトを AR 環境に統合します。 表面検出は迅速かつ漸進的に精度を向上させますが、オブジェクトを配置する前に、より正確なデータを待たないようにすることをお勧めします。利用可能な情報を使用して、人々がオブジェクトを配置したときに即座に応答します。次に、表面検出が完了したら、必要に応じてオブジェクトの位置を微調整します。たとえば、検出された表面の境界を越えてオブジェクトを配置した場合は、オブジェクトを表面上にそっと押し戻します。オブジェクトの位置を調整するための開発者向けガイダンスについては、ARTrackedRaycast (ARTrackedRaycast) を参照してください。
スクリーン外の仮想オブジェクトに人を誘導することを検討してください。 画面外にあるオブジェクトを人々は見つけるのが難しい場合があります。この場合、視覚的または聴覚的な合図を提供することで、人々がそのようなオブジェクトを見つけるのを支援することができます。たとえば、オブジェクトがスクリーン外の左にある場合、スクリーンの左端に沿ってインジケータを表示して、人々がカメラをその方向に向けるように誘導できます。
オブジェクトを、検出された表面の端に正確に合わせようとすることは避けてください。 AR では、表面の境界は近似値であり、人々の周囲がさらに分析されるにつれて変化します。
平面分類情報を組み込み、オブジェクトの配置を知らせます。 たとえば、人々は「床」として分類された平面にのみ仮想家具を配置できるようにしたり、仮想ゲームボードを配置するために平面を「テーブル」として分類する必要があります。
直感的で楽しいオブジェクト操作の設計
可能であれば、直接操作を使用して人々がオブジェクトを操作できるようにします。 人々がスクリーンのスペースで間接的なコントロールを使用するよりも、スクリーン上の 3D オブジェクトに直接触れることで操作できる方が、より没入感があり、直感的です。ただし、人々があなたのアプリを使用しながら動き回る状況では、間接的なコントロールの方がうまく機能します。
直接操作
間接操作
標準的な、使い慣れたジェスチャーを使用して、人々が仮想オブジェクトを直接操作できるようにします。 たとえば、オブジェクトを移動するための 1 本指のドラッグジェスチャーと、オブジェクトを回転させるための 2 本指の回転ジェスチャーをサポートすることを検討してください。ガイダンスについては、タッチスクリーンジェスチャー を参照してください。
一般的に、操作はシンプルに保ちます。
タッチジェスチャーは本質的に 2 次元ですが、AR 体験には 3 次元の現実世界が含まれます。ユーザーによる仮想オブジェクトの操作を簡素化するには、以下のアプローチを検討してください。オブジェクトが置かれている 2 次元表面への動きを制限。
オブジェクトの回転を 1 つの軸に制限。
操作可能な仮想オブジェクトの妥当な範囲内でジェスチャに応答します。 小さい、薄い、または離れた場所にあるオブジェクトの特定のポイントに触れることを目指す場合、正確に当てるのは難しい場合があります。あなたのアプリが操作型オブジェクトの近くでジェスチャーを検出した場合、通常は、人々がそのオブジェクトに影響を与えたいと想定するのが最善です。
あなたのアプリで意味がある場合は、ユーザーが開始したオブジェクトの拡大縮小をサポートします。 たとえば、人々が架空の環境を探索できるアプリの場合、あなたのアプリは現実世界を表現する必要がないため、オブジェクトの拡大縮小をサポートすることはおそらく意味があります。一方、あなたのアプリが買い物客が購入する家具を決定するのを支援する場合、人々が椅子のオブジェクトを拡大縮小できるようにしても、椅子が部屋でどのように見えるかを視覚化するのに役立ちません。
ヒント
あなたのアプリの目的に関係なく、オブジェクトの距離を調整する方法としてスケールを使用しないでください。近くに見えるように遠くのオブジェクトを拡大すると、結果として、遠くに見えるオブジェクトが大きくなります。
競合する可能性のあるジェスチャーには注意してください。 たとえば、2 本指のピンチジェスチャーは、2 本指の回転ジェスチャーに似ています。このような 2 つの類似したジェスチャーを実装する場合は、必ずあなたのアプリをテストして、正しく解釈されることを確認してください。
あなたのアプリの AR 環境の物理特性と一致する仮想オブジェクトの動きを目指してください。 人々は必ずしもオブジェクトが粗い表面やでこぼこした表面を滑らかに動くことを期待しているわけではありませんが、オブジェクトが動いている間も物体が見え続けることを期待しています。オブジェクトを現実世界の表面に取り付けたまま動かし続けることを目指し、人々がオブジェクトのサイズ変更、回転、または移動するのに合わせて、オブジェクトがジャンプしたり、消えたり、再表示されたりしないようにします。
さらに魅力的な操作法を探ります。 AR で仮想オブジェクトを操作する方法は、ジェスチャーだけではありません。あなたのアプリでは、動きや近接などの他の要因を使用して、コンテンツに命を吹き込むことができます。たとえば、ゲームのキャラクターは、人に向かって歩いているときに、頭を回して人を見ることができます。
優れたマルチユーザー体験の設計
複数の人々があなたのアプリの AR 体験を共有している場合、各参加者は個別に環境をマッピングし、ARKit は自動的にマップを合併します。開発者向けガイダンスについては、isCollaborationEnabled を参照してください。
人が隠れることを有効にすることを検討してください。 あなたのアプリが、デバイスのカメラフィードに表示される人々の背後に仮想オブジェクトを配置することをサポートしている場合は、人々がオブジェクトを覆い隠すことで、現実の錯覚を強化します。開発者向けガイダンスについては、人々で仮想コンテンツを隠す (Occluding Virtual Content with People) を参照してください。
可能であれば、新しい参加者がマルチユーザー AR 体験に入れるようにします。 あなたのアプリで体験の開始前にすべての参加者が参加する必要がある場合を除き、暗黙的なマップの合併を使用して、新しい人々が進行中の AR 体験にすばやく参加できるように検討してください。開発者向けガイダンスについては、isCollaborationEnabled を参照してください。
実世界のオブジェクトへの反応
実世界の環境で既知のイメージやオブジェクトを使用して、仮想コンテンツの外観を引き起こすことで、AR 体験を強化できます。たとえば、SF 映画の劇場ポスターを認識するアプリは、仮想宇宙船をポスターから出現させ、周囲を飛び回らせることができます。もう 1 つの例は、彫刻を認識したときにバーチャルツアーガイドを始める美術館のアプリです。このような体験を可能にするために、あなたのアプリは一連の 2D 参照画像または 3D 参照オブジェクトを提供し、ARKit は現在の環境でこれらのアイテムをいつ、どこで検出したかを示します。開発者向けガイダンスについては、AR 体験でのイメージの認識 (Detecting Images in an AR Experience) を参照してください。
検出されたイメージが最初に消えるときは、それに添付されている仮想オブジェクトの削除を遅らせることを検討してください。 ARKit は、検出された各イメージの位置や向きの変化を追跡しません。仮想オブジェクトのちらつきを防ぐには、最大 1 秒待ってからフェードアウトするか削除することを検討してください。
一度に使用する参照イメージの数を制限します。 イメージ検出のパフォーマンスは、ARKit が実世界の環境で 100 個以下の個別のイメージを探す場合に最適に機能します。100 を超える参照イメージが必要な場合は、コンテキストに基づいてアクティブな参照イメージのセットを変更できます。たとえば、博物館ガイドアプリは、位置情報サービスを使用して、人がいる博物館の部分を特定し、その領域に表示されているイメージのみを探す許可を求めます。
正確な位置を必要とする参照イメージの数を制限します。 参照イメージの位置を更新するには、より多くのリソースが必要です。イメージが環境内で動く場合、または添付されたアニメーションや仮想オブジェクトがイメージのサイズに比べて小さい場合は、追跡された画像を使用します。
人とのコミュニケーション
説明テキストを表示しなければならない場合は、親しみやすい用語を使用してください。 AR は高度な概念であり、一部の人にとっては威圧的かもしれません。親しみやすくするために、ARKit、世界の検出、追跡などの専門用語を使用するのは避けてください。代わりに、ほとんどの人が理解できる、使いやすく会話的な用語を使用してください。
使用すべき | 使用すべきでない |
表面が見つかりません。横に移動するか、携帯電話の位置を変えてみてください。 | 平面が見つかりません。追跡を調整します。 |
[配置すべきオブジェクトの名前] を配置する場所をタップして下さい。 | 平面をタップしてオブジェクトを固定します。 |
さらに照明を付けて、動き回ってみてください。 | 不十分な機能。 |
携帯電話をもっとゆっくり動かしてみてください。 | 過度の動きが検出されました。 |
3 次元のコンテキストでは、3D のヒントが望ましいです。 たとえば、オブジェクトの周りに 3D 回転インジケーターを配置すると、2D の上書きでテキストベースの指示を表示するよりも直感的になります。人々がコンテキストのヒントに応答しない場合を除き、テキストの上書きヒントを 3D コンテキストで表示することは避けてください。
3D コンテキストでは 3D ヒントが望ましいです。
必要なら、3D コンテキストで 2D ヒントを使用します。
重要なテキストを読みやすくします。 スクリーンスペースを使用して、重要なラベル、注釈、および指示に使用されるテキストを表示します。3D 空間でテキストを表示する必要がある場合は、テキストの書体、およびテキストとラベル付きオブジェクトの間の距離に関係なく、同じ文字サイズを使用していることを確認してください。
必要なら、より多くの情報を取得する方法を提供します。 あなたのアプリの体験に合った視覚的インジケーターを設計して、人々がタップして詳細情報を確認できることを示します。
中断の処理
ARKit は、人々が一時的に別のアプリに切り替えたり、電話を受けたりした場合など、中断中にデバイスの位置と向きを追跡できません。中断が終了すると、以前に配置された仮想オブジェクトが実世界の間違った位置に表示される可能性があります。再度ローカライズを有効にすると、ARKit は新しい情報を使用して、これらの仮想オブジェクトを元の実世界の位置に復元しようとします。開発者向けのガイダンスについては、セッションのライフサイクルの管理と品質の追跡 (Managing Session Life Cycle and Tracking Quality) を参照してください。
システムが提供する指導ビューを使用して、人々が再配置できるようにすることを検討してください。 再配置中は、ARKit は以前の状態と現在の環境の新しい観測結果との調整を試みます。これらの観測を可能にするために、指導ビューを使用して、人々がデバイスを以前の位置と向きに戻すのを支援できます。
再配置中に、以前に配置された仮想オブジェクトを非表示にすることを検討してください。 再配置中のちらつきやその他の不快な視覚効果を回避するには、仮想オブジェクトを非表示にして、新しい位置に再表示することをお勧めします。
あなたのアプリが AR 体験と非 AR 体験の両方をサポートしている場合は、中断を最小限に抑えます。 中断を回避する 1 つの方法は、AR 体験内に非 AR 体験を埋め込むことです。これにより、人々は AR を終了して再度入ることなくタスクを処理できます。たとえば、人々が家具を部屋に置いて購入するかどうかを決定するのにあなたのアプリが役立つ場合、AR 体験を終了せずに椅子を変更できます。
人々が再配置をキャンセルできるようにします。 人々がデバイスを中断前の場所に近づけたり方向を変えたりしない場合、再配置は成功せずに無限に続きます。セッションを再開するよう人々に指導してもうまくいかない場合は、リセット ボタンまたは AR 体験を再開するための他の方法を提供することを検討してください。
前面カメラが約 0.5 秒以上顔を追跡できない時はその事を示します。 視覚的なインジケーターを使用して、カメラが人物の顔を追跡できなくなったことを示します。このような状況でテキストによる指示を提供する必要がある場合は、最小限に抑えてください。
問題解決方法の提案
人々の期待に応えられない場合は、体験をリセットしてもらいます。
状況が改善するのを人々に待たせたり、オブジェクトの配置に苦労させたりしないでください。最初からやり直して、より良い結果が得られるかどうかを確認する方法を提供します。十分な照明
不十分な照明
問題が発生した場合の可能な修正を提案。 実世界の環境の分析と表面検出は、さまざまな理由で失敗したり、時間がかかりすぎたりします。たとえば、光が不足している、表面が過度に反射している、詳細が不十分な表面、またはカメラの動きが多すぎるなどです。あなたのアプリにこれらの問題が通知された場合は、率直で親しみやすい言葉を使用して、問題を解決するための提案を提供してください。
問題 | 可能な提案 |
不十分な機能が検出されました。 | さらに多くの照明ををオンにして、動き回ってみてください。 |
過度の動きが検出されました。 | スマートフォンをゆっくり動かしてみてください。 |
表面の検出に時間がかかりすぎます。 | 動き回ったり、照明をもっと点灯させたり、スマートフォンが十分にテクスチャーのある表面に向けられていることを確認してください。 |
AR icon
アプリは、ARKit を基礎とした体験を起動するコントロールに AR アイコンを表示できます。このアイコンは リソース からダウンロードできます。
意図したとおりに AR グリフを使用します。 グリフは、ARKit を基礎とした体験を開始するために厳密に使用する必要があります。グリフを変更したり (サイズと色を調整する以外)、他の目的に使用したり、ARKit を使用して作成されていない AR 体験と組み合わせては決して使用しないでください。
最小限の空きスペースを維持します。 AR グリフの周囲に必要なクリアスペースの最小量は、グリフの高さの 10% です。他の要素がこのスペースを侵害したり、グリフを遮ったりしないでください。
AR バッジ
製品やその他のオブジェクトのコレクションを含むアプリでは、バッジを使用して、ARKit を使い AR で表示できる特定のアイテムを識別できます。たとえば、デパートのアプリではバッジを使用して、購入前に自宅でのプレビューをできる家具をマークできます。
AR バッジを意図したとおりに使用し、変更しないでください。 折りたたまれた形と展開された形で入手できる AR バッジは、リソース からダウンロードできます。これらのイメージは、ARKit を使用して AR で表示できる製品またはその他のオブジェクトを識別するためにのみ使用してください。バッジを変更したり、色を変更したり、他の目的に使用したり、ARKit で作成されていない AR 体験と組み合わせては決して使用しないでください。
AR バッジ
グリフのみの AR バッジ
グリフのみのバッジよりも AR バッジが望ましいです。 通常、AR バッジを配置できない限られたスペースにはグリフのみのバッジを使用します。どちらのバッジも、デフォルトのサイズでうまく機能します。
AR で表示できるオブジェクトと表示できないオブジェクトがアプリに混在している場合にのみ、バッジを使用してください。 あなたのアプリ内のすべてのオブジェクトを AR で表示できる場合、バッジは冗長です。
バッジの配置を一貫して明確に保ちます。 バッジは、オブジェクトの写真の隅に表示すると最もよく見えます。常に同じ隅に配置し、はっきりと見えるように十分な大きさであることを確認してください (ただし、写真の重要な細部が隠れるほど大きくてはいけません)。
最小限のクリアスペースを維持します。 AR バッジの周囲に必要なクリアスペースの最小量は、バッジの高さの 10% です。他の要素がこのスペースを侵害したり、バッジを遮ったりしてはいけません。