הגדרות המצלמה מתארות את המאפיינים של חיישן המצלמה הבסיסי של האפליקציה. ב-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;
}