Unreal의 Azure Spatial Anchors
Azure Spatial Anchors는 Microsoft Mixed Reality 서비스이며, 증강 현실 디바이스를 사용하여 실제 세계에서 앵커 위치를 검색, 공유 및 유지하는 데 사용할 수 있습니다. 아래 설명서는 Azure Spatial Anchors 서비스를 Unreal 프로젝트에 통합하는 지침을 제공합니다. 자세한 내용은 Azure Spatial Anchors 서비스를 참조하세요.
참고
이제 Unreal Engine 4.26은 iOS 또는 Android를 대상으로 하는 개발자를 위해 ARKit 및 ARCore 지원을 위한 플러그 인을 제공합니다.
중요
로컬 앵커는 디바이스에 저장되는 반면, Azure Spatial Anchors는 클라우드에 저장됩니다. 앵커를 로컬로 디바이스에 저장하려는 경우, 해당 프로세스를 안내하는 로컬 Spatial Anchors 문서를 참조하세요. 로컬 및 Azure 앵커는 동일한 프로젝트에서 충돌 없이 사용할 수 있습니다.
필수 구성 요소
이 가이드를 완료하려면 다음이 필요합니다.
- Unreal Marketplace 또는 GitHub에서 사용할 수 있는 Microsoft OpenXR 플러그 인이 설치되었습니다.
- Unreal 버전 4.25 이상 설치
- Unreal에 HoloLens 2 프로젝트 설정
- Azure Spatial Anchors 개요 꼼꼼히 읽기
- C++ 및 Unreal에 대한 기본 지식
Azure Spatial Anchors 계정 정보 얻기
프로젝트에서 Azure Spatial Anchors를 사용하기 전에 다음을 수행해야 합니다.
-
Spatial Anchors 리소스를 만들고 아래 나열된 계정 필드를 복사합니다. 다음 값은 애플리케이션의 계정으로 사용자를 인증하는 데 사용됩니다.
- 계정 ID
- 계정 키
자세한 내용은 Azure Spatial Anchors 인증 문서를 확인하세요.
참고
Unreal 4.25의 Azure Spatial Anchors는 Azure AD 인증 토큰을 지원하지 않지만 이후 릴리스에서는 이 기능에 대한 지원이 제공될 예정입니다.
기능 및 권한 사용
HoloLens
프로젝트 설정 HoloLens를 열고 인터넷 클라이언트 기능을 사용합니다.
Android
Android 앱에서 권한 대화 상자를 표시하고 위치 기능을 허용하려면 Azure Spatial Anchor 세션을 시작하기 전에 Android 권한 요청 함수를 호출해야 합니다.
입력 권한에 대한 로컬 변수를 만들고 다음으로 채웁니다.
- android.permission.ACCESS_WIFI_STATE
- android.permission.CHANGE_WIFI_STATE
- android.permission.INTERNET
- android.permission.BLUETOOTH
- android.permission.BLUETOOTH_ADMIN
- android.permission.ACCESS_COARSE_LOCATION
- android.permission.ACCESS_FINE_LOCATION
- android.permission.CAMERA
마지막으로, 프로젝트 설정 Android를 열고 고급 APK 패키징 아래의 추가 권한 필드에서 동일한 권한을 설정합니다.
iOS
iOS용 애플리케이션을 빌드하려면 Mac에서 Unreal을 사용해야 합니다. Apple 개발자 계정을 사용하여 패키지하려면 프로젝트 설정 iOS를 열고 빌드 섹션까지 아래로 스크롤합니다. 자동 서명 확인란을 사용하도록 설정하고 IOS 팀 ID를 팀 ID로 채웁니다.
developer.apple.com에 로그인하고 멤버 자격 탭으로 이동하여 팀 ID를 검색하여 팀 ID를 찾을 수 있습니다.
권한 대화 상자를 표시하고 iOS 디바이스에서 위치 정보에 액세스할 수 있도록 하려면 Azure Spatial Anchor 세션을 시작하기 전에 Init 위치 서비스 및 위치 서비스 시작 함수를 호출해야 합니다.
Azure Spatial Anchors 플러그 인 추가
팁
Unreal용 Azure Spatial Anchors를 사용하는 경우 Azure Spatial Anchors 플러그 인과 플랫폼별 플러그 인(WMR, ARKit, ARCore, OpenXR)이 있습니다. 한 번에 하나의 플랫폼별 플러그 인만 사용하도록 설정해야 합니다.
HoloLens
다음을 수행하여 Unreal 에디터에서 Azure Spatial Anchors 플러그 인을 사용하도록 설정합니다.
- 편집 플러그 인을 클릭하고 Azure Spatial Anchors 및 WMR용 Azure Spatial Anchors를 검색합니다.
- 두 플러그 인의 사용 확인란을 선택하여 애플리케이션에서 Azure Spatial Anchors 청사진 라이브러리에 액세스를 허용합니다.
완료되면 Unreal 편집기를 다시 시작하여 플러그 인 변경 내용을 적용합니다. 이제 프로젝트에서 Azure Spatial Anchors를 사용할 준비가 되었습니다.
Android
다음을 수행하여 Unreal 에디터에서 Azure Spatial Anchors 플러그 인을 사용하도록 설정합니다.
- 편집 플러그 인을 클릭하고 Azure Spatial Anchors 및 ARCore용 Azure Spatial Anchors를 검색합니다.
- 두 플러그 인의 사용 확인란을 선택하여 애플리케이션에서 Azure Spatial Anchors 청사진 라이브러리에 액세스를 허용합니다.
완료되면 Unreal 편집기를 다시 시작하여 플러그 인 변경 내용을 적용합니다. 이제 프로젝트에서 Azure Spatial Anchors를 사용할 준비가 되었습니다.
iOS
다음을 수행하여 Unreal 에디터에서 Azure Spatial Anchors 플러그 인을 사용하도록 설정합니다.
- 편집 플러그 인을 클릭하고 Azure Spatial Anchors 및 ARKit용 Azure Spatial Anchors를 검색합니다.
- 두 플러그 인의 사용 확인란을 선택하여 애플리케이션에서 Azure Spatial Anchors 청사진 라이브러리에 액세스를 허용합니다.
- 모바일 위치 서비스 및 모바일 위치 서비스 - IOS 구현도 검색합니다.
- iOS 디바이스가 현재 위치에 액세스할 수 있도록 두 플러그 인 모두에서 사용 확인란을 선택합니다.
완료되면 Unreal 편집기를 다시 시작하여 플러그 인 변경 내용을 적용합니다. 이제 프로젝트에서 Azure Spatial Anchors를 사용할 준비가 되었습니다.
Spatial Anchors 세션 시작
Azure Spatial Anchors 세션을 사용하면 클라이언트 애플리케이션에서 Azure Spatial Anchors 서비스와 통신할 수 있습니다. Azure Spatial Anchors를 만들고 유지하고 공유하려면 Azure Spatial Anchors 세션을 만들고 시작해야 합니다.
- 애플리케이션에서 사용 중인 Pawn에 대한 청사진을 엽니다.
- 계정 ID와 계정 키에 대한 두 문자열 변수를 추가한 다음, Azure Spatial Anchors 계정에서 해당 값을 할당하여 세션을 인증합니다.
다음을 수행하여 Azure Spatial Anchors 세션을 시작합니다.
- HoloLens 애플리케이션에서 AR 세션을 실행 중인지 확인합니다. AR 세션이 실행될 때까지 Azure Spatial Anchors 세션을 시작할 수 없기 때문입니다. 설정되어 있지 않으면 AR 세션 자산을 만듭니다.
-
Azure Spatial Anchors 세션 시작 사용자 지정 이벤트를 추가하고 아래 스크린샷에 표시된 대로 구성합니다.
- 세션을 만들면 기본적으로 세션이 시작되지 않으므로 Azure Spatial Anchors 서비스를 사용하여 인증할 세션을 구성할 수 있습니다.
- 계정 ID, 계정 키, 계정 도메인 및 강좌 지역화 설정을 제공하도록 Azure Spatial Anchors 세션을 구성합니다. Azure 공간 앵커 서비스는 센서 데이터를 사용하여 앵커를 찾을 수 있도록 강좌 지역화 설정에서 모든 확인란을 사용하도록 설정해야 합니다.
- 애플리케이션이 Azure Spatial Anchors를 만들고 찾을 수 있도록 Azure Spatial Anchors 세션을 시작합니다.
서비스를 더 이상 사용하지 않는 경우 이벤트 그래프 청사진에서 Azure Spatial Anchors 리소스를 정리하는 것이 좋습니다.
- Azure Spatial Anchors 세션을 중지합니다. 세션은 더 이상 실행되지 않지만 연결된 리소스가 Azure Spatial Anchors 플러그 인에 여전히 있습니다.
- Azure Spatial Anchors 세션을 제거하여 Azure Spatial Anchors 플러그 인에 여전히 알려져 있는 Azure Spatial Anchors 세션 리소스를 정리합니다.
이벤트 그래프 청사진은 아래 스크린샷과 같은 모양입니다.
앵커 만들기
Azure Spatial Anchor는 증강 현실 애플리케이션 공간에서 실제 세계 포즈를 나타내며, 증강 현실 콘텐츠를 실제 위치에 고정합니다. Azure Spatial Anchors는 여러 사용자가 서로 공유할 수도 있습니다. 이러한 공유를 통해 다른 디바이스에서 그려진 증강 현실 콘텐츠를 실제 세계에서 동일한 위치에 배치할 수 있습니다.
새 Azure Spatial Anchor를 만들려면 다음을 수행합니다.
- Azure Spatial Anchors 세션이 실행 중인지 확인합니다. Azure Spatial Anchors 세션이 실행되고 있지 않으면 애플리케이션에서 Azure Spatial Anchor를 만들거나 유지할 수 없습니다.
- 위치를 유지해야 하는 Unreal 장면 구성 요소 를 만들거나 가져옵니다.
- 아래 이미지에서는 앵커가 필요한 장면 구성 요소라는 구성 요소가 변수로 사용됩니다. Unreal 장면 구성 요소는 AR Pin 및 Azure Spatial Anchor에 대해 애플리케이션 월드 변환을 설정하는 데 필요합니다.
Unreal 장면 구성 요소에 대한 Azure Spatial Anchor를 생성하고 저장하려면 다음을 수행합니다.
- Unreal 장면 구성 요소에 대한 Pin 구성 요소를 호출하고 장면 구성 요소의 월드 변환을 AR Pin에 사용되는 월드 변환으로 지정합니다.
- Unreal은 Azure Spatial Anchor를 만드는 데 사용되는 AR Pin을 사용하여 애플리케이션 공간에서 AR 포인트를 추적합니다. Unreal에서 AR Pin은 HoloLens의 SpatialAnchor와 유사합니다.
- 새로 만든 AR Pin을 사용하여 Create Cloud Anchor(클라우드 앵커 만들기)를 호출합니다.
- Create Cloud Anchor(클라우드 앵커 만들기)는 Azure Spatial Anchor 서비스가 아닌 로컬에 Azure Spatial Anchor를 만듭니다. Azure Spatial Anchor의 매개 변수(예: 만료 날짜)는 서비스를 사용하여 Azure Spatial Anchor를 만들기 전에 설정할 수 있습니다.
- Azure Spatial Anchor 만료를 설정합니다. 이 함수의 Lifetime 매개 변수를 사용하면 개발자가 서비스에서 앵커를 유지해야 하는 시간을 초 단위로 지정할 수 있습니다.
- 예를 들어, 일주일의 만료 시간 값은 60초 x 60분 x 24시간 x 7일 = 604,800초입니다.
앵커 매개 변수를 설정한 후에 저장할 준비가 된 것으로 앵커를 선언합니다. 아래 예제에서는 새로 만든 Azure Spatial Anchor가 저장이 필요한 Azure Spatial Anchors 세트에 추가됩니다. 이 세트는 Pawn 청사진에 대한 변수로 선언됩니다.
앵커 저장
매개 변수를 사용하여 Azure Spatial Anchor를 구성한 후 Save Cloud Anchor(클라우드 앵커 저장)를 호출합니다. Save Cloud Anchor(클라우드 앵커 저장)는 Azure Spatial Anchors 서비스에 대한 앵커를 선언합니다. Save Cloud Anchor(클라우드 앵커 저장) 호출이 성공하면 Azure Spatial Anchor 서비스의 다른 사용자가 Azure Spatial Anchor를 사용할 수 있습니다.
참고
Save Cloud Anchor(클라우드 앵커 저장)는 비동기 함수이며 게임 스레드 이벤트(예: EventTick)에서만 호출할 수 있습니다. Save Cloud Anchor(클라우드 앵커 저장)는 사용자 지정 청사진 함수에 사용 가능한 청사진 함수로 나타나지 않을 수 있습니다. 하지만 Pawn 이벤트 그래프 청사진 편집기에서는 사용할 수 있습니다.
아래 예에서 Azure Spatial Anchor는 입력 이벤트 콜백 중에 세트에 저장됩니다. 그런 다음, EventTick에 앵커가 저장됩니다. Azure Spatial Anchor를 저장하려면 Azure Spatial Anchors 세션에서 생성한 공간 데이터의 양에 따라 여러 번 시도가 필요할 수 있습니다. 그래서 Save 호출이 성공했는지 여부를 확인하는 것이 좋습니다.
앵커가 저장되지 않은 경우 아직 저장이 필요한 앵커 세트에 다시 추가합니다. 향후 EventTicks는 앵커가 성공적으로 저장될 때까지 저장을 계속 시도할 예정입니다.
앵커가 저장되면 ARPin의 변환이 앱에 콘텐츠를 배치하기 위한 참조 변환 역할을 합니다. 다른 사용자가 이 앵커를 감지하고 AR 콘텐츠를 실제 세계의 여러 디바이스에 맞출 수 있습니다.
앵커 삭제
Delete Cloud Anchor(클라우드 앵커 삭제)를 호출하여 Azure Spatial Anchor 서비스에서 앵커를 삭제할 수 있습니다.
참고
Delete Cloud Anchor(클라우드 앵커 삭제)는 잠재 함수이며 게임 스레드 이벤트(예: EventTick)에서만 호출할 수 있습니다. Delete Cloud Anchor(클라우드 앵커 삭제)는 사용자 지정 청사진 함수에는 사용 가능한 청사진 함수로 나타나지 않을 수 있습니다. 하지만 Pawn 이벤트 그래프 청사진 편집기에서는 사용할 수 있습니다.
아래 예제에서는 사용자 지정 입력 이벤트에서 앵커에 삭제 플래그가 지정됩니다. 그런 다음 EventTick에서 삭제를 시도합니다. 앵커 삭제가 실패하면 삭제 플래그가 지정된 앵커 세트에 Azure Spatial Anchor를 추가하고 나중에 EventTicks에서 다시 시도합니다.
이제 이벤트 그래프 청사진은 아래 스크린샷과 같은 모양입니다.
기존 앵커 찾기
Azure Spatial Anchors 서비스를 사용하는 피어가 기존 앵커를 생성할 수 있습니다.
- 감지할 앵커에 대한 Azure Spatial Anchor 식별자를 확보합니다.
- 앵커 식별자는 이전 Azure Spatial Anchors 세션에서 동일한 디바이스로 만든 앵커에 대해 확보할 수 있습니다. Azure Spatial Anchors 서비스와 상호 작용하는 피어 디바이스에서 만들고 공유할 수도 있습니다.
-
AzureSpatialAnchorsEvent 구성 요소를 Pawn 청사진에 추가합니다.
- 이 구성 요소를 사용하면 다양한 Azure Spatial Anchors 이벤트(예: Azure Spatial Anchors가 있을 때 호출되는 이벤트)를 구독할 수 있습니다.
-
AzureSpatialAnchorsEvent 구성 요소에 대한 ASAAnchor Located 대리자를 구독합니다.
- 대리자는 Azure Spatial Anchors 계정과 연결된 새 앵커가 배치되는 경우 해당 애플리케이션에 알려줍니다.
- 이벤트 콜백을 사용하면 Azure Spatial Anchors 세션을 사용하여 피어가 만든 Azure Spatial Anchors에는 기본적으로 AR Pin이 생성되지 않습니다. 감지된 Azure Spatial Anchor에 대한 AR Pin을 만들려면 개발자가 Create ARPin Around Azure Cloud Spatial Anchor(Azure Cloud Spatial Anchor에 대한 ARPin 만들기)를 호출하면 됩니다.
Azure Spatial Anchor 서비스를 사용하여 피어에서 만든 Azure Spatial Anchors를 찾기 위해 애플리케이션은 Azure Spatial Anchors Watcher를 만들어야 합니다.
- Azure Spatial Anchors 세션이 실행 중인지 확인합니다.
-
AzureSpatialAnchorsLocateCriteria를 만듭니다.
- 다양한 위치 매개 변수(예: 사용자와의 거리 또는 다른 앵커와의 거리)를 지정할 수 있습니다.
- AzureSpatialAnchorsLocateCritieria에서 찾고 있는 Azure Spatial Anchor 식별자를 선언합니다.
- Create Watcher(감시자 만들기)를 호출합니다.
이제 애플리케이션이 Azure Spatial Anchors 서비스에 알려진 Azure Spatial Anchors를 찾기 시작합니다. 따라서, 피어에서 만든 Azure Spatial Anchors를 사용자가 찾을 수 있습니다.
Azure Spatial Anchor를 찾은 후 Stop Watcher(감시자 중지)를 호출하여 Azure Spatial Anchors Watcher를 중지하고 감시자 리소스를 정리합니다.
마지막 이벤트 그래프 청사진은 아래 스크린샷과 같은 모양입니다.
다음 개발 검사점
앞에서 설명한 Unreal 개발 과정을 따르고 있다면 현재 MRTK 핵심 구성 요소를 살펴보는 중입니다. 여기에서 다음 구성 요소로 진행할 수 있습니다.
또는 Mixed Reality 플랫폼 기능 및 API로 이동합니다.
언제든지 Unreal 개발 검사점으로 돌아갈 수 있습니다.