Configurazione della fotocamera

Le configurazioni della videocamera descrivono le proprietà del sensore della videocamera sottostante di un'app. In Unity, queste configurazioni sono accessibili tramite XRCameraConfiguration.

Sulla piattaforma Android, ARCore fornisce XRCameraConfigurationExtensions per esporre proprietà aggiuntive specifiche di ARCore all'interno XRCameraConfiguration. Puoi utilizzare queste proprietà per impostare la configurazione appropriata della videocamera per la tua app.

Proprietà di configurazione estesa della videocamera (Android)

Le seguenti proprietà estese sono supportate da ARCore sulla piattaforma Android.

Accedere alle configurazioni della videocamera supportate

Usa ARCameraManager.GetConfigurations() per accedere alle configurazioni della videocamera supportate per un determinato dispositivo. Viene restituito un NativeArray contenente più istanze di XRCameraConfiguration. Ogni istanza è una singola configurazione della videocamera che specifica proprietà come utilizzo della profondità, frequenza fotogrammi di acquisizione target, risoluzione e dimensioni delle texture.

Configura la videocamera nella scena dell'app

Segui questi passaggi per configurare la videocamera nella scena dell'app.

  1. Utilizza ARCameraManager con ARCameraManager.GetConfigurations() per eseguire query sull'elenco dei XRCameraConfiguration supportati.

  2. Se stai creando un progetto per Android, utilizza una combinazione qualsiasi delle funzioni in XRCameraConfigurationExtensions per ottenere proprietà specifiche di ARCore.

  3. Utilizza cameraManager.currentConfiguration per impostare la configurazione corrente.

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

Filtri di configurazione della videocamera

Puoi utilizzare ARCoreExtensionsCameraConfigFilter per restringere le configurazioni della videocamera disponibili per un determinato dispositivo in fase di esecuzione applicando un filtro in base alle esigenze della tua app.

Limita la frequenza fotogrammi di acquisizione della fotocamera a 30 FPS

Se la tua app non ha bisogno di una frequenza frame della videocamera più elevata, puoi limitarla a 30 FPS. Sui dispositivi che supportano una frequenza fotogrammi della fotocamera di 60 FPS, ARCore darà la priorità alle configurazioni della fotocamera che supportano questa frequenza fotogrammi per impostazione predefinita. Per filtrare tutte le configurazioni della fotocamera che supportano 60 FPS, assicurati che Target Camera Framerate sia impostato su Target 30FPS.

Impedire ad ARCore di usare il sensore di profondità

Se la tua app non richiede la funzionalità Profondità, puoi impedire ad ARCore di utilizzare il sensore di profondità. Sui dispositivi che dispongono di un sensore di profondità supportato, ARCore ARCore assegna la priorità alle configurazioni della fotocamera che utilizzano il sensore di profondità. Per filtrare tutte le configurazioni della videocamera che utilizzano il sensore di profondità, assicurati che Depth Sensor Usage sia impostato su Do Not Use.

Utilizzare i filtri di configurazione della fotocamera

Per consentire all'app di filtrare le configurazioni della videocamera:

Vai a Assets > Create > XR > Camera Config Filter per creare un nuovo filtro di configurazione della videocamera.

Seleziona le configurazioni che vuoi utilizzare per il filtro.

Dopo aver creato il filtro, utilizzalo in un componente ARCoreExtensions.

Configurare la videocamera durante il runtime

Puoi utilizzare l'evento di callback ARCoreExtensions.OnChooseXRCameraConfiguration per configurare la videocamera durante l'esecuzione, in base a fattori come il tipo di 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;
}