پیکربندی دوربین

پیکربندی‌های دوربین ویژگی‌های حسگر دوربین زیرین یک برنامه را توصیف می‌کنند. در Unity، این تنظیمات از طریق XRCameraConfiguration قابل دسترسی هستند.

در پلتفرم Android، ARCore XRCameraConfigurationExtensions را برای نمایش ویژگی‌های خاص ARCore در XRCameraConfiguration ارائه می‌کند. می توانید از این ویژگی ها برای تنظیم پیکربندی دوربین مناسب برای برنامه خود استفاده کنید.

ویژگی های پیکربندی گسترده دوربین (اندروید)

ویژگی های توسعه یافته زیر توسط ARCore در پلتفرم اندروید پشتیبانی می شوند.

به تنظیمات دوربین پشتیبانی شده دسترسی داشته باشید

از ARCameraManager.GetConfigurations() برای دسترسی به تنظیمات دوربین پشتیبانی شده برای یک دستگاه خاص استفاده کنید. این یک NativeArray حاوی چندین نمونه از XRCameraConfiguration را برمی گرداند. هر نمونه یک پیکربندی دوربین جداگانه است که ویژگی‌هایی مانند میزان استفاده از عمق، نرخ فریم عکسبرداری هدف، وضوح و ابعاد بافت را مشخص می‌کند.

دوربین را در صحنه برنامه خود پیکربندی کنید

این مراحل را برای پیکربندی دوربین در صحنه برنامه خود دنبال کنید.

  1. از ARCameraManager با ARCameraManager.GetConfigurations() برای پرس و جو لیست XRCameraConfiguration های پشتیبانی شده استفاده کنید.

  2. اگر برای اندروید می‌سازید، از هر ترکیبی از توابع موجود در XRCameraConfigurationExtensions برای دریافت ویژگی‌های خاص ARCore استفاده کنید.

  3. برای تنظیم پیکربندی فعلی از 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 برای محدود کردن تنظیمات دوربین موجود برای یک دستگاه خاص در زمان اجرا با فیلتر کردن بر اساس نیازهای برنامه خود استفاده کنید.

نرخ فریم عکسبرداری دوربین را به 30 فریم در ثانیه محدود کنید

اگر برنامه شما به نرخ فریم دوربین سریعتر نیاز ندارد، می توانید آن را به 30 فریم در ثانیه محدود کنید. در دستگاه‌هایی که از نرخ فریم دوربین 60 FPS پشتیبانی می‌کنند، ARCore پیکربندی‌های دوربینی را که به طور پیش‌فرض از این نرخ فریم پشتیبانی می‌کنند، اولویت‌بندی می‌کند. برای فیلتر کردن تمام تنظیمات دوربینی که از 60 فریم در ثانیه پشتیبانی می کنند، مطمئن شوید که Target Camera Framerate روی Target 30FPS تنظیم شده است.

از استفاده ARCore از حسگر عمق جلوگیری کنید

اگر برنامه شما به عمق نیاز ندارد، می‌توانید 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;
}