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

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

AR アプリのデベロッパーとして、仮想環境と実際の画面とをシームレスに融合したエクスペリエンスをユーザーに提供したいと考えています。ユーザーは、シーンに仮想オブジェクトを配置したときに、それが現実の世界に属しているかのように見せかけたいと考えています。家具を購入するためのアプリを作成する場合は、購入しようとしているアームチェアが自分の部屋に収まっているという安心感を与えることが大切です。

Depth API により、デバイスのカメラはシーン内の実際のオブジェクトのサイズと形状を認識できます。奥行きのある画像(奥行きマップ)を作成して、アプリにリアルなレイヤを追加します。奥行きのある画像で提供される情報を使用して、没入感のあるリアルなユーザー エクスペリエンスを実現できます。

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

Depth API は、オブジェクト オクルージョン、没入感の向上、斬新なインタラクションを強化し、AR エクスペリエンスのリアルさを高めます。ご自分のプロジェクトでこの修飾子を使用する方法をいくつか紹介します。Depth の実例については、ARCore Depth Lab のサンプルシーンをご覧ください。深度データにアクセスするさまざまな方法について説明しています。この Unity アプリは GitHub のオープンソースです。

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

オクルージョン(現実世界のオブジェクトの背後にある仮想オブジェクトを正確にレンダリング)は、臨場感あふれる AR 体験にとって最も重要です。ドアの横にあるトランクがあるシーンにユーザーが配置したいと思われる仮想の Andy を例に考えます。オクルージョンなしでレンダリングされると、アンディは体幹の端と非現実的に重なってしまいます。シーンの深度を使用して、仮想の Andy が木製の幹などの周囲からの距離を把握することで、オクルージョンを使用して Andy を正確にレンダリングし、周囲の状況によりリアルに見せることができます。

シーンを変換する

仮想の雪片をレンダリングしてソファの腕や枕の上に落ち着いたり、霧に包まれたリビングルームをキャストしたりすることで、没入感のある新しい世界にユーザーを誘導することができます。[Depth] を使用すると、仮想ライトが相互に作用し、背後に隠れたり、現実の物体に再点灯したりできるシーンを作成できます。

距離と被写界深度

遠くにあることをアピールしたい場合は、Depth API を使用すると、距離測定を使用して被写界深度の効果(シーンの背景や前景をぼかすなど)を追加できます。

AR オブジェクトに対するユーザー操作を有効にする

ユーザーがアプリを通じて世界と「触れる」ことができるようにして、仮想コンテンツが衝突や物理学を介して実世界と関わるようにします。仮想オブジェクトを使って現実世界の障害物を乗り越えたり、バーチャル ペイントボールで木にぶつかったりと跳ね返ったりすることができます。奥行きベースの衝突とゲーム物理を組み合わせると、臨場感のある体験ができます。

ヒットテストの改善

Depth はヒットテストの結果の改善に使用できます。プレーンのヒットテストはテクスチャのある平らなサーフェスでのみ機能しますが、深度ヒットテストはより詳細で、平面以外のエリアや低テクスチャの領域でも機能します。これは、深度ヒットテストではシーンからの深度情報を使用して、ポイントの正しい深度と向きを決定するためです。

次の例では、緑色の Andy は標準プレーン ヒットテストを表し、赤い Andy はデプス ヒットテストを表します。

デバイスの互換性

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

デバイスによっては、Time-of-Flight(ToF)センサーなどのハードウェア深度センサーを搭載している場合もあります。Depth API をサポートするデバイスの最新リストと、サポートされているハードウェア深度センサー(ToF センサーなど)を備えたデバイスのリストについては、ARCore 対応デバイスのページをご覧ください。

奥行きのある画像

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

次の画像は、壁に自転車が置かれた廊下のカメラ画像と、カメラ画像から作成した奥行き画像を可視化したものです。赤で示した領域はカメラに近い領域、青い領域はそれよりも遠くにある領域です。

動きによる深度

深度データは、ユーザーがデバイスを動かすと利用可能になります。このアルゴリズムは、0 ~ 65 m 離れた場所でも堅牢で正確な深度を推定できます。最も正確な結果は、デバイスが実際のシーンから 0.5 m から約 5 m 離れたときに得られます。ユーザーがデバイスをより動かすことができれば、エクスペリエンスは向上し、より良い結果が得られます。

深度画像を取得する

Depth API を使用すると、すべてのカメラフレームに一致する深度画像を取得できます。取得した深度画像には、カメラと同じタイムスタンプと画角の組み込み値があります。深度は動きから取得されるため、有効な深度データはユーザーがデバイスを動き回し始めた後でのみ使用できます。白い壁など、対象物がほとんどまたはまったくない表面では、深さが不正確になります。

次のステップ

  • ARCore Depth Lab をご確認ください。深度データにアクセスするさまざまな方法を解説しています。