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 des propriétés supplémentaires spécifiques à ARCore dans XRCameraConfiguration. Vous pouvez utiliser ces propriétés pour configurer la configuration d'appareil photo appropriée pour votre application.

Propriétés de configuration de l'appareil photo étendues (Android)

Les propriétés étendues suivantes sont compatibles avec ARCore sur la plate-forme Android.

Accéder aux configurations de caméra compatibles

Utilisez ARCameraManager.GetConfigurations() pour accéder aux configurations d'appareil photo compatibles pour un appareil donné. Cela renvoie un NativeArray contenant plusieurs instances de XRCameraConfiguration. Chaque instance est une configuration de caméra individuelle qui spécifie des propriétés telles que l'utilisation de la profondeur, la fréquence d'images de capture 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 la scène de votre application.

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

  2. Si vous créez une application 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 filtrant en fonction des besoins de votre application.

Limiter la fréquence d'images de la capture de l'appareil photo à 30 FPS

Si votre application n'a pas besoin d'une fréquence d'images plus élevée pour la caméra, vous pouvez la limiter à 30 FPS. Sur les appareils compatibles avec une fréquence d'images de 60 FPS, ARCore priorise les configurations de caméra compatibles avec cette fréquence d'images par défaut. Pour filtrer toutes les configurations de caméra 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 la profondeur, vous pouvez empêcher ARCore d'utiliser le capteur de profondeur. Sur les appareils équipés d'un capteur de profondeur compatible, ARCore donne la priorité aux configurations d'appareil photo qui utilisent le capteur de profondeur. 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 permettre à votre application de 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 votre 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;
}