Konfiguracje kamer opisują właściwości podstawowego czujnika aparatu aplikacji. W Unity te konfiguracje są dostępne za pośrednictwem XRCameraConfiguration
.
Na platformie Android ARCore udostępnia XRCameraConfigurationExtensions
aby uwidocznić dodatkowe właściwości specyficzne dla XRCameraConfiguration
w XRCameraConfiguration
. Możesz użyć tych właściwości, aby ustawić odpowiednią konfigurację kamery dla swojej aplikacji.
Rozszerzone właściwości konfiguracji kamery (Android)
Następujące rozszerzone właściwości są obsługiwane przez ARCore na platformie Android.
- Zastosowanie czujnika głębokości
- Zakres dla docelowej liczby klatek na sekundę przechwytywania przez kamerę
- Wymiary zewnętrznej tekstury dostępnej dla GPU
- Kierunek kamery
Uzyskaj dostęp do obsługiwanych konfiguracji kamer
Użyj ARCameraManager.GetConfigurations()
aby uzyskać dostęp do obsługiwanych konfiguracji kamer dla danego urządzenia. Zwraca NativeArray
zawierający wiele wystąpień XRCameraConfiguration
. Każde wystąpienie to indywidualna konfiguracja kamery określająca właściwości, takie jak użycie głębi, docelowa liczba klatek na sekundę, rozdzielczość i wymiary tekstury.
Skonfiguruj kamerę w scenie aplikacji
Wykonaj poniższe czynności, aby skonfigurować kamerę w scenie aplikacji.
Użyj
ARCameraManager
zARCameraManager.GetConfigurations()
aby zapytać o listę obsługiwanychXRCameraConfiguration
.Jeśli tworzysz dla systemu Android, użyj dowolnej kombinacji funkcji w
XRCameraConfigurationExtensions
aby uzyskać właściwości specyficzne dla ARCore.Użyj
cameraManager.currentConfiguration
aby ustawić bieżącą konfigurację.
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;
}
}
Filtry konfiguracji aparatu
Możesz użyć ARCoreExtensionsCameraConfigFilter
aby zawęzić dostępne konfiguracje kamer dla danego urządzenia w czasie wykonywania, filtrując je na podstawie potrzeb aplikacji.
Ogranicz liczbę klatek na sekundę do 30 klatek na sekundę
Jeśli Twoja aplikacja nie potrzebuje większej liczby klatek na sekundę aparatu, możesz ograniczyć ją do 30 kl./s. Na urządzeniach obsługujących częstotliwość odświeżania 60 klatek na sekundę, ARCore nada priorytet konfiguracjom kamer, które domyślnie obsługują tę liczbę klatek na sekundę. Aby odfiltrować wszystkie konfiguracje kamer obsługujące 60 kl./s, upewnij się, że docelowa liczba klatek na sekundę jest ustawiona na Docelowa liczba kl./s .
Zapobiegaj używaniu przez ARCore czujnika głębokości
Jeśli Twoja aplikacja nie wymaga funkcji Depth, możesz uniemożliwić ARCore korzystanie z czujnika głębokości. Na urządzeniach, które mają obsługiwany czujnik głębokości, ARCore ARCore nadaje priorytet konfiguracjom kamer, które używają czujnika głębokości. Aby odfiltrować wszystkie konfiguracje kamer, które używają czujnika głębokości, upewnij się, że opcja Użycie czujnika głębokości jest ustawiona na Nie używaj .
Użyj filtrów konfiguracji kamery
Wykonaj poniższe czynności, aby umożliwić aplikacji filtrowanie konfiguracji kamer.
Przejdź do Zasoby > Utwórz > Rozszerzenia ARCore > Filtr konfiguracji kamery, aby utworzyć nowy filtr konfiguracji kamery.
Wybierz konfiguracje, których ma używać filtr.
Po utworzeniu filtru użyj go w komponencie ARCoreExtensions .
Skonfiguruj kamerę podczas działania
Możesz użyć zdarzenia wywołania zwrotnego ARCoreExtensions.OnChooseXRCameraConfiguration
aby skonfigurować kamerę w czasie wykonywania, na podstawie takich czynników, jak typ urządzenia.
// 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;
}