Unity 검색

Graphic of city streets created by HDRP
Graphic of city streets created by HDRP

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

Unity 2020 LTS 및 차기 버전을 대상으로 한 HDRP 버전 10을 포함하여, HDRP 패키지는 사용자 친화적인 인터페이스, 유연한 기능, 안정성, 우수한 성능에 중점을 두고 개발되어 왔습니다. 하지만 HDRP를 최대한 활용하려면 주요 설정과 작동 방식, 기능을 모두 파악하는 것이 중요합니다. 따라서 CPU/GPU 프로파일러 캡처와 렌더 파이프라인 디버그 뷰, 그리고 HDRP의 셰이더 프레임워크와 관련하여 HDRP가 어떤 식으로 작동하는지 살펴보겠습니다.

그래픽스 디버깅부터 프로파일링, 최적화까지 다루는 이번 블로그 포스팅에서는 커스텀 패스 API나 패키지의 기타 로컬 부분을 사용하여 HDRP를 커스터마이즈하는 팁을 소개합니다.

HDRP UX의 구조

프레임 분석을 시작하기에 앞서 HDRP의 기능을 파악해두는 것이 좋습니다. HDRP의 기능을 소개하는 Unite Now 세션 HDRP로 정확도 높은 게임 그래픽스 구현하기Unity의 고화질 렌더 파이프라인을 사용한 레이트레이싱 웨비나, 볼류메트릭 클라우드, 렌즈 플레어, 광원 앵커 강연 등을 참고해보세요.

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

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

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

전역 설정

빌트인 렌더 파이프라인의 경우 그래픽스 설정에서 대부분의 프로젝트별 그래픽스 설정을 다룹니다. 한편 플레이어 설정에는 Windows, Linux, Mac, Xbox 등 특정 타겟 플랫폼이라는 컨텍스트에서 일반적인 그래픽스 설정이 포함됩니다.

Image of where the graphics setting can be found in HDRP projects
그림 1: HDRP 프로젝트에서 전역 그래픽스 설정 위치

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

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

품질 설정

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

특히 HDRP 프로젝트의 경우, 각 품질 수준에 대해 오버라이드 HD 렌더 파이프라인 에셋을 선택할 수 있습니다. 따라서 빌트인 렌더 파이프라인보다 더 다양하게 구성할 수 있습니다. HD 렌더 파이프라인 에셋은 화면 위 방향(directional), 펑추얼(punctual), 면(area) 광원의 최대 수 및 컬러 그레이딩 LUT 크기, 광원 쿠키 아틀라스 크기 등 여러 파라미터를 저장합니다.

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

예를 들어 빌트인 렌더 파이프라인 프로젝트의 경우, Quality Settings 탭에서 Shadow Resolution 프로퍼티를 제어합니다. 반면 HDRP 프로젝트에서는 HD 렌더 파이프라인 에셋의 Lighting > Shadows 섹션에서 섀도우 맵의 해상도를 제어합니다.

Screenshot of properties in the quality settings within a built-in render pipeline project vs a HDRP project
그림 2: Quality 설정에 더 적은 수의 프로퍼티가 표시되는 HDRP 프로젝트
Many properties in the quality settings are moved to the HD Render Pipeline Asset
그림 3: 다수의 프로퍼티가 HD 렌더 파이프라인 에셋으로 이동한 결과

카메라 및 프레임 설정

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

HDRP는 커스터마이징을 위해 다양한 카메라별 파라미터를 제공합니다. 여러 물리적 카메라 설정이 있으며, 카메라의 Custom Frame Settings 프로퍼티를 선택하면 프레임 설정 시스템을 통해 카메라가 프레임을 드로우하는 방식을 결정할 수 있습니다.

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

Render Pipeline Debug 창Camera 패널은 Frame Settings 오버라이드 스택을 시각화하는 데 유용합니다.

Camera 패널 사용

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

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

Motion Vectors 오버라이드 스택은 Default Frame 설정 왼쪽에 Overridden Frame 설정의 상태를 표시합니다. 그림 4에서 A를 참조하세요.

Frame Settings override stack displayed by the Render Pipeline Debug window
그림 4: Render Pipeline Debug 창에 표시된 Frame Settings 오버라이드 스택

또한 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으로 표시되어 있습니다.

Volume override stack displayed by the Render Pipeline Debug window
그림 5: Render Pipeline Debug 창에 표시된 Volume 오버라이드 스택

하드 코딩된 이러한 기본 프로퍼티는 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 컴포넌트를 가지는 게임 오브젝트 외에도 여러 곳에서 파생되는 다양한 조명 설정이 있다는 점을 고려하세요. 관련된 몇 가지 예시는 다음과 같습니다.

Indirect Lighting Controller Volume component
그림 6: Indirect Lighting Controller Volume 컴포넌트

프로퍼티 검색

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

one possible routine to search for graphics properties in your HDRP project
그림 7: HDRP 프로젝트에서 그래픽스 프로퍼티를 검색하는 예상 경로

그래픽스 설정 범위

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

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

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

설정 범위 간 충돌

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

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

충돌을 해결하기 위해 HD 렌더 파이프라인 에셋은 티어 설정을 지원합니다. 하나의 프로퍼티에 대해 하나의 값을 명시하는 대신, 여러 티어(예: Low, Medium, High 및 경우에 따라 Ultra 티어)에 여러 값을 지정할 수 있습니다.

value specified for each tier
value specified for each tier
value specified for each tier
그림 8: 각 티어에 지정된 값

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

Specify tiers rather than values.
Specify tiers rather than values.
Specify tiers rather than values.
그림 9: 값 대신 티어 지정

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

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

세 가지 설정 범위 중복

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

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

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

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

이를 해결하기 위해, 셰이더 그래프에서 사용할 수 있는 특별한 Material Quality 키워드가 있습니다.

The Material Quality keyword in Shader Graph
그림 10: 셰이더 그래프의 Material Quality 키워드

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

The Available Material Quality Levels and Default Material Quality Level
그림 11: Available Material Quality Levels 및 Default Material Quality Level

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

Specifying Material Quality Level from a camera’s Frame Settings override
그림 12: 카메라의 Frame Settings 오버라이드에서 Material Quality Level 지정

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

HDRP 설정 최적화

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

최소한의 렌더링 워크로드를 표현하기 위해, 기본 머티리얼로 만든 225개의 큐브와 스포트라이트, 점 광원, 방향 광원, 주변광이 하나씩 있는 을 만들어 봅시다.

Scene of 225 cubes example
그림 13: 간단한 씬 설정

간단하게 설정한 이 씬이 어떻게 실행될까요? VSync는 끈 상태로 IL2CPP 스크립팅 백엔드에서 2880x1620 해상도의 스탠드얼론 플레이어를 빌드해 보겠습니다. Intel i9-10980HK GPU와 NVIDIA RTX2080 GPU가 탑재된 Windows 기기에서 플레이어를 실행하면, 프로파일러에 평균 프레임 시간이 4.6ms로 표시됩니다.

프로파일러의 타임라인 뷰를 보면 DXGI.WaitOnSwapChain 마커에 상당한 시간이 소요되고 있으며, 이는 GPU 바운드 상태를 나타냅니다.

Both the Built-in Render Pipeline and HDRP tests are GPU bound.
그림 14: 모두 GPU 바운드인 빌트인 렌더 파이프라인 테스트와 HDRP 테스트 결과

Nsight Graphics를 사용하여 GPU 캡처를 가져오면, 기본으로 활성화한 HDRP의 기능들로 인해 이러한 현상이 발생함을 확인할 수 있습니다.

  • SSAO, 피하 산란, 동적 노출, 모션 블러, 블룸과 같은 다양한 시각 효과가 활성화되어 있습니다.
  • 여러 Color Pyramid 패스와 Upsample Low-res Transparent 패스가 활성화되어 있는데, 이는 모두 복잡한 투명도 렌더링을 지원합니다.
HDRP has many effects and passes turned on by default.
그림 15: 여러 효과와 패스가 기본적으로 활성화된 HDRP

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

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

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

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

리소스를 더 적게 소모하는 카메라가 필요하다면, 2021.2 버전의 HDRP UI Camera Stacking 패키지를 사용하여 표준 카메라가 사용하는 것보다 훨씬 적은 리소스로 다수의 카메라 렌더링 UI를 스택할 수 있습니다.

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

향후 계획

Unity branded raytraced ball image

HDRP 가이드 제공 예정

올해 말에 제공될 HDRP 최종 가이드를 기대해 주세요. HDRP를 최대한 활용할 수 있는 섬세한 조명 기술을 심도 있게 다룰 예정입니다.

관련 게시물