Đ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 thích 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)

Các thuộc tính mở rộng sau được ARCore hỗ trợ 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ị cụ thể. Thao tác này sẽ trả về một NativeArray chứa nhiều thực thể của XRCameraConfiguration. Mỗi phiên bản là một cấu hình máy ảnh riêng lẻ chỉ định các thuộc tính như chiều sâu sử dụng, tốc độ khung hình chụp mục tiêu, độ phân giải và kích thước hoạ tiết.

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

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 XRCameraConfiguration được hỗ trợ.

  2. Nếu bạn đang xây dựng cho Android, hãy sử dụng tổ hợp các hàm bất kỳ trong XRCameraConfigurationExtensions để nhận 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 máy ảnh

Bạn có thể sử 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 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 của 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 của 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 tất cả cấu hình máy ảnh hỗ trợ 60 khung hình/giây, hãy nhớ đặt Target Camera Framerate thành Target 30FPS.

Ngăn 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, thì bạn có thể ngăn ARCore sử dụng cảm biến độ sâu. Trên các thiết bị có hỗ trợ cảm biến độ sâu, ARCore 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ấu hình máy ảnh sử dụng cảm biến độ sâu, hãy đảm bảo rằng bạn đã đặt Depth Sensor Usage thành Do Not Use.

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 của bạn lọc cấu hình máy ảnh.

Hãy chuyển đến Assets > Create > XR > Camera Config Filter để tạo một bộ lọc cấu hình máy ảnh mới.

Chọn cấu hình mà bạn muốn bộ lọc của mình 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 máy ảnh 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;
}