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

O app pode recuperar informações de profundidade pelo ARCore para Jetpack XR para determinar a distância entre objetos físicos e o dispositivo.

Criar uma sessão do ARCore para Jetpack XR

Receba informações de profundidade por uma do ARCore para Jetpack XR Session. Se você estiver aprimorando 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 está ativada por padrão nas sessões XR. Para ativar a recuperação do mapa de profundidade, configure a sessão e defina um 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. */)
}

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 suaves de profundidade e confiança.
  • SMOOTH_AND_RAW: a estimativa de profundidade é ativada com valores brutos e suaves de profundidade e confiança.

Os mapas de profundidade brutos fornecem estimativas de profundidade com maior precisão, mas as imagens de profundidade bruta podem não incluir estimativas de profundidade para todos os pixels na imagem da câmera. Em contraste, os mapas de profundidade suaves 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 diferentes. 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 câmera singular 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 DepthMap:

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

Calcular valores de profundidade

É possível receber valores de profundidade e 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.