혼합 현실 헤드셋을 착용하면 홀로그램 세계의 중심이 됩니다. Unity 카메라 구성 요소는 자동으로 스테레오스코픽 렌더링을 처리하고 헤드 이동 및 회전을 따릅니다. 그러나 시각적 품질 및 홀로그램 안정성을 완전히 최적화하려면 아래에 설명된 카메라 설정을 지정해야 합니다.
HoloLens vs VR 몰입형 헤드셋
Unity 카메라 구성 요소의 기본 설정은 실제 환경이 없으므로 스카이박스와 유사한 배경이 필요한 기존 3D 애플리케이션을 위한 것입니다.
몰입형 헤드셋에서 실행하는 경우 사용자가 보는 모든 것을 렌더링하므로 skybox를 유지할 수 있습니다.
그러나 HoloLens 같은 홀로그램 헤드셋에서 실행할 때 실제 세계는 카메라가 렌더링하는 모든 것 뒤에 나타나야 합니다. 카메라 배경을 Skybox 텍스처 대신 투명하게 설정(HoloLens 검은색 렌더링을 투명으로 표시)합니다.
계층 구조 패널에서 주 카메라 선택
[검사기] 패널에서 [카메라] 구성 요소를 찾아 [플래그 지우기] 드롭다운을 Skybox에서 단색으로 변경합니다.
개발 중인 환경이 무엇이든, 기본 카메라는 항상 장치의 헤드 탑재 디스플레이에 연결된 기본 스테레오 렌더링 구성 요소입니다. 사용자의 시작 위치를 (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 깊이 버퍼를 제공할지 여부를 설정하려면 다음을 수행합니다.
편집>Project 설정>XR 플러그 인 관리로 이동하여 메뉴 항목이 확장되었는지 확인합니다.
선택한 XR 런타임에 해당하는 메뉴 항목(Windows Mixed Reality 또는 OpenXR)을 클릭합니다. 또한 Windows 독립 실행형 플랫폼과 유니버설 Windows 플랫폼 모두에 대한 탭을 사용할 수 있으므로 올바른 빌드 플랫폼이 선택되었는지 확인합니다.
사용하도록 설정하고 구성하려면 다음을 수행합니다.
OpenXR의 경우 깊이 제출 모드 드롭다운에서 깊이 형식 또는 "없음"을 선택합니다.
Windows Mixed Reality 공유 깊이 버퍼 확인란을 선택하거나 선택 취소합니다. 그런 다음 깊이 버퍼 형식 드롭다운에서 형식을 선택합니다.
참고
일반적으로 성능 향상을 위해 16비트 깊이 버퍼를 사용하는 것이 좋습니다. 그러나 16비트 깊이 형식을 사용하는 경우 Unity가 이 설정에서 스텐 실 버퍼를 만들지 않으므로 스텐실 버퍼 에 필요한 효과(예: 일부 Unity UI 스크롤 패널)가 작동하지 않습니다. 반대로 24비트 깊이 형식 을 선택하면 일반적으로 엔드포인트 그래픽 플랫폼에 해당하는 경우 8비트 스텐실 버퍼 가 생성됩니다.
Unity 앱이 Windows 깊이 버퍼를 제공할지 여부를 설정하려면 다음을 수행합니다.
Edit>Project 설정>PlayerUniversal> Windows Platform tabXR> 설정 이동합니다.
Windows Mixed Reality SDK 항목을 확장합니다.
깊이 버퍼 공유 사용 확인란을 선택하거나 선택 취소합니다. 깊이 버퍼 공유 사용은 새 프로젝트에서 기본적으로 확인되지만 이전 프로젝트에서는 기본적으로 선택 취소되었을 수 있습니다.
깊이 버퍼는 Windows 기본 카메라의 Unity에서 설정한 근거리 및 원거리 평면을 사용하여 깊이 버퍼의 정규화된 픽셀당 깊이 값을 미터 단위의 거리로 정확하게 매핑할 수 있는 한 시각적 품질을 향상시킬 수 있습니다. 렌더링이 일반적인 방식으로 깊이 값을 처리하는 경우 일반적으로 여기서는 잘 해야 하지만 반투명 렌더링은 기존 색 픽셀을 통해 표시하는 동안 깊이 버퍼에 쓰는 전달이 다시 프로젝션을 혼동할 수 있습니다. 렌더링 패스가 정확하지 않은 깊이 값으로 최종 깊이 픽셀을 많이 유지한다는 것을 알고 있는 경우 "깊이 버퍼 공유 사용"을 선택 취소하여 더 나은 시각적 품질을 얻을 수 있습니다.
참고
일반적으로 성능 향상을 위해 16비트 깊이 버퍼를 사용하는 것이 좋습니다. 그러나 16비트 깊이 형식을 사용하는 경우 Unity가 이 설정에서 스텐 실 버퍼를 만들지 않으므로 스텐실 버퍼 에 필요한 효과(예: 일부 Unity UI 스크롤 패널)가 작동하지 않습니다. 반대로 24비트 깊이 형식 을 선택하면 일반적으로 엔드포인트 그래픽 플랫폼에 해당하는 경우 8비트 스텐실 버퍼 가 생성됩니다.
클리핑 평면 사용
혼합 현실에서는 사용자에게 너무 가까운 콘텐츠를 렌더링하는 것이 불편할 수 있습니다. 카메라 구성 요소에서 근거리 및 원거리 클립 평면 을 조정할 수 있습니다.
계층 구조 패널에서 주 카메라 선택
검사기 패널에서 카메라 구성 요소 클리핑 평면을 찾아 인접 텍스트 상자를 0.3에서 0.85로 변경합니다. 콘텐츠가 더 가깝게 렌더링되면 사용자 불편이 발생할 수 있으며 렌더링 거리 지침에 따라 피해야 합니다.
MRTK는 굴절식 손 및 컨트롤러에서 자동으로 작동하는 박스 내 텔레포트 시스템을 제공합니다.
MRTK의 텔레포트 구현을 사용하는 것이 좋습니다.
MRTK를 사용하지 않도록 선택하는 경우 Unity는 XR 상호 작용 Toolkit 텔레포트 구현을 제공합니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 카메라에 계층 구조의 부모를 부여하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
MRTK의 텔레포트 구현을 사용하는 것이 좋습니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 카메라에 계층 구조의 부모를 부여하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
다시 프로젝션 모드
HoloLens 헤드셋과 몰입형 헤드셋은 모두 광자를 내보낸 경우 사용자의 실제 헤드 위치를 잘못 예측하기 위해 앱이 렌더링하는 각 프레임을 다시 보호합니다.
기본적으로 다음과 같습니다.
VR 몰입형 헤드셋은 앱이 지정된 프레임에 대한 깊이 버퍼를 제공하는 경우 위치 재프로젝션을 처리합니다. 몰입형 헤드셋은 또한 위치와 방향 모두에서 잘못된 표현을 위해 홀로그램을 조정합니다. 깊이 버퍼가 제공되지 않으면 시스템은 방향에서 잘못된 표현만 수정합니다.
HoloLens 2 같은 홀로그램 헤드셋은 앱이 깊이 버퍼를 제공하는지 여부에 관계없이 위치 다시 보호를 처리합니다. 렌더링이 실제 환경에서 제공하는 안정적인 배경으로 스파스되는 경우가 많기 때문에 위치 재프로젝션은 HoloLens 깊이 버퍼 없이도 가능합니다.