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.
Checking the stable version of the documentation...
패스스루
증강현실은 하드웨어 성능에 따라 다양한 방식으로 지원됩니다.
Magic Leap과 같은 헤드셋과 TiltFive와 같은 안경은 렌더링된 결과를 `투명 디스플레이 <https://en.wikipedia.org/wiki/See-through_display>`__에 표시하여 사용자가 실제 세계를 볼 수 있도록 합니다.
Quest, HTC Elite 및 Lynx R1과 같은 헤드셋은 카메라가 실제 세계를 기록하고 이러한 이미지를 배경으로 사용하여 렌더링된 결과를 사용하는 비디오 패스스루라는 기술을 통해 이를 구현합니다.
참고
패스스루는 플랫폼마다 매우 다르게 구현됩니다.
Godot 4.3에서는 이 도움말 페이지에 설명된 통합 접근 방식을 구현했기 때문에 이러한 차이점에 대해 걱정할 필요가 없습니다. XRInterface 구현은 이제 올바른 플랫폼 종속 메서드 [#]_를 적용하는 일을 담당합니다.
Meta Quest 및 HTC Elite와 같은 헤드셋의 경우 비디오 패스스루를 활성화하려면 OpenXR 공급업체 플러그인 v3.0.0 이상을 사용해야 합니다.
이전 버전과의 호환성을 위해 패스스루용 이전 API를 계속 사용할 수 있지만 아래의 새로운 지침을 따르는 것이 좋습니다.
환경 블렌드 모드
VR 또는 AR 기능을 구성하는 방법은 환경 혼합 모드를 설정하는 것입니다. 이 모드는 (실제) 환경이 가상 세계와 혼합되는 방식을 결정합니다.
블렌드 모드 |
설명 |
|---|---|
XR_ENV_BLEND_MODE_OPAQUE |
렌더링된 이미지는 불투명하여 실제 세계를 볼 수 없습니다. 우리는 VR 모드에 있습니다. 비디오 패스스루를 사용하는 경우 패스스루가 꺼집니다. |
XR_ENV_BLEND_MODE_ADDITIVE |
렌더링된 이미지는 현실 세계에 추가되어 반투명하게 보입니다. 이 모드는 일반적으로 현실 세계를 가릴 수 없는 투명 장치에 사용됩니다. 비디오 패스스루를 사용하는 경우 패스스루가 활성화됩니다. |
XR_ENV_BLEND_MODE_ALPHA_BLEND |
렌더링된 이미지는 실제 세계와 알파 블렌딩됩니다. 이를 지원하는 투명 장치에서는 알파가 광학 장치의 반투명도를 제어합니다. 비디오 패스스루 장치에서는 비디오 이미지에 알파 블렌딩이 적용됩니다. 해당하는 경우 패스스루도 활성화됩니다. |
XRInterface 인스턴스의 environment_blend_mode 속성을 통해 애플리케이션에 대한 환경 혼합 모드를 설정할 수 있습니다.
동일한 인스턴스에서 get_supported_environment_blend_modes 속성을 사용하여 하드웨어에서 지원되는 혼합 모드를 쿼리할 수 있습니다.
백그라운드 구성하기
블렌드 모드를 XR_ENV_BLEND_MODE_ALPHA_BLEND``로 설정하는 경우 :ref:`뷰포트 <class_viewport>`의 ``transparent_bg 속성을 true로 설정해야 합니다. XR_ENV_BLEND_MODE_ADDITIVE 블렌드 모드를 사용하는 경우 배경색을 검정색으로 설정해야 합니다.
어느 쪽이든 배경 렌더링이 조명에 영향을 미치지 않게 됩니다. 따라서 환경 설정을 적절하게 조정하고 씬을 비추기에 적절한 주변 조명이 설정되어 있는지 확인하는 것이 좋습니다.
참고
일부 AR SDK는 주변 조명 정보를 제공하거나 가상 개체의 실제 반사를 허용하는 전체 방사능 맵도 제공합니다. 핵심 Godot XR 기능은 현재 이를 지원하지 않지만, 이 기능은 플러그인을 통해 노출될 수 있습니다.
OpenXR 전용
OpenXR에서는 사용하려는 기본 블렌드 모드를 구성할 수 있습니다. Godot는 가능한 경우 시작 시 이 블렌드 모드를 선택합니다. 사용할 수 없는 경우 Godot는 기본적으로 XR 런타임에서 제공하는 첫 번째 지원 블렌드 모드를 사용합니다.
패스스루 장치의 경우 OpenXR에는 추가 설정을 구성해야 합니다. 이러한 설정은 플랫폼에 따라 다르며 OpenXR 공급업체 플러그인을 통해 제공됩니다.
예를 들어 Meta Quest에 필요한 설정은 다음과 같습니다.
Passthrough 설정은 패스스루가 지원되는지 또는 필요한지 여부를 정의합니다.
``Boundary Mode``를 사용하면 가디언이 필요한지 여부를 정의할 수 있으며, 이를 완전히 비활성화하려면 패스스루를 항상 활성화해야 합니다.
대상 가리키기
HUD는 다음의 정보들을 보여줍니다:
@onready var viewport : Viewport = get_viewport()
@onready var environment : Environment = $WorldEnvironment.environment
func switch_to_ar() -> bool:
var xr_interface: XRInterface = XRServer.primary_interface
if xr_interface:
var modes = xr_interface.get_supported_environment_blend_modes()
if XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND in modes:
xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND
viewport.transparent_bg = true
elif XRInterface.XR_ENV_BLEND_MODE_ADDITIVE in modes:
xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_ADDITIVE
viewport.transparent_bg = false
else:
return false
environment.background_mode = Environment.BG_COLOR
environment.background_color = Color(0.0, 0.0, 0.0, 0.0)
environment.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR
return true
func switch_to_vr() -> bool:
var xr_interface: XRInterface = XRServer.primary_interface
if xr_interface:
var modes = xr_interface.get_supported_environment_blend_modes()
if XRInterface.XR_ENV_BLEND_MODE_OPAQUE in modes:
xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_OPAQUE
else:
return false
viewport.transparent_bg = false
environment.background_mode = Environment.BG_SKY
environment.ambient_light_source = Environment.AMBIENT_SOURCE_BG
return true
그림자를 불투명도로
그림자 투 불투명도는 특히 AR용으로 Godot 3에 도입된 Godot 공간 셰이더의 렌더링 모드입니다. 표면에 그림자가 많을수록 표면이 더 불투명해지는 특수 렌더링 모드입니다. 표면이 완전히 조명되면 표면이 완전히 투명해져서 실제 세계를 보여줍니다.
그러나 표면은 불투명 상태 동안 효과적으로 렌더링됩니다. 이로 인해 두 가지 결과가 발생합니다.
깊이 버퍼와 색상 버퍼가 모두 기록되므로 완전히 투명한 경우에도 표면 뒤의 모든 형상을 가리게 됩니다.
그림자 속에 있는 경우 표면을 불투명하게 만들기 때문에 가상 객체가 실제 객체 [#]_에 그림자를 드리우도록 할 수 있습니다.
사용자의 책상을 표시하는 데 사용되는 그림자와 불투명도를 보여주는 이미지입니다.
다음과 같은 주의 사항이 있습니다:
실제 테이블 주위에 상자 메시를 렌더링할 수 있습니다. 이렇게 하면 테이블 아래에 가상 개체가 배치되어 있어도 테이블이 계속 표시됩니다. 가상 개체가 올바르게 가려집니다. 실제 테이블 위에 가상 개체를 놓으면 테이블에 그림자가 드리워집니다.
손 추적 기능을 사용하여 손 메시를 렌더링할 때 이 렌더링 모드에서 셰이더를 사용할 수 있으며 손이 가상 개체를 적절하게 가리는지 확인할 수 있습니다.
다음 셰이더 코드는 이 기능에 대한 좋은 기반입니다.
shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, shadow_to_opacity;
void fragment() {
ALBEDO = vec3(0.0, 0.0, 0.0);
}