OpenXR 하드웨어에서 유니티 엔진 게임까지(OpenXR Plugin, XR Core Utilities, XR ITK)

반응형

OpenXR 하드웨어에서 유니티 엔진 게임까지

OpenXR 

하드웨어 표준 인터페이스 (OpenXR Runtime)
XR(VR/AR) 하드웨어 제조사별로 달랐던 API (Oculus SDK, SteamVR SDK 등)를 하나로 통합한 표준 프로토콜.
헤드셋과 컨트롤러의 위치 및 회전(Pose), 입력, 트래킹등의 데이터를 표준화된 구조(XrPosef, XrInputState 등)로 제공.
예를 들어 Meta Quest에서 트리거 입력이나 HMD 위치 변화가 발생하면, Quest의 OpenXR Runtime이 해당 데이터를 표준 형식으로 Unity(OpenXR Plugin)에 전달함.


XR Plugin(Unity OpenXR Plugin)

Unity에서 OpenXR Runtime과 직접 통신하는 Unity용 플러그인 계층
OpenXR의 C API 호출(xrGetActionStateFloat, xrLocateSpace, 등)을 Unity의 객체로 매핑
예를들어 OpenXR 데이터를 Unity의 Pose, Transform, InputDevice 등으로 변환
Unity와 OpenXR을 연결, 여기까지는 여전히 데이터를 넘겨주는 수준으로 좌표 변환, 공간 리셋, XR Origin 관리등 로직은 이 단계에서 제공하지 않음

 

XR Hardware - OpenXR Runtime (vendor implementation) - Application (Unity / Unreal 등)

Meta Quest  >> Meta OpenXR Runtime
SteamVR >> SteamVR OpenXR Runtime
Windows Mixed Reality >> WMR Runtime


XR Core Utilities

이제 이 부분이 등장합니다. Unity는 XR 데이터를 직접 사용할 때 이렇게 해야 합니다.
Unity 엔진 내부에서 XR 데이터를 다루기 위한 좌표계 변환 및 공통 유틸리티 패키지.
(XR Origin 관리, 공간 좌표 변환, 수학 함수 등 제공)
https://docs.unity3d.com/Packages/com.unity.xr.core-utils@2.2/manual/index.html

Unity에서 OpenXR Plugin만으로도 HMD의 위치/회전 추적과 컨트롤러 입력값(버튼, 스틱, 트리거) 을 가져올 수 있습니다.
즉 OpenXR Plugin은 “하드웨어 데이터를 Unity에 전달하는 역할”까지만 담당하기 때문에 XR Core Utilities 없이도 단순히 InputDevice로 입력을 읽거나 Camera를 XR Origin 없이 직접 움직이는 것은 가능합니다.
InputDevices.GetDeviceAtXRNode(XRNode.LeftHand)
    .TryGetFeatureValue(CommonUsages.trigger, out float triggerValue);

하지만 OpenXR이 제공하는 좌표계(Local, Stage, View space 등)는 Unity의 월드 좌표계와 다르기 때문에
이것을 정확히 동기화하지 않으면 플레이어 위치 및 회전이 엇나가거나 카메라 리셋이 제대로 안 됩니다.


XR Interaction Toolkit (XR ITK)

Input System과 연계되어 OpenXR의 입력 이벤트 처리
XR Core Utilities를 기반으로 동작하는 상위 레벨 상호작용 프레임워크.
XR Origin, 컨트롤러, 손 입력, 레이캐스트 상호작용, Grab/Teleport 등 구현.

 

 

XR Hardware
(Quest / Vive / WMR)
        ↓
OpenXR Runtime
        ↓
Unity OpenXR Plugin
(Unity XR Subsystem Provider)
        ↓
Unity XR Subsystems
(Display / Input / Tracking)
        ↓
XR Core Utilities
(XROrigin / Camera offset)
        ↓
XR Interaction Toolkit
(Grab / Teleport / Ray / UI)
        ↓
Unity Game Logic

반응형

댓글

Designed by JB FACTORY