Search Unity

이제 HDRP(High Definition Render Pipeline, 고해상도 렌더 파이프라인)에서 가상 현실 콘텐츠 제작이 정식 지원됩니다. Unity 2019.3의 패키지 버전 7.2.0에서 HDRP가 검증이 완료되었으며 VR 프로젝트 제작에 사용할 수 있습니다.

이번 블로그 포스팅에서는 VR 프로젝트에서 HDRP를 사용할 때 알아두어야 할 기술적인 내용을 설명합니다. HDRP를 이용하여 구현할 수 있는 모든 효과에 대해 자세히 알아보려면 이 블로그 포스팅을 참고하세요.

VR을 위한 HDRP는 다음과 같이 설계되었습니다.

  1. HDRP의 모든 기능은 VR과 호환됩니다.
  2. HDRP는 새로운 Unity XR 플러그인 프레임워크에서 완벽히 지원됩니다.
  3. VR 개발 시 기본적으로 권장되는 렌더링 솔루션은 싱글 패스(인스턴싱)입니다.

주요 기능

VR 프로젝트에 HDRP를 사용하면 렌더 파이프라인의 모든 기능을 활용하여 상상 속 경험을 사실적으로 구현할 수 있습니다. HDRP의 최신 렌더링 기술은 기존의 가상 현실 환경과 차별화되는 극사실적이고 뛰어난 비주얼을 구현합니다.

VR 프로젝트에서 사용할 수 있는 기능은 다음과 같습니다.

  • 디퍼드 렌더링 및 포워드 렌더링
  • 모든 광원 유형, 그림자, 데칼 및 볼류메트릭 효과
  • 스크린 공간 효과
    • AO(Ambient Occlusion, 앰비언트 오클루전)
    • SSR(Screen Space Reflection, 스크린 공간 반사)
    • SSS(Subsurface Scattering, 피하 산란)
    • 왜곡 및 굴절
  • 포스트 프로세싱
    • 컬러 보정, 안티앨리어싱, 뎁스오브필드(피사계심도) 등
  • 비주얼 이펙트 그래프의 모든 VFX

지원되는 플랫폼

현재 VR용 HDRP는 다음 플랫폼과 기기에서 사용 가능합니다.

  • Oculus Rift 및 Rift S(Oculus XR 플러그인, Windows 10, DirectX 11)
  • Windows Mixed Reality(Windows XR 플러그인, Windows 10, DirectX 11)
  • PlayStationVR

OpenVR: 현재 Valve는 자체적으로 Unity 2019.3 및 이후 버전을 위한 OpenVR Unity XR 플러그인을 개발 중이며, 곧 출시할 예정입니다.

스테레오 렌더링 기술

네이티브 VR 구현에서는 ‘멀티 패스 렌더링’을 사용하여 모든 요소가 한 쪽 눈에 한 번씩, 총 두 번 처리됩니다. HDRP는 멀티 패스 렌더링을 지원하지만, 멀티 패스 렌더링을 사용할 경우 애플리케이션의 CPU 사용량이 두 배로 증가하여 드로우 콜 수도 두 배로 늘어나기 때문에 이 방법은 권장하지 않습니다. 게다가 그림자까지 두 번 렌더링되어 GPU 사용량도 크게 증가합니다.

멀티 패스는 다음과 같은 경우에 사용하도록 합니다.

  • 시스템의 GPU 메모리 용량이 작은 경우, 멀티 패스를 사용하면 싱글 패스보다 렌더 타겟에 메모리를 적게 사용합니다.
  • 양쪽 눈에 대해 렌더링하는 시점이 크게 차이 나는 경우

인스턴스화된 싱글 패스 렌더링은 더 신속한 솔루션으로, 모든 드로우 콜이 양쪽 눈에 대해 동시에 렌더링됩니다. 이 과정은 렌더 타겟과 인스턴스화된 드로우 콜에 텍스처 배열을 사용하여 이루어집니다. 또한 컬링과 그림자는 프레임당 1회만 처리됩니다.

HDRP의 모든 기능은 VR과 호환되고 싱글 패스 렌더링에 최적화되도록 설계되었습니다.

또한 VR을 염두에 두고 제작하지 않더라도 모든 렌더 타겟에 텍스처 배열을 사용하도록 설계하였습니다. 유니티는 이러한 특성과 셰이더 매크로를 활용하여 VR과 자동으로 호환되는 셰이더를 제작했습니다. 단, 광원 목록 생성, 간접 타일 디퍼드 셰이딩, 입체 광원 및 카메라 기준 렌더링은 자동으로 호환되지 않습니다.

더블 와이드 텍스처의 싱글 패스 렌더링은 복잡도가 증가하고 전체 화면 패스 및 효과로 인한 오버헤드가 발생하므로 HDRP에서 지원되지 않습니다.

HDRP VR 시작하기

HDRP VR을 시작하려면 Unity 기술 자료의 VR 개요 섹션을 참조하세요. 유니티는 VR용 HDRP를 설정하는 데 도움을 드리기 위해 설정을 확인하고 잘못된 설정을 수정하는 HDRP 마법사를 지원합니다.

HDRP VR 마법사

새로운 XR 플러그인 프레임워크를 사용하여 VR 프로젝트를 수동으로 설정하려면 기술 자료를 참조하세요. 싱글 패스 렌더링을 설정하려면 프로젝트를 싱글 패스 스테레오 렌더링(Single-Pass Stereo Rendering) 모드로, HDRP 에셋을 싱글 패스(Single Pass)로 설정해야 합니다. 두 옵션 중 하나라도 싱글 패스로 설정되지 않으면 HDRP가 멀티 패스로 기본 설정됩니다.

Oculus 플러그인의 프로젝트 설정과 HDRP 에셋 설정에서 싱글 패스 렌더링을 활성화합니다.

안티앨리어싱

탁월한 사용자 경험을 제공하고 가상 현실을 생생하게 전달하려면 앨리어싱을 최소화해야 합니다. HDRP는 안티앨리어싱에 유용한 몇 가지 솔루션을 제공합니다.

카메라의 안티앨리어싱 모드에 대한 자세한 설명은 Unity 기술 자료를 참조하세요. 다음과 같은 옵션이 지원됩니다.

  • MSAA(Multisampling Anti-Aliasing)는 포워드 렌더링에서 지원됩니다. 샘플 수(2x, 4x, 8x)를 선택하여 품질과 성능 간의 균형을 조절할 수 있습니다. 이 방식을 사용하면 우수한 결과를 얻을 수 있는 반면 비용이 많이 들 수 있습니다.
  • TAA(Temporal Anti-Aliasing)는 대부분의 애플리케이션에 가장 적합한 솔루션으로, 앨리어싱 감소에 매우 효과적이지만 세부적인 부분이 일부 흐리게 나타날 수 있습니다. 기본적으로 포함된 선명도 필터를 조절하여 이러한 현상을 완화할 수 있습니다.
  • FXAA(Fast Approximate Anti-Aliasing)나 SMAA(Subpixel Morphological Anti-Aliasing)를 사용하면 비용이 비교적 적게 듭니다.
  • MSAA를 TAA, FXAA나 SMAA와 함께 사용할 수도 있습니다. 이 경우 화질은 개선되지만, 비용은 누적되어 늘어납니다.
  • 지오메트릭 스페큘러 안티앨리어싱을 통해 머티리얼별로 추가적인 셰이딩 안티앨리어싱을 실시할 수도 있습니다. 이 요소는 머티리얼에서 직접 미세 조정할 수 있습니다. 매끄럽고 밀도가 높은 표면에 사용하는 것이 좋습니다.

성능

VR 렌더링은 새로고침 속도가 빠르고 양쪽 눈에 높은 해상도의 시각적 결과물을 보여주어야 하므로 매우 높은 성능을 요구합니다. HDRP 에셋 설정에서 필요하지 않은 기능을 모두 비활성화하세요. 볼류메트릭 효과와 같은 기능은 VR 애플리케이션에 필요한 성능 요구치인 90fps를 충족하지 못하므로 VR에 적합하지 않습니다. 성능 모니터링과 프로파일링을 자주 수행하여 프로젝트의 병목 현상을 파악해야 합니다.

적절한 수준의 GPU 성능 유지를 위해 VR에서 볼류메트릭 효과의 정밀도(z 슬라이스)는 기본적으로 50% 감소됩니다. VR 프로젝트에서 작업할 때는 입체 광원뿐만 아니라 HDRP 광원 지원도 비활성화하는 것이 좋습니다. 다른 기능과 달리 면 광원은 셰이더 설정 파일을 통해 비활성화해야 합니다.

HDRP에서 지원되는 두 가지 렌더링인 릿 셰이더 모드 포워드와 디퍼드는 성능에도 영향을 미칩니다. 두 모드의 차이점을 알아보려면 기술 자료를 참조하세요. 프로젝트의 요구 사항에 따라 VR에 적합한 모드가 달라집니다. 포워드 렌더링을 사용하면 MSAA를 활성화하고 메모리 사용량을 줄일 수 있는 반면, 디퍼드 렌더링은 광원 수가 많은 프로젝트에서 더 효율적이지만 메모리 사용량이 많습니다.

GPU 성능에 영향을 미치는 또 다른 요인은 렌더링 버퍼의 해상도입니다. 이 해상도는 XR 디스플레이 플러그인에서 최초로 설정되며 사용 중인 VR 헤드셋에 따라 달라집니다. 애플리케이션에서 이 해상도를 변경하거나 다이내믹 해상도 기능을 사용하여 현재 씬의 컨텍스트에 따라 해상도를 조절할 수 있습니다. 예를 들어 현재 GPU 프레임 시간을 기반으로 해상도를 조정할 수 있습니다.

유나이트 코펜하겐 2019의 HDRP VR 세션에서 더 많은 활용팁을 확인하세요.

HDRP VR 기술적 세부 사항

HDRP VR을 지원하기 위해 렌더 타겟에 뷰 인스턴싱과 텍스처 배열 사용을 처리할 수 있는 셰이더 매크로가 추가되었습니다. 예를 들어 다음 코드를 이용하여 셰이더에 텍스처를 선언할 수 있습니다.

TEXTURE2D_X(MyTexture);

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

셰이더에서는 적합한 뷰 상수(뷰 매트릭스, 투사 매트릭스 등)가 배열에 저장되고 프리미티브의 인스턴스 ID에서 파생되는 눈 인덱스(eye index)를 기반으로 인덱싱됩니다. 컴퓨트 셰이더의 경우 디스패치의 z값을 사용하여 양쪽 눈을 식별합니다. 적합한 눈 인덱스를 할당할 때는 보통 UNITY_XR_ASSIGN_VIEW_INDEX 매크로가 사용됩니다.

HDRP VR 향후 계획

다음 HDRP VR 버전에서는 아래와 같은 부분이 개선될 예정입니다.

  • 가변 속도 셰이딩(Variable Rate Shading)과 같은 새로운 하드웨어 옵션으로 성능 개선
  • Vulkan 및 DX12 플랫폼 추가 지원
  • 기기 추가 지원
  • 싱글 패스를 확장하여 3개 이상의 뷰 지원

의견을 공유해주세요

지금 바로 HDRP VR을 사용하실 수 있습니다. HDRP VR을 개선할 수 있도록 HDRP 포럼에 피드백을 남겨주시기 바랍니다.

 

7 replies on “HDRP로 생생하고 사실적인 VR 경험 구현”

Hi Alejandro, we have great results with HDRP+ VR on Oculus Quest with Link (tethered Quest). I think no HDRP is possible on Android now.

No, there is no way that HDRP would render on the quest. The quest is effectively a mobile platform and should be developed using similar techniques. URP would run on quest, but not HDRP.

HDRP is for PC, PS4 and Xbox One only currently.

Wow, these really look amazing and I can’t wait to see these realistic scenes and objects in my Somnium Space building!!

Comments are closed.