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

対象となる XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス

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

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

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

セッションを構成する

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

val newConfig = Config.Builder(session.config)
    .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY)
    .build()
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: 深度推定は、未加工深度と平滑化深度、信頼値の両方で有効になります。

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

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

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

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

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

深度データを取得する

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

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

深度値を計算する

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

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

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

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