HDRP(고화질 렌더 파이프라인) 설정을 활용하여 성능을 극대화하고 강력한 그래픽스를 구현하는 방법을 알아보세요.
Unity 2020 LTS 및 차기 버전을 대상으로 한 HDRP 버전 10을 포함하여, HDRP 패키지는 사용자 친화적인 인터페이스, 유연한 기능, 안정성, 우수한 성능에 중점을 두고 개발되어 왔습니다. 하지만 HDRP를 최대한 활용하려면 주요 설정과 작동 방식, 기능을 모두 파악하는 것이 중요합니다. 따라서 CPU/GPU 프로파일러 캡처와 렌더 파이프라인 디버그 뷰, 그리고 HDRP의 셰이더 프레임워크와 관련하여 HDRP가 어떤 식으로 작동하는지 살펴보겠습니다.
그래픽스 디버깅부터 프로파일링, 최적화까지 다루는 이번 블로그 포스팅에서는 커스텀 패스 API나 패키지의 기타 로컬 부분을 사용하여 HDRP를 커스터마이즈하는 팁을 소개합니다.
프레임 분석을 시작하기에 앞서 HDRP의 기능을 파악해두는 것이 좋습니다. HDRP의 기능을 소개하는 Unite Now 세션 HDRP로 정확도 높은 게임 그래픽스 구현하기와 Unity의 고화질 렌더 파이프라인을 사용한 레이트레이싱 웨비나, 볼류메트릭 클라우드, 렌즈 플레어, 광원 앵커 강연 등을 참고해보세요.
빌트인 렌더 파이프라인에서 HDRP로 이전하는 사용자의 경우 마이그레이션에 적응 시간이 필요한 경우가 있습니다. 그 이유는 다음과 같습니다.
여러 HDRP 기능 중 전역(Global) 설정부터 살펴보겠습니다.
빌트인 렌더 파이프라인의 경우 그래픽스 설정에서 대부분의 프로젝트별 그래픽스 설정을 다룹니다. 한편 플레이어 설정에는 Windows, Linux, Mac, Xbox 등 특정 타겟 플랫폼이라는 컨텍스트에서 일반적인 그래픽스 설정이 포함됩니다.
HDRP 프로젝트에서도 마찬가지로 그래픽스 설정과 플레이어 설정을 사용하지만, 렌더 파이프라인의 고급 기본 설정에 대한 액세스를 제공하는 세 가지 설정 세트를 추가로 사용합니다.
빌트인 렌더 파이프라인을 사용하면 Quality Settings 탭에서 여러 품질 모드를 정의할 수 있습니다. 각 품질 수준에서 이방성 텍스처 사용 등의 그래픽스 설정을 지정하면 로우엔드 플랫폼에서 하드웨어 리소스를 절약할 수 있습니다.
특히 HDRP 프로젝트의 경우, 각 품질 수준에 대해 오버라이드 HD 렌더 파이프라인 에셋을 선택할 수 있습니다. 따라서 빌트인 렌더 파이프라인보다 더 다양하게 구성할 수 있습니다. HD 렌더 파이프라인 에셋은 화면 위 방향(directional), 펑추얼(punctual), 면(area) 광원의 최대 수 및 컬러 그레이딩 LUT 크기, 광원 쿠키 아틀라스 크기 등 여러 파라미터를 저장합니다.
Quality Settings 탭에 있는 일부 빌트인 렌더 파이프라인 프로젝트용 프로퍼티는 오직 빌트인 렌더 파이프라인에만 적용됩니다. HDRP 프로젝트에서는 이러한 설정이 원래 위치에서 사라지고 다른 위치에서 '대체 설정'으로 보일 수 있습니다.
예를 들어 빌트인 렌더 파이프라인 프로젝트의 경우, Quality Settings 탭에서 Shadow Resolution 프로퍼티를 제어합니다. 반면 HDRP 프로젝트에서는 HD 렌더 파이프라인 에셋의 Lighting > Shadows 섹션에서 섀도우 맵의 해상도를 제어합니다.
HDRP에서 씬을 렌더링하려면 빌트인 렌더 파이프라인에서와 마찬가지로 카메라를 추가해야 합니다. 또는 HDRP는 카메라별 추가 파라미터를 저장하기 위해 HD Additional Camera Data 컴포넌트(동일한 게임 오브젝트에 연결)를 사용합니다.
HDRP는 커스터마이징을 위해 다양한 카메라별 파라미터를 제공합니다. 여러 물리적 카메라 설정이 있으며, 카메라의 Custom Frame Settings 프로퍼티를 선택하면 프레임 설정 시스템을 통해 카메라가 프레임을 드로우하는 방식을 결정할 수 있습니다.
프레임 설정 시스템은 카메라 프로퍼티 오버라이드 스택으로 이루어져 있습니다. HDRP Default Settings 탭에서 프레임 설정의 기본값을 지정할 수 있습니다. 아울러 각 카메라는 기본 프레임 설정을 오버라이드할 수 있습니다.
Render Pipeline Debug 창의 Camera 패널은 Frame Settings 오버라이드 스택을 시각화하는 데 유용합니다.
다음 예시를 통해 Render Pipeline Debug 창에서 Camera 패널이 어떻게 작동하는지 볼 수 있습니다.
씬에 Main Camera 라는 카메라가 하나 있습니다. Main Camera는 정적 오브젝트만 드로우합니다. HDRP Default Settings 탭은 모션 벡터를 활성화하는 반면, Main Camera의 Frame Settings 오버라이드는 전반적인 성능을 향상하기 위해 해당 기능을 비활성화합니다.
Motion Vectors 오버라이드 스택은 Default Frame 설정 왼쪽에 Overridden Frame 설정의 상태를 표시합니다. 그림 4에서 A를 참조하세요.
또한 Render Pipeline Debug 창은 Overridden Frame 설정 왼쪽에 Sanitized Frame 설정의 상태를 표시합니다. 삭제(Sanitization) 시스템은 Overridden Frame 설정의 일관성을 유지합니다. 동일한 예시를 보면, Main Camera의 Frame Settings 오버라이드에서 Opaque Object Motion과 Transparent Object Motion이 명시적으로 비활성화되지 않은 것을 볼 수 있습니다. 그러나 Motion Vector가 비활성화되었으므로, 그림 4의 B에서 확인할 수 있듯이 삭제 시스템에 의해 이러한 종속 기능도 비활성화됩니다.
Unite Now 세션에서 언급했듯이 HDRP는 볼륨 시스템을 지원합니다. 빌트인 렌더 파이프라인의 포스트 프로세싱 스택과 유사하게 HDRP 볼륨 시스템은 포스트 프로세싱을 제어합니다. 여러 기능 중에서도 하늘이 렌더링되는 방식, 간접광의 강도, 그리고 일부 그림자 설정을 갖추고 있습니다.
간단히 말해서 HDRP Volume 시스템은 카메라가 씬을 가로질러 이동할 때 렌더링 설정을 변경할 수 있는 추상적 프레임워크입니다. 각 Volume 프로퍼티에는 하드 코딩된 기본값이 있습니다. Render Pipeline Debug 창의 Volume 패널에서 기본값을 확인할 수 있습니다. 그림 5에서 맨 오른쪽 열을 보면 Lens Distortion의 기본 강도(Intensity)가 0으로 표시되어 있습니다.
하드 코딩된 이러한 기본 프로퍼티는 HDRP Default Settings 탭의 Volume Components 섹션에 있는 프로퍼티 오버라이드에 의해 오버라이드될 수 있습니다. 이러한 프로퍼티 오버라이드도 마찬가지로 씬에서 볼륨에 의해 오버라이드될 수 있습니다.
반대로 카메라는 씬의 볼륨에서 여러 프로퍼티 값을 선택합니다. 아무 값도 없는 경우 HDRP Default Settings 탭의 프로퍼티 값을 선택하거나 하드 코딩된 기본 프로퍼티 값을 선택합니다.
그림 5에서 볼 수 있듯이 Render Pipeline Debug 창의 Volume 패널은 현재 Volume 프로퍼티 오버라이드 스택을 시각화하는 데 유용합니다. 특히 현재 사용 중인 Volume 프로퍼티가 표시되므로 디버깅할 때 효과적입니다.
빌트인 렌더 파이프라인과 마찬가지로 렌더링할 지오메트리는 보통 씬에서 Mesh Renderers 또는 Skinned Mesh Renderers에 의해 지정됩니다. HDRP 관련 데이터는 적절한 렌더러나 셰이더 그래프를 사용할 수 있도록 주로 머티리얼 에 저장됩니다.
빌트인 렌더 파이프라인과 마찬가지로 HDRP 프로젝트에는 각 광원에 HDRP 관련 데이터 스토리지가 있는 Lights가 있습니다. HD Additional Light Data 컴포넌트가 일반 Light 컴포넌트와 함께 연결됩니다.
Light 컴포넌트를 가지는 게임 오브젝트 외에도 여러 곳에서 파생되는 다양한 조명 설정이 있다는 점을 고려하세요. 관련된 몇 가지 예시는 다음과 같습니다.
HDRP UX에 대해 살펴보았으니 이제 HDRP 프로젝트에 사용할 수 있는 다소 생소한 그래픽 프로퍼티에 대해 알아보겠습니다. 그림 7에 설명된 방식대로 상단의 일반 설정에서 시작하여 아래에 있는 오버라이드 설정으로 내려가며 프로퍼티를 검색할 수 있습니다. 위에서 아래로 갈수록 범위가 넓어집니다.
HDRP의 그래픽스 설정은 다음에 맞게 조정되어야 합니다.
HDRP 설정은 특히 설정의 범위에 맞게 조정됩니다.
다음과 같이 설정 범위 간에 충돌이 발생하는 경우가 있습니다.
충돌을 해결하기 위해 HD 렌더 파이프라인 에셋은 티어 설정을 지원합니다. 하나의 프로퍼티에 대해 하나의 값을 명시하는 대신, 여러 티어(예: Low, Medium, High 및 경우에 따라 Ultra 티어)에 여러 값을 지정할 수 있습니다.
화면 속 화면(picture-in-picture) 효과를 렌더링하는 카메라의 경우, 포스트 프로세싱 효과를 제어하는 볼륨과 섀도우 맵을 필요로 하는 스포트라이트에 대해 모두 티어를 지정할 수 있습니다.
이제 HDRP가 활성 HD 렌더 파이프라인 에셋에 있는 적절한 티어에서 프로퍼티를 찾은 후 사용할 수 있습니다.
물론 카메라나 볼륨, 광원에서 티어 설정 시스템을 무시하고 원하는 동작을 직접 결정하는 것도 가능합니다.
설정 범위가 중복되는 다른 예를 살펴보겠습니다.
씬에 있는 일부 Mesh Renderer가 복잡한 버텍스 애니메이션과 셰이더 그래프를 사용한다고 생각해 보세요. 로우엔드 기기에서는 버텍스 애니메이션이 지나치게 많은 리소스를 소모할 수 있습니다. 화면 속 화면 효과가 있는 경우에는 렌더 텍스처를 위해 추가되는 카메라 렌더링도 고려해야 하며, 버텍스 애니메이션을 가지고 렌더링하는 경우 다른 카메라가 필요하지 않습니다.
이 경우에는 세 가지 설정 범위가 중복됩니다.
이를 해결하기 위해, 셰이더 그래프에서 사용할 수 있는 특별한 Material Quality 키워드가 있습니다.
각 카메라의 기본 프레임 설정을 오버라이드하고 머티리얼 품질 수준을 지정하여, 활성 HD 렌더 파이프라인 에셋을 오버라이드할 수 있습니다.
아티스트는 체계적인 방식으로 HDRP를 설정할 수 있습니다. 근사한 고품질 콘텐츠를 제작하려면 아티스트를 위해 훌륭한 UX를 유지해야 합니다.
설정이 간단한 HDRP 프로젝트를 시작하면 상당한 성능 비용이 발생할 수 있습니다. 이는 HDRP가 많은 기능을 기본으로 제공하기 때문입니다. 베스트 프랙티스는 사용하려는 기능에 대해서만 성능 비용을 지불하도록 HDRP 설정을 제어하는 것입니다.
최소한의 렌더링 워크로드를 표현하기 위해, 기본 머티리얼로 만든 225개의 큐브와 스포트라이트, 점 광원, 방향 광원, 주변광이 하나씩 있는 씬을 만들어 봅시다.
Nsight Graphics를 사용하여 GPU 캡처를 가져오면, 기본으로 활성화한 HDRP의 기능들로 인해 이러한 현상이 발생함을 확인할 수 있습니다.
여기에서 확인할 수 있듯이, HDRP 에셋을 제어하거나 카메라의 프레임 설정을 오버라이드하고, 볼륨 오버라이드를 추가하여 최소한의 기능만 활성화할 수 있습니다. 자세히 설명하면 다음과 같습니다.
변경 이후 측정된 평균 프레임 시간은 2.45ms에 불과하며, 빌트인 렌더 파이프라인에서 동일한 씬을 렌더링한 값에 비하면 놀라운 결과입니다.
실제 게임에서는 메인 카메라에 대해 이렇게 많은 기능을 끌 필요가 없지만, 일부 추가 카메라에 대해서는 이러한 조치가 필요합니다.
리소스를 더 적게 소모하는 카메라가 필요하다면, 2021.2 버전의 HDRP UI Camera Stacking 패키지를 사용하여 표준 카메라가 사용하는 것보다 훨씬 적은 리소스로 다수의 카메라 렌더링 UI를 스택할 수 있습니다.
위 예시를 통해 HDRP 성능 특성의 제어 범위를 알 수 있으며, HDRP 프로젝트의 설정을 왜 조정해야 하는지에 대해서도 살펴볼 수 있습니다.
올해 말에 제공될 HDRP 최종 가이드를 기대해 주세요. HDRP를 최대한 활용할 수 있는 섬세한 조명 기술을 심도 있게 다룰 예정입니다.
Is this article helpful for you?
Thank you for your feedback!