카메라 구성은 앱의 기본 카메라 센서 속성을 설명합니다. Unity에서는 XRCameraConfiguration
를 통해 이러한 구성에 액세스할 수 있습니다.
Android 플랫폼에서 ARCore는 XRCameraConfiguration
내에 추가 ARCore 관련 속성을 노출하기 위한 XRCameraConfigurationExtensions
를 제공합니다. 이러한 속성을 사용하여 앱에 적절한 카메라 구성을 설정할 수 있습니다.
확장 카메라 구성 속성 (Android)
다음 확장 속성은 Android 플랫폼에서 ARCore에 의해 지원됩니다.
지원되는 카메라 구성에 액세스
ARCameraManager.GetConfigurations()
를 사용하여 특정 기기에서 지원되는 카메라 구성에 액세스할 수 있습니다. 그러면 XRCameraConfiguration
의 여러 인스턴스가 포함된 NativeArray
가 반환됩니다. 각 인스턴스는 깊이 사용량, 타겟 캡처 프레임 속도, 해상도, 텍스처 크기와 같은 속성을 지정하는 개별 카메라 구성입니다.
앱 장면에서 카메라 구성
다음 단계에 따라 앱의 장면에서 카메라를 구성합니다.
ARCameraManager
를ARCameraManager.GetConfigurations()
와 함께 사용하여 지원되는XRCameraConfiguration
목록을 쿼리합니다.Android용으로 빌드하는 경우
XRCameraConfigurationExtensions
의 함수 조합을 사용하여 ARCore 관련 속성을 가져옵니다.cameraManager.currentConfiguration
를 사용하여 현재 구성을 설정합니다.
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;
}
}
카메라 구성 필터
ARCoreExtensionsCameraConfigFilter
를 사용하면 앱의 요구사항에 따라 필터링하여 런타임 시 특정 기기에서 사용할 수 있는 카메라 구성 범위를 좁힐 수 있습니다.
카메라 캡처 프레임 속도를 30FPS로 제한
앱에 더 빠른 카메라 프레임 속도가 필요하지 않다면 30FPS로 제한할 수 있습니다. 60FPS 카메라 프레임 속도를 지원하는 기기에서 ARCore는 기본적으로 이 프레임 속도를 지원하는 카메라 구성에 우선순위를 둡니다. 60FPS를 지원하는 모든 카메라 구성을 필터링하려면 Target Camera Framerate가 Target 30FPS로 설정되어 있는지 확인합니다.
ARCore의 심도 센서 사용 차단
앱에 깊이가 필요하지 않으면 ARCore가 깊이 센서를 사용하지 않도록 할 수 있습니다. ARCore ARCore는 지원되는 심도 센서가 있는 기기에서 깊이 센서를 사용하는 카메라 구성을 우선합니다. 깊이 센서를 사용하는 모든 카메라 구성을 필터링하려면 Depth Sensor Usage가 Do Not Use로 설정되어 있는지 확인합니다.
카메라 구성 필터 사용
앱에서 카메라 구성을 필터링하도록 사용 설정하려면 다음 단계를 따르세요.
Assets > Create > XR > Camera Config Filter로 이동하여 새 카메라 구성 필터를 만듭니다.
필터에 사용할 구성을 선택합니다.
필터를 만든 후에는 ARCoreExtensions 구성요소에서 사용합니다.
런타임 중 카메라 구성
콜백 이벤트 ARCoreExtensions.OnChooseXRCameraConfiguration
를 사용하여 기기 유형과 같은 요소에 따라 런타임 중에 카메라를 구성할 수 있습니다.
// 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;
}