使用 Jetpack XR 的 ARCore 在應用程式中擷取深度資訊

適用的 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
XR 頭戴式裝置
有線 XR 眼鏡

應用程式可透過 ARCore for Jetpack XR 擷取深度資訊,判斷實體物體與裝置的距離。

建立 Jetpack XR 的 ARCore 工作階段

透過 ARCore for Jetpack XR Session 取得深度資訊。如果您使用適用於 XR 的 Jetpack Compose 強化空間 UI,請從適用於 XR 的 Jetpack Compose 存取工作階段。如果您使用 Jetpack SceneCore 程式庫的空間化實體,請從 Jetpack XR 執行階段存取工作階段

設定工作階段

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:啟用深度估算功能,並提供原始和平滑深度與信賴度值。

原始深度圖可提供準確度較高的深度估計值,但原始深度影像可能不會包含相機影像中所有像素的深度估計值。相較之下,平滑深度圖會提供每個像素的估計深度,但由於深度估計值經過平滑處理和插補,因此每個像素的深度資料可能較不準確。

檢查深度地圖功能

不同裝置的功能各異。採用立體攝影機設定的裝置可能會提供左右攝影機的深度估計地圖。同樣地,單一攝影機裝置只能提供單一攝影機的深度估算地圖。

如要查看裝置支援哪些深度地圖,請使用 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)
}

視使用的設定而定,使用 smoothDepthMaprawDepthMap 存取對應的深度地圖。這些地圖中的測量結果以公尺為單位。您也可以使用 smoothConfidenceMaprawConfidenceMap 存取信賴度值。這些值的範圍介於 0 至 255 之間,255 代表最高信賴度。

如要為了偵錯或視覺化目的算繪深度地圖,請參閱 ARCore 測試應用程式的深度部分