홀로그램 렌더링 개요

홀로그램 렌더링을 사용하면 애플리케이션이 실제 세계 또는 사용자가 만든 가상 영역 내에 정확하게 배치되어 있든 관계없이 사용자 주변의 정확한 위치에 홀로그램을 그릴 수 있습니다. 홀로그램은 소리와 빛으로 만든 개체입니다. 렌더링을 사용하면 애플리케이션에서 조명을 추가할 수 있습니다.

디바이스 지원

기능 HoloLens(1세대) HoloLens 2 몰입형 헤드셋
렌더링 ✔️ ✔️ ✔️

홀로그램 렌더링

홀로그램 렌더링의 핵심은 사용 중인 디바이스 종류를 아는 것입니다. HoloLens와 같은 시스루 디스플레이가 있는 디바이스는 세계에 빛을 추가합니다. 검은색 픽셀은 완전히 투명하지만 밝은 픽셀은 점점 불투명해지고 있습니다. 디스플레이의 빛이 실제 세계의 빛에 추가되기 때문에 흰색 픽셀은 반투명합니다.

입체 렌더링은 홀로그램에 하나의 깊이 신호를 제공하지만 접지 효과를 추가하면 홀로그램이 가까이 있는 표면을 보다 쉽게 볼 수 있습니다. 한 가지 접지 기술은 근처 표면의 홀로그램 주위에 빛을 추가한 다음 이 빛에 그림자를 렌더링하는 것입니다. 이러한 방식으로 그림자는 환경에서 빛을 빼는 것처럼 보입니다. 공간 소리 는 사용자가 홀로그램의 거리와 상대 위치에 대한 이유를 알려주는 또 다른 중요한 깊이 신호입니다.

Windows Mixed Reality 몰입형 헤드셋과 같이 불투명한 디스플레이가 있는 장치는 세상을 차단합니다. 검은색 픽셀은 검은색이고 다른 모든 색은 사용자에게 해당 색으로 표시됩니다. 애플리케이션은 사용자가 보는 모든 것을 렌더링하는 역할을 담당합니다. 따라서 사용자가 편안한 환경을 갖출 수 있도록 일정한 새로 고침 속도를 유지하는 것이 훨씬 더 중요합니다.

예측된 렌더링 매개 변수

혼합 현실 헤드셋(HoloLens 및 몰입형 헤드셋 모두)은 주변 환경을 기준으로 사용자의 머리 위치와 방향을 지속적으로 추적합니다. 애플리케이션이 다음 프레임을 준비하기 시작하면 시스템은 프레임이 디스플레이에 표시되는 정확한 순간에 사용자의 머리가 미래에 있을 위치를 예측합니다. 이 예측에 따라 시스템은 해당 프레임에 사용할 뷰 및 프로젝션 변환을 계산합니다. 애플리케이션은 올바른 결과를 생성하기 위해 이러한 변환을 사용해야 합니다. 시스템 제공 변환을 사용하지 않으면 결과 이미지가 실제 세계와 일치하지 않아 사용자 불편이 발생합니다.

참고

새 프레임이 디스플레이에 도달하는 시기를 정확하게 예측하기 위해 시스템은 애플리케이션 렌더링 파이프라인의 효과적인 엔드 투 엔드 대기 시간을 지속적으로 측정합니다. 시스템이 렌더링 파이프라인의 길이에 맞게 조정되는 동안 해당 파이프라인을 최대한 짧게 유지하여 홀로그램 안정성을 향상시킬 수 있습니다.

고급 기술을 사용하여 시스템 예측을 보강하는 애플리케이션은 시스템 보기 및 프로젝션 변환을 재정의할 수 있습니다. 이러한 애플리케이션은 여전히 의미 있는 결과를 생성하기 위해 사용자 지정 변환의 기준으로 시스템 제공 변환을 사용해야 합니다.

기타 렌더링 매개 변수

프레임을 렌더링할 때 시스템은 애플리케이션이 그려야 하는 백 버퍼 뷰포트를 지정합니다. 이 뷰포트는 프레임 버퍼의 전체 크기보다 작은 경우가 많습니다. 뷰포트 크기에 관계없이 프레임이 애플리케이션에 의해 렌더링되면 시스템은 이미지를 스케일 업스케일링하여 디스플레이 전체를 채웁니다.

필요한 새로 고침 속도로 렌더링할 수 없는 애플리케이션의 경우 시스템 렌더링 매개 변수를 구성 하여 증가된 픽셀 별칭의 비용으로 메모리 압력 및 렌더링 비용을 줄일 수 있습니다. 백 버퍼 형식도 변경할 수 있으며, 일부 앱의 경우 메모리 대역폭 및 픽셀 처리량을 개선하는 데 도움이 될 수 있습니다.

앱에서 렌더링하도록 요청하는 렌더링 frustum, 해상도 및 프레임 속도도 프레임에서 프레임으로 변경될 수 있으며 왼쪽 및 오른쪽 눈에서 다를 수 있습니다. 예를 들어 MRC( 혼합 현실 캡처 )가 활성화되어 있고 사진/비디오 카메라 보기 구성 이 옵트인되지 않는 경우 한 쪽 눈이 더 큰 FOV 또는 해상도로 렌더링될 수 있습니다.

지정된 프레임의 경우 앱은 시스템에서 제공하는 뷰 변환, 프로젝션 변환 및 뷰포트 해상도를 사용하여 렌더링 해야 합니다 . 또한 애플리케이션은 렌더링 또는 뷰 매개 변수가 프레임에서 프레임으로 고정된 상태로 유지된다고 가정해서는 안 됩니다. Unity와 같은 엔진은 사용자의 물리적 이동과 시스템 상태를 항상 준수할 수 있도록 자체 카메라 개체에서 이러한 모든 변환을 처리합니다. 애플리케이션이 전 세계에서 사용자의 가상 이동을 허용하는 경우(예: 게임 패드에서 엄지스틱 사용) 카메라 위에 부모 리그 개체를 추가하여 이동할 수 있습니다. 이렇게 하면 카메라가 사용자의 가상 동작과 물리적 동작을 모두 반영합니다. 애플리케이션이 시스템에서 제공하는 뷰 변환, 프로젝션 변환 또는 뷰포트 차원을 수정하는 경우 적절한 재정의 API를 호출하여 시스템에 알려야 합니다.

홀로그램 렌더링의 안정성을 향상시키기 위해 앱은 렌더링에 사용되는 깊이 버퍼를 각 프레임마다 Windows에 제공해야 합니다. 앱이 깊이 버퍼를 제공하는 경우 카메라에서 미터 단위로 표현되는 일관된 깊이 값이 있어야 합니다. 이렇게 하면 시스템에서 픽셀당 깊이 데이터를 사용하여 사용자의 머리가 예측된 위치에서 약간 오프셋되는 경우 콘텐츠를 더 잘 안정화할 수 있습니다. 깊이 버퍼를 제공할 수 없는 경우 포커스 지점과 정상을 제공하여 대부분의 콘텐츠를 잘라내는 평면을 정의할 수 있습니다. 깊이 버퍼와 포커스 평면이 모두 제공되면 시스템에서 둘 다 사용할 수 있습니다. 특히 애플리케이션이 동작 중인 홀로그램을 표시할 때 속도 벡터를 포함하는 깊이 버퍼와 포커스 지점을 모두 제공하는 것이 유용합니다.

이 항목에 대한 하위 수준 세부 정보는 DirectX의 렌더링 문서를 참조하세요.

홀로그램 카메라

Windows Mixed Reality 홀로그램 카메라의 개념을 소개합니다. 홀로그램 카메라는 3D 그래픽 텍스트에 있는 기존 카메라와 비슷합니다. 내장 카메라 속성(위치 및 방향)과 내장 카메라 속성을 모두 정의합니다. (예를 들어 보기의 필드는 가상 3D 장면을 보는 데 사용됩니다.) 기존 3D 카메라와 달리 애플리케이션은 카메라의 위치, 방향 및 내장 속성을 제어하지 않습니다. 오히려 홀로그램 카메라의 위치와 방향은 사용자의 움직임에 의해 암시적으로 제어됩니다. 사용자의 이동은 보기 변환을 통해 프레임 단위로 애플리케이션에 릴레이됩니다. 마찬가지로 카메라의 내장 속성은 프로젝션 변환을 통해 디바이스의 보정된 광학 및 릴레이된 프레임 단위로 정의됩니다.

일반적으로 애플리케이션은 단일 스테레오 카메라를 렌더링합니다. 강력한 렌더링 루프는 여러 카메라를 지원하며 모노 및 스테레오 카메라를 모두 지원합니다. 예를 들어 시스템에서 사용자가 헤드셋 모양에 따라 MRC( 혼합 현실 캡처 )와 같은 기능을 활성화할 때 대체 관점에서 렌더링하도록 애플리케이션에 요청할 수 있습니다. 여러 카메라를 지원할 수 있는 애플리케이션은 지원할 수 있는 카메라 종류에 옵트인하여 해당 카메라를 가져옵니다.

볼륨 렌더링

의료 MRI 또는 엔지니어링 볼륨을 3D로 렌더링할 때 볼륨 렌더링 기술이 자주 사용됩니다. 이러한 기술은 사용자가 머리를 움직이기만 하면 키 각도에서 이러한 볼륨을 자연스럽게 볼 수 있는 혼합 현실에서 흥미로울 수 있습니다.

HoloLens에서 지원되는 해상도(1세대)

  • 최대 뷰포트 크기는 HolographicDisplay의 속성입니다. HoloLens는 기본적으로 최대 뷰포트 크기(720p(1268x720)로 설정됩니다.
  • HolographicCamera에서 ViewportScaleFactor를 설정하여 뷰포트 크기를 변경할 수 있습니다. 이 배율 인수는 0에서 1까지의 범위에 있습니다.
  • HoloLens(1세대)에서 지원되는 가장 낮은 뷰포트 크기는 720p의 50%로 360p(634x360)입니다. ViewportScaleFactor 0.5입니다.
  • 시각적 성능 저하로 인해 540p보다 낮은 항목은 권장되지 않지만 픽셀 채우기 속도의 병목 상태를 식별하는 데 사용할 수 있습니다.

HoloLens 2 지원되는 해결 방법

  • 현재 및 최대 지원되는 렌더링 대상 크기는 보기 구성의 속성입니다. HoloLens 2 기본적으로 최대 렌더링 대상 크기(1440x936)로 설정됩니다.
  • 앱은 RequestRenderTargetSize 메서드를 호출하여 새 렌더링 대상 크기를 요청하여 렌더링 대상 버퍼의 크기를 변경할 수 있습니다. 요청된 렌더링 대상 크기를 충족하거나 초과하는 새 렌더링 대상 크기가 선택됩니다. 이 API는 GPU에서 메모리 재할당이 필요한 렌더링 대상 버퍼의 크기를 변경합니다. 이는 GPU의 메모리 압력을 줄이기 위해 렌더링 대상 크기를 축소할 수 있으며 이 메서드를 고주파로 호출해서는 안 됩니다.
  • 앱은 HoloLens 1과 동일한 방식으로 뷰포트 크기를 변경할 수 있습니다. GPU에 추가된 메모리 재할당이 없으므로 높은 빈도로 변경할 수 있지만 GPU의 메모리 압력을 줄이는 데 사용할 수는 없습니다.
  • HoloLens 2 지원되는 가장 낮은 뷰포트 크기는 634x412이며, 기본 렌더링 대상 크기를 사용할 때 ViewportScaleFactor는 약 0.44입니다.
  • 지원되는 가장 낮은 뷰포트 크기보다 작은 렌더링 대상 크기가 제공되면 뷰포트 배율 인수는 무시됩니다.
  • 시각적 성능 저하로 인해 540p보다 낮은 항목은 권장되지 않지만 픽셀 채우기 속도의 병목 상태를 식별하는 데 사용할 수 있습니다.

추가 정보