카메라 구성은 앱의 기본 카메라 센서의 속성을 설명합니다. Unity에서는 XRCameraConfiguration
를 통해 이러한 구성에 액세스할 수 있습니다.
Android 플랫폼에서 ARCore는 XRCameraConfigurationExtensions
를 제공하여 XRCameraConfiguration
내에 추가 ARCore 관련 속성을 노출합니다. 이러한 속성을 사용하여 앱에 적절한 카메라 구성을 설정할 수 있습니다.
확장된 카메라 구성 속성 (Android)
다음 확장 속성은 Android 플랫폼의 ARCore에서 지원됩니다.
지원되는 카메라 구성 액세스
ARCameraManager.GetConfigurations()
를 사용하여 특정 기기에서 지원되는 카메라 구성에 액세스합니다. 그러면 XRCameraConfiguration
의 여러 인스턴스가 포함된 NativeArray
가 반환됩니다. 각 인스턴스는 깊이 사용, 타겟 캡처 프레임 속도, 해상도, 텍스처 크기와 같은 속성을 지정하는 개별 카메라 구성입니다.
앱의 장면에서 카메라 구성
다음 단계에 따라 앱의 장면에서 카메라를 구성합니다.
ARCameraManager.GetConfigurations()
와 함께ARCameraManager
를 사용하여 지원되는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는 깊이 센서를 사용하는 카메라 구성에 우선순위를 둡니다. 깊이 센서를 사용하는 모든 카메라 구성을 필터링하려면 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;
}