Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

설정

OpenXR에는 OpenXR이 시작될 때 적용되는 자체 설정 세트가 있습니다. Godot 플러그인을 통해 구현된 OpenXR 확장이 추가 설정을 추가하는 것이 가능하지만, 여기서는 Godot의 핵심 설정에 대해서만 논의하겠습니다.

../../_images/openxr_settings.webp

일반 편집기 작업

활성화

이 설정은 Godot가 시작될 때 OpenXR 모듈을 활성화합니다. 이는 Vulkan 백엔드를 사용할 때 필요합니다. 다른 백엔드의 경우 :ref:`OpenXRInterface <class_openxrinterface>`에서 ``initialize``를 호출하여 언제든지 OpenXR을 활성화할 수 있습니다.

액션 맵 편집기에 액세스하려면 이 기능도 활성화해야 합니다.

--xr-mode on 명령줄 스위치를 사용하여 이를 강제로 켤 수 있습니다.

빛 애니메이션

이는 OpenXR이 로드하고 XR 런타임과 통신할 동작 맵 파일의 경로를 지정합니다.

형식

이는 게임이 다음을 위해 설계되었는지 여부를 지정합니다.

  • Meta Quest, Valve Index, Magic Leap 등의 Head Mounted 장치,

  • 전화기와 같은 Handheld 장치.

게임을 실행하는 장치가 여기에서 선택한 것과 일치하지 않으면 OpenXR이 초기화되지 않습니다.

구성 보기

이는 게임의 보기 구성을 지정합니다.

  • Mono, 게임은 단일 이미지 출력을 제공합니다. 예: 전화 기반 AR;

  • Stereo, 게임에서 스테레오 이미지 출력을 제공합니다. 예: 머리 장착 장치.

게임을 실행하는 장치가 여기에서 선택한 것과 일치하지 않으면 OpenXR이 초기화되지 않습니다.

참고

OpenXR에는 Godot가 아직 지원하지 않는 매우 특정한 장치에 대한 추가 보기 구성이 있습니다. 예를 들어 Varjo 헤드셋에는 두 세트의 스테레오 이미지를 출력하는 쿼드 뷰 구성이 있습니다. 이는 가까운 시일 내에 지원될 수 있습니다.

구현

XR 내에서는 플레이어의 머리 및 손과 같은 모든 요소가 추적 볼륨 내에서 추적됩니다. 이 추적 볼륨의 기본에는 가상 공간을 실제 공간에 매핑하는 원점이 있습니다. 그러나 사용된 XR 시스템에 따라 이 지점을 다른 위치에 배치하는 다양한 시나리오가 있습니다. OpenXR에서는 이러한 시나리오가 참조 공간을 설정하여 잘 정의되고 선택됩니다.

위치

로컬 참조 공간은 기본적으로 플레이어의 머리에 원점을 배치합니다. 일부 XR 런타임은 게임이 시작될 때마다 이 작업을 수행하고 다른 일부는 세션 동안 위치를 유지합니다.

그러나 이 참조 공간은 사용자가 떠나는 것을 막지 않으므로 사용자가 제어 중인 차량에서 떠나는 것을 방지하려면 사용자가 떠나는지 감지해야 하며, 이는 잠재적으로 게임을 중단시킬 수 있습니다.

이 참조 공간은 플레이어의 머리가 있어야 하는 위치에 XROrigin3D 노드를 배치하려는 비행 시뮬레이터 또는 레이싱 시뮬레이터와 같은 게임에 가장 적합한 옵션입니다.

사용자가 XR 런타임마다 방법이 다른 헤드셋에서 최근 옵션을 실행하면 XR 런타임은 XRCamera3D 노드로 이동합니다. OpenXRInterface <class_openxrinterface>`도 ``pose_recentered` 시그널를 방출하므로 게임이 이에 따라 반응할 수 있습니다.

참고

컨트롤러나 앵커와 같은 다른 XR 추적 요소도 이에 따라 조정됩니다.

경고

이 참조 공간을 사용할 때 ``center_on_hmd``를 호출하면 안 됩니다.

무대

스테이지 참조 공간은 기본 참조 공간이며 원점을 플레이 공간의 중앙에 배치합니다. 가디언 경계를 그릴 수 있는 XR 런타임의 경우 이 위치와 방향은 사용자가 설정하는 경우가 많습니다. 다른 XR 런타임은 다른 방법으로 이 지점의 배치를 결정할 수 있습니다. 그러나 이는 현실 세계에서는 고정된 지점입니다.

이 참조 공간은 사용자가 더 넓은 공간을 돌아다녀야 하는 룸 규모 게임이나 게임 모드 간에 전환해야 하는 게임에 가장 적합한 옵션입니다. 자세한 내용은 :ref:`Room Scale <doc_xr_room_scale>`을 참조하세요.

사용자가 헤드셋에서 최근 옵션을 실행하면(방법은 XR 런타임마다 다름) XR 런타임은 원점을 변경하지 않습니다. OpenXRInterface <class_openxrinterface>`는 ``pose_recentered` 시그널를 방출하며 적절하게 반응하는 것은 게임에 달려 있습니다. 그렇지 않으면 다양한 상점에서 게임이 승인되지 않습니다.

Godot에서는 XRServer <class_xrserver>`에서 ``center_on_hmd` 함수를 호출하여 이를 수행할 수 있습니다:

  • XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, false)``를 호출하면 :ref:`XRCamera3D <class_xrcamera3d>` 노드가 ``Local 참조 공간과 유사한 XROrigin3D 노드로 이동됩니다.

  • XRServer.center_on_hmd(XRServer.RESET_BUT_KEEP_TILT, true)``를 호출하면 :ref:`XRCamera3D <class_xrcamera3d>` 노드가 ``Local Floor 참조와 유사하게 플레이어의 키를 유지하면서 XROrigin3D 노드 위로 이동합니다. 공간.

참고

컨트롤러나 앵커와 같은 다른 XR 추적 요소도 이에 따라 조정됩니다.

로컬 좌표

로컬 바닥 참조 공간은 플레이어가 있는 원점을 배치한다는 점에서 로컬 참조 공간과 유사합니다. 그러나 이 모드에서는 플레이어의 키가 유지됩니다. 로컬 참조 공간과 마찬가지로 일부 XR 런타임은 세션 동안 이 위치를 유지합니다.

따라서 플레이어가 원점에 서 있을 것이라는 보장은 없으며, 유일한 보장은 사용자가 마지막으로 중심을 잡았을 때 플레이어가 그곳에 서 있었다는 것입니다. 따라서 플레이어는 자유롭게 떠날 수도 있습니다.

이 참조 공간은 사용자가 같은 위치에 서 있을 것으로 예상되는 게임이나 사용자의 인터페이스 요소가 원점 노드에 바인딩되고 더 최근에 플레이어의 위치에 빠르게 배치되는 AR 유형 게임에 가장 적합한 옵션입니다.

사용자가 XR 런타임마다 방법이 다른 헤드셋에서 최근 옵션을 실행하면 XR 런타임은 XRCamera3D 노드 위로 이동하지만 플레이어의 키는 유지합니다. OpenXRInterface <class_openxrinterface>`도 ``pose_recentered` 시그널를 방출하므로 게임이 이에 따라 반응할 수 있습니다.

경고

플레이어의 가상 움직임과 함께 이 모드를 사용할 때는 주의하십시오. 이 시나리오에서 사용자가 중심을 다시 맞추는 것은 중심 맞추기 시그널를 처리할 때 이동에 대응하지 않는 한 예측할 수 없습니다. 이 시나리오의 효과는 플레이어가 제한을 벗어나야 하는 위치로 순간 이동하는 기능을 포함하여 가상 이동 중에 원점이 배치된 추상 위치로 순간 이동하는 것이기 때문에 게임을 중단시킬 수도 있습니다. 이 시나리오에서는 스테이지 모드를 사용하고 pose_recentered 시그널가 수신될 때만 방향 재설정을 제한하는 것이 좋습니다.

참고

컨트롤러나 앵커와 같은 다른 XR 추적 요소도 이에 따라 조정됩니다.

경고

이 참조 공간을 사용할 때 ``center_on_hmd``를 호출하면 안 됩니다.

환경 블렌드 모드

환경 블렌드 모드는 헤드셋에서 지원하는 경우 렌더링된 출력이 "실제 세계"에 블렌딩되는 방식을 정의합니다.

  • ``Opaque``는 출력이 현실 세계를 모호하게 하고 VR 모드에 있음을 의미합니다.

  • ``Additive``는 출력이 현실 세계에 추가됨을 의미합니다. 이는 광학 장치로 현실 세계를 완전히 모호하게 할 수 없는 AR 모드입니다(예: Hololens).

  • ``Alpha``는 알파 출력을 사용하여 출력이 실제 세계와 혼합됨을 의미합니다(뷰포트에는 투명한 배경이 활성화되어야 함). 이는 광학 장치가 실제 세계를 완전히 가릴 수 있는 AR 모드입니다(Magic Leap, 모든 통과 장치 등).

헤드셋에서 지원하지 않는 모드를 선택한 경우 첫 번째로 사용 가능한 모드가 선택됩니다.

참고

일부 OpenXR 장치에는 통과 활성화/비활성화를 위한 별도의 시스템이 있습니다. Godot 4.3부터 알파 블렌드 모드를 선택하면 이러한 추가 단계도 수행됩니다. 이를 위해서는 최신 공급업체 플러그인을 설치해야 합니다.

최적화(Optimization)

사용된 하드웨어에서 이 기능을 지원하는 경우 렌더링 시 사용되는 포베에이션 수준을 설정합니다. 포비에이션은 콘텐츠를 렌더링하는 뷰포트의 중심에서 멀어질수록 렌더링하는 해상도가 낮아지는 기술입니다. 대부분의 XR 런타임은 고정된 초점만 지원하지만 일부는 시선 추적을 고려하고 이 효과에 초점을 사용합니다.

레벨이 높을수록 성능은 향상되지만 사용자의 주변 시야 품질은 더욱 저하됩니다.

참고

호환성 렌더러만 해당, 모바일 및 Forward+ 렌더러의 경우 뷰포트 <class_viewport>`의 ``vrs_mode` 속성을 ``VRS_XR``로 설정합니다.

경고

Glow, Bloom, DOF 등의 사후 효과를 사용하는 경우 이 기능이 비활성화됩니다.

포베에이션 다이내믹

활성화되면 현재 GPU 부하에 따라 포베에이션 수준이 자동으로 조정됩니다. 이전 설정에서 낮음과 선택 포베에이션 수준 사이에서 조정됩니다. 따라서 이 설정을 높게 설정된 포베에이션 수준과 결합하는 것이 가장 좋습니다.

참고

호환성 렌더러만 해당

깊이 버퍼 제출

활성화하면 렌더링된 이미지와 함께 제출되는 렌더링 중에 OpenXR에서 제공하는 깊이 버퍼가 사용됩니다. XR 런타임은 이를 사용하여 재투영을 개선할 수 있습니다.

참고

이 기능을 활성화하면 렌더링 중에 스텐실 지원이 비활성화됩니다. 이를 활용하는 XR 런타임은 많지 않습니다. 사용 사례에 눈에 띄는 이점을 제공하지 않는 한 이 설정을 꺼두는 것이 좋습니다.

시작 경고

활성화하면 OpenXR이 시작되지 않을 경우 사용자에게 경고 메시지가 표시됩니다. 시작이 실패하는 이유에 대해 XR 시스템으로부터 항상 피드백을 받는 것은 아닙니다. 그렇게 하면 이를 콘솔에 기록합니다. 일반적인 실패 이유는 다음과 같습니다.

  • 호스트 시스템에 OpenXR 런타임이 설치되어 있지 않습니다.

  • Microsoft의 WMR OpenXR 런타임은 현재 활성화되어 있으며 DirectX만 지원하며 OpenGL 또는 Vulkan을 사용하는 경우 실패합니다.

  • SteamVR을 사용하지만 헤드셋이 연결/켜져 있지 않습니다.

VR 헤드셋이 연결되어 있지 않을 때 데스크톱 모드에서 플레이할 수 있도록 게임에서 대체 모드를 지원하는 경우 또는 ``OpenXRInterface.is_initialized()``를 확인하여 오류 조건을 직접 처리하는 경우 이 기능을 비활성화하세요.

Expression Node(표현식 노드)

이 하위 섹션에서는 다양한 선택적 OpenXR 확장을 활성화할 수 있습니다. 확장 프로그램은 프로젝트가 실행되는 OpenXR 런타임(SteamVR, Oculus 등)이 이를 지원하는 경우에만 작동한다는 점을 명심하세요.

디버그 옵션

이 기능을 활성화하면 XR 런타임의 디버그 메시지가 기록됩니다.

디버거

이것은 우리가 평면의 어느 쪽을 가리키는 것을 허락합니다.

프레임 선택

활성화되면 XR 런타임에서 지원되는 경우 저해상도 모션 벡터 및 깊이 버퍼가 렌더링되어 XR 런타임에 제공됩니다. 이제 XR 런타임은 재투영 프레임을 삽입하고 낮은 프레임 속도를 보상할 수 있습니다.

다음과 같은 주의 사항이 있습니다:

  • Forward+ 렌더러에서는 작동하지 않습니다.

  • 스테레오 렌더링에서만 작동합니다.

굽기

이를 통해 사용된 장치에서 지원하는 경우 손 추적 확장이 활성화됩니다. 레거시 이유로 인해 기본적으로 켜져 있습니다. 손 추적 확장 프로그램은 올바른 손가락 위치로 사용자의 손을 시각화할 수 있는 데이터에 대한 액세스를 제공합니다. 플랫폼 기능에 따라 손 추적 데이터는 컨트롤러 입력, 데이터 장갑, 광학 손 추적 센서 또는 기타 적용 가능한 소스에서 추론될 수 있습니다.

게임이 컨트롤러만 지원하는 경우 이 기능을 꺼야 합니다.

자세한 내용은 hand 추적 페이지를 참조하세요.

노드와 전문 용어(Nodes and terminology)

이를 활성화하면 손 추적이 일반적으로 헤드셋 카메라가 보는 손가락의 정확한 위치를 사용할 수 있음을 의미합니다.

노드와 전문 용어(Nodes and terminology)

이를 활성화하면 손 추적이 컨트롤러 자체를 사용하고 컨트롤러 입력이나 컨트롤러의 센서를 기반으로 손가락의 위치를 추론할 수 있음을 의미합니다.

손 상호작용 프로필

이 확장을 활성화하면 두 가지 새로운 손 추적 포즈를 사용할 수 있습니다. 엄지와 검지 사이를 앞으로 향하게 하는 핀치 포즈와 검지 끝 부분을 찌르는 포즈.

또한 3가지 제스처 기반 입력을 더 허용합니다. 핀치(Pinch): 사용자가 엄지손가락과 집게손가락을 함께 모으는 것입니다. 검지가 완전히 펴졌을 때 조준이 활성화됩니다. 그리고 사용자가 주먹을 쥐면 파악합니다.

손 상호 작용 프로필과 컨트롤러 상호 작용 프로필이 제공되면 런타임은 광학 추적이 사용되는지 또는 사용자가 컨트롤러를 잡고 있는지에 따라 프로필 간에 전환됩니다.

손 상호 작용 프로필만 제공되는 경우 모든 런타임은 컨트롤러를 잡고 있는 경우에도 손 상호 작용을 사용해야 합니다.

머티리얼

이 확장 프로그램과 해당 설정은 사용자의 실제 환경에 대한 정보를 얻고 상호 작용하는 데 사용됩니다. :ref:`공간 엔터티 페이지 <doc_openxr_spatial_entities>`에서 작동 방식에 대한 자세한 정보를 확인할 수 있습니다.

보간

이를 통해 사용되는 장치에서 지원하는 경우 시선 상호 작용 확장이 가능해집니다. 활성화되면 사용자가 보고 있는 방향을 향한 사용자의 눈 사이에 위치한 포즈를 통해 시선 추적을 통해 피드백을 받게 됩니다. 이는 통일된 방향이 될 것입니다.

이 기능을 사용하려면 액션 맵을 편집하고 ``eye_pose``와 같은 새 포즈 액션을 추가해야 합니다. 이제 시선 상호 작용을 위한 새로운 상호 작용 프로필을 추가하고 ``eye_pose``를 매핑합니다.

../../_images/openxr_eye_gaze_interaction.webp

저장하는 것을 잊지 마세요!

다음으로 새 XRController3D 노드를 오리진 노드에 추가하고 tracker 속성을 /user/eyes_ext``로 설정하고 ``pose 속성을 ``eye_pose``로 설정합니다.

이제 이 컨트롤러 노드에 레이캐스트와 같은 항목을 추가하고 눈으로 제어할 수 있습니다.

렌더러 모드

이 확장은 사용 중인 하드웨어(일반적으로 컨트롤러)의 3D 자산과 해당 하드웨어의 위치에 대해 XR 런타임을 쿼리하는 데 사용됩니다. here 사용 방법에 대한 자세한 가이드를 찾을 수 있습니다.

모디파이어(Modifiers)

이는 바인딩 수정자를 사용할 수 있는지 여부를 제어합니다. 바인딩 수정자는 임계값이나 오프셋 값을 적용하는 데 사용됩니다. XR 액션 맵 페이지 :ref:`here <doc_bound_modifiers>`에서 사용 및 설정 방법에 대한 정보를 찾을 수 있습니다.

아날로그 역치값 모디파이어

아날로그 역치값 모디파이어

십자 패드 바인딩 제약

십자 패드 바인딩 제약