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 configurare la configurazione della videocamera appropriata per la tua app.
Proprietà di configurazione della fotocamera estese (Android)
Le seguenti proprietà estese sono supportate da ARCore sulla piattaforma Android.
- Utilizzo del sensore di profondità
- Intervallo per la frequenza fotogrammi di acquisizione della videocamera target
- Le dimensioni della texture esterna accessibile alla GPU
- Direzione di orientamento della fotocamera
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.
Configurare la videocamera nella scena dell'app
Segui questi passaggi per configurare la videocamera nella scena dell'app.
Utilizza
ARCameraManager
conARCameraManager.GetConfigurations()
per eseguire query sull'elenco deiXRCameraConfiguration
supportati.Se stai creando un progetto per Android, utilizza una combinazione qualsiasi delle funzioni in
XRCameraConfigurationExtensions
per ottenere proprietà specifiche di ARCore.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 utilizzare 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 con un sensore di profondità supportato, ARCore dà 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;
}