アプリは ARCore for Jetpack XR を通じて深度情報を取得し、物理オブジェクトがデバイスにどれだけ近いかを判断できます。
ARCore for Jetpack XR セッションを作成する
Jetpack XR の ARCore Session を通じて深度情報を取得します。Jetpack Compose for XR を使用して空間 UI を拡張する場合は、Jetpack Compose for XR からセッションにアクセスします。Jetpack SceneCore ライブラリの空間化されたエンティティを使用している場合は、Jetpack XR Runtime からセッションにアクセスします。
セッションを構成する
XR セッションでは、深度マップの取得はデフォルトで有効になっていません。デプスマップの取得を有効にするには、セッションを構成して DepthEstimationMode を設定します。
val newConfig = session.config.copy( depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
DepthEstimationMode には次の値を使用できます。
DISABLED: シーンの奥行きに関する情報は提供されません。RAW_ONLY: 生の奥行きと信頼値で奥行き推定が有効になっています。SMOOTH_ONLY: スムーズな奥行きと信頼値で奥行き推定が有効になっています。SMOOTH_AND_RAW: 生の深度値と平滑化された深度値の両方と信頼値を使用して、深度推定が有効になっています。
生深度マップは、より高い精度で深度推定を提供しますが、生深度画像には、カメラ画像のすべてのピクセルの深度推定が含まれていない場合があります。一方、スムーズな深度マップでは、すべてのピクセルの推定深度が提供されますが、深度推定のスムージングと補間により、ピクセル単位の深度データの精度が低下する可能性があります。
深度データを取得する
特定のカメラの深度データを取得するには、DepthMap を使用します。
val depthMap = DepthMap.left(session) ?: return
デバイスによって機能が異なります。ステレオ カメラ構成のデバイスは、left カメラと right カメラの null 以外の深度マップを返します。同様に、単一のカメラを搭載したデバイスは、mono を使用して null 以外の深度マップを返します。
深度値を計算する
生成された深度マップから、深度値と信頼値を取得できます。
val depthMap = DepthMap.left(session) ?: return
使用する構成設定に応じて、smoothDepthMap または rawDepthMap を使用して対応する深度マップにアクセスします。これらのマップに含まれる測定値はメートルで表されます。smoothConfidenceMap と rawConfidenceMap を使用して信頼値にアクセスすることもできます。これらの値の範囲は 0 ~ 255 で、255 は信頼度が最も高いことを表します。
デバッグまたは可視化のために深度マップをレンダリングするには、ARCore テストアプリの深度部分をご覧ください。