Mengonfigurasi kamera

Konfigurasi kamera menjelaskan properti sensor kamera yang mendasari aplikasi. Di Unity, konfigurasi ini dapat diakses melalui XRCameraConfiguration.

Di platform Android, ARCore menyediakan XRCameraConfigurationExtensions untuk mengekspos properti khusus ARCore tambahan dalam XRCameraConfiguration. Anda dapat menggunakan properti ini untuk menyiapkan konfigurasi kamera yang sesuai untuk aplikasi Anda.

Properti konfigurasi kamera yang diperluas (Android)

Properti yang diperluas berikut didukung oleh ARCore di platform Android.

Mengakses konfigurasi kamera yang didukung

Gunakan ARCameraManager.GetConfigurations() untuk mengakses konfigurasi kamera yang didukung untuk perangkat tertentu. Tindakan ini menampilkan NativeArray yang berisi beberapa instance XRCameraConfiguration. Setiap instance adalah konfigurasi kamera individual yang menentukan properti seperti penggunaan kedalaman, kecepatan frame pengambilan target, resolusi, dan dimensi tekstur.

Mengonfigurasi kamera di scene aplikasi

Ikuti langkah-langkah berikut untuk mengonfigurasi kamera di scene aplikasi Anda.

  1. Gunakan ARCameraManager dengan ARCameraManager.GetConfigurations() untuk membuat kueri daftar XRCameraConfiguration yang didukung.

  2. Jika Anda mem-build untuk Android, gunakan kombinasi fungsi apa pun di XRCameraConfigurationExtensions untuk mendapatkan properti khusus ARCore.

  3. Gunakan cameraManager.currentConfiguration untuk menetapkan konfigurasi saat ini.

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;
    }
}

Filter konfigurasi kamera

Anda dapat menggunakan ARCoreExtensionsCameraConfigFilter untuk mempersempit konfigurasi kamera yang tersedia untuk perangkat tertentu pada runtime dengan memfilter berdasarkan kebutuhan aplikasi Anda.

Batasi kecepatan frame pengambilan kamera hingga 30 FPS

Jika aplikasi Anda tidak memerlukan kecepatan frame kamera yang lebih cepat, Anda dapat membatasinya hingga 30 FPS. Pada perangkat yang mendukung kecepatan frame kamera 60 FPS, ARCore akan memprioritaskan konfigurasi kamera yang mendukung kecepatan frame tersebut secara default. Untuk memfilter semua konfigurasi kamera yang mendukung 60 FPS, pastikan Target Camera Framerate disetel ke Target 30FPS.

Cegah ARCore menggunakan sensor kedalaman

Jika aplikasi Anda tidak memerlukan Depth, Anda dapat mencegah ARCore menggunakan sensor kedalaman. Pada perangkat yang memiliki sensor kedalaman yang didukung, ARCore ARCore memprioritaskan konfigurasi kamera yang menggunakan sensor kedalaman. Untuk memfilter semua konfigurasi kamera yang menggunakan sensor kedalaman, pastikan Depth Sensor Usage disetel ke Do Not Use.

Menggunakan filter konfigurasi kamera

Ikuti langkah-langkah berikut untuk mengaktifkan aplikasi Anda untuk memfilter konfigurasi kamera.

Buka Assets > Create > XR > Camera Config Filter untuk membuat filter konfigurasi kamera baru.

Pilih konfigurasi yang ingin digunakan oleh filter Anda.

Setelah Anda membuat filter, gunakan filter tersebut dalam komponen ARCoreExtensions.

Mengonfigurasi kamera selama runtime

Anda dapat menggunakan peristiwa callback ARCoreExtensions.OnChooseXRCameraConfiguration untuk mengonfigurasi kamera selama runtime, berdasarkan faktor seperti jenis perangkat.

// 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;
}