공간 매핑

공간 매핑은 HoloLens 주변 환경의 실제 표면을 자세히 표현하여 개발자가 설득력 있는 혼합 현실 환경을 만들 수 있도록 합니다. 가상 세계와 실제 세계를 병합하여 애플리케이션은 홀로그램을 실제처럼 보이게 만들 수 있습니다. 또한 애플리케이션은 친숙한 실제 동작 및 상호 작용을 제공하여 사용자의 기대에 더 자연스럽게 부합할 수 있습니다.


디바이스 지원

기능 HoloLens(1세대) HoloLens 2 몰입형 헤드셋
공간 매핑 ✔️ ✔️

공간 매핑이 중요한 이유는 무엇인가요?

공간 매핑을 사용하면 개체를 실제 표면에 배치할 수 있습니다. 이렇게 하면 사용자 세계의 개체를 고정하고 실제 깊이 신호를 활용할 수 있습니다. 다른 홀로그램 및 실제 개체를 기반으로 홀로그램을 차단하면 이러한 홀로그램이 실제로 공간에 있다는 것을 사용자에게 확신시키는 데 도움이 됩니다. 홀로그램이 공간에 떠 있거나 사용자와 함께 움직이는 것은 실제처럼 느껴지지 않습니다. 가능하면 편의를 위해 물건을 놓습니다.

홀로그램을 배치하거나 이동할 때 표면을 시각화합니다(투영된 그리드 사용). 이렇게 하면 사용자가 홀로그램을 가장 잘 배치할 수 있는 위치를 파악할 수 있으며 홀로그램을 배치하려는 지점이 매핑되지 않은지 확인할 수 있습니다. 너무 많은 각도로 끝나면 사용자를 향해 "광고판 항목"을 사용할 수 있습니다.

개념적 개요

방을 덮는 메시 표면
방을 덮는 공간 매핑 메시의 예

공간 매핑에 사용되는 두 가지 기본 개체 유형은 '공간 표면 관찰자'와 '공간 표면'입니다.

애플리케이션은 공간 표면 관찰자에게 하나 이상의 경계 볼륨을 제공하여 애플리케이션이 공간 매핑 데이터를 수신하려는 공간 영역을 정의합니다. 이러한 각 볼륨에 대해 공간 매핑은 애플리케이션에 공간 표면 집합을 제공합니다.

이러한 볼륨은 고정되어 있거나(실제 세계를 기반으로 하는 고정된 위치에서) HoloLens에 연결될 수 있습니다(환경을 통해 이동할 때 HoloLens와 함께 이동하지만 회전하지 않음). 각 공간 표면은 세계에서 잠긴 공간 좌표계에 연결된 삼각형 메시로 표현되는 작은 공간의 실제 표면을 설명합니다.

HoloLens가 환경에 대한 새 데이터를 수집하고 환경 변경이 발생하면 공간 표면이 나타나고 사라지고 변경됩니다.

공간 인식 디자인 개념 데모

공간 인식 디자인 개념이 작동하는 것을 보려면 아래 홀로그램 디자인 - 공간 인식 비디오 데모를 검사. 완료되면 계속해서 특정 주제에 대해 자세히 알아봅니다.

이 비디오는 "홀로그램 디자인" HoloLens 2 앱에서 가져온 것입니다. 여기에서 전체 환경을 다운로드하여 즐겨보세요.

공간 매핑 및 장면 이해 WorldMesh

HoloLens 2 경우 장면 이해 SDK(EnableWorldMesh 설정)를 사용하여 공간 매핑 데이터의 정적 버전을 쿼리할 수 있습니다. 공간 매핑 데이터에 액세스하는 두 가지 방법의 차이점은 다음과 같습니다.

  • 공간 매핑 API:
    • 제한된 범위: 사용자 주위에 캐시된 제한된 크기의 '거품형'으로 애플리케이션에서 사용할 수 있는 공간 매핑 데이터입니다.
    • SurfacesChanged 이벤트를 통해 변경된 메시 영역의 짧은 대기 시간 업데이트를 제공합니다.
    • 입방 미터당 삼각형 매개 변수로 제어되는 가변 수준의 세부 정보입니다.
  • 장면 이해 SDK:
    • 무제한 범위 - 쿼리 반경 내에서 검사된 모든 공간 매핑 데이터를 제공합니다.
    • 공간 매핑 데이터의 정적 스냅샷 제공합니다. 업데이트된 공간 매핑 데이터를 가져오려면 전체 메시에 대한 새 쿼리를 실행해야 합니다.
    • RequestedMeshLevelOfDetail 설정으로 제어되는 일관된 세부 정보 수준입니다.

공간 매핑 품질에 영향을 미치는 것은 무엇인가요?

여기에 자세히 설명된 몇 가지 요인은 이러한 오류의 빈도 및 심각도에 영향을 줄 수 있습니다. 그러나 사용자가 공간 매핑 데이터에 오류가 있는 경우에도 목표를 달성할 수 있도록 애플리케이션을 디자인해야 합니다.

일반 시나리오

일반적인 공간 매핑 사용 시나리오 그림: 배치, 폐색, 물리학 및 탐색

배치

공간 매핑을 통해 애플리케이션은 사용자에게 자연스럽고 친숙한 형태의 상호작용을 제공할 수 있습니다. 휴대폰을 데스크에 내려놓는 것보다 더 자연스러운 것이 있을까요?

홀로그램의 배치(또는 이를 비롯한 모든 공간 위치)를 표면에 눕도록 제한하면 3D(공간 지점)에서 2D(표면의 점)로 자연스럽게 매핑할 수 있습니다. 이렇게 하면 사용자가 애플리케이션에 제공해야 하는 정보의 양이 줄어들고 사용자의 상호 작용이 더 빠르고 쉽고 정확해집니다. '멀리 떨어져 있는' 것은 다른 사람 또는 컴퓨터와 물리적으로 통신하는 데 익숙한 것이 아니기 때문입니다. 손가락을 가리키면 방향은 지정하지만 거리는 지정하지 않습니다.

여기서 중요한 주의 사항은 애플리케이션이 방향에서 거리를 유추할 때(예: 사용자의 응시 방향을 따라 광선캐스트를 수행하여 가장 가까운 공간 표면을 찾는 경우) 사용자가 안정적으로 예측할 수 있는 결과를 생성해야 한다는 것입니다. 그렇지 않으면 사용자는 제어 감각을 잃게 되며 이로 인하여 신속하게 좌절될 수 있습니다. 이를 도와주는 한 가지 방법은 광선캐스트를 하나만 수행하는 것이 아니라 여러 레이캐스트를 수행하는 것입니다. 집계 결과는 더 부드럽고 예측 가능해야 하며 일시적인 '이상값' 결과의 영향을 덜 받기 쉽습니다(작은 구멍을 통과하는 광선이나 사용자가 인식하지 못하는 작은 기하 도형 비트에 부딪치면 발생할 수 있음). 집계 또는 평활화는 시간이 지남에 따라 수행할 수도 있습니다. 예를 들어 홀로그램이 사용자와 거리가 다를 수 있는 최대 속도를 제한할 수 있습니다. 최소 및 최대 거리 값을 제한하는 것만으로도 도움이 될 수 있으므로 이동 중인 홀로그램이 갑자기 멀리 날아가거나 사용자의 얼굴에 다시 충돌하지 않습니다.

애플리케이션은 표면의 모양과 방향을 사용하여 홀로그램 배치를 안내할 수도 있습니다. 홀로그램 의자는 벽을 통과해서는 안되며 약간 고르지 않더라도 바닥과 플러시되어 앉아야합니다. 이러한 종류의 기능은 레이캐스트가 아닌 물리학 충돌을 사용하는 데 의존할 수 있지만 비슷한 문제가 적용됩니다. 배치되는 홀로그램에 의자의 다리처럼 튀어 나오는 많은 작은 다각형이 있는 경우, 다각형의 물리학 표현을 더 넓고 매끄러운 것으로 확장하여 스내깅하지 않고 공간 표면 위로 미끄러질 수 있도록 하는 것이 합리적일 수 있습니다.

극단적인 경우 사용자 입력을 완전히 간소화할 수 있으며 공간 표면을 사용하여 완전히 자동 홀로그램 배치를 수행할 수 있습니다. 예를 들어 애플리케이션은 사용자가 누를 수 있도록 홀로그램 조명 스위치를 벽 어딘가에 배치할 수 있습니다. 예측 가능성에 대한 동일한 주의 사항은 여기에서 두 배로 적용됩니다. 사용자가 홀로그램 배치에 대한 제어를 기대하지만 애플리케이션이 항상 필요한 위치에 홀로그램을 배치하지 않는 경우(라이트 스위치가 사용자가 도달할 수 없는 곳에 표시되는 경우) 이는 실망스러운 환경이 될 것입니다. 사용자가 항상 배치를 수행하도록 요구하는 것보다 사용자 수정이 필요한 자동 배치를 수행하는 것이 실제로 더 나쁠 수 있습니다. 자동 배치가 성공적이기 때문에 수동 수정은 부담처럼 느껴집니다!

또한 배치에 공간 표면을 사용하는 애플리케이션의 기능은 애플리케이션의 스캔 환경에 크게 좌우됩니다. 표면을 스캔하지 않은 경우 배치에 사용할 수 없습니다. 새 표면을 스캔하거나 새 위치를 선택할 수 있도록 사용자에게 이를 명확히 하는 것은 애플리케이션의 입니다.

사용자에 대한 시각적 피드백은 배치 중에 가장 중요합니다. 사용자는 홀로그램이 접지 효과가 있는 가장 가까운 표면을 기반으로 하는 위치를 알아야 합니다. 그들은 홀로그램의 움직임이 제한된 이유를 이해해야합니다 (예를 들어, 다른 근처의 표면과의 충돌로 인해). 현재 위치에 홀로그램을 배치할 수 없는 경우 시각적 피드백은 그 이유를 분명히 해야 합니다. 예를 들어 사용자가 홀로그램 소파를 벽에 반쯤 붙어 놓으려고 하면 벽 뒤에 있는 소파 부분이 화난 색으로 맥동해야 합니다. 또는 반대로 애플리케이션이 사용자가 실제 표면을 볼 수 있는 위치에서 공간 표면을 찾을 수 없는 경우 애플리케이션에서 이를 명확하게 해야 합니다. 이 영역에서 접지 효과의 명백한 부재는이 목적을 달성 할 수있다.

폐색

공간 매핑 표면의 주요 용도 중 하나는 홀로그램을 폐색하는 것입니다. 이 간단한 동작은 홀로그램의 인식된 리얼리즘에 큰 영향을 미치며, 실제로 사용자와 동일한 물리적 공간에 서식하는 내장 감각을 만드는 데 도움이 됩니다.

폐색은 사용자에게 정보도 제공합니다. 홀로그램이 실제 표면에 의해 가려진 것처럼 보일 때, 이것은 세계에서 홀로그램의 공간 위치에 대한 추가 시각적 피드백을 제공합니다. 반대로 폐색은 사용자의 정보를 유용하게 숨길 수도 있습니다. 벽 뒤에 홀로그램을 차단하면 직관적인 방식으로 시각적 혼란을 줄일 수 있습니다. 홀로그램을 숨기거나 표시하려면 사용자는 머리를 움직이기만 합니다.

폐색은 친숙한 물리적 상호 작용을 기반으로 자연 사용자 인터페이스에 대한 주요 기대에 사용될 수도 있습니다. 홀로그램이 표면에 의해 가려지면 표면이 견고하기 때문이므로 사용자는 홀로그램이 해당 표면과 충돌 하여 통과하지 못할 것으로 예상해야 합니다.

때때로 홀로그램 폐색은 바람직하지 않습니다. 사용자가 홀로그램과 상호 작용해야 하는 경우 실제 표면 뒤에 있더라도 볼 필요가 있습니다. 이러한 경우 일반적으로 홀로그램이 폐색될 때(예: 밝기를 줄임으로써) 이러한 홀로그램을 다르게 렌더링하는 것이 좋습니다. 이렇게 하면 사용자가 홀로그램을 시각적으로 찾을 수 있지만 여전히 그 뒤에 있다는 것을 알 수 있습니다.

Physics

물리학 시뮬레이션의 사용은 공간 매핑을 사용하여 사용자의 물리적 공간에서 홀로그램의 존재를 강화할 수 있는 또 다른 방법입니다. 내 홀로그램 고무 공이 현실적으로 내 책상에서 굴러 바닥을 가로 질러 반송하고 소파 아래에서 사라질 때, 나는 그것이 없다고 믿기 어려울 수 있습니다.

또한 물리학 시뮬레이션은 애플리케이션이 자연스럽고 친숙한 물리학 기반 상호 작용을 사용할 수 있는 기회를 제공합니다. 가구가 적절한 관성과 마찰로 바닥을 가로 질러 미끄러지는 것처럼 반응하면 바닥에 홀로그램 가구 조각을 이동하는 것이 더 쉬울 것입니다.

현실적인 물리적 동작을 생성하려면 구멍 채우기, 부동 환각 제거 및 거친 표면 부드럽게와 같은 일부 메시 처리를 수행해야 할 수 있습니다.

또한 애플리케이션의 스캔 환경 이 물리학 시뮬레이션에 미치는 영향을 고려해야 합니다. 첫째, 누락된 표면은 아무것도 충돌하지 않습니다. 고무 공이 복도에서 굴러 내려와 알려진 세계의 끝에서 떨어지면 어떻게됩니까? 둘째, 시간이 지남에 따라 환경의 변화에 계속 대응할지 여부를 결정해야 합니다. 경우에 따라 가능한 한 빨리 응답하려고 합니다. 사용자가 들어오는 로마 화살표의 폭풍우에 대한 방어에 이동 바리케이드로 문과 가구를 사용하는 경우 말한다. 하지만 다른 경우에는 새 업데이트를 무시할 수 있습니다. 당신의 개가 트랙의 중간에 앉아하기로 결정하는 경우 바닥에 경마장 주위에 홀로그램 스포츠카를 운전하는 것은 갑자기 그렇게 재미없을 수 있습니다.

애플리케이션은 공간 매핑 데이터를 사용하여 홀로그램 문자(또는 에이전트)에게 실제 사용자가 실제와 동일한 방식으로 실제 세계를 탐색할 수 있는 기능을 부여할 수 있습니다. 이렇게 하면 사용자 및 친구와 동일한 자연스럽고 친숙한 동작 집합으로 제한하여 홀로그램 문자의 존재를 강화하는 데 도움이 될 수 있습니다.

탐색 기능은 사용자에게도 유용할 수 있습니다. 지정된 영역에 탐색 맵이 빌드되면 해당 위치에 익숙하지 않은 새 사용자에게 홀로그램 방향을 제공하기 위해 공유할 수 있습니다. 이 지도는 보행자 '교통량'이 원활하게 흐르도록 하거나 건설 현장과 같은 위험한 장소에서 사고를 피할 수 있도록 설계될 수 있습니다.

탐색 기능 구현과 관련된 주요 기술적 과제는 걷기 쉬운 표면(인간은 테이블을 걷지 않음)을 안정적으로 감지하고 환경의 변화에 정상적으로 적응하는 것입니다(인간은 닫힌 문을 통과하지 않음). 메시는 가상 문자의 경로 계획 및 탐색에 사용하기 전에 약간의 처리 가 필요할 수 있습니다. 메시를 부드럽게 하고 환각을 제거하면 문자가 중단되는 것을 방지하는 데 도움이 될 수 있습니다. 메시를 대폭 간소화하여 캐릭터의 경로 계획 및 탐색 계산 속도를 높일 수도 있습니다. 이러한 과제는 비디오 게임 기술 개발에 많은 관심을 받았으며, 이러한 topics 대한 풍부한 연구 문헌이 있습니다.

애플리케이션이 시작될 때까지 표면을 알 수 없으므로 Unity의 기본 제공 NavMesh 기능은 기본적으로 공간 매핑 표면에 사용할 수 없습니다. 그러나 NavMeshComponents를 설치하여 런타임 중에 NavMesh를 빌드할 있습니다. 공간 매핑 시스템은 사용자의 현재 위치에서 멀리 떨어진 표면에 대한 정보를 제공하지 않습니다. 넓은 영역의 맵을 빌드하려면 애플리케이션이 표면을 "기억"해야 합니다. 공간 인식 프로필에서 관찰 익스텐트 설정을 늘려 NavMesh를 빌드할 수 있는 영역을 늘릴 수도 있습니다.

시각화

대부분의 경우 공간 표면이 보이지 않는 것이 적절합니다. 시각적 혼란을 최소화하고 실제 세계가 스스로 말할 수 있도록 합니다. 그러나 실제 개체가 표시되더라도 공간 매핑 표면을 직접 시각화하는 것이 유용한 경우도 있습니다.

예를 들어 사용자가 홀로그램을 표면에 배치하려고 할 때(예를 들어, 홀로그램 캐비닛을 벽에 배치) 표면에 그림자를 캐스팅하여 홀로그램을 '접지'하는 것이 유용할 수 있습니다. 이렇게 하면 사용자에게 홀로그램과 표면 간의 정확한 물리적 근접성을 훨씬 더 명확하게 이해할 수 있습니다. 이는 사용자가 커밋하기 전에 변경 내용을 시각적으로 '미리 보기'하는 보다 일반적인 사례의 예이기도 합니다.

표면을 시각화하면 애플리케이션이 환경에 대한 이해를 사용자와 공유할 수 있습니다. 예를 들어 홀로그램 보드 게임은 '테이블'로 식별된 가로 표면을 시각화하여 사용자가 상호 작용할 위치를 알 수 있습니다.

화면을 시각화하는 것은 보기에서 숨겨져 있는 사용자에게 가까운 공간을 표시하는 유용한 방법이 될 수 있습니다. 이것은 사용자가 거실에서 주방 (및 모든 포함 홀로그램)에 액세스 할 수있는 방법을 제공 할 수 있습니다.

공간 매핑에서 제공하는 표면 메시는 특히 '클린'일 수 없습니다. 적절하게 시각화하는 것이 중요합니다. 기존 조명 계산은 시각적으로 산만한 방식으로 표면 노멀의 오류를 강조 표시할 수 있으며, 표면에 투영된 '클린' 질감은 더 단정한 모양을 제공하는 데 도움이 될 수 있습니다. 표면이 렌더링되기 전에 메시 처리를 수행하여 메시 속성을 개선할 수도 있습니다.

참고

HoloLens 2 배치, 폐색, 물리학 및 탐색의 구현을 간소화하도록 설계된 구조화된 고급 환경 표현을 Mixed Reality 개발자에게 제공하는 새로운 Scene Understanding 런타임을 구현합니다.

Surface 관찰자 사용

공간 매핑의 시작점은 표면 관찰자입니다. 프로그램 흐름은 다음과 같습니다.

  • 표면 관찰자 개체 만들기
    • 하나 이상의 공간 볼륨을 제공하여 애플리케이션이 공간 매핑 데이터를 수신하려는 관심 영역을 정의합니다. 공간 볼륨은 단순히 구 또는 상자와 같은 공간 영역을 정의하는 셰이프입니다.
    • 월드 잠금 공간 좌표계가 있는 공간 볼륨을 사용하여 실제 세계의 고정 영역을 식별합니다.
    • 각 프레임을 본문 잠금 공간 좌표계로 업데이트한 공간 볼륨을 사용하여 사용자와 함께 이동하지만 회전하지 않는 공간 영역을 식별합니다.
    • 이러한 공간 볼륨은 애플리케이션 또는 사용자의 상태 변경될 때 언제든지 변경될 수 있습니다.
  • 폴링 또는 알림을 사용하여 공간 표면에 대한 정보 검색
    • 언제든지 공간 표면 상태 대한 표면 관찰자를 '폴링'할 수 있습니다. 대신 공간 표면이 변경되었을 때 애플리케이션에 알리는 표면 관찰자의 '표면 변경' 이벤트에 등록할 수 있습니다.
    • 뷰 frustum 또는 본문 잠금 볼륨과 같은 동적 공간 볼륨의 경우 애플리케이션은 관심 영역을 설정한 다음 현재 공간 표면 집합을 가져와 각 프레임의 변경 내용을 폴링해야 합니다.
    • 단일 방을 덮는 월드 잠금 큐브와 같은 정적 볼륨의 경우 애플리케이션은 해당 볼륨 내의 공간 표면이 변경되었을 때 알림을 받을 'surface changed' 이벤트에 등록할 수 있습니다.
  • 표면 변경 처리
    • 제공된 공간 표면 집합을 반복합니다.
    • 공간 표면을 추가, 변경 또는 제거된 것으로 분류합니다.
    • 추가되거나 변경된 각 공간 표면에 대해 적절한 경우 원하는 세부 수준에서 표면의 현재 상태를 나타내는 업데이트된 메시를 수신하도록 비동기 요청을 제출합니다.
  • 비동기 메시 요청을 처리합니다(다음 섹션의 자세한 내용).

메시 캐싱

공간 표면은 조밀한 삼각형 메시로 표시됩니다. 이러한 메시를 저장, 렌더링 및 처리하면 상당한 계산 및 스토리지 리소스를 사용할 수 있습니다. 따라서 각 애플리케이션은 메시 처리 및 스토리지에 사용되는 리소스를 최소화하기 위해 필요에 맞게 메시 캐싱 체계를 채택해야 합니다. 이 체계는 유지할 메시와 삭제할 메시 및 각 공간 표면에 대한 메시를 업데이트할 시기를 결정해야 합니다.

여기서 설명하는 많은 고려 사항은 애플리케이션이 메시 캐싱에 접근하는 방법을 직접 알려줍니다. 사용자가 환경을 통해 이동하는 방법, 필요한 표면, 다른 표면이 관찰되는 시기 및 환경의 변경 내용을 캡처해야 하는 경우를 고려해야 합니다.

표면 관찰자가 제공하는 'surface changed' 이벤트를 해석할 때 기본 메시 캐싱 논리는 다음과 같습니다.

  • 애플리케이션에서 이전에 보지 못한 공간 표면 ID를 볼 경우 이를 새 공간 표면으로 처리해야 합니다.
  • 애플리케이션에 알려진 ID가 있지만 새 업데이트 시간이 있는 공간 표면이 표시되는 경우 이를 업데이트된 공간 표면으로 처리해야 합니다.
  • 애플리케이션에서 알려진 ID가 있는 공간 표면을 더 이상 볼 수 없는 경우 이를 제거된 공간 표면으로 처리해야 합니다.

다음을 선택하는 것은 각 애플리케이션에 달려 있습니다.

  • 새 공간 표면의 경우 메시를 요청해야 하나요?
    • 일반적으로 메시는 사용자에게 유용한 새 정보를 제공할 수 있는 새 공간 표면에 대해 즉시 요청해야 합니다.
    • 그러나 사용자 근처와 앞의 새 공간 표면에 우선 순위가 지정되어야 하며 먼저 메시를 요청해야 합니다.
    • 새 메시가 필요하지 않은 경우 예를 들어 애플리케이션이 환경 모델을 영구적으로 또는 일시적으로 '고정'한 경우 요청하면 안 됩니다.
  • 업데이트된 공간 표면의 경우 메시를 요청해야 하나요?
    • 사용자 근처와 앞의 업데이트된 공간 표면에 우선 순위가 지정되어야 하며 먼저 메시를 요청해야 합니다.
    • 특히 스캔 환경 중에 업데이트된 표면보다 새 표면에 더 높은 우선 순위를 부여하는 것이 적절할 수 있습니다.
    • 처리 비용을 제한하기 위해 애플리케이션은 공간 표면에 대한 업데이트를 처리하는 속도를 제한하려고 할 수 있습니다.
    • 예를 들어 표면의 범위가 작은 경우처럼 공간 표면의 변경 내용이 미미하다는 것을 유추할 수 있습니다. 이 경우 업데이트가 처리하기에 충분하지 않을 수 있습니다.
    • 사용자의 현재 관심 영역 외부의 공간 표면에 대한 업데이트 완전히 무시될 수 있지만, 이 경우 표면 관찰자가 사용하는 공간 경계 볼륨을 수정하는 것이 더 효율적일 수 있습니다.
  • 제거된 공간 표면의 경우 메시를 삭제해야 하나요?
    • 일반적으로 홀로그램 폐색이 올바른 상태로 유지되도록 제거된 공간 표면의 경우 메시를 즉시 삭제해야 합니다.
    • 그러나 애플리케이션이 공간 표면이 곧 다시 나타날 것이라고 믿을 만한 이유가 있는 경우(사용자 환경의 디자인에 따라) 메시를 삭제하고 나중에 다시 만드는 것보다 이를 유지하는 것이 더 효율적일 수 있습니다.
    • 애플리케이션이 사용자 환경의 대규모 모델을 빌드하는 경우 메시를 전혀 삭제하지 않을 수 있습니다. 하지만 공간 표면이 사라지면 메시를 디스크로 스풀링하여 리소스 사용을 제한해야 합니다.
    • 공간 표면 생성 중에 비교적 드문 일부 이벤트는 공간 표면이 비슷한 위치에 있지만 ID가 다른 새 공간 표면으로 대체될 수 있습니다. 따라서 제거된 표면을 삭제하지 않도록 선택하는 애플리케이션은 동일한 위치를 덮는 여러 개의 매우 겹치는 공간 표면 메시로 끝나지 않도록 주의해야 합니다.
  • 다른 공간 표면에 대해 메시를 삭제해야 하나요?
    • 공간 표면이 있는 동안에도 사용자의 환경에 더 이상 유용하지 않은 경우 삭제해야 합니다. 예를 들어 애플리케이션이 출입구 반대편에 있는 방을 대체 가상 공간으로 '대체'하는 경우 해당 공간의 공간 표면은 더 이상 중요하지 않습니다.

다음은 공간 및 임시 hysteresis를 사용하는 메시 캐싱 전략의 예입니다.

  • 주위를 둘러보고 탐색할 때 사용자의 시선 뒤에 있는 frustum 모양의 공간 볼륨을 사용하려는 애플리케이션을 고려합니다.
  • 사용자가 표면에서 멀리 보이거나 더 멀리 떨어져 있기 때문에 공간 표면이 이 볼륨에서 일시적으로 사라질 수 있습니다. 잠시 후 뒤를 돌아보거나 더 가까워지기만 합니다. 이 경우 이 표면에 대한 메시를 삭제하고 다시 만드는 것은 많은 중복 처리를 나타냅니다.
  • 처리된 변경 횟수를 줄이기 위해 애플리케이션은 두 개의 공간 표면 관찰자를 사용합니다. 하나는 다른 공간 관찰자에 포함됩니다. 더 큰 볼륨은 구형이며 사용자 'lazily'를 따릅니다. 중심이 사용자의 2.0미터 이내인지 확인하기 위해 필요한 경우에만 이동합니다.
  • 새롭고 업데이트된 공간 표면 메시는 항상 더 작은 내부 표면 관찰자에서 처리되지만 메시는 더 큰 외부 표면 관찰자에서 사라질 때까지 캐시됩니다. 이렇게 하면 애플리케이션이 로컬 사용자 이동으로 인해 많은 중복 변경 내용을 처리하지 않도록 할 수 있습니다.
  • 또한 추적 손실로 인해 공간 표면이 일시적으로 사라질 수 있으므로 애플리케이션은 손실 추적 중에 제거된 공간 표면을 삭제하는 것도 연기합니다.
  • 일반적으로 애플리케이션은 업데이트 처리 감소와 메모리 사용량 증가 간의 절충을 평가하여 이상적인 캐싱 전략을 결정해야 합니다.

렌더링

공간 매핑 메시가 렌더링에 사용되는 세 가지 기본 방법이 있습니다.

  • 표면 시각화의 경우
    • 공간 표면을 직접 시각화하는 것이 유용한 경우가 많습니다. 예를 들어 개체에서 공간 표면으로 '그림자'를 캐스팅하면 홀로그램을 표면에 배치하는 동안 사용자에게 유용한 시각적 피드백을 제공할 수 있습니다.
    • 유의해야 할 한 가지는 공간 메시가 3D 아티스트가 만들 수 있는 메시의 종류와 다르다는 것입니다. 삼각형 토폴로지는 사람이 만든 토폴로지만큼 '클린'이 아니라 메시에 다양한 오류가 발생합니다.
    • 만족스러운 시각적 미학을 만들려면 구멍이나 매끄러운 표면 노멀을 채우기 위해 메시 처리를 할 수 있습니다. 셰이더를 사용하여 메시 토폴로지와 노멀을 직접 시각화하는 대신 아티스트가 디자인한 텍스처를 메시에 프로젝트할 수도 있습니다.
  • 실제 표면 뒤에 홀로그램을 폐색하는 경우
    • 공간 표면은 깊이 버퍼 에만 영향을 미치고 색 렌더링 대상에 영향을 주지 않는 깊이 전용 패스로 렌더링할 수 있습니다.
    • 이렇게 하면 깊이 버퍼가 이후 렌더링된 홀로그램을 공간 표면 뒤에서 차단할 수 있습니다. 홀로그램의 정확한 폐색은 홀로그램이 실제로 사용자의 물리적 공간 내에 존재한다는 감각을 향상시킵니다.
    • 깊이 전용 렌더링을 사용하도록 설정하려면 혼합 상태를 업데이트하여 모든 색 렌더링 대상에 대해 RenderTargetWriteMask 를 0으로 설정합니다.
  • 실제 표면에 의해 가려진 홀로그램의 모양을 수정하는 경우
    • 일반적으로 렌더링된 기하 도형은 가려지면 숨겨집니다. 이는 깊이 스텐실 상태 의 깊이 함수를 "작거나 같음"으로 설정하여 기하 도형이 이전에 렌더링된 모든 기하 도형보다 카메라에 더 가까운 곳에만 표시됩니다.
    • 그러나 특정 기하 도형이 가려져 있더라도 표시되도록 유지하고 사용자에게 시각적 피드백을 제공하는 방법으로 가려질 때 모양을 수정하는 것이 유용할 수 있습니다. 예를 들어 이를 통해 애플리케이션은 실제 표면 뒤에 있음을 분명히 하면서 사용자에게 개체의 위치를 표시할 수 있습니다.
    • 이를 위해 원하는 '폐색' 모양을 만드는 다른 셰이더를 사용하여 기하 도형을 두 번째로 렌더링합니다. 기하 도형을 두 번째로 렌더링하기 전에 깊이 스텐실 상태를 두 번 변경합니다. 먼저 깊이 함수를 "보다 크거나 같음"으로 설정하여 기하 도형이 이전에 렌더링된 모든 기하 도형보다 카메라에서 더 멀리 있는 경우에만 표시되도록 합니다. 둘째, 깊이 버퍼가 수정되지 않도록 DepthWriteMask를 0으로 설정합니다(깊이 버퍼는 카메라에 가장 가까운 기하 도형의 깊이를 계속 나타내야 합니다).

공간 매핑 메시를 렌더링할 때 성능은 중요한 문제입니다. 다음은 공간 매핑 메시 렌더링과 관련된 몇 가지 렌더링 성능 기술입니다.

  • 삼각형 밀도 조정
    • 표면 관찰자로부터 공간 표면 메시를 요청할 때 요구 사항에 적합한 가장 낮은 삼각형 메시 밀도를 요청합니다.
    • 사용자와의 표면 거리 및 사용자 환경과의 관련성에 따라 표면별로 표면의 삼각형 밀도를 다양하게 적용하는 것이 합리적일 수 있습니다.
    • 삼각형 수를 줄이면 GPU의 메모리 사용량 및 꼭짓점 처리 비용이 감소하지만 픽셀 처리 비용에는 영향을 주지 않습니다.
  • frustum 컬링 사용
    • Frustum 컬링은 현재 디스플레이 frustum 외부에 있으므로 볼 수 없는 그리기 개체를 건너뜁니다. 이렇게 하면 CPU 및 GPU 처리 비용이 모두 줄어듭니다.
    • 컬링은 메시별로 수행되고 공간 표면이 클 수 있으므로 각 공간 표면 메시를 더 작은 청크로 깨뜨리면 더 효율적인 컬링이 발생할 수 있습니다(오프스크린 삼각형이 렌더링되는 경우 적음). 그러나 단점이 있습니다. 메시가 많을수록 더 많은 그리기 호출을 수행해야 하므로 CPU 비용이 증가할 수 있습니다. 극단적인 경우, frustum 컬링 계산 자체에는 측정 가능한 CPU 비용도 있을 수 있습니다.
  • 렌더링 순서 조정
    • 공간 표면은 주변 사용자의 전체 환경을 나타내기 때문에 큰 경향이 있습니다. GPU의 픽셀 처리 비용은 높으며, 특히 두 개 이상의 보이는 기하 도형 계층(공간 표면과 다른 홀로그램 모두 포함)이 있는 경우 더욱 그렇습니다. 이 경우 사용자에게 가장 가까운 계층이 모든 계층을 더 멀리 폐색하므로 더 먼 계층을 렌더링하는 데 소요된 GPU 시간이 낭비됩니다.
    • GPU에서 이러한 중복 작업을 줄이기 위해 불투명한 표면을 앞뒤 순서로 렌더링하는 데 도움이 됩니다(먼저 더 가깝고 더 먼 표면은 마지막). '불투명'으로 DepthWriteMask가 깊이 스텐실 상태의 표면으로 설정된 표면을 의미합니다. 가장 가까운 표면이 렌더링되면 GPU의 픽셀 프로세서에서 더 먼 표면을 효율적으로 건너뛸 수 있도록 깊이 버퍼를 프라이밍합니다.

메시 처리

애플리케이션은 필요에 맞게 공간 표면 메시에서 다양한 작업을 수행할 수 있습니다. 각 공간 표면 메시와 함께 제공되는 인덱스 및 꼭짓점 데이터는 모든 최신 렌더링 API에서 삼각형 메시를 렌더링하는 데 사용되는 꼭짓점 및 인덱스 버퍼와 동일한 친숙한 레이아웃을 사용합니다. 그러나 주의해야 할 한 가지 중요한 사실은 공간 매핑 삼각형에 시계 방향의 전면 구불구불한 순서가 있다는 것입니다. 각 삼각형은 메시의 인덱스 버퍼에 있는 세 개의 꼭짓점 인덱스로 표시되며, 이러한 인덱스는 삼각형이 전면에서 볼 때 시계 방향으로 삼각형의 꼭짓점을 식별합니다. 공간 표면 메시의 앞면(또는 바깥쪽)은 실제 표면의 전면(가시) 쪽에 예상하는 것과 일치합니다.

응용 프로그램은 표면 관찰자가 제공하는 가장 거친 삼각형 밀도가 여전히 충분히 거친 경우에만 메시 단순화를 수행해야 합니다. 이 작업은 계산 비용이 많이 들고 런타임에서 이미 수행되어 제공된 다양한 수준의 세부 정보를 생성합니다.

각 표면 관찰자는 연결되지 않은 여러 공간 표면을 제공할 수 있기 때문에 일부 애플리케이션은 이러한 공간 표면 메시를 서로 클리핑한 다음 함께 압축할 수 있습니다. 일반적으로 가까운 공간 표면 메시가 약간 겹치기 때문에 클리핑 단계가 필요합니다.

레이캐스팅 및 충돌

물리학 API(예: Havok)가 공간 표면에 대한 레이캐스팅 및 충돌 기능을 애플리케이션에 제공하려면 애플리케이션이 물리학 API에 공간 표면 메시를 제공해야 합니다. 물리학에 사용되는 메시에는 다음과 같은 속성이 있는 경우가 많습니다.

  • 작은 수의 삼각형만 포함합니다. 물리학 작업은 렌더링 작업보다 계산 집약적입니다.
  • 그들은 '물 꽉'입니다. 고체로 의도된 표면에는 작은 구멍이 없어야 합니다. 구멍이 너무 작아서 볼 수 없더라도 문제가 발생할 수 있습니다.
  • 그들은 공록 선체로 변환됩니다. 공각 선체에는 다각형이 거의 없으며 구멍이 없으며 원시 삼각형 메시보다 훨씬 더 계산적으로 효율적으로 처리할 수 있습니다.

공간 표면에 대해 광선 캐스트를 할 때, 이러한 표면은 종종 복잡한 것을 명심, 지저분한 작은 세부 사항의 전체 어수선한 모양 - 그냥 책상처럼! 즉, 단일 레이캐스트는 표면의 모양과 그 근처의 빈 공간의 모양에 대한 충분한 정보를 제공하기에 충분하지 않은 경우가 많습니다. 일반적으로 작은 영역 내에서 많은 레이캐스트를 수행하고 집계 결과를 사용하여 표면에 대한 보다 신뢰할 수 있는 이해를 도출하는 것이 좋습니다. 예를 들어 평균 10개의 레이캐스트를 사용하여 표면에 홀로그램 배치를 안내하면 단일 광선캐스트만 사용하는 훨씬 더 부드럽고 덜 '지터리' 결과를 얻을 수 있습니다.

그러나 각 레이캐스트는 높은 계산 비용을 가질 수 있습니다. 사용 시나리오에 따라 공간 표면의 구멍을 원활하고 제거하기 위해 메시 처리 의 계산 비용(모든 프레임마다 수행)과 추가 레이캐스트의 계산 비용을 절상해야 합니다(공간 메시가 업데이트되는 경우 수행).

환경 검사 환경

공간 매핑을 사용하는 각 애플리케이션은 '검색 환경'을 제공하는 것을 고려해야 합니다. 애플리케이션이 올바르게 작동하는 데 필요한 표면을 검사하도록 사용자를 안내하는 프로세스입니다.

검사 예제
검사 예제

이 검사 환경의 특성은 각 애플리케이션의 요구 사항에 따라 크게 달라질 수 있지만 두 가지 기본 원칙이 디자인을 안내해야 합니다.

첫째, 사용자와의 명확한 통신이 주요 관심사입니다. 사용자는 항상 애플리케이션의 요구 사항이 충족되는지 여부를 알고 있어야 합니다. 충족되지 않는 경우 사용자에게 왜 그렇게 되었는지 즉시 명확히 알 수 있어야 하며 신속하게 적절한 조치를 취해야 합니다.

둘째, 애플리케이션은 효율성과 안정성 간의 균형을 맞추려고 시도해야 합니다. 안정적 으로 수행할 수 있는 경우 애플리케이션은 공간 매핑 데이터를 자동으로 분석하여 사용자 시간을 절약해야 합니다. 안정적으로 수행할 수 없는 경우 애플리케이션 대신 사용자가 애플리케이션에 필요한 추가 정보를 신속하게 제공할 수 있도록 해야 합니다.

올바른 검사 환경을 설계하는 데 도움이 되도록 애플리케이션에 적용할 수 있는 다음 가능성을 고려합니다.

  • 검사 환경 없음

    • 단계별 검사 환경 없이 애플리케이션이 완벽하게 작동할 수 있습니다. 자연스러운 사용자 이동 과정에서 관찰되는 표면에 대해 알아봅니다.
    • 예를 들어 사용자가 홀로그램 스프레이 페인트로 표면에 그릴 수 있는 애플리케이션에는 현재 사용자에게 표시되는 표면에 대한 지식만 필요합니다.
    • 사용자가 이미 HoloLens를 사용하여 많은 시간을 소비한 환경인 경우 환경을 이미 검사할 수 있습니다.
    • 그러나 공간 매핑에 사용되는 카메라는 사용자 앞에서 3.1m만 볼 수 있으므로 사용자가 과거에 더 가까운 거리에서 관찰하지 않는 한 공간 매핑은 더 이상 먼 표면에 대해 알 수 없습니다.
    • 따라서 사용자는 스캔된 표면을 이해하므로 애플리케이션은 이 효과에 대한 시각적 피드백을 제공해야 합니다. 예를 들어 가상 그림자를 스캔된 표면에 캐스팅하면 사용자가 해당 표면에 홀로그램을 배치하는 데 도움이 될 수 있습니다.
    • 이 경우 공간 표면 관찰자의 경계 볼륨은 사용자를 따르도록 각 프레임을 본문 잠금 공간 좌표계로 업데이트해야 합니다.
  • 적합한 위치 찾기

    • 애플리케이션은 특정 요구 사항이 있는 위치에서 사용하도록 설계될 수 있습니다.
    • 예를 들어 애플리케이션은 홀로그램 쿵푸를 안전하게 연습할 수 있도록 사용자 주위에 빈 영역이 필요할 수 있습니다.
    • 애플리케이션은 사용자에게 특정 요구 사항을 미리 전달하고 명확한 시각적 피드백으로 강화해야 합니다.
    • 이 예제에서 애플리케이션은 필요한 빈 영역의 범위를 시각화하고 이 영역 내에서 원치 않는 개체의 존재를 시각적으로 강조 표시해야 합니다.
    • 이 경우 공간 표면 관찰자의 경계 볼륨은 선택한 위치에서 세계로 잠긴 공간 좌표계 를 사용해야 합니다.
  • 적합한 표면 구성 찾기

    • 애플리케이션은 거울의 홀로그램 홀을 만들기 위해 표면의 특정 구성이 필요할 수 있습니다, 예를 들어 두 개의 크고 평평한, 반대 벽.
    • 이러한 경우 애플리케이션은 공간 매핑에서 제공하는 표면을 분석하여 적합한 표면을 감지하고 사용자를 해당 표면으로 안내해야 합니다.
    • 애플리케이션의 표면 분석이 신뢰할 수 없는 경우 사용자에게 대체 옵션이 있어야 합니다. 예를 들어 애플리케이션이 출입문을 평평한 벽으로 잘못 식별하는 경우 사용자는 이 오류를 수정하는 간단한 방법이 필요합니다.
  • 환경의 일부 검사

    • 애플리케이션은 사용자의 지시에 따라 환경의 일부만 캡처하려고 할 수 있습니다.
    • 예를 들어 애플리케이션은 사용자가 판매하려는 가구에 대한 홀로그램 분류 광고를 게시할 수 있도록 회의실의 일부를 스캔합니다.
    • 이 경우 애플리케이션은 검사 중에 사용자가 관찰한 지역 내에서 공간 매핑 데이터를 캡처해야 합니다.
  • 방 전체를 스캔합니다.

    • 애플리케이션은 사용자 뒤에 있는 표면을 포함하여 현재 회의실의 모든 표면을 검사해야 할 수 있습니다.
    • 예를 들어, 게임은 모든 방향에서 접근 작은 릴리푸티안 수백에서 포위, 걸리버의 역할에 사용자를 넣을 수 있습니다.
    • 이러한 경우 애플리케이션은 이미 스캔된 현재 회의실의 표면 수를 확인하고 사용자의 시선이 상당한 간격을 채우도록 지시해야 합니다.
    • 이 프로세스의 핵심은 사용자에게 아직 검사되지 않은 표면을 명확하게 하는 시각적 피드백을 제공하는 것입니다. 예를 들어 애플리케이션은 거리 기반 안개 를 사용하여 공간 매핑 표면에서 다루지 않는 영역을 시각적으로 강조 표시할 수 있습니다.
  • 환경의 초기 스냅샷 수행

    • 애플리케이션은 초기 '스냅샷'을 수행한 후 환경의 모든 변경 내용을 무시할 수 있습니다.
    • 이는 환경의 초기 상태와 긴밀하게 결합된 사용자 생성 데이터의 중단을 방지하는 데 적합할 수 있습니다.
    • 이 경우 애플리케이션은 검색이 완료되면 초기 상태에서 공간 매핑 데이터의 복사본을 만들어야 합니다.
    • 홀로그램이 환경에 의해 올바르게 가려진 경우 애플리케이션은 공간 매핑 데이터에 대한 업데이트를 계속 받아야 합니다.
    • 공간 매핑 데이터에 대한 지속적인 업데이트를 통해 발생한 모든 변경 내용을 시각화하여 사용자에게 환경의 이전 상태와 현재 상태 간의 차이점을 명확히 할 수 있습니다.
  • 환경의 사용자 시작 스냅샷 만들기

    • 애플리케이션은 사용자의 지시에 따라 환경 변경에만 대응할 수 있습니다.
    • 예를 들어 사용자는 서로 다른 순간에 포즈를 캡처하여 친구의 여러 3D '동상'을 만들 수 있습니다.
  • 사용자가 환경을 변경할 수 있도록 허용

    • 애플리케이션은 사용자 환경에서 변경된 내용에 실시간으로 응답하도록 설계될 수 있습니다.
    • 예를 들어 커튼을 그리는 사용자는 다른 쪽에서 일어나는 홀로그램 플레이에 대해 '장면 변경'을 트리거할 수 있습니다.
  • 공간 매핑 데이터의 오류를 방지하도록 사용자를 안내합니다.

    • 애플리케이션은 환경을 검사하는 동안 사용자에게 지침을 제공할 수 있습니다.
    • 이렇게 하면 사용자가 공간 매핑 데이터에서 특정 종류의 오류를 방지하는 데 도움이 될 수 있습니다(예: 햇빛이 켜진 창이나 미러에서 멀리 떨어져 있음).

주의해야 할 한 가지 추가 세부 사항은 공간 매핑 데이터의 '범위'가 무제한이 아니라는 것입니다. 공간 매핑은 큰 공간의 영구 데이터베이스를 빌드하지만 사용자 주변의 제한된 크기의 '거품형'으로 애플리케이션에서만 해당 데이터를 사용할 수 있도록 합니다. 긴 복도의 시작 부분에서 시작하여 처음부터 충분히 멀리 걸어가면 결국 시작 부분에 다시 공간 표면이 사라집니다. 사용 가능한 공간 매핑 데이터에서 사라진 후 애플리케이션에서 해당 표면을 캐싱하여 이를 완화할 수 있습니다.

메시 처리

표면에서 일반적인 유형의 오류를 감지하고 공간 매핑 데이터를 적절하게 필터링, 제거 또는 수정하는 데 도움이 될 수 있습니다.

공간 매핑 데이터는 실제 표면에 가능한 한 충실하기 위한 것이므로 모든 처리가 '진실'에서 표면을 더 멀리 이동하는 위험을 적용합니다.

다음은 유용한 다양한 유형의 메시 처리 예제입니다.

  • 구멍 채우기

    • 어두운 재료로 만든 작은 물체가 스캔에 실패하면 주변 표면에 구멍이 남습니다.
    • 구멍은 폐색에 영향을 미칩니다 : 홀로그램은 불투명한 실제 표면에 구멍을 '통해'볼 수 있습니다.
    • 구멍은 광선 투사에 영향을 줍니다. 사용자가 표면과 상호 작용하는 데 도움이 되는 레이캐스트를 사용하는 경우 이러한 광선이 구멍을 통과하는 것이 바람직하지 않을 수 있습니다. 한 가지 완화 방법은 적절한 크기의 영역을 포함하는 여러 레이캐스트 번들을 사용하는 것입니다. 이렇게 하면 '이상값' 결과를 필터링할 수 있으므로 하나의 광선캐스트가 작은 구멍을 통과하더라도 집계 결과는 여전히 유효합니다. 그러나 이 방법은 계산 비용이 발생합니다.
    • 구멍은 물리학 충돌에 영향을 줍니다. 물리학 시뮬레이션에 의해 제어되는 개체는 바닥의 구멍을 통해 떨어질 수 있으며 손실될 수 있습니다.
    • 이러한 구멍을 표면 메시에 알고리즘적으로 채울 수 있습니다. 그러나 창 및 출입구와 같은 '실제 구멍'이 채워지지 않도록 알고리즘을 조정해야 합니다. '실제 구멍'을 '가상의 구멍'과 안정적으로 구별하기 어려울 수 있으므로 '크기'와 '경계 모양'과 같은 다양한 추론을 실험해야 합니다.
  • 환각 제거

    • 반사, 밝은 조명 및 움직이는 물체는 작은 느린 '환각'을 공중에 떠 있을 수 있습니다.
    • 환각은 폐색에 영향을 미칩니다: 환각은 어두운 모양이 앞에서 움직이고 그밖 홀로그램을 폐색할 때 보일 수 있습니다.
    • 환각은 광선 투사에 영향을 미칩니다: 사용자가 표면과 상호 작용하는 데 도움이 되는 레이캐스트를 사용하는 경우, 이러한 광선은 그 뒤에 있는 표면 대신 환각에 부딪힐 수 있습니다. 구멍과 마찬가지로 한 가지 완화는 단일 레이캐스트 대신 많은 레이캐스트를 사용하는 것이지만, 다시 계산 비용이 듭니다.
    • 환각은 물리학 충돌에 영향을 미칩니다: 물리학 시뮬레이션에 의해 제어되는 개체는 환각에 붙어 있고 공간의 겉보기에 명확한 영역을 통해 이동할 수 없습니다.
    • 표면 메시에서 이러한 환각을 필터링할 수 있습니다. 그러나 구멍과 마찬가지로 램프 스탠드 및 도어 핸들과 같은 실제 작은 개체가 제거되지 않도록 알고리즘을 조정해야 합니다.
  • 다듬기

    • 공간 매핑은 실제 표면과 비교하여 거칠거나 '시끄러운' 것처럼 보이는 표면을 반환할 수 있습니다.
    • 부드러움은 물리학 충돌에 영향을 미칩니다. 바닥이 거칠면 물리적으로 시뮬레이션된 골프공이 직선으로 매끄럽게 굴러가지 못할 수 있습니다.
    • 부드러움은 렌더링에 영향을 줍니다. 표면이 직접 시각화되면 거친 표면 노멀이 모양에 영향을 미치고 '클린' 모양을 방해할 수 있습니다. 표면을 렌더링하는 데 사용되는 셰이더에서 적절한 조명 및 텍스처를 사용하여 이를 완화할 수 있습니다.
    • 표면 메시에서 거칠기를 부드럽게 할 수 있습니다. 그러나 이것은 해당 실제 표면에서 표면을 더 멀리 밀어 붙일 수 있습니다. 정확한 홀로그램 폐색을 생성하고 사용자가 홀로그램 표면과 정확하고 예측 가능한 상호 작용을 달성할 수 있도록 하려면 긴밀한 대응을 유지하는 것이 중요합니다.
    • 외관상의 변경만 필요한 경우 꼭짓점 위치를 변경하지 않고 꼭짓점 법선의 부드러움으로 충분할 수 있습니다.
  • 평면 찾기

    • 애플리케이션이 공간 매핑에서 제공하는 표면에서 수행할 수 있는 다양한 형태의 분석이 있습니다.
    • 한 가지 간단한 예는 '평면 찾기'입니다. 표면의 경계, 주로 평면 영역을 식별합니다.
    • 평면 영역은 홀로그램 작업 표면으로 사용할 수 있으며, 애플리케이션에서 홀로그램 콘텐츠를 자동으로 배치할 수 있는 영역입니다.
    • 평면 영역은 사용자 인터페이스를 제한하여 사용자가 자신의 요구에 가장 적합한 표면과 상호 작용하도록 안내할 수 있습니다.
    • 평면 영역은 LCD 화면, 테이블 또는 화이트보드와 같은 기능 개체에 대해 홀로그램에 대응하는 실제 환경에서와 같이 사용할 수 있습니다.
    • 평면 지역은 재생 영역을 정의하여 비디오 게임 수준의 기초를 형성할 수 있습니다.
    • 평면 지역은 실제 사람들이 걸을 가능성이 있는 층 영역을 식별하여 가상 에이전트가 실제 세계를 탐색하는 데 도움이 될 수 있습니다.

프로토타입 및 디버깅

유용한 도구

  • HoloLens 에뮬레이터를 사용하여 물리적 HoloLens에 액세스하지 않고 공간 매핑을 사용하여 애플리케이션을 개발할 수 있습니다. HoloLens 동작, 공간 좌표계 및 공간 매핑 메시를 포함하여 애플리케이션에서 일반적으로 사용하는 모든 데이터를 사용하여 실제 환경에서 HoloLens에서 라이브 세션을 시뮬레이션할 수 있습니다. 이는 문제를 디버깅하고 코드의 변경 내용을 평가하는 데 유용할 수 있는 신뢰할 수 있는 반복 가능한 입력을 제공하는 데 사용할 수 있습니다.
  • 시나리오를 재현하려면 라이브 HoloLens에서 네트워크를 통해 공간 매핑 데이터를 캡처한 다음 디스크에 저장하고 이후 디버깅 세션에서 다시 사용합니다.
  • Windows 디바이스 포털 3D 보기는 공간 매핑 시스템을 통해 현재 사용 가능한 모든 공간 표면을 볼 수 있는 방법을 제공합니다. 이는 애플리케이션 내의 공간 표면에 대한 비교의 기초를 제공합니다. 예를 들어 공간 표면이 누락되었거나 잘못된 위치에 표시되는지 쉽게 알 수 있습니다.

일반 프로토타입 지침

  • 공간 매핑 데이터의 오류 는 사용자의 환경에 큰 영향을 줄 수 있으므로 다양한 환경에서 애플리케이션을 테스트하는 것이 좋습니다.
  • 책상과 같이 항상 같은 위치에서 테스트하는 습관에 갇지 마십시오. 다양한 위치, 모양, 크기 및 재질의 다양한 표면에서 테스트해야 합니다.
  • 마찬가지로 가상 또는 기록된 데이터는 디버깅에 유용할 수 있지만 동일한 몇 가지 테스트 사례에 너무 의존하지 마세요. 이렇게 하면 더 다양한 테스트가 이전에 발견했을 중요한 문제를 찾는 것이 지연될 수 있습니다.
  • 실제(그리고 이상적으로는 캐시되지 않은) 사용자와 테스트를 수행하는 것이 좋습니다. 이는 HoloLens 또는 애플리케이션이 사용자와 똑같은 방식으로 사용되지 않을 수 있기 때문입니다. 사실, 사람들의 행동, 지식 및 가정이 얼마나 다른지 놀랄 수 있습니다!

문제 해결

  • 표면 메시의 방향을 올바르게 지정하려면 각 GameObject가 SurfaceObserver로 전송되기 전에 활성화되어야 메시가 생성됩니다. 그렇지 않으면 메시가 공간에 표시되지만 이상한 각도로 회전합니다.
  • SurfaceObserver와 통신하는 스크립트를 실행하는 GameObject를 원본으로 설정해야 합니다. 그렇지 않으면 메시를 생성하기 위해 SurfaceObserver에 만들고 보내는 모든 GameObject는 부모 게임 개체의 오프셋과 동일한 오프셋을 갖습니다. 이렇게 하면 메시가 몇 미터 떨어진 곳에 표시되어 진행 중인 작업을 디버그하기가 어려울 수 있습니다.

추가 정보