Mega 추적 프로세스 제어
이 문서는 다양한 응용 시나리오의 요구 사항을 충족하기 위해 Mega 추적 프로세스의 다양한 기능과 매개변수를 제어하는 방법을 소개합니다.
시작하기 전에
tracker의 작업 흐름
tracker의 작업 흐름은 다음과 같습니다.
flowchart LR
subgraph startup_graph[시작]
direction TB
sstart((session 시작))
create[네이티브 생성]
load(타겟 로드)
init_g[[초기화]]
end
subgraph init_graph[초기화]
direction TB
init_{6DoF 초기화 성공<br>또는 비 6DoF}
init[[로컬 추적 초기화 과정]]
localization_g[[초기 위치 확인]]
end
subgraph localization_graph[초기 위치 확인]
direction TB
localize__{위치 확인 활성화 및<br>요청 간격 초과}
localize[클라우드 위치 확인]
localize_{블록 위치 확인 및<br>블록 로드됨}
tracking_g[[추적]]
end
subgraph tracking_graph[추적]
direction TB
tracking[[지속적인 추적]]
localizet_{위치 확인 활성화 및<br>요청 간격 초과}
localize2[클라우드 위치 확인]
localize2_{블록 위치 확인 및<br>블록 로드됨}
localization_g2[[초기 위치 확인]]
end
subgraph stopping_graph[중지]
direction TB
unload(타겟 언로드)
dispose[네이티브 파괴]
sstop([session 중지])
end
sstart --> create --> load --> init_g
init --> init_ --> |Yes| localization_g
localize --> localize_ --> |Yes| tracking_g
localize_ --> |No| localize__ --> |Yes| localize
unload --> dispose --> sstop
init_ --> |No| init
tracking --> localizet_ --> |Yes| localize2 --> localize2_ --> |Yes| tracking
localizet_ --> |No| tracking
localize2_ --> |No| localization_g2
startup_graph --> init_graph
init_graph --> localization_graph
localization_graph --> tracking_graph
tracking_graph --> localization_graph
tracking_graph --> stopping_graph
흐름은 크게 다음과 같은 몇 가지 단계로 나뉩니다.
- 시작:
- session이 시작된 후, 네이티브 계층의 tracker가 생성됩니다.
- 타겟 자체 Start() 후 해당 tracker에 로드됩니다.
- 초기화:
- 6DoF 프레임 소스를 사용하면 로컬 추적 초기화 과정으로 들어갑니다.
- 비 6DoF 프레임 소스를 사용하면 초기화 단계가 건너뛰어지고 바로 초기 위치 확인 단계로 들어갑니다.
- 이 과정은 시간이 걸릴 수 있으며, 시나리오 복잡성과 기기 성능에 따라 다르며, 일반적으로 프레임 소스에서 사용하는 기본 알고리즘과 관련이 있습니다.
- 기본 구성에서는 이 단계의 내용이 표시되지 않으며, ActiveController 구성 요소 옵션을 통해 이 동작을 제어할 수 있습니다.
- 초기 위치 확인:
- 위치 확인이 활성화되어 있고 요청 간격이 초과되면 tracker가 클라우드에 위치 확인 요청을 보냅니다.
- 위치 확인에 성공하면 위치 확인 서비스에서 반환한 id에 해당하는 블록이 로드된 경우 추적 단계로 들어가고, 블록이 로드되지 않은 경우 블록 로드가 완료될 때까지 기다리고 다음 위치 확인 요청을 기다립니다.
- 위치 확인에 실패하면 tracker는 다음 위치 확인 요청을 기다립니다.
- 이 과정은 시나리오의 위치 확인 용이성과 네트워크 상태에 따라 시간이 걸릴 수 있습니다.
- 기본 구성에서는 이 단계의 내용이 표시되지 않으며, ActiveController 구성 요소 옵션을 통해 이 동작을 제어할 수 있습니다.
- 위치 확인이 활성화되어 있고 요청 간격이 초과되면 tracker가 클라우드에 위치 확인 요청을 보냅니다.
- 추적:
- tracker는 현재 블록을 지속적으로 추적합니다.
- 위치 확인이 활성화되어 있고 요청 간격이 초과되면 tracker가 클라우드에 위치 확인 요청을 보냅니다.
- 위치 확인에 성공하면 위치 확인 서비스에서 반환한 id가 변경되지 않으면 계속 추적하고, id가 변경되고 블록이 로드된 경우 새 블록으로 전환하고 계속 추적하며, id가 변경되고 블록이 로드되지 않은 경우 블록 로드가 완료될 때까지 기다리고 다음 위치 확인 요청을 기다립니다.
- 위치 확인에 실패하면 tracker는 현재 블록을 계속 추적하고 다음 위치 확인 요청을 기다립니다.
- 기본 구성에서는 이 단계에서 추적 상태(TargetController.IsTracked ==
true)인 타겟 노드 아래의 내용만 표시되며, ActiveController 구성 요소 옵션을 통해 이 동작을 제어할 수 있습니다.
- 중지:
- session이 중지된 후, 타겟이 언로드되고 네이티브 계층의 tracker가 파괴됩니다.
기기 지원 등급 조정
MegaTrackerFrameFilter의 MegaTrackerFrameFilter.MinInputFrameLevel 속성은 Mega가 지원하는 최저 기기 등급을 지정하는 데 사용됩니다.
![]()
Mega는 거의 모든 유형의 프레임 데이터 소스에서 실행할 수 있지만, 다른 프레임 데이터 소스는 추적 효과에 다른 영향을 미칩니다.
기본적으로 Mega는 기기가 지원하는 최고 등급의 프레임 데이터 소스를 선택하여 추적합니다. 기본 구성에서 Mega를 지원하는 session은 6DoF와 5DoF를 지원하는 프레임 데이터 소스를 이미 구성했습니다.
Mega가 실행 중일 때 특정 등급의 프레임 데이터 소스를 지원하려면 두 가지 조건을 충족해야 합니다.
- 필요한 프레임 데이터 소스가 session의 선택 가능한 프레임 데이터 소스 그룹에 있어야 합니다.
- MegaTrackerFrameFilter.MinInputFrameLevel이 필요한 프레임 데이터 소스의 CameraTransformType 등급보다 크거나 같아야 합니다.
예를 들어, 기본 session에서 3DoF 추적을 지원하려면 다음이 필요합니다.
- ThreeDofCameraDeviceFrameSource를 session의 프레임 데이터 소스 그룹에 추가합니다.
- MegaTrackerFrameFilter.MinInputFrameLevel을 ThreeDof로 수정합니다.
또 다른 예로, 기본 session에서 5DoF 추적 지원을 제거하려면 다음이 필요합니다.
- InertialCameraDeviceFrameSource를 session의 프레임 데이터 소스 그룹에서 제거합니다.
- MegaTrackerFrameFilter.MinInputFrameLevel을 SixDof로 수정합니다(수정하지 않아도 5DoF 프레임 데이터 소스가 없기 때문에 5DoF는 사용되지 않습니다).
조건을 충족하는 프레임 데이터 소스가 사용 가능하지 않을 때 session 조립이 실패합니다.
현재 시스템 상태 이해
기본 세션 구성에서 UI 메시지는 화면에 표시되며, 여기에는 Mega 추적 상태 정보가 포함됩니다.
위치 찾기가 성공하면 Mega 서비스 정보 아래에 Found 상태 텍스트가 포함됩니다. 위치 찾기가 실패하면 Mega 서비스 정보 아래에 NotFound 상태 텍스트가 포함됩니다.
로드된 블록은 Block [scnObj=<objName>] (<trackingStatus>): <name> (<id>)로 표시됩니다. 여기서 <objName>은 블록에 해당하는 시나리오 개체의 이름이며, <name>은 블록의 이름이고, <id>는 블록의 ID입니다. trackingStatus는 Tracking 또는 NotTracking일 수 있으며, 각각 현재 블록이 추적 중인지 여부를 나타냅니다.
![]()
위치 찾기가 성공하면 위치가 찾아졌지만 로드되지 않은 블록 정보는 Block [scnObj=?]: <name> (<id>)로 표시됩니다.
![]()
팁
NotFound는 정상 상태이며, Mega가 작동하는 전 과정에서 자주 나타납니다. 이 상태가 나타나더라도 추적은 계속됩니다. 일반적으로 애플리케이션 개발에서는 NotFound 상태에 대해 특별한 처리를 할 필요가 없습니다.
MegaTrackerFrameFilter.LocalizationRespond 이벤트를 사용하면 현재 위치 찾기 상태를 가져올 수 있으며, 이를 통해 시스템이 현재 추적 대상을 찾았는지 여부를 알 수 있습니다.
다음 코드는 이 이벤트를 사용하는 방법과 애플리케이션이 주의해야 할 일반적인 예외 상태의 처리 방법을 보여줍니다.
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// 서비스가 깨어나는 중이며, 최종 사용자에게 기다리라고 해야 합니다.
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// QPS 제한을 초과했으며, 최종 사용자 중 일부가 위치 찾기에 실패할 수 있습니다(전체 추적 품질이 떨어집니다).
// 이 경우 일반적으로 현재 사용자 수에 맞게 추적 품질을 보장하기 위해 QPS 제한을 높이기 위해 요금을 지불해야 합니다.
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// 토큰이 만료되었습니다. 이는 토큰 인터페이스를 사용하여 서비스에 액세스할 때만 발생합니다.
// 이 문제를 해결하려면 애플리케이션이 자신의 백엔드에 토큰을 요청하고 MegaTrackerFrameFilter.UpdateToken을 호출하여 업데이트해야 합니다.
}
}
애플리케이션이 자주 MegaTrackerLocalizationStatus.RequestTimeout 상태에 직면하면 일반적으로 기기가 서비스에 연결하는 네트워크 상태가 좋지 않다는 것을 의미합니다. 추적 품질을 향상시키기 위해 네트워크 환경을 최적화하는 것이 좋습니다. 네트워크 상태를 개선할 수 없는 경우 요청 시간 제한을 늘리는 것을 고려할 수 있습니다.
참고
이 이벤트를 통해 위치 찾기 반환된 자세(pose)를 가져올 수 없습니다.
실제로 애플리케이션 개발에서는 위치 찾기 반환된 자세가 필요하지 않습니다. EasyAR은 위치 찾기 반환 후 로컬 알고리즘을 통해 더 정확한 자세를 계산하여 개발자에게 반환하며, 이 자세는 블록의 transform에 반영되어 있습니다. 세션의 실행 결과 가져오기를 참조하세요.
일시정지와 계속하기
Mega의 추적 및 위치 파악 기능을 각각 일시정지하고 계속할 수 있습니다.
추적 일시 정지
MegaTrackerFrameFilter.enabled을 false로 설정하여 추적을 일시 정지할 수 있습니다.
기본적으로 추적이 일시 정지되면 모든 블록 노드 아래의 콘텐츠가 숨겨집니다.
위치 추적 일시 중지
MegaTrackerFrameFilter.EnableLocalization 을 false로 설정하면 위치 추적을 일시 중지할 수 있습니다.
경고
위치 추적을 일시 중지하면 추적 효과에 영향을 미치므로 일반적으로 수정하지 않는 것이 좋습니다. EasyAR 기술 지원의 지시를 따라 사용하세요.
애플리케이션 실행 중 위치 추적이 일시 중지된 경우 EasyAR에 문제를 제보할 때 이 사실을 반드시 명시하세요.
서비스 및 요청 제어
MegaTrackerFrameFilter 구성 요소의 매개 변수를 수정하여 서비스 요청 동작을 제어할 수 있습니다.
요청 간격 및 시간 초과
session 아래의 Mega Tracker 객체를 선택하고 Request Time Parameters 아래의 옵션을 수정하여 서비스 요청의 시간 간격과 시간 초과 시간을 조정할 수 있습니다.
![]()
스크립트에서는 MegaTrackerFrameFilter.RequestTimeParameters를 수정하여 동일한 효과를 얻을 수 있습니다.
경고
요청 간격을 수정하면 추적 효과에 영향을 미치므로 일반적으로 수정하지 않는 것이 좋습니다. EasyAR 기술 지원의 지도를 받아 사용하세요.
애플리케이션 실행 중에 요청 간격이 수정된 경우 EasyAR에 문제를 제보할 때 이 사항을 반드시 명시하세요.
위치 라이브러리 전환
MegaTrackerFrameFilter.SwitchEndPoint를 사용하여 런타임에 위치 라이브러리를 전환할 수 있습니다. 이 인터페이스를 사용할 때 카메라 화면과 세션이 중단되지 않습니다.
관련 주제
- Mega에 적합한 AR Session 모범 사례에서는 Mega에 적합한 AR Session을 생성하고 구성하는 방법을 소개합니다.
- Mega 추적 대상 추가에서는 Mega의 추적 대상 블록을 추가하는 방법과 개발을 보조하기 위해 Unity 에디터에서 블록 모델을 로드하는 방법을 소개합니다.
- 한 세트의 프레임 데이터 소스 추가에서는 세션의 프레임 데이터 소스 그룹을 수정하는 방법을 소개합니다.
- 세션의 실행 결과 가져오기에서는 세션 구성 요소의 추적 결과를 가져오는 방법을 소개합니다.
- UI 메시지에서는 UI 메시지를 사용하여 세션 상태를 표시하는 방법을 소개합니다.