Jetpack XR için ARCore ile uygulamanızda derinlik bilgilerini alma

Uygun XR cihazlar
Bu kılavuz, bu tür XR cihazlar için deneyimler geliştirmenize yardımcı olur.
XR Kulaklığı
Kablolu XR Gözlükleri

Uygulamanız, fiziksel nesnelerin cihaza ne kadar yakın olduğunu belirlemek için Jetpack XR için ARCore aracılığıyla derinlik bilgilerini alabilir.

Jetpack XR için ARCore oturumu oluşturma

Jetpack XR için ARCore aracılığıyla derinlik bilgisi alma Session. XR için Jetpack Compose'u kullanarak uzamsal kullanıcı arayüzünü geliştiriyorsanız XR için Jetpack Compose'dan bir oturuma erişin. Jetpack SceneCore kitaplığındaki uzamsallaştırılmış varlıklarla çalışıyorsanız Jetpack XR Runtime'dan bir oturuma erişin.

Oturumu yapılandırma

Derinlik haritası alma özelliği, XR oturumlarında varsayılan olarak etkin değildir. Derinlik haritası almayı etkinleştirmek için oturumu yapılandırın ve bir DepthEstimationMode ayarlayın:

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 için aşağıdaki değerler kullanılabilir:

  • DISABLED: Sahne derinliğiyle ilgili bilgi verilmez.
  • RAW_ONLY: Derinlik tahmini, ham derinlik ve güven değerleriyle etkinleştirilir.
  • SMOOTH_ONLY: Derinlik tahmini, düzgün derinlik ve güven değerleriyle etkinleştirilir.
  • SMOOTH_AND_RAW: Derinlik tahmini, hem ham hem de düzgün derinlik ve güven değerleriyle etkinleştirilir.

Ham derinlik haritaları, daha yüksek doğrulukla derinlik tahminleri sağlar ancak ham derinlik görüntüleri, kamera görüntüsündeki tüm pikseller için derinlik tahminleri içermeyebilir. Buna karşılık, düzgünleştirilmiş derinlik haritaları her piksel için tahmini derinlik sağlar ancak derinlik tahminlerinin düzgünleştirilmesi ve interpolasyonu nedeniyle piksel başına derinlik verileri daha az doğru olabilir.

Derinlik haritası özelliklerini kontrol etme

Farklı cihazların farklı özellikleri vardır. Stereo kamera yapılandırmasına sahip cihazlar, sol ve sağ kameralar için derinlik tahmini haritaları sağlayabilir. Benzer şekilde, tek kamerası olan cihazlar yalnızca mono kamera için derinlik tahmin haritaları sağlayabilir.

Cihazın hangi derinlik haritalarını desteklediğini kontrol etmek için XrDevice.isRenderingModeSupported kullanın:

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

Derinlik verilerini alma

Belirli bir kameranın derinlik verilerini almak için Depth yöntemini kullanın:

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

Derinlik değerlerini hesaplama

Elde edilen derinlik haritasından derinlik ve güven değerlerini alabilirsiniz:

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

Kullanılan yapılandırma ayarına bağlı olarak, smoothDepthMap veya rawDepthMap kullanarak ilgili derinlik haritasına erişin. Bu haritalardaki ölçümler metre cinsinden ifade edilir. Güven değerlerine smoothConfidenceMap ve rawConfidenceMap kullanarak da erişebilirsiniz. Bu değerler 0 ile 255 arasında değişir. 255, en yüksek güveni temsil eder.

Hata ayıklama veya görselleştirme amacıyla derinlik haritası oluşturmak için ARCore test uygulamasının derinlik bölümüne bakın.