Unreal의 직접 추적

손 추적 시스템은 사람의 손바닥과 손가락을 입력으로 사용합니다. 모든 손가락, 전체 손바닥 및 손 제스처의 위치 및 회전에 대한 데이터를 사용할 수 있습니다. Unreal 4.26부터 손 추적은 Unreal HeadMountedDisplay 플러그 인을 기반으로 하며 모든 XR 플랫폼 및 디바이스에서 공통 API를 사용합니다. 기능은 Windows Mixed Reality 및 OpenXR 시스템 모두에 대해 동일합니다.

손 포즈

손 포즈를 사용하면 사용자의 손과 손가락을 추적하고 입력으로 사용할 수 있으며 청사진과 C++에서 모두 액세스할 수 있습니다. Unreal API는 틱이 Unreal 엔진과 동기화된 좌표계로 데이터를 보냅니다.

관절 오버레이핸드 스켈레톤이 있는 손 골격 이미지

계층 구조는 열거형으로 EHandKeypoint 설명됩니다.

손 키포인트 블루프린트 옵션 이미지

동작 컨트롤러 데이터 가져오기 함수를 사용하여 사용자의 손에서 이 모든 데이터를 가져올 수 있습니다. 이 함수는 XRMotionControllerData 구조를 반환합니다. 다음은 XRMotionControllerData 구조를 구문 분석하여 손 조인트 위치를 얻고 각 조인트의 위치에 디버그 좌표계를 그리는 샘플 청사진 스크립트입니다.

채널 함수를 통해 선 추적에 연결된 응시 데이터 가져오기 함수의 청사진

구조가 유효하고 손인지 검사 것이 중요합니다. 그렇지 않으면 위치, 회전 및 반경 배열에 액세스할 때 정의되지 않은 동작이 발생할 수 있습니다.

손 포즈는 Live Link 플러그 인을 사용하여 애니메이션에 노출됩니다.

Windows Mixed Reality 및 Live Link 플러그 인이 사용하도록 설정된 경우:

  1. 창 > 라이브 링크를 선택하여 Live Link 편집기 창을 엽니다.
  2. 원본을 선택하고 Windows Mixed Reality 손 추적 원본을 사용하도록 설정

Live Link 원본

원본을 사용하도록 설정하고 애니메이션 자산을 연 후 장면 미리 보기 탭에서 애니메이션 섹션을 확장합니다. 추가 옵션도 볼 수 있습니다.

라이브 링크 애니메이션

손 애니메이션 계층 구조는 의 EWMRHandKeypoint와 동일합니다. 애니메이션은 WindowsMixedRealityHandTrackingLiveLinkRemapAsset를 사용하여 대상을 변경할 수 있습니다.

Live Link 애니메이션 2

편집기에서 서브클래스할 수도 있습니다.

Live Link 다시 매핑

손 메시

중요

손 메시에는 OpenXR이 필요합니다.

Microsoft OpenXR 플러그 인은 Unreal Marketplace 또는 GitHub에서 사용할 수 있어야 합니다.

추적된 기하 도형으로서의 손 메시

중요

OpenXR에서 손 메시를 추적된 기하 도형으로 가져오려면 Set Use Hand Mesh with Enabled Tracking Geometry를 호출해야 합니다.

해당 모드를 사용하도록 설정하려면 Set Use Hand Mesh with Enabled Tracking Geometry를 호출해야 합니다.

이벤트 시작 플레이의 청사진이 연결되어 설정된 추적 기하 도형 모드에서 손 메시 함수 사용 설정

참고

두 모드를 동시에 사용하도록 설정할 수 없습니다. 하나를 사용하도록 설정하면 다른 하나는 자동으로 비활성화됩니다.

손 메시 데이터 액세스

손 메시

손 메시 데이터에 액세스하려면 다음을 수행해야 합니다.

  • ARSessionConfig 자산을 선택하고, AR 설정 -> 세계 매핑 설정을 확장하고, 추적된 기하 도형에서 메시 데이터 생성을 검사.

기본 메시 매개 변수는 다음과 같습니다.

  1. 폐색에 메시 데이터 사용
  2. 메시 데이터에 대한 충돌 생성
  3. 메시 데이터에 대한 탐색 메시 생성
  4. Wireframe에서 메시 데이터 렌더링 – 생성된 메시를 보여 주는 디버그 매개 변수

이러한 매개 변수 값은 공간 매핑 메시 및 손 메시 기본값으로 사용됩니다. 언제든지 청사진 또는 모든 메시의 코드에서 변경할 수 있습니다.

C++ API 참조

를 사용하여 EEARObjectClassification 추적 가능한 모든 개체에서 손 메시 값을 찾습니다.

enum class EARObjectClassification : uint8
{
    // Other types
	HandMesh,
};

다음 대리자는 시스템이 손 메시를 포함하여 추적 가능한 개체를 검색할 때 호출됩니다.

class FARSupportInterface
{
    public:
    // Other params
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

대리자 처리기가 아래 함수 서명을 따르는지 확인합니다.

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

를 통해 메시 데이터에 액세스할 수 있습니다.UARTrackedGeometry::GetUnderlyingMesh

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

청사진 API 참조

청사진에서 손 메시를 작업하려면 다음을 수행합니다.

  1. 청사진 행위자로 ARTrackableNotify 구성 요소 추가

ARTrackable 알림

  1. 세부 정보 패널로 이동하여 이벤트 섹션을 확장합니다.

ARTrackable Notify 2

  1. 이벤트 그래프에서 다음 노드를 사용하여 추적된 기하 도형 추가/업데이트/제거 시 덮어씁니다.

ARTrackable 알림

OpenXR의 손 메시 시각화

손 메시를 시각화하는 권장 방법은 Microsoft OpenXR 플러그 인과 함께 Epic의 XRVisualization 플러그 인을 사용하는 것입니다.

그런 다음 청사진 편집기에서 Enabled XRVisualization을 매개 변수로 사용하여 Microsoft OpenXR 플러그 인에서 손 메시 사용 설정 함수를 사용해야 합니다.

xrvisualization 모드를 사용하도록 설정된 손 메시 함수 사용을 설정하기 위해 연결된 이벤트 시작 플레이의 청사진

렌더링 프로세스를 관리하려면 XRVisualization에서 렌더링 동작 컨트롤러 를 사용해야 합니다.

렌더링 모션 컨트롤러 함수에 연결된 get 모션 컨트롤러 데이터 함수의 청사진

결과:

실제 인간의 손에 오버레이된 디지털 손의 이미지

사용자 지정 셰이더로 손 메시를 그리는 것과 같이 더 복잡한 것이 필요한 경우 메시를 추적된 기하 도형으로 가져와야 합니다.

손 광선

손 포즈를 취하는 것은 개체를 잡거나 버튼을 누르는 것과 같은 긴밀한 상호 작용에 적합합니다. 그러나 사용자와 멀리 떨어져 있는 홀로그램으로 작업해야 하는 경우도 있습니다. 이 작업은 C++ 및 Blueprints 모두에서 포인팅 디바이스로 사용할 수 있는 손 광선으로 수행할 수 있습니다. 손에서 먼 지점까지 광선을 그릴 수 있으며 Unreal 광선 추적의 도움을 받아 손이 닿지 않는 홀로그램을 선택합니다.

중요

모든 함수 결과는 프레임마다 변경되므로 모두 호출할 수 있습니다. 순수하고 불순한 함수 또는 호출 가능한 함수에 대한 자세한 내용은 함수의 청사진 사용자 GUID 를 참조하세요.

손 광선에 대한 데이터를 얻으려면 이전 섹션의 동작 컨트롤러 데이터 가져오기 함수를 사용해야 합니다. 반환된 구조체에는 손 광선을 만드는 데 사용할 수 있는 두 개의 매개 변수인 Aim PositionAim Rotation이 포함되어 있습니다. 이러한 매개 변수는 팔꿈치가 지시하는 광선을 형성합니다. 당신은 그들을 데리고 가리키는 홀로그램을 찾아야합니다.

다음은 손 광선이 위젯에 닿는지 여부를 확인하고 사용자 지정 적중 결과를 설정하는 예제입니다.

모션 컨트롤러 데이터 함수 가져오기의 청사진

제스처

HoloLens 2 공간 제스처를 추적하므로 이러한 제스처를 입력으로 캡처할 수 있습니다. 제스처 추적은 구독 모델을 기반으로 합니다. "제스처 구성" 함수를 사용하여 추적하려는 제스처를 디바이스에 알려야 합니다. 제스처에 대한 자세한 내용은 HoloLens 2 기본 사용량 문서입니다.

Windows Mixed Reality

제스처 함수를 구성하기 위해 연결된 이벤트 시작 플레이의 청사진

그런 다음, 다음 이벤트를 구독하는 코드를 추가해야 합니다.

Windows 공간 입력 보류, 탭 및 왼쪽 조작 제스처의 청사진세부 정보 패널의 Windows 공간 입력 탭 제스처 옵션 스크린샷

OpenXR

OpenXR에서 제스처 이벤트는 입력 파이프라인을 통해 추적됩니다. 손 조작을 사용하여 디바이스는 탭 및 길게 누르기 제스처를 자동으로 인식할 수 있지만 다른 제스처는 인식할 수 없습니다. OpenXRMsftHandInteraction Select 및 Grip 매핑으로 이름이 지정됩니다. 구독을 사용하도록 설정할 필요가 없으며 다음과 같이 프로젝트 설정/엔진/입력에서 이벤트를 선언해야 합니다.

OpenXR 작업 매핑의 스크린샷

다음 개발 검사점

앞에서 설명한 Unreal 개발 과정을 따르고 있다면 현재 MRTK 핵심 구성 요소를 살펴보는 중입니다. 여기에서 다음 구성 요소로 진행할 수 있습니다.

또는 Mixed Reality 플랫폼 기능 및 API로 이동합니다.

언제든지 Unreal 개발 검사점으로 돌아갈 수 있습니다.