ARCore for Jetpack XR を使用してアプリで深度情報を取得する

対応する XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
[
XR Headsets
]
有線 XR グラス

アプリは ARCore for Jetpack XR を介して深度情報を取得し、物理オブジェクトがデバイスにどの程度近いかを判断できます。

ARCore for Jetpack XR セッションを作成する

ARCore for Jetpack XR Session を使用して深度情報を取得します。Jetpack Compose for XR を使用して 空間 UI を強化する場合は、Jetpack Compose for XR から セッションにアクセスします。Jetpack SceneCore ライブラリの 空間化されたエンティティを使用する場合は、Jetpack XR Runtime から セッションにアクセスします

セッションを構成する

XR セッションでは、デフォルトで深度マップの取得は有効になっていません。深度マップの取得を有効にするには、セッションを構成して DepthEstimationModeを設定します。

val newConfig = session.config.copy(
    depthEstimation = DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

DepthEstimationMode には次の値を使用できます。

  • DISABLED: シーンの深度に関する情報は提供されません。
  • RAW_ONLY: 生の深度と信頼値を使用して深度推定が有効になります。
  • SMOOTH_ONLY: スムージングされた深度と信頼値を使用して深度推定が有効になります。
  • SMOOTH_AND_RAW: 生の深度とスムージングされた深度の両方と信頼値を使用して深度推定が有効になります。

生の深度マップは、より正確な深度推定を提供しますが、生の深度画像には、カメラ画像のすべてのピクセルの深度推定が含まれていない場合があります。一方、スムージングされた深度マップは、すべてのピクセルの推定深度を提供しますが、深度推定のスムージングと補間により、ピクセルごとの深度データの精度が低下する可能性があります。

深度マップの機能を確認する

デバイスによって capabilities が異なります。ステレオ カメラ構成のデバイスでは、左右のカメラの深度推定マップが提供される場合があります。同様に、単一のカメラを搭載したデバイスでは、モノラル カメラの深度推定マップのみを提供できます。

デバイスでサポートされている深度マップを確認するには、XrDevice.isRenderingModeSupported を使用します。

val xrDevice = XrDevice.getCurrentDevice(context)
val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO)
val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)

深度データを取得する

特定のカメラの深度データを取得するには、DepthMap を使用します。

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

深度値を計算する

結果の深度マップから深度値と信頼値を取得できます。

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

使用する構成設定に応じて、smoothDepthMap または rawDepthMap を使用して対応する深度マップにアクセスします。これらのマップに含まれる測定値はメートル単位で表されます。smoothConfidenceMaprawConfidenceMap を使用して信頼値にアクセスすることもできます。これらの値の範囲は 0 ~ 255 で、255 は最も高い信頼度を表します。

デバッグまたは可視化のために深度マップをレンダリングするには、ARCore テストアプリの深度をご覧ください