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