Let's Girin!

[Unity] Universal Render Pipeline(URP) 본문

Unity

[Unity] Universal Render Pipeline(URP)

window= 2025. 1. 6. 21:19

1. SRP(Scriptable Render Pipeline)

렌더링 API커스터마이징하여 나만의 렌더링을 만들 수 있는 렌더 파이프라인으로, 사용자가 필요한 기능에 맞춰 렌더링을 확장하고 지정할 수 있다. HDRP(High Definition Render Pipeline, 고해상도 렌더 파이프라인), URP 등은 SRP 기반의 렌더 파이프라인이며 오픈소스로 되어있다. 

 

2. URP(Universal Render Pipeline)

빌트인 렌더 파이프라인(레거시 렌더 파이프라인)에 비해 다양한 성능적 이점을 지니고 있으며 스크립트로 제어가 가능한 구조이다. 기존 렌더링보다 성능 대비 고품질 그래픽을 표현할 수 있으며, 많은 플랫폼 사용의 호환성과 확장성을 지니고 있다.

 

3. Command Buffer

다음 그림은 Draw Call 발생과 함께 Command Buffer를 통해 GPU에게 전달되면서 오브젝트를 그리기까지의 과정을 나타낸 것이다.  

 

CPU  -> [command],[command],[command],[command],[command],[command],[command],[command]..... -> GPU

 

레거시 렌더링은 오브젝트 하나당 블렌딩 설정, Z-Test 설정, 메쉬 설정, 텍스쳐 설정, 셰이더 설정.. 등을 거친 후 라이트를 적용해 그림을 그린다. 이 모든 과정이 끝나면 오브젝트를 그리고, 여러 가지 렌더 상태를 변경하는 과정을 거친다. 

* 유니티의 프레임 디버거(Frame Debugger)를 통해 순서를 확인할 수 있다.

 

▷ Set Pass Call

GPU의 렌더링 상태를 변경하는 과정을 정의하며, 텍스쳐, 셰이더, 조명 등... 렌더링 상태가 변경될 때 발생한다. 

 


3.1 Draw Call(드로우콜)

드로우콜은 GPU가 화면에 오브젝트를 그리기 위해  CPU로부터 명령을 받는 과정이다. CPU는 데이터(mesh, texture, shader..)를 준비하여  GPU에게 전달한다.각 드로우콜에는 렌더링 상태를 설정하는 오버헤드가 포함되어 있어, 드로우콜이 많아지면 CPU가 병목현상을 겪을 가능성이 높아진다.

 

3.2 Batch(배치)

배치는 여러 오브젝트를 하나의 드로우콜로 묶어 GPU에게 전달하는 과정으로, 배칭은 CPU와 GPU 간 통신을 최소화하여 렌더링 성능을  향상시키는 데 중요한 역할을 하는 최적화 기법이다. 

 

3.2 Draw Call 최적화 방법

1) Static Batching

정적인 오브젝트를 미리 병합하여 하나의 mesh로 묶는 방식이다.

- 오브젝트가 움직이지 않아야 함 + 동일 material을 사용해야 함.

- ex) 건물, 지형..

2) Dynamic Batching

작고 동적인 오브젝트를 렌더링할 때  mesh 데이터를 병합하는 방식이다.- 각 메시의 vertext 수가 300개 이하여야 함 + 동일 material을 공유해야 함.- 캐릭터, 작은 환경 오브젝트..

3) GPU Instancing

동일한  mesh와 material을 사용하는 여러 오브젝트를 GPU가 한번에 처리하도록 하는 기술이다.- 동일 mesh와 shader를 사용해야 함 + shader가  GPU Instancing을 지원해야 함.- ex) 나무, 풀..

4) SRP Batching

- SRP(Scriptable Render Pipeline)에서 지원하는 GPU 중심의 배칭 기법이다. 

- URP(Universal Render Pipeline) 또는 HDRP(High Definition Render Pipeline)을 사용해야 함 + SRP Batcher 활성화.

- 정적 및 동적 오브젝트 모두 지원.

 


 

커맨드 버퍼에서 드로우콜 자체의 부하는 적은 편이지만, 모두 다른 material을 사용한다면 Set Pass Call이 많이 발생하게 되어 이 부분에서 큰 부하를 발생하게 된다. 기존 레거시 렌더링의 경우 material을 기준으로 최적화를 했다면, SRP Batcher(URP, HDRP)에서는 shader를 기준으로 최적화를 하고 있다.  SRP Batcher는 여러 material이 공통된 shader 파라미터를 사용하고 있다면 이들 묶음을 배치로 묶어 배치 커맨드를 최소화한다. 기존 렌더링에서는 같은 shader였어도 내부 파라미터가 다르면 배치를 묶지 않았지만, SRP Batcher에서는 동일한 shader를 사용하지만 단순한 파라미터 차이만 있을 경우(color..) 하나의 배치로 취급한다.

 

4. Render Pipeline

URP의 렌더 파이프라인은 게임 엔진의 내부에 존재하던 렌더파이프를 밖으로 꺼냈다. 

사용자는 후킹(Hook)으로 처리하던 게임 로직과 렌더파이프 처리를 이벤트로 처리할 수 있게 되었으며,

직접 제어가 불가능하던 Render Context를 직접 작성해서 제어할 수 있다. 

*후킹: 코드나 기능의 흐름을 가로채거나 연결하여  기존의 동작을 확장하거나  수정하는 기법.

 

4.1 Render Context

렌더링 파이프라인과 GPU 간의 데이터 흐름을 관리하는 객체로, GPU에 렌더링 명령을 전달하는 통로 역할을 한다.

Render Context를 통해 렌더링 작업을 제어하고 GPU 명령을 생성한다.  

사용자는 렌더링 파이프라인을 세부적으로 커스터마이징할 수 있으며, 최적화와 고급 그래픽 효과를 구현할 수 있다. 

 

 

4.2 데이터 흐름

애플리케이션 계층 엔진 계층 렌더링 계층 하드웨어 계층
Game Logic SRP & Render Context Command Buffer GPU & Graphics API
Rendering 요청 ScriptableRenderContext Draw Calls Frame Buffer