손 추적 시스템은 사람의 손바닥과 손가락을 입력으로 사용합니다. 모든 손가락, 전체 손바닥 및 손 제스처의 위치 및 회전에 대한 데이터를 사용할 수 있습니다. Unreal 4.26부터 손 추적은 Unreal HeadMountedDisplay 플러그 인을 기반으로 하며 모든 XR 플랫폼 및 디바이스에서 공통 API를 사용합니다. 기능은 Windows Mixed Reality 및 OpenXR 시스템 모두에 대해 동일합니다.
손 포즈
손 포즈를 사용하면 사용자의 손과 손가락을 추적하고 입력으로 사용할 수 있으며, 청사진과 C++에서 모두 액세스할 수 있습니다. Unreal API는 틱이 Unreal Engine과 동기화된 좌표계로 데이터를 보냅니다.
Get Motion Controller Data 함수를 사용하여 사용자의 손에서 이 모든 데이터를 가져올 수 있습니다. 이 함수는 XRMotionControllerData 구조를 반환합니다. 다음은 XRMotionControllerData 구조를 구문 분석하여 손 조인트 위치를 가져오고 각 조인트의 위치에 디버그 좌표계를 그리는 샘플 청사진 스크립트입니다.
구조가 유효하고 손인지 검사 것이 중요합니다. 그렇지 않으면 위치, 회전 및 radii 배열에 대한 액세스에서 정의되지 않은 동작을 얻을 수 있습니다.
열거형은 EWMRHandKeypoint 손의 뼈 계층 구조를 설명합니다. 청사진에 나열된 각 손 키포인트를 찾을 수 있습니다.
이벤트 그래프에서 다음 노드를 사용하여 추적된 기하 도형 추가/업데이트/제거 시 덮어쓰기:
OpenXR의 손 메시 시각화
손 메시를 시각화하는 권장 방법은 Microsoft OpenXR 플러그 인과 함께 Epic의 XRVisualization 플러그 인을 사용하는 것입니다.
그런 다음 청사진 편집기에서 Enabled XRVisualization을 매개 변수로 사용하여 Microsoft OpenXR 플러그 인에서 손 메시 사용 설정 함수를 사용해야 합니다.
렌더링 프로세스를 관리하려면 XRVisualization에서 렌더링 동작 컨트롤러를 사용해야 합니다.
결과:
사용자 지정 셰이더로 손 메시를 그리는 것과 같이 더 복잡한 것이 필요한 경우 메시를 추적된 기하 도형으로 가져와야 합니다.
손 광선
손 포즈를 취하는 것은 개체를 잡거나 단추를 누르는 것과 같은 긴밀한 상호 작용에 적합합니다. 그러나 사용자에게서 멀리 떨어진 홀로그램으로 작업해야 하는 경우도 있습니다. 이 작업은 C++ 및 Blueprints 모두에서 포인팅 디바이스로 사용할 수 있는 손 광선으로 수행할 수 있습니다. 손에서 먼 지점까지 광선을 그릴 수 있으며 Unreal 광선 추적의 도움을 받아 손이 닿지 않는 홀로그램을 선택합니다.
Important
모든 함수 결과는 프레임마다 변경되므로 모두 호출할 수 있습니다. 순수하고 불순한 함수 또는 호출 가능한 함수에 대한 자세한 내용은 함수에 대한 Blueprint 사용자 GUID를 참조하세요.
손 광선에 대한 데이터를 얻으려면 이전 섹션의 동작 컨트롤러 데이터 가져오기 함수를 사용해야 합니다. 반환된 구조에는 손 광선을 만드는 데 사용할 수 있는 두 가지 매개 변수인 Aim Position 및 Aim Rotation이 포함되어 있습니다. 이러한 매개 변수는 팔꿈치가 지시하는 광선을 형성합니다. 당신은 그들을 데리고 가리키는 홀로그램을 찾아야한다.
다음은 손 광선이 위젯에 닿는지 여부를 확인하고 사용자 지정 적중 결과를 설정하는 예제입니다.
청사진에서 손 광선을 사용하려면 Windows Mixed Reality HMD에서 작업을 검색합니다.
C++에서 액세스하려면 호출 코드 파일의 맨 위에 포함합니다 WindowsMixedRealityFunctionLibrary.h .
열거형
또한 Blueprints에서 사용할 수 있는 EHMDInputControllerButtons의 입력 사례에 액세스할 수 있습니다.
C++에서 액세스하려면 다음 열거형 클래스를 EHMDInputControllerButtons 사용합니다.
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
다음은 적용 가능한 두 열거형 사례에 대한 분석입니다.
Select - 사용자가 Select 이벤트를 트리거했습니다.
HoloLens 2에서 에어 탭, 응시 및 커밋 또는 음성 입력이 활성화된 "선택"이라고 말하여 트리거됩니다.
파악 - 사용자가 트리거한 Grasp 이벤트입니다.
홀로그램에서 사용자의 손가락을 닫아 HoloLens 2에서 트리거됩니다.
아래 열거형을 통해 EHMDTrackingStatus C++에서 손 메시의 추적 상태 액세스할 수 있습니다.
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
다음은 적용 가능한 두 열거형 사례에 대한 분석입니다.
NotTracked –- 손이 보이지 않음
추적 – - 손은 완전히 추적됩니다.
구조체
PointerPoseInfo 구조체는 다음 손 데이터에 대한 정보를 제공할 수 있습니다.
원점 – 손의 원점
방향 – 손의 방향
위쪽 – 손의 위쪽 벡터
방향 – 방향 쿼터니언
추적 상태 – 현재 추적 상태
아래와 같이 Blueprints를 통해 PointerPoseInfo 구조체에 액세스할 수 있습니다.
HoloLens 2는 공간 제스처를 추적합니다. 즉, 이러한 제스처를 입력으로 캡처할 수 있습니다. 제스처 추적은 구독 모델을 기반으로 합니다. "제스처 구성" 함수를 사용하여 추적하려는 제스처를 디바이스에 알려야 합니다. 제스처에 대한 자세한 내용은 HoloLens 2 기본 사용 현황 문서입니다.
OpenXR에서 제스처 이벤트는 입력 파이프라인을 통해 추적됩니다. 장치는 손 조작을 사용하여 탭 및 홀드 제스처를 자동으로 인식할 수 있지만 다른 제스처는 인식할 수 없습니다. OpenXRMsftHandInteraction Select 및 Grip 매핑으로 이름이 지정됩니다. 구독을 사용하도록 설정할 필요가 없으며 다음과 같이 Project 설정/Engine/Input에서 이벤트를 선언해야 합니다.
호출 코드 파일에 추가하여 WindowsMixedRealitySpatialInputFunctionLibrary.h Windows Mixed Reality 공간 입력 및 C++ 함수 아래에서 Blueprint 함수를 찾을 수 있습니다.