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.
- Cách sử dụng cảm biến độ sâu
- Dải tốc độ khung hình chụp mục tiêu của máy ảnh
- Kích thước của hoạ tiết bên ngoài mà GPU có thể truy cập
- Hướng mặt trước của máy ảnh
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.
Sử dụng
ARCameraManager
vớiARCameraManager.GetConfigurations()
để truy vấn danh sách cácXRCameraConfiguration
được hỗ trợ.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.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;
}