プラットフォーム固有のガイド
Android(Kotlin/Java)
Android NDK(C)
Unity(AR Foundation)
Unreal Engine
AR アプリのデベロッパーは、ユーザーに仮想と現実をシームレスに融合させた体験を提供したいと考えています。ユーザーは、シーンに仮想オブジェクトを配置するときに、そのオブジェクトが現実世界に存在するように見せたいと考えます。ユーザーが家具を買い物するためのアプリを開発する場合、購入しようとしているアームチェアが自分の部屋に収まるかどうかをユーザーが確信できるようにする必要があります。
Depth API は、デバイスのカメラがシーン内の実際のオブジェクトのサイズと形状を認識できるようにします。深度画像(深度マップ)を作成することで、アプリにリアリティを追加できます。深度画像で提供される情報を使用して、臨場感のあるリアルなユーザー エクスペリエンスを実現します。
Depth API を使用した開発のユースケース
Depth API を使用すると、オブジェクトのオクルージョン、没入感の向上、新しいインタラクションによって、AR エクスペリエンスのリアリティを高めることができます。次に、独自のプロジェクトで使用できる方法をいくつか示します。深度データの使用例については、ARCore Depth Lab のサンプルシーンをご覧ください。深度データにアクセスするさまざまな方法が示されています。この Unity アプリは GitHub でオープンソースとして公開されています。
オクルージョンを有効にする
オクルージョン(現実世界のオブジェクトの背後に仮想オブジェクトを正確にレンダリングすること)は、没入型の AR エクスペリエンスにとって非常に重要です。ドアの横にトランクが置かれているシーンにユーザーが配置する仮想アンディについて考えてみましょう。オクルージョンなしでレンダリングすると、アンディはトランクの端に重なり合います。シーンの深度を使用して、木の幹などの周囲の物体に対してバーチャル アンディがどの程度離れているかを把握すると、オクルージョンを使用してアンディを正確にレンダリングし、周囲の環境に溶け込ませることができます。
シーンを変換する
仮想の雪片をレンダリングしてソファの肘掛けや枕に降らせたり、リビングルームに霧を降らせたりすることで、ユーザーを没入感のある新しい世界に誘い込みます。深度を使用して、仮想ライトが実在のオブジェクトと相互作用し、その背後に隠れて再照明するシーンを作成できます。
被写界距離と被写界深度
何かが遠くにあることを示す必要がある場合は、距離測定を使用して、Depth API で被写界深度のエフェクトを追加し、シーンの背景や前景をぼかすことができます。
AR オブジェクトでユーザーによる操作を可能にする
仮想コンテンツが衝突や物理学を通じて現実世界と対話できるようにすることで、ユーザーがアプリを通じて世界に「触れる」ことを可能にします。仮想オブジェクトを現実世界の障害物にぶつからせたり、仮想のペイントボールを現実世界の木にぶつけて飛び散らせたりできます。深度に基づく衝突とゲーム物理を組み合わせることで、臨場感あふれるエクスペリエンスを実現できます。
ヒットテストを改善する
深度を使用して、ヒットテストの結果を改善できます。平面ヒットテストはテクスチャのある平面サーフェスでのみ機能しますが、深度ヒットテストはより詳細で、平面ではない領域やテクスチャが少ない領域でも機能します。これは、深度ヒットテストがシーンの深度情報を使用して、ポイントの正しい深度と向きを決定するためです。
次の例では、緑色の Andy は標準のプレーン ヒットテストを表し、赤色の Andy は深度ヒットテストを表します。
デバイスの互換性
Depth API は、深度をサポートする処理能力を持つデバイスでのみサポートされます。また、深度を有効にするで説明されているように、ARCore で手動で有効にする必要があります。
デバイスによっては、飛行時間(ToF)センサーなどのハードウェア深度センサーが搭載されていることもあります。Depth API をサポートするデバイスの最新リストや、サポートされているハードウェア深度センサー(ToF センサーなど)を搭載したデバイスの一覧については、ARCore 対応デバイスのページをご覧ください。
奥行き画像
Depth API は、動きからの深度アルゴリズムを使用して深度画像を作成し、周囲の 3D ビューを取得します。奥行き画像の各ピクセルは、カメラからシーンまでの距離の測定値に関連付けられます。このアルゴリズムは、さまざまな角度から撮影した複数のデバイス画像を比較して、ユーザーがスマートフォンを動かすたびに各ピクセルの距離を推定します。機械学習を適切に使用することで、ユーザーの動きが最小限の場合でも深度処理を強化します。また、ユーザーのデバイスが追加で持っているハードウェアも活用します。デバイスに ToF などの専用の深度センサーが搭載されている場合、アルゴリズムは利用可能なすべてのソースからデータを自動的に統合します。これにより、既存の深度画像が補正され、カメラが動いていなくても深度を取得できるようになります。また、白壁など特徴が少ない表面や、動いている人物や物体がある動的なシーンでも、奥行きをより深く表現できます。
次の画像は、壁に自転車が置かれている廊下のカメラ画像と、カメラ画像から作成された奥行き画像を可視化したものです。赤い領域はカメラに近い領域で、青い領域は遠い領域です。
モーションによる奥行き
ユーザーがデバイスを動かすと、深度データが利用可能になります。このアルゴリズムでは、0 ~ 65 メートル離れた場所の深度を正確に推定できます。最も正確な結果を得るには、デバイスを現実のシーンの 0.5 m ~ 5 m の距離に置きます。ユーザーにデバイスを多く動かしたくなるようなエクスペリエンスは、より良い結果をもたらします。
深度画像を取得する
Depth API を使用すると、すべてのカメラ フレームに一致する深度画像を取得できます。取得された深度画像には、カメラと同じタイムスタンプと視野の固有情報が含まれます。有効な深度データは、ユーザーがデバイスを動かし始めた後にのみ取得できます。これは、深度はモーションから取得されるためです。白い壁など、対象物がほとんどまたはまったくない表面は、奥行きが不正確に関連付けられます。
次のステップ
- ARCore Depth Lab で、深度データにアクセスするさまざまな方法を確認する。