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.
- Utilisation du capteur de profondeur
- Plage de fréquence d'images cible de la capture de l'appareil photo
- Dimensions de la texture externe accessible au GPU
- Orientation de la caméra
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.
Utilisez
ARCameraManager
avecARCameraManager.GetConfigurations()
pour interroger la liste desXRCameraConfiguration
compatibles.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.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;
}