Recuperar informações de profundidade no seu app com o ARCore para Jetpack XR

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Headsets XR
Óculos XR com fio

Seu app pode recuperar informações de profundidade pelo ARCore para Jetpack XR para determinar a proximidade de objetos físicos do dispositivo.

Criar uma sessão do ARCore para Jetpack XR

Receba informações de profundidade usando um Session do ARCore para Jetpack XR. Se você estiver melhorando a interface espacial usando o Jetpack Compose para XR, acesse uma sessão do Jetpack Compose para XR. Se você estiver trabalhando com entidades espacializadas da biblioteca Jetpack SceneCore, acesse uma sessão do Jetpack XR Runtime.

Configurar a sessão

A recuperação do mapa de profundidade não é ativada por padrão nas sessões de XR. Para ativar a recuperação do mapa de profundidade, configure a sessão e defina um 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. */)
}

Os seguintes valores de DepthEstimationMode estão disponíveis:

  • DISABLED: nenhuma informação sobre a profundidade da cena é fornecida.
  • RAW_ONLY: a estimativa de profundidade é ativada com valores brutos de profundidade e confiança.
  • SMOOTH_ONLY: a estimativa de profundidade é ativada com valores de profundidade e confiança suaves.
  • SMOOTH_AND_RAW: a estimativa de profundidade é ativada com valores de profundidade e nível de confiança brutos e suaves.

Os mapas de profundidade brutos fornecem estimativas de profundidade com maior precisão, mas as imagens de profundidade brutas podem não incluir estimativas de profundidade para todos os pixels na imagem da câmera. Por outro lado, os mapas de profundidade suave fornecem profundidade estimada para cada pixel, mas os dados de profundidade por pixel podem ser menos precisos devido à suavização e interpolação das estimativas de profundidade.

Verificar os recursos do mapa de profundidade

Dispositivos diferentes têm recursos distintos. Dispositivos com uma configuração de câmera estéreo podem fornecer mapas de estimativa de profundidade para as câmeras esquerda e direita. Da mesma forma, dispositivos com uma única câmera só podem fornecer mapas de estimativa de profundidade para a câmera mono.

Para verificar quais mapas de profundidade são compatíveis com o dispositivo, use XrDevice.isRenderingModeSupported:

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

Recuperar dados de profundidade

Para receber dados de profundidade de uma determinada câmera, use Depth:

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

Calcular valores de profundidade

É possível receber valores de profundidade e níveis de confiança do mapa de profundidade resultante:

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

Dependendo da configuração usada, acesse o mapa de profundidade correspondente usando smoothDepthMap ou rawDepthMap. As medições contidas nesses mapas são expressas em metros. Também é possível acessar os valores de confiança usando smoothConfidenceMap e rawConfidenceMap. Esses valores variam de 0 a 255, em que 255 representa a maior confiança.

Para renderizar um mapa de profundidade para fins de depuração ou visualização, consulte a parte de profundidade do app de teste do ARCore.