공간 기능은 기기에 따라 다를 수 있으며 사용자가 앱이나 시스템과 상호작용할 때 변경될 수 있습니다. 홈 공간 또는 전체 공간으로 이동하는 등 앱 자체에서 변경할 수도 있습니다. 문제를 방지하려면 앱에서 공간 기능을 확인하여 현재 환경에서 지원되는 API를 확인해야 합니다.
XR용 Jetpack Compose를 사용하여 공간 기능 확인
XR용 Jetpack Compose는 공간 기능을 확인하기 위한 컴포지션 로컬을 만듭니다. 공간 UI, 공간 음향, 환경, 패스스루 또는 3D 콘텐츠가 사용 설정되어 있는지 확인하는 데 사용합니다.
LocalSpatialCapabilities.current을 사용하여 다음 공간 기능을 현재 사용할 수 있는지 확인할 수 있습니다.
isSpatialUiEnabled: 애플리케이션이 공간 UI 요소 (예:SpatialPanel)를 만들 수 있는지 나타냅니다.isContent3dEnabled: 애플리케이션이 3D 객체를 만들 수 있는지 여부를 나타냅니다.isAppEnvironmentEnabled: 애플리케이션이 환경을 설정할 수 있는지 여부를 나타냅니다.isPassthroughControlEnabled: 애플리케이션이 패스스루 상태를 제어할 수 있는지 여부를 나타냅니다.isSpatialAudioEnabled: 애플리케이션이 공간 오디오를 사용할 수 있는지 나타냅니다.
다음 예는 공간 UI가 사용 설정되어 있는지 확인하는 방법을 보여줍니다.
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
SceneCore를 사용하여 공간 기능 확인
SceneCore 라이브러리를 사용할 때는 세션을 만들어야 합니다. 세션이 생성되면 세션의 scene에서 spatialCapabilities를 사용하여 현재 사용할 수 있는 공간 기능을 쿼리합니다.
SPATIAL_3D_CONTENT: 활동이 3D 콘텐츠를 만들 수 있습니다.APP_ENVIRONMENT: 활동에서 자체 환경을 설정할 수 있습니다.EMBED_ACTIVITY: 활동이 다른 활동을 공간적으로 삽입할 수 있습니다.PASSTHROUGH_CONTROL: 활동에서 패스스루를 사용 설정하거나 중지할 수 있습니다.SPATIAL_AUDIO: 활동에서 공간 오디오를 사용할 수 있습니다.SPATIAL_UI: 활동이 자체적으로 공간화될 수 있습니다 (예: 공간 패널 추가).
공간 기능이 변경될 때 알림을 보내는 콜백 addSpatialCapabilitiesChangedListener을 구독할 수도 있습니다.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
혼합 모드를 사용하여 기기의 디스플레이 기능 확인
Android XR에서 XR 헤드셋과 유선 XR 안경은 특히 디스플레이 유형과 관련하여 다양한 하드웨어 기능을 갖습니다. 표시 유형과 기기에서 사용하는 선호하는 혼합 모드의 영향을 받을 수 있는 가시성을 극대화하기 위해 앱의 UI와 렌더링된 객체의 색상을 조정해야 할 수 있습니다. DisplayBlendMode API는 렌더링을 위한 기기의 혼합 모드 기능을 제공합니다. 이 API를 사용하여 가상 콘텐츠가 실제 환경에 추가되는 방식을 결정합니다.
다음은 알아두어야 할 혼합 모드 유형입니다.
ADDITIVE: 빨간색, 녹색, 파란색 구성요소의 각 픽셀 값을 추가하여 가상 콘텐츠가 실제 세계에 추가됩니다. 알파는 무시되고 검은색 픽셀은 투명하게 표시됩니다.ALPHA_BLEND: 알파 구성요소를 기반으로 픽셀 값을 알파 혼합하여 가상 콘텐츠가 실제 세계에 추가됩니다.NO_DISPLAY: 기기에서 혼합이 지원되지 않습니다.
Jetpack XR 런타임 라이브러리의 XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode()를 사용하여 사용 중인 혼합 모드의 유형을 확인하고 필요에 따라 조정합니다.