이제 HDRP(High Definition Render Pipeline, 고해상도 렌더 파이프라인)에서 가상 현실 콘텐츠 제작이 정식 지원됩니다. Unity 2019.3의 패키지 버전 7.2.0에서 HDRP가 검증이 완료되었으며 VR 프로젝트 제작에 사용할 수 있습니다.
이번 블로그 포스팅에서는 VR 프로젝트에서 HDRP를 사용할 때 알아두어야 할 기술적인 내용을 설명합니다. HDRP를 이용하여 구현할 수 있는 모든 효과에 대해 자세히 알아보려면 이 블로그 포스팅을 참고하세요.
VR을 위한 HDRP는 다음과 같이 설계되었습니다.
VR 프로젝트에 HDRP를 사용하면 렌더 파이프라인의 모든 기능을 활용하여 상상 속 경험을 사실적으로 구현할 수 있습니다. HDRP의 최신 렌더링 기술은 기존의 가상 현실 환경과 차별화되는 극사실적이고 뛰어난 비주얼을 구현합니다.
VR 프로젝트에서 사용할 수 있는 기능은 다음과 같습니다.
현재 VR용 HDRP는 다음 플랫폼과 기기에서 사용 가능합니다.
OpenVR: 현재 Valve는 자체적으로 Unity 2019.3 및 이후 버전을 위한 OpenVR Unity XR 플러그인을 개발 중이며, 곧 출시할 예정입니다.
스테레오 렌더링 기술
네이티브 VR 구현에서는 ‘멀티 패스 렌더링’을 사용하여 모든 요소가 한 쪽 눈에 한 번씩, 총 두 번 처리됩니다. HDRP는 멀티 패스 렌더링을 지원하지만, 멀티 패스 렌더링을 사용할 경우 애플리케이션의 CPU 사용량이 두 배로 증가하여 드로우 콜 수도 두 배로 늘어나기 때문에 이 방법은 권장하지 않습니다. 게다가 그림자까지 두 번 렌더링되어 GPU 사용량도 크게 증가합니다.
멀티 패스는 다음과 같은 경우에 사용하도록 합니다.
인스턴스화된 싱글 패스 렌더링은 더 신속한 솔루션으로, 모든 드로우 콜이 양쪽 눈에 대해 동시에 렌더링됩니다. 이 과정은 렌더 타겟과 인스턴스화된 드로우 콜에 텍스처 배열을 사용하여 이루어집니다. 또한 컬링과 그림자는 프레임당 1회만 처리됩니다.
HDRP의 모든 기능은 VR과 호환되고 싱글 패스 렌더링에 최적화되도록 설계되었습니다.
또한 VR을 염두에 두고 제작하지 않더라도 모든 렌더 타겟에 텍스처 배열을 사용하도록 설계하였습니다. 유니티는 이러한 특성과 셰이더 매크로를 활용하여 VR과 자동으로 호환되는 셰이더를 제작했습니다. 단, 광원 목록 생성, 간접 타일 디퍼드 셰이딩, 입체 광원 및 카메라 기준 렌더링은 자동으로 호환되지 않습니다.
더블 와이드 텍스처의 싱글 패스 렌더링은 복잡도가 증가하고 전체 화면 패스 및 효과로 인한 오버헤드가 발생하므로 HDRP에서 지원되지 않습니다.
새로운 XR 플러그인 프레임워크를 사용하여 VR 프로젝트를 수동으로 설정하려면 기술 자료를 참조하세요. 싱글 패스 렌더링을 설정하려면 프로젝트를 싱글 패스 스테레오 렌더링(Single-Pass Stereo Rendering) 모드로, HDRP 에셋을 싱글 패스(Single Pass)로 설정해야 합니다. 두 옵션 중 하나라도 싱글 패스로 설정되지 않으면 HDRP가 멀티 패스로 기본 설정됩니다.
안티앨리어싱
탁월한 사용자 경험을 제공하고 가상 현실을 생생하게 전달하려면 앨리어싱을 최소화해야 합니다. HDRP는 안티앨리어싱에 유용한 몇 가지 솔루션을 제공합니다.
카메라의 안티앨리어싱 모드에 대한 자세한 설명은 Unity 기술 자료를 참조하세요. 다음과 같은 옵션이 지원됩니다.
성능
VR 렌더링은 새로고침 속도가 빠르고 양쪽 눈에 높은 해상도의 시각적 결과물을 보여주어야 하므로 매우 높은 성능을 요구합니다. HDRP 에셋 설정에서 필요하지 않은 기능을 모두 비활성화하세요. 볼류메트릭 효과와 같은 기능은 VR 애플리케이션에 필요한 성능 요구치인 90fps를 충족하지 못하므로 VR에 적합하지 않습니다. 성능 모니터링과 프로파일링을 자주 수행하여 프로젝트의 병목 현상을 파악해야 합니다.
적절한 수준의 GPU 성능 유지를 위해 VR에서 볼류메트릭 효과의 정밀도(z 슬라이스)는 기본적으로 50% 감소됩니다. VR 프로젝트에서 작업할 때는 입체 광원뿐만 아니라 HDRP 면 광원 지원도 비활성화하는 것이 좋습니다. 다른 기능과 달리 면 광원은 셰이더 설정 파일을 통해 비활성화해야 합니다.
HDRP에서 지원되는 두 가지 렌더링인 릿 셰이더 모드 포워드와 디퍼드는 성능에도 영향을 미칩니다. 두 모드의 차이점을 알아보려면 기술 자료를 참조하세요. 프로젝트의 요구 사항에 따라 VR에 적합한 모드가 달라집니다. 포워드 렌더링을 사용하면 MSAA를 활성화하고 메모리 사용량을 줄일 수 있는 반면, 디퍼드 렌더링은 광원 수가 많은 프로젝트에서 더 효율적이지만 메모리 사용량이 많습니다.
GPU 성능에 영향을 미치는 또 다른 요인은 렌더링 버퍼의 해상도입니다. 이 해상도는 XR 디스플레이 플러그인에서 최초로 설정되며 사용 중인 VR 헤드셋에 따라 달라집니다. 애플리케이션에서 이 해상도를 변경하거나 다이내믹 해상도 기능을 사용하여 현재 씬의 컨텍스트에 따라 해상도를 조절할 수 있습니다. 예를 들어 현재 GPU 프레임 시간을 기반으로 해상도를 조정할 수 있습니다.
유나이트 코펜하겐 2019의 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을 사용하실 수 있습니다. HDRP VR을 개선할 수 있도록 HDRP 포럼에 피드백을 남겨주시기 바랍니다.