Đang định cấu hình máy ảnh

Cấu hình máy ảnh mô tả các thuộc tính của cảm biến máy ảnh cơ bản trong ứng dụng. Trong Unity, bạn có thể truy cập vào các cấu hình này thông qua XRCameraConfiguration.

Trên nền tảng Android, ARCore cung cấp XRCameraConfigurationExtensions để hiển thị thêm các thuộc tính dành riêng cho ARCore trong XRCameraConfiguration. Bạn có thể sử dụng các thuộc tính này để thiết lập cấu hình máy ảnh phù hợp cho ứng dụng của mình.

Thuộc tính cấu hình máy ảnh mở rộng (Android)

ARCore hỗ trợ các thuộc tính mở rộng sau đây trên nền tảng Android.

Truy cập vào các cấu hình máy ảnh được hỗ trợ

Sử dụng ARCameraManager.GetConfigurations() để truy cập vào các cấu hình máy ảnh được hỗ trợ cho một thiết bị nhất định. Thao tác này sẽ trả về một NativeArray chứa nhiều thực thể của XRCameraConfiguration. Mỗi thực thể là một cấu hình máy ảnh riêng lẻ chỉ định các thuộc tính như mức sử dụng độ sâu, tốc độ khung hình chụp mục tiêu, độ phân giải và kích thước kết cấu.

Định cấu hình máy ảnh trong cảnh của ứng dụng

Hãy làm theo các bước sau để định cấu hình máy ảnh trong cảnh của ứng dụng.

  1. Sử dụng ARCameraManager với ARCameraManager.GetConfigurations() để truy vấn danh sách các XRCameraConfiguration được hỗ trợ.

  2. Nếu bạn đang xây dựng cho Android, hãy sử dụng mọi tổ hợp hàm trong XRCameraConfigurationExtensions để tải các thuộc tính dành riêng cho ARCore.

  3. Sử dụng cameraManager.currentConfiguration để đặt cấu hình hiện tại.

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

Bộ lọc cấu hình camera

Bạn có thể dùng ARCoreExtensionsCameraConfigFilter để thu hẹp các cấu hình máy ảnh có sẵn cho một thiết bị nhất định trong thời gian chạy bằng cách lọc dựa trên nhu cầu của ứng dụng.

Giới hạn tốc độ khung hình chụp ảnh của máy ảnh ở mức 30 khung hình/giây

Nếu ứng dụng của bạn không cần tốc độ khung hình máy ảnh nhanh hơn, bạn có thể giới hạn tốc độ khung hình ở mức 30 khung hình/giây. Trên các thiết bị hỗ trợ tốc độ khung hình máy ảnh 60 khung hình/giây, ARCore sẽ ưu tiên các cấu hình máy ảnh hỗ trợ tốc độ khung hình đó theo mặc định. Để lọc ra mọi cấu hình máy ảnh hỗ trợ 60 khung hình/giây, hãy đảm bảo rằng Target Camera Framerate được đặt thành Target 30FPS.

Không cho ARCore sử dụng cảm biến độ sâu

Nếu ứng dụng của bạn không yêu cầu Độ sâu, bạn có thể ngăn ARCore sử dụng cảm biến độ sâu. Trên các thiết bị có cảm biến độ sâu được hỗ trợ, ARCore sẽ ưu tiên các cấu hình máy ảnh sử dụng cảm biến độ sâu. Để lọc ra tất cả các cấu hình máy ảnh sử dụng cảm biến độ sâu, hãy đảm bảo rằng Depth Sensor Usage được đặt thành Do Not Use.

Sử dụng bộ lọc cấu hình máy ảnh

Hãy làm theo các bước sau để cho phép ứng dụng lọc cấu hình máy ảnh.

Chuyển đến Assets > Create > XR > Camera Config Filter để tạo bộ lọc cấu hình camera mới.

Chọn cấu hình mà bạn muốn bộ lọc sử dụng.

Sau khi tạo bộ lọc, hãy sử dụng bộ lọc đó trong thành phần ARCoreExtensions.

Định cấu hình camera trong thời gian chạy

Bạn có thể sử dụng sự kiện gọi lại ARCoreExtensions.OnChooseXRCameraConfiguration để định cấu hình máy ảnh trong thời gian chạy, dựa trên các yếu tố như loại thiết bị.

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