הגדרות המצלמה מתארות את המאפיינים של חיישן המצלמה הבסיסי של האפליקציה. ב-Unity, אפשר לגשת להגדרות האלה דרך XRCameraConfiguration
.
בפלטפורמת Android, ARCore מספק את XRCameraConfigurationExtensions
כדי לחשוף נכסים נוספים ספציפיים ל-ARCore בתוך XRCameraConfiguration
. אפשר להשתמש במאפיינים האלו כדי לקבוע את ההגדרות המתאימות של המצלמה לאפליקציה שלכם.
מאפיינים של תצורת מצלמה מורחבת (Android)
ARCore תומך במאפיינים המורחבים הבאים בפלטפורמת Android.
- שימוש בחיישן עומק
- הטווח של קצב הפריימים של הצילום במצלמת היעד
- המימדים של הטקסטורה החיצונית ש-GPU יכול לגשת אליה
- כיוון המצלמה
גישה להגדרות המצלמה הנתמכות
משתמשים ב-ARCameraManager.GetConfigurations()
כדי לגשת להגדרות המצלמה הנתמכות במכשיר נתון. הפונקציה מחזירה NativeArray
שמכיל כמה מכונות של XRCameraConfiguration
. כל מכונה היא הגדרה ספציפית של מצלמה, שמציינת מאפיינים כמו שימוש בעומק, יעד קצב הפריימים לצילום, רזולוציה ומאפייני מרקם.
הגדרת המצלמה בסצנה של האפליקציה
כדי להגדיר את המצלמה בסצנה של האפליקציה, פועלים לפי השלבים הבאים:
משתמשים ב-
ARCameraManager
עםARCameraManager.GetConfigurations()
כדי לשלוח שאילתה על רשימת ה-XRCameraConfiguration
הנתמכים.אם אתם מפתחים ל-Android, תוכלו להשתמש בכל שילוב של הפונקציות ב-
XRCameraConfigurationExtensions
כדי לקבל מאפיינים ספציפיים ל-ARCore.משתמשים ב-
cameraManager.currentConfiguration
כדי להגדיר את ההגדרה הנוכחית.
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;
}
}
מסננים להגדרת המצלמה
אפשר להשתמש ב-ARCoreExtensionsCameraConfigFilter
כדי לצמצם את הגדרות המצלמה הזמינות במכשיר נתון בזמן הריצה, על ידי סינון על סמך הצרכים של האפליקציה.
הגבלת קצב הפריימים של צילום המצלמה ל-30FPS
אם לא צריך קצב פריימים מהיר יותר במצלמה של האפליקציה, אפשר להגביל אותו ל-30FPS. במכשירים שתומכים בקצב פריימים של 60FPS, כברירת מחדל, ARCore תעדיף הגדרות מצלמה שתומכות בקצב הפריימים הזה. כדי לסנן את כל הגדרות המצלמה שתומכות ב-60FPS, צריך לוודא שהערך של Target Camera Framerate מוגדר ל-Target 30FPS.
מניעת השימוש של חיישן העומק ב-ARCore
אם באפליקציה לא נדרשת עומק, אפשר למנוע מ-ARCore להשתמש בחיישן העומק. במכשירים עם חיישן עומק נתמך, ARCore נותנת עדיפות להגדרות מצלמה שמשתמשות בחיישן העומק. כדי לסנן את כל הגדרות המצלמה שמשתמשות בחיישן העומק, צריך לוודא שהערך של Depth Sensor Usage מוגדר ל-Do Not Use.
שימוש בפילטרים בהגדרות המצלמה
כדי לאפשר לאפליקציה לסנן הגדרות של המצלמה, מבצעים את הפעולות הבאות.
עוברים אל Assets > Create > XR > Camera Config Filter כדי ליצור מסנן חדש להגדרות המצלמה.
בוחרים את ההגדרות שבהן רוצים להשתמש במסנן.
אחרי שיוצרים את המסנן, משתמשים בו ברכיב ARCoreExtensions.
הגדרת המצלמה במהלך סביבת זמן הריצה
אפשר להשתמש באירוע הקריאה החוזרת ARCoreExtensions.OnChooseXRCameraConfiguration
כדי להגדיר את המצלמה במהלך זמן הריצה, על סמך גורמים כמו סוג המכשיר.
// 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;
}