공간 핀

해결해야 할 문제

스케일링 오류

홀로그램을 실제 피쳐에 맞추는 기존의 공간 앵커 접근 방식은 소규모에서는 잘 작동하지만 규모가 1미터 넘게 확장되면 어려움을 겪습니다.

머리 추적 공간의 스케일링 오류는 공간 앵커가 길이가 몇 미터에 불과하고, 실제 피쳐와 완벽하게 정렬된 가상 개체의 한쪽 끝을 유지하는 경우에도 다른 쪽 끝은 해당 실제 피쳐와 오정렬될 수 있음을 의미합니다. 이러한 오정렬이 발생하는 이유는 머리 추적 공간을 이동한 거리가 오차 범위 +-10%인 물리적 공간을 이동한 거리와 다른 경향이 있기 때문입니다. 실제 오류는 적은 경우가 많지만(많은 환경 및 디바이스 특성에 따라 다름) 일반적으로 중요하며 프로젝트의 규모가 커짐에 따라 무한대로 커집니다.

다시 말해서, HoloLens를 착용한 사용자가 현실 세계에서 10미터를 걷는 경우 가상 공간에서 이동한 거리는 머리 추적기가 보고한 대로 9미터에서 11미터 사이가 됩니다. 사용자가 50미터를 걸으면 오류가 +-5미터로 증가합니다. 사용자가 더 멀리 걸으면 오류가 더 증가합니다.

따라서 하나의 엔드포인트가 실제 공간에서 테이프 측정값의 영점에 완벽하게 정렬된 모델링 공간의 10미터 빔은 다른 쪽 끝을 9~11m 사이의 테이프 측정값에 등록합니다.

같은 이유로 공간 앵커를 사용하여 잠긴 각 월드의 여러 개체는 실제 공간과 가상 공간에서 서로 간의 거리가 다릅니다.

임의의 좌표계

또 다른 우려가 있습니다. HoloLens Unity 좌표계는 확정되지 않습니다. 이는 애플리케이션 시작 시 머리 포즈만을 기준으로 합니다.

이 임의성은 많은 작업에 문제가 되지 않습니다. 방의 공간 매핑으로 광선을 캐스팅하고 적중 위치에 홀로그램을 배치하는 것이 목표인 경우 적중 위치의 숫자 값은 관련이 없습니다.

마찬가지로 사용자 주위에 UX 요소를 표시할 때 UX 요소를 배치하는 절대 좌표는 중요하지 않으며, 사용자에 상대적인 좌표만 중요합니다.

그러나 예측할 수 없는 좌표계로 인해 더 많은 관련 시나리오가 복잡해질 수 있습니다. 사용자의 책상 또는 전체 사무실 공간과 같은 큰 개체 컬렉션을 물리적 공간과 고정된 관계로 가상 공간에 로드하려면 모델링 공간 개체를 머리 기준 좌표 프레임에 맞추기 위해 약간의 보정 변환이 필요합니다.

이러한 보정은 모든 개체를 단일 Unity 변환에 연결하고 해당 단일 변환을 조정하여 가상 개체를 현실 세계와 일치하도록 배치하고 방향을 지정하여 수행하는 경우가 많습니다.

마찬가지로 카메라 계층 구조의 단일 변환을 사용하여 카메라를 다시 정렬할 수 있으므로 사용자가 실제 참조 지점을 볼 때 원하는 모델링 좌표에 있는 가상 개체가 해당 피쳐에 오버레이로 표시됩니다.

솔루션

공간 고정 기능은 이러한 두 가지 문제를 한 번에 해결합니다. 이를 위해 World Locking Tools 글로벌 공간의 월드 고정 특성과 해당 공간의 임의성을 모두 활용합니다.

Unity 공간을 현실 세계와 정렬

World Locking Tools는 본질적으로 안정적인 월드 고정 좌표계를 제공합니다. 실제 피쳐에 등록된 월드 고정 공간에 배치된 가상 개체는 시간이 지남에 따라 해당 실제 피쳐에 등록된 상태로 유지됩니다.

그러나 그 목표를 만족시키는 공간의 개수는 무한합니다. 사실, 하나의 월드 고정 공간이 있을 때, 임의의 위치와 회전으로 변환하면 또 다른 동등하게 유효한 월드 고정 공간이 생성됩니다.

공간 핀 기능은 월드 고정 변환의 확정되지 않은 특성을 제거하는 또 다른 제약 조건을 적용합니다.

이 제약 조건은 공간 핀의 "근거리"에서 월드 고정 공간의 해당 공간 핀 포즈는 모델링 공간의 공간 핀 포즈와 동일하다는 것입니다.

전역 좌표(0, 0, 1)에 모델링된 Unity 장면의 정육면체를 고려해 보세요. 장면이 HoloLens에 로드되면 정육면체가 초기 머리 포즈의 1미터 앞에 표시됩니다. 초기 머리 포즈에 따라 이는 물리적 공간의 어느 곳에나 있을 수 있습니다.

공간 핀을 사용하면 해당 정육면체를 특정 책상의 모서리와 같은 회의실의 실제 피쳐에 고정할 수 있습니다. 공간 앵커를 사용하여 정육면체를 잠그는 것과 달리, 공간 핀은 정육면체가 책상 모서리에 정렬되도록 Unity 공간 전체를 이동합니다. 예를 들어 Unity의 정육면체를 기준으로 모델링된 다른 책상 물품은 실제 책상에 적절히 분산됩니다.

스케일링 오류 해결

단일 공간 핀은 가상 좌표와 현실 세계의 관계의 불확정성을 제거하지만 스케일링 오류를 해결하지는 않습니다.

즉, 원점을 물리적 세계에 맞춰진 위치와 방향으로 이동했을 수 있지만 현실 세계에서 10미터를 걸었는데 가상 공간에서는 여전히 사용자가 9미터만 이동할 수 있습니다.

이를 위해 여러 개의 공간 핀이 전체 솔루션을 제공합니다. 사용자가 특정 공간 핀 근처에 있으면 해당 공간 핀에 따라 세계가 정렬됩니다. 다른 공간 핀은 오정렬되지만 더 멀리 떨어져 있으므로 일반적으로 허용 가능하고 종종 인식할 수 없는 것으로 판명됩니다.

사용자가 공간 핀 사이를 이동할 때 매끄러운 보간은 공간의 모든 지점에서 스케일링 오류를 최소화합니다. 공간 핀의 적절한 밀도를 참조 지점으로 사용하면 현실 세계 및 가상 피쳐의 오정렬이 머리 추적기 오류 수준으로 줄어듭니다.

공간 핀의 필수 밀도는 환경이 지원하는 추적 품질과 애플리케이션의 정밀도 요구 사항에 따라 달라지지만 여기에 있는 일부 숫자는 기대치를 설정하는 데 도움이 될 수 있습니다. 추적할 적절한 조명과 가시적 피쳐가 있는 사무실 환경에서 공간 핀 사이에 10미터 간격을 두면 10미터에서 누적 10~20cm의 오류가 밀리미터 오류(최대 오류 l.t. 0.5cm, 엔드포인트에서 0.0cm 오류)로 줄어듭니다.

지속성

공간 핀 기능은 나머지 World Locking Tools의 지속성과 함께 작동합니다. 스크립트에서 저장 및 로드를 호출하는 수동 호출과 세션별 자동 저장 및 로드에 대한 플래그가 모두 있습니다.

사용하도록 설정하면 World Locking Tools Manager의 자동 저장/자동 로드 기능을 통해 이후 세션에서 가상 세계의 전체 공간 맞춤을 현실 세계로 복원할 수 있습니다.

실제로 지속성은 단일 또는 소수의 예비 세션을 사용하여 물리적 환경에 대한 적절한 검사를 설정하고 해당 물리적 환경을 Unity의 모델링 좌표 공간과 정렬하는 데 사용할 수 있음을 의미합니다. 이후 세션은 추가 사용자 작업 없이 현실 세계에 올바르게 정렬된 가상 환경을 로드합니다.

보간 및 외삽

보간 및 외삽은 직접 측정이 수행되지 않은 데이터 값을 예측하기 위한 기법입니다. 지금까지 설명한 대로 공간 핀은 측정이 이루어진 위치입니다. 가상 좌표는 원하는 좌표이며 물리적 좌표는 해당 가상 좌표를 표시하려는 측정된 좌표입니다.

시스템은 아래에 설명된 대로 보간을 수행하지만 외삽은 수행하지 않습니다. 일반적으로 보간은 외삽보다 안전하고 안정적입니다. 제공되는 조각별 선형 보간은 대부분의 애플리케이션 요구 사항을 충족합니다. 외삽은 덜 안전하며, 이상적인 구현을 위해서는 일반적으로 애플리케이션 수준의 지식이 필요합니다. 따라서 아래에 설명된 대로 외삽을 처리하는 임무가 애플리케이션에 주어집니다.

애플리케이션에서 외삽 핀을 추가하지 않으면 핀의 경계 외부에 있는 공간이 가장 가까운 경계의 값에 의해서만 고정됩니다. 핀이 A와 B 두 개만 있는 경우 사용자가 A에서 B로 이동할 때 A로 지정된 맞춤과 B(보간)로 지정된 맞춤 간에 고정이 혼합됩니다. 그러나 사용자가 B를 지나면 고정은 B(상수 확장)로 지정된 값으로 정확히 잠기게 됩니다.

보간

핀 사이의 2D 영역에서 공간 지역화는 선형으로 보간됩니다. 공간 핀이 정확하게 배치되고 추적 오류가 지역 전체에 균등하게 분산되는 경우 공간 핀 사이에 적용된 수정 사항이 정확합니다.

여기서 동일한 오류 분포의 가정이 정확하지 않다는 점을 강조하고 넘어가야 할 것 같습니다. 그러나 선형 모델은 대체적으로 우수한 수정 결과를 제공합니다.

외삽

이 시스템은 공간 핀의 볼록 집합(convex hull) 외부에 상수 값 확장을 사용하여 기본 제공 외삽 서비스를 제공하지 않습니다. 이 근사치는 물론 잘못된 것이지만 애플리케이션에서 제공한 공간 핀 외부에 스케일링 오류가 없다고 가정하는 것과 같습니다.

그러나 애플리케이션에서 오류 분포를 인식하고 있거나 추정치에 만족하는 경우 주변 장치에 더 많은 공간 핀을 추가하여 원하는 외삽을 만들 수 있습니다.

외삽 예제

가장자리 길이가 4미터인 정사각형에 배치된 4개의 공간 핀이 있는 장면을 고려하세요.

이제 사용자가 이동할 실제 공간은 12미터 x 12미터이며, 공간 중앙을 둘러싼 4개의 핀에 해당하는 물리적 마커가 있다고 가정해 보겠습니다.

애플리케이션이 일정한 오류 근사치에 만족하는 경우 전체 12x12m 공간에 적용하기 위해 4개 이상의 공간 핀을 추가하는 데 필요한 모든 정보가 있습니다.

4x4 정사각형 모서리에 있는 핀에 기본 방향 NE, NW, SW 및 SE 레이블을 지정합니다. 또한 virtualNE 등의 각 지점에 있는 가상 위치와 physicalNE 등의 각 지점에 있는 물리적 위치에도 레이블을 지정합니다.

4개의 공백 핀

한 가지 전략은 4개의 방위기점(outerNE, outerNW, outerSW 및 outerSE)을 더 추가하여 내부 사각형을 둘러싼 12미터 x 12미터 정사각형을 만드는 외부 방위기점을 추가하는 것입니다. 이러한 각 지점의 가상 및 물리적 위치는 간단하게 계산할 수 있습니다. outerNE를 예로 들면 다음과 같습니다.

virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);

8개의 공백 핀

20x20미터의 외삽 공간을 만들면 적용된 델타의 스케일링만 변경됩니다.

scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;

outerSize가 20m이고 innerSize가 4m이면 스케일링은 2가 됩니다.

다른 전략은 아래와 같이 모서리 외에 8개의 포인트를 더 추가하는 것입니다. 기존 핀 위치로 새 핀 위치를 계산하면 위와 같습니다. 핀을 더 추가하면 일반적으로 안정성이 향상되는 것이 사실이지만 정확도가 반드시 향상되는 것은 아닙니다.

12개의 공백 핀

장면의 하위 집합 정렬

지금까지 설명한 내용은 WorldLockingManager.GetInstance()가 소유하고 관리하는 글로벌 AlignmentManager와 관련이 있습니다. 앞에서 설명한 대로 이 기능은 전체 글로벌 Unity 좌표 공간을 전략적 참조 지점의 물리적 피쳐에 고정합니다.

그러나 장면의 하위 집합에 동일한 개념을 적용하는 경우가 있습니다.

예를 들어 두 자동차에 대한 주석을 로드하는 시나리오를 고려해 보세요. 두 물리적 자동차의 정확한 배치는 서로 다른 대리점의 레이아웃에 따라 달라질 수 있으므로 미리 알 수 없습니다. 그러나 물리적 차량 중 하나가 배포되면 해당 배포 포즈를 기준으로 하는 모든 구성 요소 부품의 위치를 알 수 있습니다.

이 시나리오에서는 공간 핀을 사용하여 각 차량에 대한 가상 섀시와 주석을 독립적으로 고정할 수 있습니다. 각 차량의 전체 가상 표현은 Unity에서 설정한 다음, 런타임에 물리적 차량에 매핑할 수 있습니다. 이 정렬은 MRTK UX를 사용하여 수동으로 수행하거나 QR 코드 또는 기타 전략을 사용하여 자동화할 수 있습니다. 가상 및 물리적 참조 지점 간의 대응 데이터가 결정되는 방식에 관계없이, 일단 고정 핀 API를 통해 WLT에 공급되면 WLT는 가상 및 물리적 개체를 지각적으로 최적화된 방식으로 정렬된 상태로 유지합니다.

전역 좌표 공간을 정렬하는 경우 조정 노드(일반적으로 카메라 부모의 부모)를 조작하여 정렬이 수행됩니다. 해당 노드는 WLT 사용을 위해 예약된 것으로 간주되어야 합니다. 해당 변환을 다르게 변조하면 정의되지 않은 동작이 발생합니다.

마찬가지로 하위 트리를 정렬할 때 정렬은 정렬할 하위 트리의 (하위) 루트에서 변환을 소유해야 합니다. 해당 변환을 외부에서 변조하면 정의되지 않은 동작이 발생합니다.

독립 공간은 고정되기 전에 전역 공간이 고정될 때 함께 드래그됩니다. 그러나 독립 공간이 고정되면 물리적 세계에 고정된 것으로 간주되므로 이후에 물리적 세계에 대한 전역 공간 고정을 수정해도 적용되지 않습니다.

추가 정보

참고 항목