WLT+ASA 샘플 설정 및 실행

요약

WLT(World Locking Tools for Unity)는 로컬 추적을 기반으로 안정적인 좌표계를 제공합니다. 안정적인 좌표계가 ASA(Azure Spatial Anchors)와 결합될 경우 세션 간에 지속되고 디바이스 간에 공유될 수 있습니다.

이 비디오에서 샘플을 실행할 때 예상되는 사항을 파악할 수 있습니다.

이 샘플에는 무엇이 있나요?

이 샘플은 다음과 같은 자산 및 스크립트를 제공합니다.

  1. 물리적 환경과 관련하여 Unity의 전역 좌표계를 구성합니다.
  2. Azure Spatial Anchors를 사용하여 해당 좌표계 구성을 Azure에 게시합니다.
  3. Azure에서 데이터를 검색하여 이후 세션 또는 다른 디바이스에서 좌표계를 복원합니다.

이 문서의 구조

  1. 설치 - 샘플 애플리케이션을 설치하고 배포하는 방법입니다.
  2. 애플리케이션 실행에 대한 참고 사항과 권장 단계입니다.
  3. 지원 스크립트에 대한 아키텍처 설명입니다.

설치 및 테스트된 버전

이 샘플은 다음을 사용하여 개발 및 테스트되었습니다.

  • Unity 2020.3.8f1
  • ASA(Azure Spatial Anchors) v2.9.0 - v2.10.2.
  • Mixed Reality Toolkit v2.7.2
  • World Locking Tools for Unity v1.4.1
  • FrozenWorldEngine v1.1.1

WLT 릴리스 .unitypackage 또는 Mixed Reality Feature Tool에서 WLT 및 이 샘플을 설치할 수 있습니다. FeatureTool에서 설치하는 경우 WLT 예제 종속성(자동)을 설치할 뿐만 아니라 예제를 프로젝트로 가져와야 합니다. 자세한 내용은 MR Feature Tool에서 WLT 설치를 참조하세요.

프로젝트에 Frozen World Engine DLL 설치

첫 번째 단계는 Frozen World Engine DLL v1.1.1을 설치하는 것입니다. NuGet for Unity 또는 명령줄 nuget.exe를 사용하는 지침입니다.

ASA 설치

공간 앵커 리소스 만들기

빠른 시작 가이드는 Azure 계정 및 필요한 공간 앵커 리소스를 만드는 단계를 안내합니다. 샘플을 실행하려면 계정 ID, 계정 도메인 및 계정 키가 필요합니다. 장면의 SpacePinBinder 개체에 있는 "Spatial Anchor Manager" 스크립트의 적절한 필드에 이를 추가합니다. 다른 인증 방법이 지원되지만 ID/도메인/키를 사용하여 시작하는 것이 가장 쉽습니다.

자격 증명 필드

SDK 설치

다음으로, 이러한 지침에 설명된 방법 중 하나를 사용하여 Azure Spatial Anchors v2.9.0을 설치합니다. MR Feature Tool 방법을 사용했습니다.

거친 재배치에 대한 추가 설정

거친 재배치를 사용하는 경우 Android 또는 HoloLens2에 배포할 때 추가 설정이 필요합니다.

거친 재배치란?

거친 재배치는 현재 주변에서 이전에 만든 클라우드 앵커를 검색할 수 있는 기술입니다. 거친 재배치에 대한 자세한 내용은 Azure Spatial Anchors 설명서의 거친 재배치 섹션에서 찾을 수 있습니다.

이 샘플에서는 거친 재배치 또는 GUID(클라우드 앵커 ID)로 명시적으로 클라우드 앵커를 찾는 방법을 보여 줍니다. 거친 재배치를 사용하는 경우 다음 추가 설정 단계가 필요합니다. 거친 재배치에 관심이 없는 경우 SpacePinBinder 개체의 "게시자 ASA" 구성 요소에서 사용하지 않도록 설정할 수 있습니다.

대략적인 재배치 비활성화

HoloLens2에 대한 추가 설정 단계

HoloLens2에서 거친 재배치를 사용하도록 설정하려면 ARM/WorldLockingTools/Package.appxmanifest에 생성된 Package.appxmanifest 파일에 권한을 추가해야 합니다(ARM 폴더를 빌드 대상으로 선택했다고 가정). 이 프로젝트가 사용자 소유인 경우 해당 경로에서 WorldLockingTools에 대한 적절한 이름을 대체합니다. 기능 섹션에 다음 줄을 추가합니다.

    <DeviceCapability Name="wiFiControl"/>

자세한 내용은 github의 이 게시물을 참조하세요.

이 단계를 놓치면 게시자 "준비"가 "준비" 상태에 도달하지 않으며, 프레임 속도는 매우 낮아지며, UnityPlayer.log(생성된 경우)는 양식의 예외로 가득 차게 됩니다.

InvalidOperationException: CoarseReloc: WiFi 액세스가 거부되었습니다. 요청 CV: . 응답 CV: .

솔루션이 새로 빌드될 때마다 Package.appxmanifest에 해당 기능을 추가해야 합니다. 그러나 Unity의 후속 빌드는 기능을 유지합니다.

Project Settings/XR Plugin Management에서 Windows Mixed Reality가 UWP 탭에서 선택한 Plugin-Provider인지 확인합니다(OpenXR은 ASA를 사용하는 WLT에도 지원됨).

XAmpleApp/CustomProfiles의 MRTK 프로필 XAmple XRSDK ToolkitConfigurationProfile은 HoloLens2에서 실행하는 데 적합합니다.

Android에 대한 추가 설정 단계

Android에서 거친 재배치를 사용하도록 설정하려면 이 지침에 따라 Assets/Plugins/Android/mainTemplate.gradle 파일을 구성합니다.

또한 Assets/Plugins/Android/AndroidManifest.xml Android에서 Wi-Fi 대한 액세스를 허용하려면 많은 권한을 사용하도록 설정해야 합니다. 다시 말하지만, 이 프로젝트의 요소를 자체 프로젝트에 통합하는 경우 거친 재배치를 사용하려면 이러한 단계를 수행해야 합니다. Android에서 Wi-Fi에 액세스하는 데 필요한 권한에 대한 자세한 내용은 이 게시물과 링크된 게시물에 있습니다.

수정된 mainTemplate.gradle 및 AndroidManifest.xml 샘플은 WLT 및 ASA를 함께 사용하기 위해 특별히 구성된 WLT-ASA 샘플 프로젝트에 포함되어 있습니다. 이는 설명된 것처럼 플레이어 게시 설정에서 "사용자 지정 주 매니페스트" 및 "사용자 지정 기본 Gradle 템플릿"을 사용하도록 설정한 프로젝트에 직접 복사할 수 있습니다.

빌드 & 실행을 누를 때 MRTK_Standard 재질에서 셰이더 오류로 빌드가 실패하는 경우 빌드 & 실행을 다시 시도하세요. 두 번째는 성공합니다. MRTK 문제에는 이와 관련된 몇 가지 정보가 있지만 거기에 있는 모든 정보는 틀렸습니다.

Project Settings/XR Plugin Management에서 ARCore가 Android 탭에서 선택한 Plugin-Provider인지 확인합니다.

MRTK 프로필 XAmple AR ToolkitConfigurationProfile은 모바일에서 실행하는 데 적합합니다. Android 또는 iOS로 전환한 후 스크립트 Mixed Reality/Utilities/UnityAR/Update Scripting Defines를 실행하는 것을 잊지 마세요.

단추의 기능

준비

  • 핀 전환 - SpacePin이 활성화되지 않은 경우 조작 핸들이 숨겨질 수 있습니다.
  • 게시 - 현재 구성을 저장하여 이후 세션 또는 다른 디바이스에서 검색을 사용하도록 설정합니다.
  • Oracle 로드 - 이전에 저장된 바인딩을 사용하여 공간 구성을 복원합니다.
  • Oracle 지우기 - 모든 지원 리소스, 특히 Azure 공간 앵커를 삭제하고 바인딩 오라클을 지웁니다.
  • 검색 - 바로 근처에 있는 모든 Azure 공간 앵커를 찾고 해당 위치에서 공간 구성을 복원합니다.
  • 제거 - 바로 근처에 있는 모든 Azure 공간 앵커를 찾아 지웁니다.
  • 핀 다시 설정 - 공간 핀 조작을 실행 취소합니다. Azure 공간 앵커를 지우지 않습니다.

모바일의 메뉴는 형태가 약간 다르지만 단추의 위치와 의미는 동일합니다.

연습 - HoloLens2에서 게시

SpacePin을 사용하여 장면 배치

샘플을 시작할 때 좌표계는 시작 시 머리 추적기 포즈에 따라 위치 및 방향을 지정합니다. 즉, 상당히 임의적입니다. 가장 먼저 해야 할 일은 좌표계를 원하는 참조 상태로 조정하는 것입니다.

PinTestSofa 장면의 소파는 길이 2.18m, 높이 0.78m, 깊이 1.0m입니다. 따라서 소파 뒷면 위쪽 양 끝에 있는 SpacePin 핸들의 간격은 2.18m이고, 지상에서 0.78m 떠 있습니다. 편리한 높이의 2.18m 떨어진 곳에서 임시 마커를 측정하고 배치하는 것이 좋습니다. 또는 물리적 공간에 맞게 장면을 조정할 수 있습니다.

HoloLens2 디바이스에 애플리케이션을 빌드하고 배포한 후 부동 메뉴의 상태가 준비됨으로 표시될 때까지 기다립니다(힌트 - 준비되면 상태 줄이 빨간색에서 흰색으로 이동함).

준비 안 됨

각 SpacePin 핸들을 한 번에 하나씩 잡고(흰색 와이어프레임 구) 참조 마커에 상대적인 위치로 끕니다.

각 마커를 위치에 놓으면 장면이 SpacePin을 기준으로 이동하여 소파의 뒷면을 복원해야 합니다. 장면의 개체는 이동되지 않고, SpacePin의 원래 좌표가 끌어간 물리적 세계의 위치에 있도록 전체 좌표 공간이 조정됩니다.

좌표 공간 게시

원하는 공간을 설정했으므로 이제 해당 공간을 게시하여 이후 세션 및 다른 디바이스에서 사용할 수 있도록 할 수 있습니다.

거친 재배치를 사용하는 경우 이 시점에서 이전에 만든 클라우드 앵커를 지우는 것이 좋습니다. "검색에서 제거" 단추를 누르고 완료되기를 기다립니다.

이제 부동 메뉴에서 "게시" 단추를 누르고 완료되기를 기다립니다.

준비

연습 - 거친 재배치를 사용하여 HoloLens2에서 사용

이전 세션을 닫은 후 다른 HoloLens2 디바이스 또는 동일한 디바이스에서 애플리케이션을 다시 시작합니다. 상태가 준비됨으로 표시되면 "검색에서 로드" 단추를 누릅니다. 작업이 완료되면 Unity 전역 좌표계가 이전(게시된) 세션과 마찬가지로 물리적 환경으로 다시 조정됩니다.

연습 - IBindingOracle을 사용하여 HoloLens2에서 사용(SpacePinBinderFile)

바인딩이 디바이스에 게시되거나 검색에서 복원되면 IBindingOracle에 기록됩니다. 이 샘플에는 텍스트 파일에 바인딩을 쓰는 가장 기본적인 Oracle이 포함되어 있습니다.

애플리케이션을 새 세션으로 다시 시작합니다. 게시가 수행된 것과 동일한 HoloLens2인 경우 게시에서 남은 바인딩 파일이 있습니다. 다른 HoloLens2이지만 이전 세션에서 검색이 성공적으로 수행된 경우 바인딩 파일이 남아 있게 됩니다.

"파일에서 로드" 단추를 눌러 이전에 기록된 바인딩을 로드하고 해당 좌표 공간을 복원합니다.

연습 - 거친 재배치를 사용하여 Android에서 사용

UX는 Android에서 약간 다르게 보이지만 정확히 동일하게 작동합니다. 주요 차이점은 ASA를 진행할 준비가 되기 전에 HoloLens2를 기준으로 시작 시 환경을 좀 더 검사해야 한다는 것입니다.

시스템이 준비됨으로 표시되면 파란색 단추(오른쪽에서 세 번째)를 눌러 이전에 게시된 바인딩을 검색하고 좌표계를 복원할 수 있습니다.

연습 - IBindingOracle을 사용하여 Android에서 사용(SpacePinBinderFile)

검색에서 로드를 성공적으로 완료했으므로 바인딩 파일이 디바이스에 남아 있습니다. 이후 세션에서는 파일에서 로드를 눌러 좌표계를 복원할 수 있습니다.

또는 게시 디바이스에서 사용 중인 디바이스로 바인딩 텍스트 파일을 복사할 수 있습니다. 바인딩 텍스트 파일의 기본 위치는 다음과 같습니다.

HoloLens2: 사용자 폴더/LocalAppData/WLT-ASA/LocalState/BinderFile.txt

Android: 내부 공유 스토리지/Android/data/com.WorldLockingTools.WLTASA/files/BinderFile.txt

추가 정보