Configurer la caméra

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.

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.

  1. Utilisez ARCameraManager avec ARCameraManager.GetConfigurations() pour interroger la liste des XRCameraConfiguration compatibles.

  2. Si vous compilez pour Android, utilisez n'importe quelle combinaison des fonctions de XRCameraConfigurationExtensions pour obtenir des propriétés spécifiques à ARCore.

  3. 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;
}