고해상도 렌더 파이프라인을 사용하여 몰입감 있고 포토리얼리스틱한 VR 경험을 창출하기

SEBASTIEN LACHAMBRE / UNITY TECHNOLOGIESSenior Technical Artist
Mar 12, 2020|7 분
고해상도 렌더 파이프라인을 사용하여 몰입감 있고 포토리얼리스틱한 VR 경험을 창출하기
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

우리는 공식적으로 하이 디피니션 렌더 파이프라인 (HDRP)에 가상 현실을 도입하고 있습니다. 2019.3.6f1 이후 패키지 버전 7.3.1과 함께 HDRP는 이제 검증되었으며 VR에서 사용할 수 있습니다.

이 블로그 게시물은 VR 프로젝트에서 HDRP를 사용하는 기술적인 내용을 다룹니다. HDRP가 제공하는 모든 가능성에 대해 더 알고 싶다면 이 블로그 게시물을 확인해 보세요.

HDRP의 VR은 다음과 같이 설계되었습니다:

모든 HDRP 기능이 VR과 호환됩니다.

HDRP는 새로운 유니티 XR 플러그인 프레임워크와 완전히 지원됩니다.

싱글 패스(인스턴싱)는 VR을 위한 기본 및 권장 렌더링 솔루션입니다.

기능 살펴보기

VR 프로젝트에 HDRP를 사용하면 렌더 파이프라인의 모든 기능을 활용하여 상상력에만 제한된 경험을 만들 수 있습니다. 최첨단 렌더링 기술을 통해 HDRP는 가상 현실 환경에서 이전에 보기 드문 품질로 놀랍고 포토리얼리스틱한 비주얼을 제공합니다.

다음은 VR 프로젝트에서 사용할 수 있는 기능에 대한 간단한 개요입니다:

  • 지연 및 전방 렌더링
  • 모든 조명 유형, 그림자, 데칼 및 볼륨 효과
  • 스크린 스페이스 효과
  • 앰비언트 오클루전 (AO)
  • 스크린 스페이스 반사 (SSR)
  • 서브서피스 스캐터링 (SSS)
  • 왜곡 및 굴절
  • 포스트 프로세싱
  • 컬러 그레이딩, 안티 앨리어싱, 심도, 등등.
  • Visual Effect Graph의 모든 VFX
지원하는 플랫폼

HDRP용 VR은 현재 다음 플랫폼 및 장치에서 사용할 수 있습니다:

  • Oculus Rift & Rift S (Oculus XR Plugin, Windows 10, DirectX 11)
  • Windows 혼합 현실 (Windows XR Plugin, Windows 10, DirectX 11)
  • PlayStationVR

OpenVR: Valve는 현재 2019.3 이상을 위한 OpenVR Unity XR Plugin을 개발 중이며, 곧 사용할 수 있을 것입니다.

스테레오 렌더링 기술

네이티브 VR 구현은 모든 것을 두 번 처리합니다 - 각 눈마다 한 번씩입니다. 이 솔루션을 멀티패스 렌더링이라고 부릅니다. HDRP는 멀티패스 렌더링을 지원하지만, 이 방법은 렌더링을 위해 CPU 전력을 두 배로 사용하므로 권장하지 않습니다. 사실상 드로우 호출 수가 두 배가 됩니다. 게다가 그림자는 두 번 렌더링되며 GPU 예산의 상당 부분을 소모할 수 있습니다.

그렇긴 하지만, 멀티패스를 사용하는 것이 적절한 경우도 있습니다:

  • 시스템에 GPU 메모리가 적은 경우, 멀티패스는 단일 패스보다 렌더 타겟에 대해 적은 메모리를 사용합니다.
  • 어떤 이유로 각 눈에 대해 매우 다른 시점을 렌더링해야 하는 경우.

더 빠른 솔루션은 단일 패스(인스턴스) 렌더링을 사용하는 것입니다. 이 모드에서는 모든 드로우 호출이 두 눈에 대해 동시에 렌더링됩니다. 이는 렌더 타겟을 위한 텍스처 배열과 인스턴스 드로우 호출을 사용하여 달성됩니다. 또한, 컬링과 그림자는 프레임당 한 번만 처리됩니다.

HDRP는 모든 기능이 VR과 호환되도록 설계되었으며 단일 패스 렌더링에 최적화되어 있습니다.

주요 설계 결정은 모든 렌더 타겟에 대해 텍스처 배열을 사용하는 것이었습니다(심지어 VR을 위해 생성하지 않을 때도). 이 결정은 셰이더 매크로와 결합되어, 몇 가지 특별한 경우(예: 조명 목록 생성, 간접 타일 지연 음영, 볼륨 조명 및 카메라 상대 렌더링)를 제외하고 VR과 자동으로 호환되는 셰이더를 작성할 수 있게 해주었습니다.

HDRP는 모든 전체 화면 패스 및 효과에 필요한 추가 복잡성과 오버헤드 때문에 더블 와이드 텍스처에 대한 단일 패스 렌더링을 지원하지 않습니다.

HDRP VR로 시작하세요.

HDRP VR을 시작하려면 Unity 문서의 VR 개요 섹션을 확인하세요. VR과 함께 HDRP를 설정하는 데 도움을 주기 위해, 설정을 검증하고 마법사가 잘못된 것으로 식별한 설정을 수정하는 데 도움을 줄 수 있는 HDRP 마법사를 제공합니다.

HDRP 마법사

새 XR 플러그인 프레임워크를 사용하여 VR을 수동으로 구성하려면 문서를 참조하세요. 단일 패스 렌더링을 설정하려면 두 가지 프로젝트 설정이 단일 패스 스테레오 렌더링 모드로 설정되어 있어야 하며 그리고 HDRP 자산 설정이 단일 패스로 설정되어 있어야 합니다. HDRP는 이 두 옵션 중 하나라도 단일 패스에 대해 활성화되지 않으면 기본적으로 멀티패스로 설정됩니다.

XR 설정

안티 앨리어싱

VR에서 앨리어싱을 줄이는 것은 훌륭한 사용자 경험을 만들고 가상 환경의 몰입감을 깨지 않도록 하는 데 매우 중요합니다. HDRP는 안티 앨리어싱을 돕기 위한 여러 솔루션을 제공합니다.

카메라 안티 앨리어싱 모드는 Unity의 문서에 자세히 설명되어 있습니다. 이 옵션에는 다음이 포함됩니다:

  • 다중 샘플링 안티 앨리어싱(MSAA)은 포워드 렌더링과 함께 지원됩니다. 샘플 수(2x, 4x, 8x)를 선택하여 품질과 성능의 균형을 맞출 수 있습니다. 이 기술은 훌륭한 결과를 얻을 수 있지만 비용이 많이 들 수 있습니다.
  • 시간적 안티 앨리어싱은 대부분의 애플리케이션에 가장 좋은 솔루션일 가능성이 높습니다. 앨리어싱을 줄이는 데 매우 효과적이지만 일부 세부 사항이 흐려질 수 있습니다. 포함된 샤픈 필터 제어로 이 흐림을 상쇄할 수 있습니다.
  • 다소 저렴한 솔루션에는 빠른 근사치 안티 앨리어싱(FXAA) 또는 서브픽셀 형태학적 안티 앨리어싱(SMAA)이 포함됩니다.
  • MSAA를 TAA, FXAA 또는 SMAA와 결합하는 것도 가능합니다. 이 기술은 시각적 품질을 향상시키지만, 비용은 누적됩니다.
  • 재료별로 기하학적 스페큘러 안티 앨리어싱을 사용하여 추가적인 음영 안티 앨리어싱을 사용할 수 있으며, 이를 재료에서 직접 조정할 수 있습니다. 부드럽고 밀도가 높은 표면에 사용을 권장합니다.

성능

VR 렌더링은 두 눈에 표시하기 위해 더 높은 새로 고침 속도와 해상도가 필요하기 때문에 매우 요구가 많습니다. HDRP 자산 설정에서 필요하지 않은 기능을 비활성화해야 합니다. 볼류메트릭과 같은 기능은 지원되지만 성능이 요구되는 90 fps를 충족하지 않기 때문에 VR 애플리케이션에 적합하지 않습니다. 성능을 자주 모니터링하고 프로파일링하면 프로젝트의 병목 현상을 식별하는 데 도움이 됩니다.

기본적으로 VR에서 볼류메트릭 효과의 정밀도(z 슬라이스)는 GPU 성능을 더 수용 가능하게 유지하기 위해 절반으로 줄어듭니다. 볼류메트릭 조명 외에도 VR 프로젝트를 진행할 때 HDRP 영역 조명 지원 비활성화를 강력히 권장합니다. 다른 기능과 달리 영역 조명은 셰이더 구성 파일을 통해 비활성화해야 합니다.

HDRP에서 사용할 수 있는 두 가지 렌더링 방법이 있으며, 이는 성능에도 영향을 미칩니다: Lit Shader 모드 포워드 및 지연 렌더링입니다. 이 두 모드의 차이점에 대해 알아보려면 문서를 참조하십시오. VR에 적합한 모드를 선택하는 것은 프로젝트의 요구 사항에 따라 다릅니다. 포워드 렌더링은 MSAA를 활성화하고 메모리 사용량을 줄일 수 있는 반면, 지연 렌더링은 많은 수의 조명이 있는 프로젝트에 더 효율적이지만 더 많은 메모리를 소모합니다.

GPU 성능에 영향을 미치는 또 다른 요소는 렌더링 버퍼의 해상도입니다. 이 해상도는 처음에 XR 디스플레이 플러그인에 의해 설정되며 사용 중인 헤드셋에 따라 다릅니다. 그런 다음 애플리케이션에서 해상도를 조정하거나 현재 장면의 맥락에 따라 해상도를 조정하는 동적 해상도 기능을 사용할 수 있습니다. 예를 들어, 해상도는 현재 GPU 프레임 시간에 따라 조정될 수 있습니다.

더 많은 팁은 HDRP VR 토크를 확인하세요. Unite 2019 코펜하겐에서.

HDRP VR에 대한 기술적 심층 분석

HDRP에서 VR을 지원하기 위해, 우리는 뷰 인스턴싱 및 렌더 타겟을 위한 텍스처 배열 사용을 처리하는 데 도움이 되는 셰이더 매크로 세트를 추가했습니다. 예를 들어, 다음 코드를 사용하여 셰이더에서 텍스처를 선언할 수 있습니다:

TEXTURE2D_X(MyTexture);

텍스처 배열을 지원하는 플랫폼에서는 이 매크로가 TEXTURE2D_ARRAY로 확장됩니다. 플랫폼이 텍스처 배열을 지원하지 않거나 ShaderConfig.cs의 설정이 비활성화된 경우, 매크로는 일반 TEXTURE2D로 확장됩니다. 텍스처 샘플링에 대해서도 유사한 기능이 제공됩니다.

셰이더 측에서는 적절한 뷰 상수(뷰 행렬, 투영 행렬 등)가 배열에 저장되고, 이는 원시의 instanceID에서 파생된 눈 인덱스를 기반으로 인덱싱됩니다. 컴퓨트 셰이더의 경우, z 디스패치 차원은 각 눈을 식별하는 데 사용됩니다. 매크로 UNITY_XR_ASSIGN_VIEW_INDEX는 일반적으로 적절한 눈 인덱스를 할당하는 데 사용됩니다.

HDRP VR의 미래

HDRP VR의 향후 버전은 다음에 집중할 것입니다:

  • 가변 비율 셰이딩과 같은 새로운 하드웨어 옵션으로 성능 향상
  • Vulkan 및 DX12로 플랫폼 지원 향상
  • 장치 지원 향상
  • 단일 패스를 확장하여 두 개 이상의 뷰를 지원
의견을 공유해 주세요

오늘부터 HDRP VR의 이점을 누릴 수 있습니다. 우리는 개선을 계속하는 동안 HDRP 포럼에서 귀하의 피드백을 듣고 싶습니다.