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 ulteriori proprietà specifiche di ARCore all'interno di XRCameraConfiguration. Puoi utilizzare queste proprietà per impostare la configurazione della videocamera appropriata per la tua app.

Proprietà di configurazione della videocamera estese (Android)

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

Accedi alle configurazioni delle videocamere supportate

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

Configura la videocamera nella scena della tua app

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

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

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

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

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 fotocamera

Puoi utilizzare ARCoreExtensionsCameraConfigFilter per restringere le configurazioni della fotocamera disponibili per un determinato dispositivo in fase di runtime filtrando in base alle esigenze della tua app.

Limita la frequenza fotogrammi dell'acquisizione della fotocamera a 30 f/s

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

Impedire ad ARCore di utilizzare il sensore di profondità

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

Utilizzare i filtri di configurazione della fotocamera

Segui questi passaggi per consentire alla tua 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 che vengano utilizzate dal filtro.

Una volta creato il filtro, utilizzalo in un componente ARCoreExtensions.

Configura la videocamera in fase di runtime

Puoi utilizzare l'evento di callback ARCoreExtensions.OnChooseXRCameraConfiguration per configurare la videocamera in fase di runtime, 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;
}