Las configuraciones de cámara describen las propiedades del sensor de 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 la cámara adecuada para tu app.
Propiedades de configuración extendidas de la cámara (Android)
Las siguientes propiedades extendidas son compatibles con ARCore en la plataforma de Android.
- Uso del sensor de profundidad
- Rango para la velocidad de fotogramas de captura de la cámara de destino
- Las dimensiones de la textura externa a la que se puede acceder por la GPU
- Dirección de la cámara
Cómo acceder a las configuraciones de cámara compatibles
Usa ARCameraManager.GetConfigurations()
para acceder a las configuraciones de cámara compatibles con un dispositivo determinado. Esto muestra un NativeArray
que contiene varias instancias de XRCameraConfiguration
. Cada instancia es una configuración individual de la cámara que especifica propiedades como el uso de profundidad, la velocidad de fotogramas de la captura objetivo, la resolución y las dimensiones de la textura.
Cómo configurar la cámara en el ambiente de tu app
Sigue estos pasos para configurar la cámara en el ambiente de tu app.
Usa
ARCameraManager
conARCameraManager.GetConfigurations()
para consultar la lista deXRCameraConfiguration
compatibles.Si estás compilando para Android, usa cualquier combinación de las funciones en
XRCameraConfigurationExtensions
a fin de 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 opciones de configuración de la cámara disponibles para un dispositivo determinado durante el tiempo de ejecución mediante el filtrado 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 la cámara de 60 FPS, ARCore priorizará los parámetros de configuración de la cámara que admitan esa velocidad de fotogramas de forma predeterminada. Para filtrar todas las configuraciones de la cámara que admitan 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 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é establecido en Do Not Use.
Cómo usar los 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 los archivos de configuración 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;
}