Les configurations de caméra décrivent les propriétés du capteur de caméra sous-jacent d'une application. Dans Unity, ces configurations sont accessibles via XRCameraConfiguration
.
Sur la plate-forme Android, ARCore fournit XRCameraConfigurationExtensions
pour exposer d'autres propriétés spécifiques à ARCore dans XRCameraConfiguration
. Vous pouvez utiliser ces propriétés pour définir la configuration de l'appareil photo adaptée à votre application.
Propriétés de configuration étendues de l'appareil photo (Android)
Les propriétés étendues suivantes sont compatibles avec ARCore sur la plate-forme Android.
- Utilisation du capteur de profondeur
- Plage de fréquence d'images cible pour la capture de l'appareil photo
- Dimensions de la texture externe accessible par GPU
- Sens d'appareil photo
Accéder aux configurations de caméras compatibles
Utilisez ARCameraManager.GetConfigurations()
pour accéder aux configurations de caméra compatibles avec un appareil donné. Cela renvoie un NativeArray
contenant plusieurs instances de XRCameraConfiguration
. Chaque instance correspond à une configuration de caméra individuelle spécifiant des propriétés telles que la profondeur d'utilisation, la fréquence d'images cible, la résolution et les dimensions de texture.
Configurer la caméra dans la scène de votre application
Suivez ces étapes pour configurer la caméra dans l'environnement de votre application.
Utilisez
ARCameraManager
avecARCameraManager.GetConfigurations()
pour interroger la liste desXRCameraConfiguration
compatibles.Si vous compilez pour Android, utilisez n'importe quelle combinaison des fonctions de
XRCameraConfigurationExtensions
pour obtenir des propriétés spécifiques à ARCore.Utilisez
cameraManager.currentConfiguration
pour définir la configuration actuelle.
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;
}
}
Filtres de configuration de la caméra
Vous pouvez utiliser ARCoreExtensionsCameraConfigFilter
pour affiner les configurations de caméra disponibles pour un appareil donné au moment de l'exécution en les filtrant en fonction des besoins de votre application.
Limiter la fréquence d'images de capture de la caméra à 30 FPS
Si votre application n'a pas besoin d'une fréquence d'images plus rapide, vous pouvez la limiter à 30 FPS. Sur les appareils compatibles avec une fréquence d'images de caméra de 60 FPS, ARCore donnera la priorité aux configurations de caméra compatibles par défaut avec cette fréquence d'images. Pour filtrer toutes les configurations d'appareil photo compatibles avec 60 FPS, assurez-vous que Target Camera Framerate est défini sur Target 30FPS.
Empêcher ARCore d'utiliser le capteur de profondeur
Si votre application n'a pas besoin de cette fonctionnalité, vous pouvez empêcher ARCore d'utiliser le capteur de profondeur. Sur les appareils équipés d'un capteur de profondeur compatible, ARCore ARCore donne la priorité aux configurations de caméra qui utilisent ce capteur. Pour filtrer toutes les configurations de caméra qui utilisent le capteur de profondeur, assurez-vous que Depth Sensor Usage est défini sur Do Not Use.
Utiliser les filtres de configuration de l'appareil photo
Suivez ces étapes pour autoriser votre application à filtrer les configurations de caméra.
Accédez à Assets > Create > XR > Camera Config Filter pour créer un filtre de configuration de l'appareil photo.
Sélectionnez les configurations que le filtre doit utiliser.
Une fois le filtre créé, utilisez-le dans un composant ARCoreExtensions.
Configurer la caméra pendant l'exécution
Vous pouvez utiliser l'événement de rappel ARCoreExtensions.OnChooseXRCameraConfiguration
pour configurer la caméra pendant l'exécution, en fonction de facteurs tels que le type d'appareil.
// 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;
}