본문 바로가기

유니티/그래픽스

[Unity] HDRP (1) - 프로젝트 세팅 및 볼륨

반응형

이 글은 유니티 공식 HDRP가이드 문서를 바탕으로 2021.3.1 버전을 기준하여 작성되었습니다.

 

HDRP란?

Unity의 SRP(Scriptable Render Pipeline - 유저가 그래픽의 커스터마이징이 C# 레벨에서 가능한 파이프라인)중 하나이다. 유니티에서는 SRP로 URP와 HDRP 두 가지를 배포해놓았다. 

 

빌트인, URP와의 차이점이라면 그래픽의 구현을 실제 세상과 흡사하게 표현한다는것이다. 따라서 조명과 햇빛 같은 빛 표현과 그림자 등이 실제 수치를 기반으로 한다.

볼륨 프레임워크 & Scriptable Rendering Pipeline Asset

그러나 이러한 세팅값들이 씬에서 항상 일정할 수는 없다. 예를 들어 햇빛이 강하게 내리쬐는 야외와 은은한 조명만이 전체를 밝혀야하는 실내는 분명 다른 그래픽 세팅이 필요하다. 그리고 공간의 이동이 발생한다면 런타임 도중에 이러한 세팅값들을 동적으로 변경해주어야 한다. 이때 사용 가능한 것이 볼륨 프레임워크이다. 

볼륨 프레임워크는 글로벌 볼륨과 로컬 볼륨으로 나뉘게 되는데 자세한 정보는 아래에서 확인해보도록 하자.

 

또한 그래픽값이 해상도에 따라 변경될 필요도 있다. Window나 Xbox 같은 플랫폼에서는 하드웨어가 성능을 받쳐주는 이상 고해상도를 요구할 수 있다. 반면 모바일기기에서는 발열로 인한 쓰로틀링 등으로 성능만을 우선시할 수 없다. 

 

만약 하나의 게임에서 여러가지 플랫폼으로 출시를 한다면, 해상도 같은 퀄리티 설정을 구분 지어 놓을 필요가 있다. 혹은 게임 내에서 고품질에서 저품질로의 변경 같은 그래픽 설정을 할 때에도 마찬가지로 각각의 설정값들이 필요하다.

이때는 Scriptable Rendering Pipeline Asset을 통해 쉽게 제어를 할 수 있다.

 

여러개의 Scriptable Rendering Pipeline Asset을 만들어두고 필요시에 해당 값으로 변경하면 된다.

 

HDRP의 세팅을 자유롭게 하기 위한 설정값을 요약하면 다음과 같다.

프로젝트 전체 설정 Scriptable Rendering Pipeline Asset
씬 내부 라이팅 관련 설정 Volumes(HDRender Pipeline Global/Local Settings)

그래픽 설정

HDRP를 사용하기 위해서는 Project Settings에서 몇가지 그래픽 관련 설정을 해줘야 한다.

 

설정의 종류는 다음과 같다.

  • Graphics
  • HDRP Global Settings
  • Quality

 

1. Graphics (Project Settings - Graphics)

이 탭의 가장 큰 특징은 Scriptable Render Pipeline Settings항목이다. 

이 항목에 들어가는 HDRP Asset은 HDRP에 대한 설정을 갖고 있는 파일이다. 

HDRP에서는 몇 개의 HDRP 에셋을 미리 만들어두고 필요시에 변경할 수 있다.

예를 들면 Window용과 모바일용, XBox용을 그래픽을 따로 만들어 두어 빌드한다거나, 게임 내에서 프레임 관리를 위해 고해상도와 저해상도를 런타임 도중에 변경하도록 하는 것이다.

 

2. HDRP Global Settings (Project Settings - Graphics - HDRP Global Settings)

HDRP의 전역 볼륨 세팅에 관한 설정이다. 씬의 모든 곳에 할당되는 기본값이며 Volume Profiles와 Frame Settings의 체크박스를 통해 렌더링을 설정한다.

HDRP Global Settings 탭

이 기능은 Project Settings탭이 아닌 하이어라키에 GameObject의 컴포넌트로 추가하는 형태로도 설정할 수 있다.

컴포넌트의 설정값을 변경하면 Project Settings의 값도 자동으로 변경된다.

컴포넌트를 추가하여 수정이 가능하다.

 

3. Quality (Project Settings - Quality)

이 탭에서는 타겟 플랫폼별로 그래픽 품질 설정을 다르게 할 수 있다.

위에서 언급한 Scriptable Rendering Pipeline Asset을 플랫폼별로 다르게 설정할 수 있는 것이다.

Quality 설정


볼륨 프레임워크

볼륨은 왜 필요할까?

이 기능은 씬 내부에서 카메라의 위치에 따라 그래픽 설정을 다르게 하기 위함이다.

볼륨이라는 구간을 나누고, 그 구간에만 해당하는 그래픽 설정을 할 수 있다.

볼륨은 씬 전체를 관리하는 Global Volume과 일부 구간을 관리하는 Local Volume으로 나뉜다.

 

Global Volume

글로벌 볼륨은 씬의 경계 없이 포괄적으로 동작하는 Default값이다. 특별히 로컬 볼륨을 지정해두지 않으면 그래픽 설정은 글로벌 볼륨을 기준으로 동작한다.

 

Local Volume

특정 구간의 그래픽 설정을 다르게 할 수 있는 볼륨이다. 빈 GameObject에 Volume을 추가하는 형태로 생성할 수 있다.

로컬 볼륨은 특정 구간에 카메라가 진입하면 세팅을 바꾸는 형태이기 때문에 Collider 컴포넌트가 추가로 붙어있어야 한다. 

 

아래의 예시를 통해 직관적으로 이해할 수 있다.

로컬 볼륨 진입 마다 스카이 박스가 변경

 

아래의 표는 카메라의 진입 영역에 따른 Sky type변화를 보여준다.

Global 볼륨 - Gradient sky Local 볼륨 1 - HDRI sky Local 볼륨 2 - Physically based sky

평면 위에 두 개의 로컬 볼륨이 있고 각 볼륨은 박스 형태의 콜라이더가 붙어있다.

 

첫 번째 사진의 경우 어느 로컬 볼륨에도 진입하지 않은 경우이다. 이때는 Global Volume값이 기본값이 되어 해당 설정값들을 따른다. 위 사진의 경우 Gradient sky가 글로벌 볼륨의 기본 Sky값이기 때문에 해당 값으로 나타내어졌다. 

 

두 번째 사진은 첫번째 사진에서 오른편에 위치한 박스 내부로 카메라가 진입한 경우이다. 이 볼륨은 로컬볼륨이며 HDRI Sky를 Sky type으로 지정했기 때문에 첫번째 사진과 다르게 하늘을 렌더링하고 있다.

 

마지막 사진은 첫번째 사진의 왼편에 위치한 박스이며 두번째 사진과 마찬가지로 초록색 콜라이더를 가진 로컬 볼륨이다. 이 볼륨에서는 Sky type이 Physically based sky이기 때문에 콜라이더에 진입하는 순간 씬의 하늘이 위의 사진처럼 변경된다.

 

이렇게 로컬 볼륨에서 그래픽 세팅을 하려면 볼륨 오버라이드를 해야만 한다.

 

볼륨 오버라이드란?

C# 문법에서의 오버라이드와 같은 의미이다. 부모 클래스가 가진 특징을 그대로 가져와서 자식 클래스가 수정해서 쓰는 형태를 가진다.

 

어떻게 사용할까?

로컬 볼륨 오브젝트의 추가된 Volume컴포넌트에 Add Override를 클릭하여 프로파일 설정을 하면 된다.

 

볼륨 블렌딩

한 씬에 여러 개의 볼륨이 들어가는 경우 볼륨 간의 이동을 좀 더 자연스럽게 할 때 필요한 기능이다.

 

 

Blend Distance를 조절하면 두 볼륨 간에 자연스러운 전환이 가능해진다.

 

반응형