A API ARCore Depth agora oferece suporte a Geospatial Depth, que aumenta automaticamente o alcance e a velocidade da API Depth quando o Streetscape Geometry também está ativado. Em um local com cobertura VPS e com Streetscape Geometry ativado, as imagens de saída da API Depth incluem a geometria do terreno e da construção recuperada na área a 65 metros da posição atual. Esses dados de profundidade recuperados da geometria são mesclados com observações de profundidade locais e atualizados à medida que o usuário se move para um novo local.
As chamadas da API Depth do ARCore agora fornecem observações locais da câmera, além de edifícios e terrenos do Streetscape Geometry, mesclados em uma única imagem de profundidade.
Compatibilidade do dispositivo
O Geospatial Depth está disponível em todos os dispositivos com suporte à API Depth. Esse recurso não requer um sensor de profundidade de hardware compatível, como um sensor de tempo de voo (ToF, na sigla em inglês). No entanto, a API Depth usa todos os sensores de hardware compatíveis que um dispositivo possa ter.
Impacto no desempenho
O Geospatial Depth apresenta um pequeno cálculo único no início da sessão para integrar Streetscape Geometry à representação de profundidade quando transferido inicialmente, mas não aumenta consideravelmente o custo da computação de profundidade.
Faixa de profundidade
Sem o recurso Geospatial Depth, os intervalos típicos de imagens de profundidade ficam a cerca de 20 a 30 metros de distância, com a densidade e a precisão das observações de profundidade reduzidas além desse intervalo. Com a opção "Geospatial Depth" ativada, é comum ver valores de profundidade de amostragem densa atingirem o máximo de 65,535 metros, mesmo com um pouco de movimento inicial.
Casos de uso
A API Depth do ARCore pode ser usada para todos os casos de uso atuais já compatíveis. Com o Geospatial Depth, as imagens de profundidade obtidas em locais com suporte a VPS serão preenchidas com profundidade de longo alcance mais rapidamente do que antes, permitindo casos de uso direcionados a profundidades de longo alcance em ambientes externos. Alguns casos de uso incluem:
- Oclusão de conteúdo virtual em escala de edifícios e outros efeitos visuais
- Navegação ao ar livre
- Medições de distâncias
Limitações
O recurso Geospatial Depth é compatível apenas com áreas que aceitam localização de VPS e Streetscape Geometry. Em outras áreas, a API Depth do ARCore vai funcionar normalmente sem valores geoespaciais.
Pré-requisitos
Entenda os conceitos fundamentais de RA. e como configurar uma sessão do ARCore antes de continuar.
Ativar profundidade geoespacial
Em uma nova sessão do ARCore, Verifique se o dispositivo do usuário é compatível com as APIs Depth e Geospatial. Nem todos os dispositivos compatíveis com ARCore têm suporte à API Depth devido a restrições de capacidade de processamento.
Para economizar recursos, a profundidade é desativada por padrão no ARCore. Ative o modo de profundidade para que o app use a API Depth. Além disso, ative o modo Geospatial e Streetscape Geometry para use o Geospatial Depth.
Config config = session.getConfig();
// Check whether the user's device supports the Depth API.
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
boolean isGeospatialSupported =
session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED);
if (isDepthSupported && isGeospatialSupported) {
// These three settings are needed to use Geospatial Depth.
config.setDepthMode(Config.DepthMode.AUTOMATIC);
config.setGeospatialMode(Config.GeospatialMode.ENABLED);
config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
}
session.configure(config);
val config = session.config
// Check whether the user's device supports the Depth API.
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
if (isDepthSupported && isGeospatialSupported) {
// These three settings are needed to use Geospatial Depth.
config.depthMode = Config.DepthMode.AUTOMATIC
config.geospatialMode = Config.GeospatialMode.ENABLED
config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
session.configure(config)
Quando o recurso Geospatial Depth está ativado, as imagens de profundidade podem ser acessadas nas chamadas de API existentes, conforme descrito no guia para desenvolvedores do recurso.
// Retrieve the depth image for the current frame, if available.
Image depthImage = null;
try {
depthImage = frame.acquireDepthImage16Bits();
// Use the depth image here.
} catch (NotYetAvailableException e) {
// This means that depth data is not available yet.
// Depth data will not be available if there are no tracked
// feature points. This can happen when there is no motion, or when the
// camera loses its ability to track objects in the surrounding
// environment.
} finally {
if (depthImage != null) {
depthImage.close();
}
}
// Retrieve the depth image for the current frame, if available.
try {
frame.acquireDepthImage16Bits().use { depthImage ->
// Use the depth image here.
}
} catch (e: NotYetAvailableException) {
// This means that depth data is not available yet.
// Depth data will not be available if there are no tracked
// feature points. This can happen when there is no motion, or when the
// camera loses its ability to track objects in the surrounding
// environment.
}
O que vem em seguida?
- Aprenda a usar o Streetscape Geometry na sua experiência de realidade aumentada.
- Aprenda a criar seu próprio app com o Geospatial Depth no codelab Scene Semantics e Geospatial Depth.