HolographicSettings.IsDisplayOpaque를 확인하여 런타임에 스크립트 코드를 사용하여 헤드셋이 몰입형인지 홀로그램인지 확인할 수 있습니다.
카메라 설정
어떤 종류의 경험을 개발하든 기본 카메라는 항상 장치의 헤드 탑재 디스플레이에 연결된 기본 스테레오 렌더링 구성 요소입니다. 사용자의 시작 위치를 (X: 0, Y: 0, Z: 0)으로 상상하는 경우 앱을 더 쉽게 배치할 수 있습니다. 주 카메라는 사용자의 머리 이동을 추적하므로 주 카메라의 시작 위치를 설정하여 사용자의 시작 위치를 설정할 수 있습니다.
HoloLens 또는 VR 몰입형 헤드셋을 개발하든, 가장 중요하게 선택해야 합니다. 이 섹션이 완료되면 적용되는 설정 섹션으로 건너뜁니다.
HoloLens 카메라 설정
HoloLens 앱의 경우 장면 환경에 잠그려는 모든 개체에 앵커를 사용해야 합니다. 바인딩되지 않은 공간을 사용하여 안정성을 극대화하고 여러 방에 앵커를 만드는 것이 좋습니다.
이전 버전의 Unity에서 Windows Holographic으로 나열될 수 있는 장치로 Windows Mixed Reality를 선택합니다.
지원되는 가상 현실 선택
Main Camera 개체는 자동으로 카메라로 태그가 지정되므로 Unity는 모든 이동 및 변환을 지원합니다.
참고 항목
이러한 설정은 앱의 각 장면에서 카메라에 적용해야 합니다.
기본적으로 Unity에서 새 장면을 만들 때 카메라 구성 요소를 포함하지만 아래 설정이 제대로 적용되지 않은 기본 카메라 GameObject가 계층 구조에 포함됩니다.
네임스페이스:UnityEngine.XR 형식:XRDevice
스탠딩 스케일 또는 룸 스케일 환경의 경우 바닥을 기준으로 콘텐츠를 배치해야 합니다. 첫 번째 실행 중에 설정된 사용자의 정의된 바닥 수준 원점 및 선택적 방 경계를 나타내는 공간 단계를 사용하여 사용자의 바닥에 대해 추론합니다.
Unity가 바닥 수준에서 월드 좌표계로 작동하도록 하려면 Unity가 RoomScale 추적 공간 유형을 사용하고 있는지 설정하고 테스트할 수 있습니다.
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
SetTrackingSpaceType이 true를 반환하면 Unity는 월드 좌표계를 성공적으로 전환하여 참조의 스테이지 프레임을 추적합니다.
SetTrackingSpaceType이 false를 반환하는 경우 Unity는 사용자가 환경에서 바닥을 설정하지 않았기 때문에 참조의 스테이지 프레임으로 전환할 수 없습니다. 잘못된 반환 값은 일반적이지 않지만 스테이지가 다른 방에 설정되고 사용자가 새 단계를 설정하지 않고 디바이스를 현재 회의실로 이동하는 경우 발생할 수 있습니다.
앱이 RoomScale 추적 공간 유형을 성공적으로 설정하면 y=0 평면에 배치된 콘텐츠가 바닥에 표시됩니다. 0, 0, 0의 원점은 사용자가 방 설치 중에 서 있는 바닥의 특정 위치이며, -Z는 설치 중에 마주보고 있던 정방향을 나타냅니다.
이전 버전의 Unity에서 Windows Holographic으로 나열될 수 있는 장치로 Windows Mixed Reality를 선택합니다.
지원되는 가상 현실 선택
Main Camera 개체는 자동으로 카메라로 태그가 지정되므로 Unity는 모든 이동 및 변환을 지원합니다.
참고 항목
이러한 설정은 앱의 각 장면에서 카메라에 적용해야 합니다.
기본적으로 Unity에서 새 장면을 만들 때 카메라 구성 요소를 포함하지만 아래 설정이 제대로 적용되지 않은 기본 카메라 GameObject가 계층 구조에 포함됩니다.
네임스페이스:UnityEngine.XR 형식:XRDevice
방향 전용 또는 좌석 크기 조정 환경을 빌드하려면 Unity를 고정 추적 공간 유형으로 설정해야 합니다. 고정 추적 공간은 고정된 참조 프레임을 추적하도록 Unity의 세계 좌표계를 설정합니다. 고정 추적 모드에서는 앱이 시작될 때 카메라의 기본 위치 바로 앞에 있는 편집기(앞으로 -Z)에 배치된 콘텐츠가 사용자 앞에 표시됩니다.
MRTK를 사용하는 경우 카메라의 배경이 자동으로 구성되고 관리됩니다. XR SDK 또는 레거시 WSA 프로젝트의 경우 HoloLens에서 카메라 배경을 검은색으로 설정하고 VR용 스카이박스를 유지하는 것이 좋습니다.
여러 카메라 사용
장면에 카메라 구성 요소가 여러 개 있는 경우 Unity는 MainCamera 태그가 있는 GameObject를 기반으로 스테레오스코픽 렌더링에 사용할 카메라를 알고 있습니다. 레거시 XR에서는 이 태그를 사용하여 헤드 추적을 동기화합니다. XR SDK에서 헤드 추적은 카메라에 연결된 TrackedPoseDriver 스크립트에 의해 구동됩니다.
깊이 버퍼 공유
각 프레임마다 앱의 깊이 버퍼를 Windows에 공유하면 렌더링하는 헤드셋 유형에 따라 홀로그램 안정성이 크게 향상되는 두 가지 기능 중 하나가 앱에 제공됩니다.
VR 몰입형 헤드셋은 깊이 버퍼가 제공될 때 위치 재프로젝션을 처리하여 위치와 방향 모두에서 잘못된 표현을 위해 홀로그램을 조정할 수 있습니다.
HoloLens 헤드셋 에는 몇 가지 다른 방법이 있습니다. HoloLens 1은 깊이 버퍼가 제공될 때 자동으로 포커스 지점을 선택하여 가장 많은 콘텐츠를 교차하는 평면을 따라 홀로그램 안정성을 최적화합니다. HoloLens 2는 깊이 LSR을 사용하여 콘텐츠를 안정화합니다(설명 참조).
MRTK의 구성 대화 상자 는 XR SDK 및 레거시 WSA 모두에 대한 깊이 버퍼 설정을 시도하지만 해당 탭을 확인하고 Unity에서 설정을 확인하는 것이 좋습니다.
Unity 앱이 Windows에 깊이 버퍼를 제공할지 여부를 설정하려면 다음을 수행합니다.
프로젝트 설정>편집>XR 플러그 인 관리로 이동하여 메뉴 항목이 확장되었는지 확인합니다.
선택한 XR 런타임에 해당하는 메뉴 항목(Windows Mixed Reality 또는 OpenXR)을 클릭합니다. 또한 Windows 독립 실행형 및 유니버설 Windows 플랫폼 모두에 대한 탭을 사용할 수 있으므로 올바른 빌드 플랫폼이 선택되어 있는지 확인합니다.
사용하도록 설정하고 구성하려면 다음을 수행합니다.
OpenXR의 경우 깊이 제출 모드 드롭다운에서 깊이 형식 또는 "없음"을 선택합니다.
Windows Mixed Reality의 경우 공유 깊이 버퍼 확인란을 선택하거나 선택 취소합니다. 그런 다음 깊이 버퍼 형식 드롭다운에서 형식을 선택합니다.
참고 항목
일반적으로 성능 향상을 위해 16비트 깊이 버퍼를 사용하는 것이 좋습니다. 그러나 16비트 깊이 형식을 사용하는 경우 Unity가 이 설정에서 스텐실 버퍼를 만들지 않으므로 스텐실 버퍼에 필요한 효과(예: 일부 Unity UI 스크롤 패널)가 작동하지 않습니다. 반대로 24비트 깊이 형식을 선택하면 일반적으로 엔드포인트 그래픽 플랫폼에 해당하는 경우 8비트 스텐실 버퍼가 생성됩니다.
Unity 앱이 Windows에 깊이 버퍼를 제공할지 여부를 설정하려면 다음을 수행합니다.
프로젝트 설정>편집>플레이어>유니버설 Windows 플랫폼 탭>XR 설정으로 이동합니다.
Windows Mixed Reality SDK 항목을 확장합니다.
깊이 버퍼 공유 사용 확인란을 선택하거나 선택 취소합니다. 깊이 버퍼 공유 사용은 새 프로젝트에서 기본적으로 확인되지만 이전 프로젝트에서는 기본적으로 선택 취소되었을 수 있습니다.
깊이 버퍼는 Windows가 기본 카메라의 Unity에서 설정한 근거리 및 원거리 평면을 사용하여 깊이 버퍼의 정규화된 픽셀당 깊이 값을 미터 단위로 정확하게 매핑할 수 있는 한 시각적 품질을 향상시킬 수 있습니다. 렌더링이 일반적인 방식으로 처리 깊이 값을 전달하는 경우 일반적으로 여기서는 잘 해야 합니다. 반투명 렌더링은 기존 색 픽셀을 통해 표시하는 동안 깊이 버퍼에 쓰기를 전달하면 다시 보호를 혼동할 수 있습니다. 렌더링 패스가 정확하지 않은 깊이 값으로 최종 깊이 픽셀을 많이 남겨 두는 것을 알고 있는 경우 "깊이 버퍼 공유 사용"을 선택 취소하여 더 나은 시각적 품질을 얻을 수 있습니다.
참고 항목
일반적으로 성능 향상을 위해 16비트 깊이 버퍼를 사용하는 것이 좋습니다. 그러나 16비트 깊이 형식을 사용하는 경우 Unity가 이 설정에서 스텐실 버퍼를 만들지 않으므로 스텐실 버퍼에 필요한 효과(예: 일부 Unity UI 스크롤 패널)가 작동하지 않습니다. 반대로 24비트 깊이 형식을 선택하면 일반적으로 엔드포인트 그래픽 플랫폼에 해당하는 경우 8비트 스텐실 버퍼가 생성됩니다.
클리핑 평면 사용
혼합 현실에서 사용자에게 너무 가깝게 콘텐츠를 렌더링하는 것이 불편할 수 있습니다. 카메라 구성 요소에서 근거리 및 원거리 클립 평면 을 조정할 수 있습니다.
계층 구조 패널에서 주 카메라 선택
[검사기] 패널에서 [카메라 구성 요소 클리핑 평면]을 찾고 근거리 텍스트 상자를 0.3에서 0.85로 변경합니다. 더 가깝게 렌더링된 콘텐츠는 사용자에게 불편을 초래할 수 있으며 렌더링 거리 지침에 따라 피해야 합니다.
MRTK는 굴절식 손 및 컨트롤러에서 자동으로 작동하는 기본 제공 텔레포트 시스템을 제공합니다.
MRTK의 원격 보고 구현을 사용하는 것이 좋습니다.
MRTK를 사용하지 않도록 선택하는 경우 Unity는 XR 상호 작용 도구 키트에서 원격 보고 구현을 제공합니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 계층 구조에서 카메라를 부모로 지정하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
MRTK의 원격 보고 구현을 사용하는 것이 좋습니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 계층 구조에서 카메라를 부모로 지정하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
다시 프로젝션 모드
HoloLens와 몰입형 헤드셋은 모두 광자를 내보낸 경우 사용자의 실제 헤드 위치에 대한 잘못된 예측에 맞게 앱이 렌더링하는 각 프레임을 다시 보호합니다.
기본적으로:
VR 몰입형 헤드셋은 앱이 지정된 프레임에 대한 깊이 버퍼를 제공하는 경우 위치 다시 보호를 처리합니다. 몰입형 헤드셋은 또한 위치와 방향 모두에서 잘못된 표현을 위해 홀로그램을 조정합니다. 깊이 버퍼가 제공되지 않으면 시스템은 방향의 잘못된 예측만 수정합니다.
HoloLens 2와 같은 홀로그램 헤드셋은 앱이 깊이 버퍼를 제공하는지 여부에 관계없이 위치 재프로젝션을 처리합니다. 렌더링이 실제 환경에서 제공하는 안정적인 배경으로 스파스되는 경우가 많기 때문에 HoloLens의 깊이 버퍼 없이 위치 재프로젝션이 가능합니다.