奥行きがあるとリアルさが増す

プラットフォーム固有のガイド

AR アプリ デベロッパーであれば、ユーザーが仮想世界と現実世界をシームレスに融合させたいと考えるでしょう。ユーザーが仮想オブジェクトをシーンに配置するとき、そのオブジェクトが現実世界に存在しているように見せたいものです。家具を購入するためのアプリを構築する場合、ユーザーが購入しようとしているアームチェアが自分の部屋に合うかどうかを確信できるようにしたいでしょう。

Depth API を使用すると、デバイスのカメラでシーン内の現実のオブジェクトのサイズと形状を把握できます。深度画像(深度マップ)を作成することで、アプリにリアリズムのレイヤを追加できます。深度画像で提供される情報を使用して、臨場感のあるリアルなユーザー エクスペリエンスを実現できます。

Depth API を使用した開発のユースケース

Depth API を使用すると、オブジェクトのオクルージョン、没入感の向上、AR エクスペリエンスのリアリズムを高める新しいインタラクションを実現できます。独自のプロジェクトで Depth API を使用する方法をいくつかご紹介します。Depth の実際の動作については、ARCore Depth Lab のサンプル シーンをご覧ください。ここでは、深度データにアクセスするさまざまな方法が示されています。この Unity アプリは GitHub でオープンソースとして公開されています。

オクルージョンを有効にする

オクルージョン(仮想オブジェクトを現実世界のオブジェクトの背後に正確にレンダリングすること)は、臨場感のある AR エクスペリエンスを実現するうえで非常に重要です。たとえば、ユーザーがドアの横にあるトランクを含むシーンに仮想のアンディを配置したいとします。オクルージョンなしでレンダリングすると、アンディはトランクの端と不自然に重なります。シーンの奥行きを使用して、仮想のアンディが木製のトランクなどの周囲の環境からどのくらい離れているかを把握すると、オクルージョンを使用してアンディを正確にレンダリングし、周囲の環境でよりリアルに見せることができます。

シーンを変換する

仮想の雪片をソファのアームや枕に降らせたり、リビングルームを霧で覆ったりして、ユーザーを新しい没入型の世界に連れて行きましょう。Depth を使用すると、仮想ライトが現実のオブジェクトとインタラクトしたり、現実のオブジェクトの背後に隠れたり、現実のオブジェクトを再点灯させたりするシーンを作成できます。

距離と被写界深度

何かを遠くに見せたい場合は、距離測定を使用して、Depth API でシーンの背景や前景をぼかすなどの被写界深度効果を追加できます。

AR オブジェクトとのユーザー インタラクションを有効にする

衝突と物理演算によって仮想コンテンツが現実世界とインタラクトできるようにすることで、ユーザーがアプリを通じて世界に「触れる」ことができるようにします。仮想オブジェクトが現実世界の障害物を乗り越えたり、仮想のペイントボールが現実世界の木に当たって飛び散ったりするようにします。深度ベースの衝突とゲームの物理演算を組み合わせると、エクスペリエンスを生き生きとさせることができます。

ヒットテストを改善する

Depth を使用して、ヒットテストの結果を改善できます。平面ヒットテストはテクスチャのある平面でのみ機能しますが、深度ヒットテストはより詳細で、平面でない領域やテクスチャの少ない領域でも機能します。これは、深度ヒットテストではシーンの深度情報を使用して、ポイントの正しい深度と向きを判断するためです。

次の例では、緑色のアンディは標準の平面ヒットテストを表し、赤色のアンディは深度ヒットテストを表しています。

デバイスの互換性

Depth API は、深度をサポートする処理能力を備えたデバイスでのみサポートされます。また、深度を有効にする で説明されているように、ARCore で手動で有効にする必要があります。

一部のデバイスには、飛行時間(ToF)センサーなどのハードウェア深度センサーが搭載されている場合があります。Depth API をサポートするデバイスの最新リストと、ToF センサーなどのサポートされているハードウェア深度センサーを搭載したデバイスのリストについては、ARCore 対応デバイスのページをご覧ください。

奥行き画像

Depth API は、モーションから深度を推定するアルゴリズムを使用して深度画像を作成し、世界の 3D ビューを提供します。深度画像の各ピクセルは、シーンからカメラまでの距離の測定値に関連付けられています。このアルゴリズムは、さまざまな角度から複数のデバイス画像を取得し、それらを比較して、ユーザーがスマートフォンを動かすときに各ピクセルまでの距離を推定します。機械学習を選択的に使用して、ユーザーの動きが最小限であっても深度処理を向上させます。また、ユーザーのデバイスに追加のハードウェアが搭載されている場合は、それも活用します。デバイスに ToF などの専用の深度センサーが搭載されている場合、アルゴリズムは利用可能なすべてのソースのデータを自動的に統合します。これにより、既存の深度画像が強化され、カメラが動いていない場合でも深度が有効になります。また、白いウォールなど、特徴が少ない、またはないサーフェスや、人やオブジェクトが動くダイナミックなシーンでも、より正確な奥行きが得られます。

次の画像は、壁に自転車が置かれた廊下のカメラ画像と、カメラ画像から作成された深度画像の可視化を示しています。赤い領域はカメラに近く、青い領域は遠くなります。

モーションからの深度

ユーザーがデバイスを動かすと、深度データが利用可能になります。このアルゴリズムでは、0 ~ 65 メートルの範囲で堅牢で正確な深度推定値を取得できます。最も正確な結果が得られるのは、デバイスが現実世界のシーンから 0.5 メートルから 5 メートル離れている場合です。ユーザーがデバイスをより多く動かすように促すエクスペリエンスでは、より良い結果が得られます。

深度画像を取得する

Depth API を使用すると、すべてのカメラフレームに一致する深度画像を取得できます。取得した深度画像のタイムスタンプと画角の内部パラメータは、カメラと同じです。深度はモーションから取得されるため、有効な深度データは、ユーザーがデバイスを動かし始めてからのみ使用できます。白い壁など、特徴が少ない、またはない表面は、不正確な奥行きに関連付けられます。

次のステップ

  • ARCore Depth Lab をご覧ください。ここでは、深度データにアクセスするさまざまな方法が示されています。