성능을 향상하기 위한 HDRP 설정

MATHIEU MULLER / UNITYSenior Manager, Product Management
Oct 22, 2021|13 분
성능을 향상하기 위한 HDRP 설정

HDRP(고화질 렌더 파이프라인) 설정을 활용하여 성능을 극대화하고 강력한 그래픽스를 구현하는 방법을 알아보세요.

Unity 2020 LTS 이상용 HDRP 버전 10이 출시되면서 HDRP 패키지는 사용자 친화적인 인터페이스, 유연한 기능, 안정성, 뛰어난 성능을 지속적으로 우선순위에 두고 있습니다. 하지만 HDRP를 최대한 활용하려면 주요 설정과 작동 방식, 기능을 모두 파악하는 것이 중요합니다. 그렇기 때문에 CPU/GPU 프로파일러 캡처, 렌더 파이프라인 디버그 뷰, HDRP의 셰이더 프레임워크의 관점에서 HDRP가 작동하는 방식을 살펴보고 있습니다.

이 블로그에서는 그래픽 디버깅부터 프로파일링 및 최적화에 이르기까지 커스텀 패스 API 또는 패키지의 다른 로컬 부분을 사용하여 프로젝트에 맞게 HDRP를 커스터마이징하는 데 도움이 되는 팁을 소개합니다.

HDRP UX의 구조

프레임 분석을 시작하기에 앞서 HDRP의 기능을 파악해두는 것이 좋습니다. HDRP로 게임용 고퀄리티 그래픽 구현하기, 유니티의 고화질 렌더 파이프라인으로 레이 트레이싱하기 웨비나, 볼류메트릭 클라우드, 렌즈 플레어, 라이트 앵커 강연 등 HDRP에 대한 훌륭한 가이드가 되는 유나이트 나우 프레젠테이션을 시청하는 것을 추천합니다.

빌트인 렌더 파이프라인에서 HDRP로 이전하는 사용자의 경우 마이그레이션에 적응 시간이 필요한 경우가 있습니다. 그 이유는 다음과 같습니다.

  • HDRP는 통합된 물리 기반 렌더링 프레임워크를 갖추고 있어 속성에 실제 세계 단위를 사용합니다: 노출 값은 카메라 감도에 사용되는 반면 칸델라는 빛의 강도에 사용됩니다. 유나이트 나우토크에서는 씬을 조명하면서 일관된 결과를 얻기 위해 물리 기반 방식으로 사고하는 방법을 소개합니다.
  • HDRP 프로젝트에는 제어 가능한 다양한 파라미터가 여러 곳에 존재합니다. HDRP에 다양한 통합 기능을 비롯하여 아티스트와 엔지니어가 작업을 미세 조정하고 최적화할 수 있는 고급 커스터마이징 기능이 있기 때문입니다.

여러 HDRP 기능 중 전역(Global) 설정부터 살펴보겠습니다.

전역 설정

빌트인 렌더 파이프라인의 경우 그래픽 설정은 대부분의 프로젝트별 그래픽 설정을 다룹니다. Windows, Linux, Mac 또는 Xbox와 같은 특정 대상 플랫폼의 컨텍스트에 따라 몇 가지 일반적인 그래픽 설정이 포함된 플레이어 설정도 있습니다.

HDRP 프로젝트에서 그래픽 설정을 찾을 수 있는 위치 이미지

HDRP 프로젝트에서도 마찬가지로 그래픽스 설정과 플레이어 설정을 사용하지만, 렌더 파이프라인의 고급 기본 설정에 대한 액세스를 제공하는 세 가지 설정 세트를 추가로 사용합니다.

  • 예를 들어 그래픽스 설정에서 스크립터블 렌더 파이프라인(SRP) 설정은 기본 HD 렌더 파이프라인 에셋을 참조합니다. 이 HD 렌더 파이프라인 에셋에는 각 품질 수준에서 재정의할 수 있는 설정이 포함되어 있습니다.
  • HDRP 기본 설정 탭을 구성합니다:
  • 각 카메라(평면 반사 또는 반사 프로브에 사용되는 카메라 포함)에 대해 재정의할 수 있는 기본 속성이 포함된 기본 프레임 설정입니다. 카메라가 투명 오브젝트를 기본적으로 렌더링할지 여부를 결정할 수 있습니다.
  • 기본 볼륨 컴포넌트에는 각 "씬의 카메라 위치"에 대해 재정의할 수 있는 프로퍼티가 포함되어 있습니다. 예를 들어 장면의 특정 볼륨을 사용하여 기본 포스트 프로세싱 효과 강도를 정의할 수 있으며, 이를 재정의하여 "실외에서는 강하고 실내에서는 약함"으로 설정할 수 있습니다.
  • 기본 디퓨전 프로파일 에셋 프로퍼티는 HDRP 기본 설정 탭의 볼륨 컴포넌트 섹션에 있는 디퓨전 프로파일 오버라이드 컴포넌트로 재정의할 수 있습니다. 이는 다시 '씬에서 카메라의 위치'별로 오버라이드될 수 있습니다. 현재 Diffusion Profile 시스템에 '중복 오버라이드 레이어' 문제가 있지만, 유니티에서는 HDRP의 UX를 지속적으로 개선하며 이 문제의 해결책을 찾고 있습니다.
  • 기타 프로퍼티로 오버라이드될 수 없는 '순수 전역 설정'이 있습니다.
  • 마지막으로, 구성이 필요하지 않은 일부 낮은 수준의 설정은 HDRP 구성 패키지에 지정되어 있습니다. 이러한 설정도 '순수 전역 설정'에 해당합니다. 해당 설정은 변경하려면 C# 어셈블리와 HDRP 셰이더 프레임워크를 재컴파일해야 하므로, 다른 위치에 저장되어 있습니다.

품질 설정

빌트인 렌더 파이프라인을 사용하면 품질 설정 탭에서 다양한 품질 수준을 정의할 수 있습니다. 각 품질 수준에서 이방성 텍스처 사용 등의 그래픽스 설정을 지정하면 로우엔드 플랫폼에서 하드웨어 리소스를 절약할 수 있습니다.

특히 HDRP 프로젝트의 경우 각 퀄리티 레벨에 대해 오버라이드 HD 렌더 파이프라인 에셋을 선택할 수 있습니다. HD 렌더 파이프라인 에셋은 화면의 최대 방향광, 정시광, 영역광 개수, 컬러 그레이딩 LUT 크기, 라이트 쿠키 아틀라스 크기 등 여러 파라미터를 저장하므로 빌트인 렌더 파이프라인에 비해 구성성이 더 뛰어납니다.

Quality Settings 탭에 있는 일부 빌트인 렌더 파이프라인 프로젝트용 프로퍼티는 오직 빌트인 렌더 파이프라인에만 적용됩니다. HDRP 프로젝트에서는 이러한 설정이 원래 위치에서 사라지고 다른 위치에서 '대체 설정'으로 보일 수 있습니다.

예를 들어 빌트인 렌더 파이프라인 프로젝트에서 퀄리티 설정 탭은 섀도 해상도 프로퍼티를 제어합니다. 그러나 HDRP 프로젝트에서는 HD 렌더 파이프라인 에셋의 조명 > 섀도 섹션에서 섀도 맵의 해상도를 제어합니다.

빌트인 렌더 파이프라인 프로젝트 내 퀄리티 설정의 프로퍼티 스크린샷과 HDRP 프로젝트 비교
퀄리티 설정의 많은 프로퍼티가 HD 렌더 파이프라인 에셋으로 이동합니다.

카메라 및 프레임 설정

씬을 HDRP로 렌더링하려면 빌트인 렌더 파이프라인에서와 마찬가지로 카메라를 추가해야 합니다. HDRP는 또한 추가 HD 추가 카메라 데이터 컴포넌트(동일한 게임 오브젝트에 부착)를 사용하여 카메라별 추가 파라미터를 저장합니다.

HDRP는 커스터마이징을 위해 다양한 카메라별 파라미터를 제공합니다. 여러 가지 물리적 카메라 설정이 있으며, 카메라의 사용자 지정 프레임 설정 속성을 선택하면 프레임 설정 시스템을 통해 카메라가 프레임을 그리는 방법을 결정할 수 있습니다.

프레임 설정 시스템은 카메라 프로퍼티 오버라이드 스택으로 이루어져 있습니다. HDRP 기본 설정 탭에서 프레임 설정의 기본값을 지정할 수 있습니다. 또한 각 카메라는 기본 프레임 설정을 재정의할 수 있습니다.

렌더파이프라인 디버그 창의 카메라 패널은 프레임 설정 오버라이드 스택을 시각화하는 데 도움이 됩니다.

카메라 패널 사용

다음 예시를 통해 Render Pipeline Debug 창에서 Camera 패널이 어떻게 작동하는지 볼 수 있습니다.

메인 카메라라는 카메라가 있습니다. Main Camera는 정적 오브젝트만 드로우합니다. HDRP Default Settings 탭은 모션 벡터를 활성화하는 반면, Main Camera의 Frame Settings 오버라이드는 전반적인 성능을 향상하기 위해 해당 기능을 비활성화합니다.

모션 벡터 오버라이드 스택은 DefaultFrame 설정 왼쪽에 오버라이드된 프레임 설정의 상태를 표시합니다. 그림 4에서 A를 참조하세요.

프레임 설정은 렌더 파이프라인 디버그 창에 표시되는 스택을 재정의합니다.

또한 렌더 파이프라인 디버그 창에는 오버라이드된 프레임 설정의 왼쪽에 위생 처리된 프레임 설정의 상태가 표시됩니다. 삭제(Sanitization) 시스템은 Overridden Frame 설정의 일관성을 유지합니다. 같은 예시를 보면, 메인 카메라의 프레임 설정 오버라이드에서 불투명 오브젝트 모션과 투명 오브젝트 모션이 명시적으로 비활성화되어 있지 않습니다. 그러나 Motion Vector가 비활성화되었으므로, 그림 4의 B에서 확인할 수 있듯이 삭제 시스템에 의해 이러한 종속 기능도 비활성화됩니다.

볼륨 시스템

유나이트 나우토크에서 설명한 것처럼 HDRP는 볼륨 시스템을 지원합니다. 빌트인 렌더 파이프라인의 포스트 프로세싱 스택과 마찬가지로 HDRP 볼륨 시스템은 포스트 프로세싱을 제어합니다. 하지만 그 외에도 하늘 렌더링 방식, 간접광의 강도, 일부 그림자 설정 등 다양한 기능을 결정합니다.

간단히 말해서 HDRP Volume 시스템은 카메라가 씬을 가로질러 이동할 때 렌더링 설정을 변경할 수 있는 추상적 프레임워크입니다. 각 Volume 프로퍼티에는 하드 코딩된 기본값이 있습니다. 이러한 값을 확인하려면 렌더 파이프라인 디버그 창의 볼륨 패널을 사용하세요. 그림 5에서 맨 오른쪽 열을 보면 Lens Distortion의 기본 강도(Intensity)가 0으로 표시되어 있습니다.

렌더 파이프라인 디버그 창에 표시되는 볼륨 오버라이드 스택

이러한 하드코딩된 기본 프로퍼티는 HDRP 기본 설정 탭의볼륨 컴포넌트 섹션에서 프로퍼티 오버라이드를 통해 재정의할 수 있습니다. 이러한 프로퍼티 오버라이드도 마찬가지로 씬에서 볼륨에 의해 오버라이드될 수 있습니다.

반대로 카메라는 씬의 볼륨에서 여러 프로퍼티 값을 선택합니다. 아무 값도 없는 경우 HDRP Default Settings 탭의 프로퍼티 값을 선택하거나 하드 코딩된 기본 프로퍼티 값을 선택합니다.

그림 5에서 볼 수 있듯이 Render Pipeline Debug 창의 Volume 패널은 현재 Volume 프로퍼티 오버라이드 스택을 시각화하는 데 유용합니다. 특히 현재 사용 중인 Volume 프로퍼티가 표시되므로 디버깅할 때 효과적입니다.

메시 및 표면

빌트인 렌더 파이프라인에서와 마찬가지로 렌더링할 지오메트리는 일반적으로 씬에서 메시 렌 더러 또는 스킨드 메시 렌더러로 지정합니다. HDRP 관련 데이터는 주로 머티리얼에 저장되므로적절한 렌더러 또는 셰이더 그래프를 사용할 수 있습니다.

조명

빌트인 렌더 파이프라인에서와 마찬가지로 HDRP 프로젝트에는 각 라이트에 대한 HDRP 전용 데이터 스토리지가 있는 라이트가 있습니다. HD 추가 조명 데이터 구성 요소는 일반 조명 구성 요소와 함께 첨부됩니다.

Light 컴포넌트를 가지는 게임 오브젝트 외에도 여러 곳에서 파생되는 다양한 조명 설정이 있다는 점을 고려하세요. 관련된 몇 가지 예시는 다음과 같습니다.

간접 조명 컨트롤러 볼륨 컴포넌트
프로퍼티 검색

HDRP UX에 대해 살펴보았으니 이제 HDRP 프로젝트에 사용할 수 있는 다소 생소한 그래픽 프로퍼티에 대해 알아보겠습니다. 그림 7에 설명된 방식대로 상단의 일반 설정에서 시작하여 아래에 있는 오버라이드 설정으로 내려가며 프로퍼티를 검색할 수 있습니다. 위에서 아래로 갈수록 범위가 넓어집니다.

HDRP 프로젝트에서 그래픽 프로퍼티를 검색하는 하나의 가능한 루틴입니다.
그래픽스 설정 범위

HDRP의 그래픽스 설정은 다음에 맞게 조정되어야 합니다.

  • 프로그램의 품질 수준(예: 프로그램이 실행되는 플랫폼)
  • 현재 활성화된 카메라
  • 씬에서 카메라의 위치
  • 렌더링된 지오메트리의 머티리얼
  • 렌더링된 지오메트리에 영향을 미치는 광원

HDRP 설정은 특히 설정의 범위에 맞게 조정됩니다.

설정 범위 간 충돌

다음과 같이 설정 범위 간에 충돌이 발생하는 경우가 있습니다.

  • 품질 수준과 현재 활성화된 카메라가 동일한 그래픽스 파라미터를 제어하려는 경우. 예를 들어 저사양 디바이스에서 서브서피스 스캐터링 샘플링 횟수를 줄이려면 PIP 이펙트를 위해 렌더 텍스처로 렌더링하는 카메라의 서브서피스 스캐터링 샘플링 횟수도 줄일 수 있습니다.
  • 품질 수준과 씬에서의 카메라 위치가 동일한 그래픽스 파라미터를 제어하려는 경우. GPU 성능이 제한된 플랫폼에서 포스트 프로세싱 효과의 품질을 낮추려 한다면, 일부 씬 위치에서 복잡한 조명을 위해 이미 상당한 GPU 시간을 소모 중이라는 사실을 염두에 두어야 합니다. 따라서 성능 예산을 일부라도 회복하려면 이러한 위치에서 포스트 프로세싱 효과의 품질을 낮춰야 합니다.
  • 품질 수준과 씬의 광원이 동일한 그래픽스 파라미터를 제어하려는 경우. RAM이 한정된 플랫폼에서 섀도우 맵 해상도를 낮추고 싶다면, 낮은 해상도의 섀도우 맵이 필요한 작은 섀도우 캐스팅 스포트라이트가 씬에 많을 수 있다는 사실을 고려해야 합니다.

이러한 충돌을 해결하기 위해 HD 렌더 파이프라인 에셋은 계층 설정을 지원합니다. 속성에 대해 하나의 값만 표시하는 대신 여러 값을 낮음, 중간, 높음 및 경우에 따라 울트라 티어와 같은 여러 티어에 속성을 지정할 수 있습니다.

각 계층에 지정된 값
각 계층에 지정된 값
각 계층에 지정된 값

화면 속 화면(picture-in-picture) 효과를 렌더링하는 카메라의 경우, 포스트 프로세싱 효과를 제어하는 볼륨과 섀도우 맵을 필요로 하는 스포트라이트에 대해 모두 티어를 지정할 수 있습니다.

값이 아닌 계층을 지정합니다.
값이 아닌 계층을 지정합니다.
값이 아닌 계층을 지정합니다.

이제 HDRP가 활성 HD 렌더 파이프라인 에셋에 있는 적절한 티어에서 프로퍼티를 찾은 후 사용할 수 있습니다.

물론 카메라나 볼륨, 광원에서 티어 설정 시스템을 무시하고 원하는 동작을 직접 결정하는 것도 가능합니다.

세 가지 설정 범위 중복

설정 범위가 중복되는 다른 예를 살펴보겠습니다.

씬에 있는 일부 Mesh Renderer가 복잡한 버텍스 애니메이션과 셰이더 그래프를 사용한다고 생각해 보세요. 로우엔드 기기에서는 버텍스 애니메이션이 지나치게 많은 리소스를 소모할 수 있습니다. 화면 속 화면 효과가 있는 경우에는 렌더 텍스처를 위해 추가되는 카메라 렌더링도 고려해야 하며, 버텍스 애니메이션을 가지고 렌더링하는 경우 다른 카메라가 필요하지 않습니다.

이 경우에는 세 가지 설정 범위가 중복됩니다.

  • 씬의 지오메트리 머티리얼
  • 프로그램의 품질 수준
  • 씬의 카메라

이와 같은 경우를 해결하기 위해 셰이더 그래프에서 사용할 수 있는 특별한 머티리얼 퀄리티 키워드가 있습니다:

셰이더 그래프의 머티리얼 퀄리티 키워드

사용자가 머티리얼별로 제어하는 일반 셰이더 그래프 키워드와 달리 이 키워드는 HDRP에서 내부적으로 설정하는 글로벌 키워드입니다. HD 렌더 파이프라인 에셋에서는 다양한 머티리얼 품질 수준과 기본 머티리얼 품질 수준을 제어할 수 있습니다.

사용 가능한 머티리얼 퀄리티 레벨 및 기본 머티리얼 퀄리티 레벨

각 카메라의 기본 프레임 설정을 오버라이드하고 머티리얼 품질 수준을 지정하여, 활성 HD 렌더 파이프라인 에셋을 오버라이드할 수 있습니다.

카메라의 프레임 설정 오버라이드에서 머티리얼 퀄리티 레벨 지정하기

아티스트는 체계적인 방식으로 HDRP를 설정할 수 있습니다. 근사한 고품질 콘텐츠를 제작하려면 아티스트를 위해 훌륭한 UX를 유지해야 합니다.

HDRP 설정 최적화

설정이 간단한 HDRP 프로젝트를 시작하면 상당한 성능 비용이 발생할 수 있습니다. 이는 HDRP가 많은 기능을 기본으로 제공하기 때문입니다. 베스트 프랙티스는 사용하려는 기능에 대해서만 성능 비용을 지불하도록 HDRP 설정을 제어하는 것입니다.

최소한의 렌더링 작업량을 표현하기 위해 스포트라이트, 포인트 조명, 방향 조명 및 앰비언트 조명으로 비추는 기본 머티리얼을 사용하여 225개의 큐브로 구성된 씬을 만들어 보겠습니다.

225 큐브의 장면 예시

간단하게 설정한 이 씬이 어떻게 실행될까요? IL2CPP 스크립팅 백엔드에서 해상도가 2880x1620인 독립형 플레이어를 VSync를 끄고 빌드해 보겠습니다. 인텔 i9-10980HK GPU 및 엔비디아 RTX2080 GPU가 탑재된 Windows 머신에서 플레이어를 실행한 결과, 프로파일러는 평균 프레임 시간이 4.6ms임을 보여주었습니다.

프로파일러의 타임라인 보기를 보면 DXGI.WaitOnSwapChainmarker에 상당한 시간이 소요되고 있으며, 이는 GPU에 바인딩되어 있음을 나타냅니다.

빌트인 렌더 파이프라인과 HDRP 테스트는 모두 GPU에 바인딩됩니다.

Nsight 그래픽스를 사용하여 GPU 캡처를 해보면 HDRP에 기본적으로 여러 기능이 활성화되어 있기 때문에 이러한 현상이 발생합니다:

  • SSAO, 피하 산란, 동적 노출, 모션 블러, 블룸과 같은 다양한 시각 효과가 활성화되어 있습니다.
  • 여러 Color Pyramid 패스와 Upsample Low-res Transparent 패스가 활성화되어 있는데, 이는 모두 복잡한 투명도 렌더링을 지원합니다.
HDRP에는 기본적으로 많은 효과와 패스가 켜져 있습니다.

여기에서 볼 수 있듯이 HDRP 에셋을 제어하고 카메라의 프레임 설정을 재정의하고 볼륨 오버라이드를 추가하여 절대 최소 기능만 활성화하도록 할 수 있습니다. 자세히 설명하면 다음과 같습니다.

  • HDRP 에셋에서 데칼, 저해상도 투명도, 투명 후면, 뎁스 프리패스, 뎁스 포스트패스, SSAO, SSR, 컨택트 섀도우, 볼류메트릭 효과, 피하 산란, 왜곡을 모두 비활성화합니다.
  • 카메라의 프레임 설정에서 굴절, 포스트 프로세스, 애프터 포스트 프로세스, 투과, 반사 프로브, 평면 반사 프로브, 빅 타일 프리패스를 모두 비활성화합니다.
  • 볼륨으로 노출 모드를 고정 노출로 오버라이드합니다.

변경 이후 측정된 평균 프레임 시간은 2.45ms에 불과하며, 빌트인 렌더 파이프라인에서 동일한 씬을 렌더링한 값에 비하면 놀라운 결과입니다.

실제 게임에서는 메인 카메라에 대해 이렇게 많은 기능을 끌 필요가 없지만, 일부 추가 카메라에 대해서는 이러한 조치가 필요합니다.

더 저렴한 카메라에 관심이 있다면 2021.2의 HDRP UI 카메라 스태킹 패키지를 사용하면 표준 카메라 비용의 일부만으로 여러 대의 카메라 렌더링 UI를 스태킹할 수 있습니다.

위 예시를 통해 HDRP 성능 특성의 제어 범위를 알 수 있으며, HDRP 프로젝트의 설정을 왜 조정해야 하는지에 대해서도 살펴볼 수 있습니다.

향후 계획
Unity 브랜드 레이트레이싱 공 이미지

빛에서 시작됩니다: 고화질 렌더 파이프라인에 대한 최종 가이드

Unity 2020 LTS의 HDRP는 게임에서 사실적인 하이엔드 라이팅을 제작할 수 있는 향상된 툴을 제공합니다. 이 새롭고 심층적인 가이드를 통해 HDRP에서 물리 기반 조명의 강력한 기능을 활용하는 방법을 알아보세요.

가이드 확인하기