1. 소개
2. 초기화
2.1. 기능 설명자
애플리케이션이 세션 중 메시 감지를 사용하는 데 관심이 있음을 알리려면, 적절한 기능 설명자를 사용하여 세션을 요청해야 한다. 문자열 mesh-detection은 이 모듈에서 메시 감지 기능을 위한 새로운 유효한 기능 설명자로 도입된다.
기기의 추적 시스템이 네이티브 메시 감지 기능을 노출하는 경우, 기기는 메시 감지 기능을 지원할 수 있다. 인라인 XR 기기는 메시 감지 기능을 지원할 수 있는 것으로 간주해서는 안 된다.
메시 감지 기능이 활성화된 상태로 세션이 생성되면, 메시 업데이트 알고리즘을 해당 세션의 프레임 업데이트 목록에 추가해야 한다.
const session= await navigator. xr. requestSession( "immersive-ar" , { requiredFeatures: [ "mesh-detection" ] });
3. 메시
3.1. XRMesh
[Exposed =Window ]interface { [XRMesh SameObject ]readonly attribute XRSpace ;meshSpace readonly attribute Float32Array ;vertices readonly attribute Uint32Array ;indices readonly attribute DOMHighResTimeStamp ;lastChangedTime readonly attribute DOMString ?; };semanticLabel
XRMesh는
기반 XR 시스템이 감지한 3D 기하 도형의 단일 인스턴스를 나타낸다.
meshSpace는
메시의 좌표계를 설정하는 XRSpace이다.
meshSpace의
네이티브 원점은 메시의 중심을 추적한다. 기반 XR 시스템은 메시 중심의 정확한 의미를 정의한다. meshSpace가
정의하는 좌표계의 Y축은 메시의 법선 벡터를 나타내야 한다.
각 XRMesh에는
연관된 네이티브 엔터티가 있다.
각 XRMesh에는
연관된 프레임이 있다.
vertices는
메시의 형태를 설명하는 정점 배열이다. 정점은 meshSpace가
정의하는 좌표계로 표현된다.
indices는
메시의 각 정점 색인을 설명하는 색인 배열이다.
lastChangedTime은
메시 속성 중 일부가 마지막으로 변경된 시간이다.
참고: 메시의 자세는 메시
속성으로 간주되지 않으므로 메시 자세를 업데이트해도 lastChangedTime이
변경되지 않는다. 이는 메시 자세가 서로 다른 두 엔터티인 meshSpace와
XRSpace로부터
파생되는 속성이며, 이 자세는 getPose()
함수를 통해 해당 XRSpace를 기준으로 계산되기 때문이다.
4. 감지된 메시 가져오기
4.1. XRMeshSet
[Exposed =Window ]interface {XRMeshSet readonly setlike <XRMesh >; };
XRMeshSet은
XRMesh의 모음이다. 이는
XRFrame에서
감지된 메시 모음을 가져오는 기본 메커니즘이다.
partial interface XRFrame {readonly attribute XRMeshSet ; };detectedMeshes
XRFrame은
프레임에서 여전히 추적 중인 모든 메시를 포함하는 detectedMeshes
속성을 포함하도록 확장된다. 집합은 처음에는 비어 있으며 메시
업데이트 알고리즘으로 채워진다. 프레임이 활성 상태가 아닐 때
이 속성에 접근하면 사용자 에이전트는 InvalidStateError를
발생시켜야 한다.
XRSession도
연관된 추적 중인 메시 집합을 포함하도록 확장되며, 이 집합은 처음에는
비어 있다. 집합의 요소는 XRMesh 유형이다.
-
session을 frame의 세션으로 둔다.
-
device를 session의 XR 기기로 둔다.
-
trackedMeshs를 frame의 시간에 추적 중인 메시를 가져오기 위해 device의 네이티브 메시 감지 기능을 호출한 결과로 둔다.
-
trackedMeshs의 각 native mesh에 대해 다음을 실행한다:
-
필요한 경우 native mesh가 trackedMeshs에 존재하지 않는 것처럼 처리하고 다음 항목으로 계속한다. 이러한 방식으로 항목을 무시할지 결정하는 데 사용할 수 있는 기준은 § 6 개인정보 보호 및 보안 고려사항을 참조한다.
-
session의 추적 중인 메시 집합에 native mesh와 대응하는 객체 mesh가 포함되어 있으면, mesh, native mesh, frame을 사용하여 메시 객체 업데이트 알고리즘을 호출하고 다음 항목으로 계속한다.
-
mesh를 native mesh와 frame을 사용하여 메시 객체 생성 알고리즘을 호출한 결과로 둔다.
-
mesh를 session의 추적 중인 메시 집합에 추가한다.
-
-
이 알고리즘을 호출하는 동안 생성되거나 업데이트되지 않은 session의 추적 중인 메시 집합의 각 객체를 제거한다.
-
frame의
detectedMeshes를 추적 중인 메시 집합으로 설정한다.
XRFrame
frame으로부터 메시
객체를 생성하기 위해 사용자 에이전트는 다음 단계를 실행해야 한다:
-
result를
XRMesh의 새로운 인스턴스로 둔다. -
result의 네이티브 엔터티를 native mesh로 설정한다.
-
result의
meshSpace를 세션이 frame의session으로 설정되고 네이티브 원점이 native mesh의 네이티브 원점을 추적하도록 설정되어 생성된 새로운XRSpace객체로 설정한다. -
result, native mesh, frame을 사용하여 메시 객체 업데이트 알고리즘을 호출한다.
-
result를 반환한다.
이러한 방식으로 생성된 메시 객체 result는 전달된 네이티브 메시 객체 native mesh에 대응한다고 한다.
XRFrame
frame으로부터 메시 객체 mesh를 업데이트하기
위해 사용자 에이전트는 다음 단계를 실행해야 한다:
-
mesh의 프레임을 frame으로 설정한다.
-
mesh의
vertices를 native mesh의 정점을 나타내는 새로운 정점 배열로 설정하고, 네이티브 메시 표현의 차이를 처리하는 데 필요한 모든 변환을 수행한다. -
mesh의
indices를 native mesh의 정점을 나타내는 새로운 색인 배열로 설정하고, 네이티브 메시 표현의 차이를 처리하는 데 필요한 모든 변환을 수행한다. -
필요한 경우 § 6 개인정보 보호 및 보안 고려사항에 설명된 대로 mesh의
vertices와indices의 세부 수준을 낮춘다. -
mesh의
lastChangedTime을 시간으로 설정한다.
5. 네이티브 기기 개념
5.1. 네이티브 메시 감지
메시 감지 API는 사용자 환경에서 감지된 3D 표면에 관한 정보를 제공한다. 이 명세에서는 사용자 에이전트가 메시 감지 기능을
구현하기 위해 기반 플랫폼에서 제공하는 네이티브 메시 감지 기능에 의존할 수 있다고 가정한다.
구체적으로, 기반 XR 기기는 특정 XRFrame의
시간에 대응하는 시점에 추적 중인 모든 메시를 질의하는 방법을 제공해야 한다.
또한 네이티브 메시 객체라고
하는 추적 중인 메시가 프레임 간에
정체성을 유지한다고 가정한다. 즉, 기반 시스템이 시간 t0에 반환한 메시 객체 P와
시간 t1에 반환한 메시 객체 Q가 주어졌을 때, 사용자 에이전트는 P와
Q가 동일한 논리적 메시 객체에 대응하는지 기반 시스템에 질의할 수 있다. 기반 시스템은 시간
t에서 자세의 위치를 질의하는 데 사용할 수 있는 네이티브 원점도 제공해야 하지만, 메시 자세가 항상 알려진다고 보장되지는 않는다
(예를 들어 여전히 추적 중이지만 특정 시점에 위치를 확인할 수 없는 메시의 경우). 또한 네이티브 메시 객체는 감지된 메시의 대략적인
형태를 설명하는 다각형을 노출해야 한다.
또한 기반 시스템은 XRAnchor
생성을 위해 네이티브 메시를 네이티브 엔터티로 인식해야 한다. 자세한 내용은 WebXR 앵커 모듈
§ native-anchor 절을 참조한다.
6. 개인정보 보호 및 보안 고려사항
메시 감지 API는 사용자의 물리적 환경에 관한 정보를 노출한다. 사용자 에이전트가 선택하는 경우 노출되는 메시 정보
(예: 메시의 다각형)를 제한할 수 있다. 사용자 에이전트가 노출되는 정보를 줄일 수 있는 몇 가지 방법은 다음과 같다:
메시 객체 업데이트
알고리즘에서 메시 다각형의 세부 수준을 낮추는 방법
(예를 들어 정점 수를 줄이거나 정점의 좌표를 반올림 / 양자화하는
방법), 또는 메시 업데이트 알고리즘의
trackedMeshs 모음에 메시 객체가
존재하지 않는 것처럼 동작하여 메시를 완전히 제거하는 방법(예를 들어 감지된 메시가 노출하기에는 너무 작거나 너무 상세하다고 판단되고
메시에서 노출되는 세부 정보를 줄이는 메커니즘을 사용자 에이전트가 구현하지 않은 경우 이 방법을 사용할 수 있다). 메시의 자세
(meshSpace에서
가져올 수 있음)도 양자화할 수 있다.
메시 감지 API의 개념은 [webxr-anchors-module] 명세에서 노출하는 메서드에 사용될 수 있으므로, WebXR 앵커 모듈과 관련된 개인정보 보호 및 보안 고려사항 중 일부도 여기에 적용된다. 자세한 내용은 WebXR 앵커 모듈 § privacy-security 절을 참조한다.
메시 감지 API가 WebXR 기기 API를 확장하는 방식으로 인해, WebXR 기기 API § 13. 보안, 개인정보 보호 및 편의성 고려사항 절도 WebXR 메시 감지 모듈에서 노출하는 기능에 적용된다.
7. 감사의 말
다음 사람들은 WebXR 메시 감지 명세의 설계에 기여했다: