혼합현실 기기(Mixed Reality Devices)
VR 기기(VR devices)

VR 개요

Unity VR 을 사용하면 프로젝트에 외부 플러그인이 없어도 타겟 가상 현실 기기를 Unity 에서 직접 지정할 수 있습니다. Unity VR 은 여러 기기와 호환 가능한 베이스 API 와 기능 집합을 제공하고, 미래의 기기 및 소프트웨어와 호환되도록 설계되었습니다.

*Note: XR is an umbrella term which encompassess virtual reality (VR), augmented reality (AR), and Mixed Reality (MR). We are in the process of updating our XR documentation, but for now this documentation refers mainly to just VR.*

Unity’s XR API has been updated to reflect the broader umbrella term “XR” but much of the documentation currently still uses the term “VR”. The XR API surface is minimal by design, but will expand as XR continues to grow.

Unity 의 네이티브 VR 지원을 사용하면 다음을 얻을 수 있습니다.

  • 각 VR 기기의 안정적인 버전
  • API 인터페이스 하나로 다양한 VR 기기와 상호작용 가능
  • 각 기기용 외부 플러그인이 없는 클린 프로젝트 폴더
  • 애플리케이션에 여러 기기를 포함시키고 기기 간에 전환할 수 있는 기능
  • 성능 향상(네이티브 기기의 로우 레벨 Unity 엔진 최적화 가능) ot

Unity VR 지원 활성화

게임 빌드와 에디터에 대한 네이티브 VR 지원을 활성화하려면 Player Settings를 엽니다(메뉴: Edit > Project Settings > Player). XR Settings 를 선택한 다음 Virtual Reality Supported 체크박스를 선택합니다. 각 빌드 타겟마다 다음과 같이 설정합니다. 스탠드얼론 빌드에서 가상 현실 지원을 활성화해도 Android 에 대한 지원은 활성화되지 않습니다(그 반대도 마찬가지).

Navigating to Player Settings from the Unity Editor
Navigating to Player Settings from the Unity Editor

체크박스 아래에 표시되는 Virtual Reality SDK 리스트를 사용하여 각 빌드 타겟에 대해 VR 기기를 추가 및 제거합니다. 리스트 순서는 Unity 가 런타임 시점에 VR 기기를 활성화하는 순서와 같습니다. 올바르게 초기화되는 첫 기기가 활성화된 기기입니다. 리스트 순서는 빌드된 플레이어에서도 동일합니다.

Enabling Virtual Reality Support through XR Settings
Enabling Virtual Reality Support through XR Settings

빌드된 애플리케이션: 시작 기기 선택

빌드된 애플리케이션은 XR Settings 에 있는 Virtual Reality SDKs 리스트와 같은 순서로 초기화 및 활성화됩니다(위의 VR 지원 활성화 참조). 빌드 시에 리스트에 없는 기기는 최종 빌드에 사용할 수 없습니다. None 기기는 비 VR 애플리케이션(즉 일반 Unity 애플리케이션)과 같고, 리스트에 포함시키지 않아도 런타임 중에 전환할 수 있습니다. 이에 대한 예외가 None 입니다.

None 을 리스트에 기기로 포함시키면 VR 기기 초기화를 시도하기 전에 비 VR 애플리케이션을 디폴트로 사용할 수 있습니다. None 을 리스트 맨 위에 놓으면 VR 이 비활성화된 상태로 애플리케이션이 시작됩니다. 그러면 리스트에 있는 VR 기기를 XR.XRSettings.LoadDeviceByName을 사용하여 스크립트를 통해 활성화 및 비활성화할 수 있습니다.

전환하려는 기기의 초기화에 실패하면 Unity 는 해당 기기가 활성 VR 기기로 계속 설정된 상태에서 VR 을 비활성화합니다. 기기를 전환(XRSettings.LoadDeviceByName)하거나 VR 을 활성화(XR.XRSettings-enabled)하면 빌드된 애플리케이션이 초기화를 다시 시도합니다.

특정 기기를 실행하는 데 사용되는 커맨드 라인 인수는

-vrmode DEVICETYPE

입니다. 여기서 DEVICETYPE 은 지원되는 XR supported devices list에 있는 이름 중 하나입니다.

예: MyGame.exe -vrmode oculus

VR 을 활성화하면 수행되는 작업

Unity 에서 VR 을 활성화하면 몇 가지 작업이 자동으로 수행됩니다.

HMD(헤드 마운트 디스플레이)로 자동 렌더링

씬의 모든 카메라는 헤드 마운트 디스플레이(HMD)에 직접 렌더할 수 있습니다. 뷰 및 프로젝션 매트릭스는 헤드 트래킹, 포지션 트래킹 및 시야를 반영하여 자동으로 조정됩니다.

Camera 컴포넌트의 stereoTargetEye 프로퍼티를 사용하여 HMD 로 렌덩하는 기능을 비활성화할 수 있습니다. 그 대신 Target Texture 프로퍼티를 사용하여 카메라를 렌더 텍스처로 설정할 수 있습니다.

  • stereoTargetEye 프로퍼티를 사용하여 한쪽 눈만 HMD 에 렌더링하도록 카메라를 설정할 수 있습니다. 저격수 총의 망원경이나 양안 비디오 같은 특수 효과에 유용합니다. 이렇게 하려면 씬에 카메라 2 개를 추가합니다. 카메라 하나의 타겟은 왼쪽 눈이고 다른 하나의 타겟은 오른쪽 눈입니다. 레이어 마스크를 설정하여 각 눈으로 무엇을 보내는지 설정합니다.

자동 헤드 트래킹 입력

기기가 헤드에 마운트되지 않은 경우 헤드 트래킹과 해당 시야(FOV)가 자동으로 카메라에 적용됩니다. FOV 를 수동으로 특정 값으로 설정할 수 있지만, 카메라의 트랜스폼 값을 직접 설정할 수는 없습니다. 자세한 내용은 아래의 카메라 이해 섹션을 참조하십시오.

포지션 및 오리엔테이션이 프레임 렌더 전의 사용자 포지션 및 오리엔테이션과 가장 가깝게 일치하도록 헤드 트래킹 및 포지션 트래킹이 자동으로 적용됩니다. 이는 VR 경험을 개선시켜 사용자가 멀미를 느끼지 않게 합니다.

카메라 이해

카메라 트랜스폼은 헤드 추적 포즈로 오버라이드됩니다. 카메라를 이동 또는 회전하려면 다른 게임 오브젝트의 자식에 부착해야 합니다. 그러면 카메라의 부모에 적용된 모든 트랜스폼 변경이 카메라 자체에 영향을 미칩니다. 스크립트를 사용하여 카메라를 이동 또는 회전하는 경우에도 동일합니다.

Childing the Main Camera to a Gameobject
Childing the Main Camera to a Gameobject

카메라의 포지션과 오리엔테이션을 사용자가 중립 포지션에서 보는 위치라고 생각해야 합니다.

앉아서 느끼는 VR 경험과 룸 스케일 VR 경험은 차이가 있습니다.

  • 기기가 룸 스케일 경험을 지원하는 경우 카메라의 시작 포지션은 사용자 플레이 공간의 중앙입니다.
  • 앉아서 경험하는 경우 XR.InputTracking.Recenter()를 사용하여 카메라를 중립 포지션으로 재설정할 수 있습니다.

기기에 렌더링하는 각 카메라는 자동으로 카메라의 FOV 를 사용자가 각 VR SDK 에 대한 소프트웨어 설정에 입력한 FOV 로 바꿉니다. 사용자는 런타임 중에 시야를 변경할 수 없습니다. 이 동작은 멀미를 유발하는 것으로 알려져 있기 때문입니다.

에디터 모드(Editor Mode)

VR 기기가 Unity 에디터 모드를 지원하는 경우 에디터에서 Play 를 눌러 기기에서 직접 테스트할 수 있습니다.

stereoTargetEye 가 왼쪽 또는 두 눈으로 설정된 경우 왼쪽 눈이 게임 뷰 창에 렌더링됩니다. stereoTargetEye 가 오른쪽으로 설정된 경우 오른쪽 눈이 렌더링됩니다.

왼쪽 및 오른쪽 눈을 자동으로 나란히 표시하는 뷰는 없습니다. 게임 뷰에서 좌우를 나란히 보려면 카메라를 2 개 만들고 하나를 왼쪽 눈으로 설정하고 다른 하나를 오른쪽 눈으로 설정하고 둘을 나란히 표시하도록 뷰포트를 설정합니다.

에디터에서 실행하면 Unity IDE 가 창을 각각 렌더해야 하므로 리소스가 더 많이 사용되어 래그나 흔들림이 발생할 수 있습니다. 에디터 렌더에 사용되는 리소스를 줄이려면 게임 뷰를 열고 Maximize on Play 를 활성화합니다.

Unity 프로파일러는 에디터 밖에서 실행할 경우에 성능이 어떻게 될지 파악하는 데 유용한 툴입니다. 하지만 프로파일러 자체도 리소스를 많이 사용합니다. 타겟 플랫폼에서 빌드를 만들고 직접 실행하면 게임 성능을 가장 효과적으로 확인할 수 있습니다. 비개발 빌드를 실행하면 최고 성능을 얻을 수 있지만, 개발 빌드를 사용하면 Unity 프로파일러를 연결하여 프로파일링 성능을 높일 수 있습니다.

Unity 에서 VR 을 개발하는 데 권장되는 하드웨어 및 소프트웨어

하드웨어(Hardware)

좋은 VR 경험을 위해서는 타겟 HMD 와 유사한 프레임 속도를 실현하는 것이 필수적입니다. 프레임 속도는 HMD 에서 사용되는 디스플레이의 refresh 속도와 일치해야 합니다. 프레임 속도가 HMD 의 refresh 속도보다 낮아지면 현저하게 눈에 띄고 플레이어가 종종 멀미를 느낍니다.

The table below lists the device refresh rates for common VR headsets:

VR Device Refresh Rate
Gear VR 60hz
Oculus Rift 90hz
Vive 90hz

소프트웨어

  • Windows: Windows 7, 8, 8.1, 및 Windows 10 가 모두 호환됩니다.

  • Android: Android OS 롤리팝 5.1 이상

  • OS X: OSX 10.9+와 Oculus 0.5.0.1 런타임이 호환됩니다. 하지만 Oculus 는 OS X 개발 일시 중단했으므로 Unity 의 네이티브 VR 기능에는 Windows 를 사용해야 합니다.

  • 그래픽 카드 드라이버: 드라이버를 항상 최신 버전으로 유지해야 합니다. 모든 기기는 최신 드라이버 버전으로 유지되므로 오래된 드라이버는 지원되지 않을 수 있습니다.

기기 런타임 요구 사항

각 VR 기기에 해당하는 런타임이 컴퓨터에 설치되어 있어야 합니다. 예를 들어 Unity 에서 Oculus 를 개발하고 실행하려면 Oculus 런타임(Oculus 홈이라고도 함)이 컴퓨터에 설치되어 있어야 합니다. Vive 를 사용하려면 Steam 과 SteamVR 이 설치되어 있어야 합니다.

사용하는 Unity 버전에 따라, Unity 에서 지원하는 각 기기의 런타임 버전이 다를 수 있습니다. 크고 작은 각 Unity 릴리스의 릴리스 노트에서 런타임 버전을 확인할 수 있습니다.

일부 버전 업데이트 후에는 이전 런타임 버전이 더 이상 지원되지 않습니다. 그러면 이전 런타임 버전에서 네이티브 Unity 지원이 불가능하지만 새 런타임 버전에서는 계속 가능합니다.

Unity 네이티브 VR 지원은 프로젝트의 폴더 안에서 플러그인을 읽어오지 않으므로, VR 지원이 활성화된 경우 플러그인의 이전 버전을 네이티브 지원과 함께 포함시킬 수 없습니다. 이전 버전을 더 이상 지원하지 않는 Unity 릴리스와 함께 해당 버전을 사용하려면 Native VR Support 를 비활성화(XR Settings 로 이동하고 Virtual Reality Supported 를 선택 해제)합니다. 그런 다음 다른 타사 플러그인과 같은 방법으로 플러그인에 액세스합니다. 세부 정보는 위의 Unity VR 지원 활성화 섹션을 참조하십시오.

혼합현실 기기(Mixed Reality Devices)
VR 기기(VR devices)