Las configuraciones de la cámara describen las propiedades del sensor de la cámara subyacente de una app. En Unity, se puede acceder a estas configuraciones a través de XRCameraConfiguration
.
En la plataforma de Android, ARCore proporciona XRCameraConfigurationExtensions
para exponer propiedades adicionales específicas de ARCore dentro de XRCameraConfiguration
. Puedes usar estas propiedades para definir la configuración de cámara adecuada para tu app.
Propiedades de configuración de cámara extendidas (Android)
ARCore admite las siguientes propiedades extendidas en la plataforma de Android.
- Uso del sensor de profundidad
- Rango para la velocidad de fotogramas de captura de la cámara objetivo
- Las dimensiones de la textura externa a la que se puede acceder desde la GPU
- Dirección de la cámara
Accede a las configuraciones de cámara compatibles
Usa ARCameraManager.GetConfigurations()
para acceder a las configuraciones de cámara compatibles de un dispositivo determinado. Esto muestra un NativeArray
que contiene varias instancias de XRCameraConfiguration
. Cada instancia es una configuración de cámara individual que especifica propiedades como el uso de profundidad, la velocidad de fotogramas de captura objetivo, la resolución y las dimensiones de la textura.
Configura la cámara en el ambiente de tu app
Sigue estos pasos para configurar la cámara en la escena de tu app.
Usa
ARCameraManager
conARCameraManager.GetConfigurations()
para consultar la lista deXRCameraConfiguration
compatibles.Si compilas para Android, usa cualquier combinación de las funciones de
XRCameraConfigurationExtensions
para obtener propiedades específicas de ARCore.Usa
cameraManager.currentConfiguration
para establecer la configuración actual.
using UnityEngine.XR.ARFoundation;
// Adds XRCameraConfigurationExtensions extension methods to XRCameraConfiguration.
// This is for the Android platform only.
using Google.XR.ARCoreExtensions;
// Must be set in the editor.
public ARCameraManager cameraManager;
// Use ARCameraManager to obtain the camera configurations.
using (NativeArray<XRCameraConfiguration> configurations = cameraManager.GetConfigurations(Allocator.Temp))
{
if (!configurations.IsCreated || (configurations.Length <= 0))
{
return;
}
// Iterate through the list of returned configs to locate the config you want.
var desiredConfig = configurations[0];
for (int i = 1; i < configurations.Length; ++i)
{
// Choose a config for a given camera that uses the maximum
// target FPS and texture dimension. If supported, this config also enables
// the depth sensor.
if (configurations[i].GetFPSRange().y > desiredConfig.GetFPSRange().y &&
configurations[i].GetTextureDimensions().x > desiredConfig.GetTextureDimensions().x &&
configurations[i].GetTextureDimensions().y > desiredConfig.GetTextureDimensions().y &&
configurations[i].CameraConfigDepthSensorUsage() == CameraConfigDepthSensorUsage.RequireAndUse)
{
desiredConfig = configurations[i];
}
}
// Set the configuration you want. If it succeeds, the session
// automatically pauses and resumes to apply the new configuration.
// If it fails, cameraManager.currentConfiguration throws an exception.
if (desiredConfig != cameraManager.currentConfiguration)
{
cameraManager.currentConfiguration = desiredConfig;
}
}
Filtros de configuración de la cámara
Puedes usar ARCoreExtensionsCameraConfigFilter
para reducir las configuraciones de cámara disponibles para un dispositivo determinado en el tiempo de ejecución filtrando según las necesidades de tu app.
Limita la velocidad de fotogramas de captura de la cámara a 30 FPS
Si tu app no necesita una velocidad de fotogramas de la cámara más rápida, puedes limitarla a 30 FPS. En los dispositivos que admiten una velocidad de fotogramas de 60 FPS, ARCore priorizará las configuraciones de cámara que admitan esa velocidad de fotogramas de forma predeterminada. Para filtrar todas las opciones de configuración de la cámara que admiten 60 FPS, asegúrate de que Target Camera Framerate esté establecido en Target 30FPS.
Evita que ARCore use el sensor de profundidad
Si tu app no requiere profundidad, puedes evitar que ARCore use el sensor de profundidad. En los dispositivos que tienen un sensor de profundidad compatible, ARCore ARCore prioriza las configuraciones de la cámara que usan el sensor de profundidad. Para filtrar todas las configuraciones de la cámara que usan el sensor de profundidad, asegúrate de que Depth Sensor Usage esté configurado como Do Not Use.
Usa filtros de configuración de la cámara
Sigue estos pasos para permitir que tu app filtre los parámetros de configuración de la cámara.
Ve a Assets > Create > XR > Camera Config Filter para crear un nuevo filtro de configuración de la cámara.
Selecciona las configuraciones que deseas que use tu filtro.
Una vez que hayas creado el filtro, úsalo en un componente ARCoreExtensions.
Cómo configurar la cámara durante el tiempo de ejecución
Puedes usar el evento de devolución de llamada ARCoreExtensions.OnChooseXRCameraConfiguration
para configurar la cámara durante el tiempo de ejecución, según factores como el tipo de dispositivo.
// Unity's Awake() method
public void Awake()
{
…
// If the return value is not a valid index (ex. the value if -1),
// then no camera configuration will be set. If no previous selection exists,
// the ARCore session will use the previously selected camera configuration
// or a default configuration.
arcoreExtensions.OnChooseXRCameraConfiguration = SelectCameraConfiguration;
…
}
// A custom camera configuration selection function
int SelectCameraConfiguration(List<XRCameraConfiguration> supportedConfigurations)
{
int index = 0;
// Use custom logic here to choose the desired configuration from supportedConfigurations.
return index;
}