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.