혼합 현실 헤드셋을 착용하면 홀로그램 세계의 중심이 됩니다. Unity 카메라 구성 요소는 자동으로 스테레오스코픽 렌더링을 처리하고 헤드 이동 및 회전을 따릅니다. 그러나 시각적 품질과 홀로그램 안정성을 완전히 최적화하려면 아래에 설명된 카메라 설정을 설정해야 합니다.
HoloLens vs VR 몰입형 헤드셋
Unity 카메라 구성 요소의 기본 설정은 실제 환경이 없으므로 skybox와 같은 배경이 필요한 기존 3D 애플리케이션에 대한 것입니다.
- 몰입형 헤드셋에서 실행하는 경우 사용자가 보는 모든 것을 렌더링하므로 skybox를 유지할 수 있습니다.
- 그러나 HoloLens와 같은 홀로그램 헤드셋에서 실행할 때 실제 세계는 카메라가 렌더링하는 모든 것 뒤에 나타나야 합니다. 카메라 배경을 Skybox 텍스처 대신 투명하게 설정(HoloLens에서는 검은색 렌더링을 투명으로 렌더링)합니다.
- 계층 구조 패널에서 주 카메라 선택
- [검사기] 패널에서 [카메라] 구성 요소를 찾아 [플래그 지우기] 드롭다운을 Skybox에서 단색으로 변경합니다.
- 배경색 선택기를 선택하고 RGBA 값을 (0, 0, 0, 0)으로 변경합니다.
- 코드에서 이 설정을 지정하는 경우 Unity를 사용할 수 있습니다.
Color.clear
MRTK는 카메라 시스템 프로필의 구성에 따라 특정 카메라 설정을 자동으로 처리합니다.
네임스페이스: Microsoft.MixedReality.Toolkit.CameraSystem
형식: MixedRealityCameraSystem
카메라의 불투명도를 확인하기 위해 MixedRealityCamera 시스템에는 속성이 있습니다IsOpaque.
CoreServices.CameraSystem.IsOpaque;
네임스페이스: UnityEngine.XR
형식: XRDisplaySubsystem
스크립트 코드를 사용하여 현재 실행 중인 XRDisplaySubsystem에서 displayOpaque를 확인하여 헤드셋이 몰입형인지 홀로그램인지 런타임에 확인할 수 있습니다.
네임스페이스: UnityEngine.XR.WSA
형식: HolographicSettings
HolographicSettings.IsDisplayOpaque를 확인하여 런타임에 스크립트 코드를 사용하여 헤드셋이 몰입형인지 홀로그램인지 확인할 수 있습니다.
카메라 설정
어떤 종류의 경험을 개발하든 기본 카메라는 항상 장치의 헤드 탑재 디스플레이에 연결된 기본 스테레오 렌더링 구성 요소입니다. 사용자의 시작 위치를 (X: 0, Y: 0, Z: 0)으로 상상하는 경우 앱을 더 쉽게 배치할 수 있습니다. 주 카메라는 사용자의 머리 이동을 추적하므로 주 카메라의 시작 위치를 설정하여 사용자의 시작 위치를 설정할 수 있습니다.
HoloLens 또는 VR 몰입형 헤드셋을 개발하든, 가장 중요하게 선택해야 합니다. 이 섹션이 완료되면 적용되는 설정 섹션으로 건너뜁니다.
HoloLens 카메라 설정
HoloLens 앱의 경우 장면 환경에 잠그려는 모든 개체에 앵커를 사용해야 합니다. 바인딩되지 않은 공간을 사용하여 안정성을 극대화하고 여러 방에 앵커를 만드는 것이 좋습니다.
이 단계별 자습서 에 따라 Unity 프로젝트에서 Mixed Reality Toolkit을 추가하고 자동으로 구성합니다. Unity용 MRTK의 MixedRealityPlayspace 클래스와 직접 작업하고 대상 규모를 월드로 설정할 수도 있습니다.

MRTK는 플레이스페이스와 카메라의 위치를 자동으로 처리해야 하지만 다음을 다시 확인하는 것이 좋습니다.

- 계층 구조 패널에서 MixedRealityPlayspace GameObject를 확장하고 Main Camera 자식 개체를 찾습니다.
- 검사기 패널에서 변환 구성 요소를 찾아 위치를 변경합니다(X: 0, Y: 0, Z: 0).
XRInputSubsystem에서 추적 원본 모드를 설정합니다. 하위 시스템을 가져온 후 TrySetTrackingOriginMode를 호출합니다.
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
앵커 및 ARKit/ARCore에서 더 잘 작동하는 HoloLens 애플리케이션에 ARSession을 사용할 수 있습니다.

Important
AR 세션 및 관련 기능에는 AR Foundation이 설치되어 있어야 합니다.
ARSession을 사용하지 않고 카메라 변경 내용을 수동으로 적용할 수도 있습니다.
계층 구조 패널에서 주 카메라 선택
검사기 패널에서 변환 구성 요소를 찾아 위치를 변경합니다(X: 0, Y: 0, Z: 0).

Unity의 검사기 창에 있는 카메라
기본 카메라에 TrackedPoseDriver 추가
계층 구조 패널에서 주 카메라 선택
검사기 패널에서 변환 구성 요소를 찾아 위치를 변경합니다(X: 0, Y: 0, Z: 0).

Unity의 검사기 창에 있는 카메라
Windows 스토어 플레이어 설정의 다른 설정 섹션으로 이동
이전 버전의 Unity에서 Windows Holographic으로 나열될 수 있는 장치로 Windows Mixed Reality를 선택합니다.
지원되는 가상 현실 선택
Main Camera 개체는 자동으로 카메라로 태그가 지정되므로 Unity는 모든 이동 및 변환을 지원합니다.
참고 항목
이러한 설정은 앱의 각 장면에서 카메라에 적용해야 합니다.
기본적으로 Unity에서 새 장면을 만들 때 카메라 구성 요소를 포함하지만 설정이 제대로 적용되지 않을 수 있는 기본 카메라 GameObject가 계층 구조에 포함됩니다.
VR 카메라 설정
Windows Mixed Reality는 방향 전용 및 좌석 크기 조정 앱에서 회의실 크기 조정 앱을 통해 다양한 환경 크기 조정에서 앱을 지원합니다. HoloLens에서 사용자가 5미터를 넘어 건물 전체 층을 탐색할 수 있는 세계적 규모의 앱을 빌드할 수 있습니다.
Unity에서 혼합 현실 환경을 빌드하는 첫 번째 단계는 앱이 대상으로 지정할 크기 조정 환경을 결정하는 것입니다.
룸 스케일 또는 스탠딩 환경
참고 항목
HL2를 위해 빌드하는 경우 눈 수준의 환경을 만들거나 장면의 바닥을 추론하기 위해 Scene Understanding을 사용하는 것이 좋습니다.
Unity용 MRTK의 MixedRealityPlayspace 클래스를 사용하고 대상 배율을 회의실 또는 스탠딩으로 설정합니다.

MRTK는 플레이스페이스와 카메라의 위치를 자동으로 처리해야 하지만 다음을 다시 확인하는 것이 좋습니다.

- 계층 구조 패널에서 MixedRealityPlayspace GameObject를 확장하고 Main Camera 자식 개체를 찾습니다.
- 검사기 패널에서 변환 구성 요소를 찾아 위치를 변경합니다(X: 0, Y: 0, Z: 0).
XRInputSubsystem에서 추적 원본 모드를 설정합니다. 하위 시스템을 가져온 후 TrySetTrackingOriginMode를 호출합니다.
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Floor);
Unity의 XRig를 사용하여 작업합니다.

- Windows 스토어 플레이어 설정의 다른 설정 섹션으로 이동
- 이전 버전의 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용 MRTK의 MixedRealityPlayspace 클래스를 사용하고 대상 배율을 Seated로 설정합니다.

MRTK는 플레이스페이스와 카메라의 위치를 자동으로 처리해야 하지만 다음을 다시 확인하는 것이 좋습니다.

- 계층 구조 패널에서 MixedRealityPlayspace GameObject를 확장하고 Main Camera 자식 개체를 찾습니다.
- 검사기 패널에서 변환 구성 요소를 찾아 위치를 변경합니다(X: 0, Y: 0, Z: 0).
XRInputSubsystem에서 추적 원본 모드를 설정합니다. 하위 시스템을 가져온 후 TrySetTrackingOriginMode를 호출합니다.
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
Unity의 XRig를 사용하여 작업합니다.

- Windows 스토어 플레이어 설정의 다른 설정 섹션으로 이동
- 이전 버전의 Unity에서 Windows Holographic으로 나열될 수 있는 장치로 Windows Mixed Reality를 선택합니다.
- 지원되는 가상 현실 선택
Main Camera 개체는 자동으로 카메라로 태그가 지정되므로 Unity는 모든 이동 및 변환을 지원합니다.
참고 항목
이러한 설정은 앱의 각 장면에서 카메라에 적용해야 합니다.
기본적으로 Unity에서 새 장면을 만들 때 카메라 구성 요소를 포함하지만 아래 설정이 제대로 적용되지 않은 기본 카메라 GameObject가 계층 구조에 포함됩니다.
네임스페이스: UnityEngine.XR
형식: XRDevice
방향 전용 또는 좌석 크기 조정 환경을 빌드하려면 Unity를 고정 추적 공간 유형으로 설정해야 합니다. 고정 추적 공간은 고정된 참조 프레임을 추적하도록 Unity의 세계 좌표계를 설정합니다. 고정 추적 모드에서는 앱이 시작될 때 카메라의 기본 위치 바로 앞에 있는 편집기(앞으로 -Z)에 배치된 콘텐츠가 사용자 앞에 표시됩니다.
XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);
네임스페이스: UnityEngine.XR
형식: InputTracking
360도 비디오 뷰어(위치 헤드 업데이트가 환상을 망칠 수 있음)와 같은 순수한 방향 전용 환경 의 경우 XR을 설정할 수 있습니다. InputTracking.disablePositionalTracking 을 true로:
InputTracking.disablePositionalTracking = true;
착석 규모 환경의 경우 사용자가 나중에 좌석에 앉은 원점이 될 수 있도록 XR을 호출할 수 있습니다. InputTracking.Recenter 메서드:
InputTracking.Recenter();
앉은 크기 조정 환경을 빌드하는 경우 XR을 호출하여 사용자의 현재 헤드 위치에서 Unity의 월드 원점이 될 수 있습니다. InputTracking.Recenter 메서드.
카메라 배경 설정
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로 변경합니다. 더 가깝게 렌더링된 콘텐츠는 사용자에게 불편을 초래할 수 있으며 렌더링 거리 지침에 따라 피해야 합니다.
카메라 최근 설정
앉은 크기 조정 환경을 빌드하는 경우 XR을 호출하여 사용자의 현재 헤드 위치에서 Unity의 월드 원점이 될 수 있습니다. 레거시 XR의 InputTracking.Recenter 메서드 또는 XR SDK의 XRInputSubsystem.TryRecenter 메서드.
이라니
이 기능은 일반적으로 VR 환경을 위해 예약됩니다.
MRTK의 원격 보고 구현을 사용하는 것이 좋습니다.
MRTK를 사용하지 않도록 선택하는 경우 Unity는 XR 상호 작용 도구 키트에서 원격 보고 구현을 제공합니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 계층 구조에서 카메라를 부모로 지정하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
MRTK의 원격 보고 구현을 사용하는 것이 좋습니다.
직접 구현하도록 선택하는 경우 카메라를 직접 이동할 수 없다는 점을 명심하는 것이 좋습니다. Unity가 머리 추적을 위해 카메라를 제어하기 때문에 계층 구조에서 카메라를 부모로 지정하고 대신 해당 GameObject를 이동해야 합니다. 이는 MRTK의 플레이스페이스에 해당합니다.
다시 프로젝션 모드
HoloLens와 몰입형 헤드셋은 모두 광자를 내보낸 경우 사용자의 실제 헤드 위치에 대한 잘못된 예측에 맞게 앱이 렌더링하는 각 프레임을 다시 보호합니다.
기본적으로:
- VR 몰입형 헤드셋은 앱이 지정된 프레임에 대한 깊이 버퍼를 제공하는 경우 위치 다시 보호를 처리합니다. 몰입형 헤드셋은 또한 위치와 방향 모두에서 잘못된 표현을 위해 홀로그램을 조정합니다. 깊이 버퍼가 제공되지 않으면 시스템은 방향의 잘못된 예측만 수정합니다.
- HoloLens 2와 같은 홀로그램 헤드셋은 앱이 깊이 버퍼를 제공하는지 여부에 관계없이 위치 재프로젝션을 처리합니다. 렌더링이 실제 환경에서 제공하는 안정적인 배경으로 스파스되는 경우가 많기 때문에 HoloLens의 깊이 버퍼 없이 위치 재프로젝션이 가능합니다.
MRTK에는 현재 다시 보호 모드에 대한 도우미가 없습니다. 자세한 내용은 다른 탭 중 하나를 참조하세요.
다시 프로젝션 모드는 XRDisplaySubsystem.reprojectionMode를 적절한 값으로 설정하여 구성할 수 있습니다.
예를 들어 본문이 엄격하게 잠긴 콘텐츠(예: 360도 비디오 콘텐츠)를 사용하여 방향 전용 환경을 빌드하는 경우 다시 프로젝션 모드를 ReprojectionMode.OrientationOnly로 설정해야만 다시 프로젝션 모드를 방향으로 명시적으로 설정할 수 있습니다.
다시 프로젝션 모드는 HolographicSettings.ReprojectionMode를 적절한 값으로 설정하여 구성할 수 있습니다.
예를 들어 본문이 고정된 콘텐츠(예: 360도 비디오 콘텐츠)를 사용하여 방향 전용 환경을 빌드하는 경우 HolographicReprojectionMode.OrientationOnly로 설정해야만 다시 프로젝션 모드를 방향으로 명시적으로 설정할 수 있습니다.
다음 개발 검사점
앞에서 제시한 Unity 개발 과정을 따라가는 경우 MRTK 핵심 구성 요소를 탐색하는 중입니다. 여기에서 다음 구성 요소로 진행할 수 있습니다.
또는 Mixed Reality 플랫폼 기능 및 API로 이동합니다.
언제든지 Unity 개발 검사점으로 돌아갈 수 있습니다.
참고 항목