유니티의 렌더 파이프라인
LWRP, URP
렌더링 파이프라인은 3D 데이터들이 2D 이미지로 구성되어 그려지는 일련의 과정을 뜻한다.
◎ 렌더링 파이프라인
렌더링 파이프라인에서 데이터를 처리하는 과정을 간략하게 나눠 보자면 다음과 같다.
실제 파이프라인은 더 많은 과정을 거치고 플랫폼마다 다를 수 있지만 공통적이고 핵심적인 과정만 뽑자면 이 세 단계를 거치게 된다.
⊙애플리케이션 스테이지
애플리케이션 스테이지는 애플리케이션 상에서 처리되는 단계를 의미한다.
그래픽스 렌더링 파이프라인은 보통 GPU 파이프라인을 의미하므로 CPU에서 연산되는 애플리케이션 스테이지는 포함되지 않지만 본격적인 렌더링 파이프라인 진입 전 CPU에서 필요한 연산들을 처리해야 하므로 큰 의미로는 렌더링 파이프라인의 일부분이 된다.
ex) 플레이어의 매 프레임마다의 움직임, 애니메이션 정보와 뼈대 위치 연산 및 메시의 버텍스에 반영 등
현재 프레임에서 렌더링 가능한 오브젝트들이 컬링 연산에 의해 구별된다.
이 컬링 단계에서 효율적으로 오브젝트들이 선별되어 렌더링 되는 오브젝트 수를 줄이면 그만큼 GPU에서 처리하는 연산량이 줄게 된다.
또한 배칭처리를 위한 연산도 GPU 파이프라인에 진입하기 전에 이루어진다.
⊙지오메트리 스테이지
이 스테이지에서는 말 그대로 지오메트리 관련 정보, 즉 지오메트리를 구성하는 요소인 버텍스와 폴리곤 처리를 담당하며 아래와 같은 과정들을 거친다.
1. 월드-뷰-프로젝션 트랜스폼
2. 클리핑
3. 버텍스 쉐이더
버텍스 트랜스폼(Vertex Transform)?
렌더링을 수행해야 되는 시점에 GPU가 메모리로부터 버텍스 정보를 가져와 적절한 위치에 그려주기 위해서 수행하는 트랜스폼이다.
⊙래스터라이저 스테이지
이 스테이지에서는 오브젝트를 그리는 픽셀들을 추리고 그 픽셀의 색을 결정한다.
버텍스 쉐이더를 거쳐서 지오메트리들이 구축되면, 화면(혹은 버퍼)의 어느 픽셀에 그려져야 하는지 결정된다.
메시의 폴리곤에 속한 영역을 픽셀로 매칭시키는 과정을 래스터라이제이션이라고 부른다.
레스터라이제이션이 끝나면 최종적으로 화면에 그려져야 할 픽셀의 최종 색이 결정된다.
즉, 해당 스테이지에서는 렌더링하는 메시가 화면에 매칭되는 픽셀을 결정하고 최종 색을 입히는 과정이다.
뎁스 버퍼, Z-버퍼를 이용해 깊이 판정을 하고 블렌딩을 통해 최종 출력 색상을 결정한다.
블렌딩?
투명도를 가지는 오브젝트는 픽셀 렌더링 시 알파 블렌딩 과정을 거친다.
알파 블렌딩은 쉐이더에서 결정되는 알파값을 이용한다. 픽셀 출력의 알파값을 이용해서 해당 픽셀 위치의 컬러 버퍼의 기존 값과 적절하게 혼합해 최종 출력 색상을 결정한다.
◎ 유니티가 제공하는 파이프라인
유니티는 2018년부터 유니티의 렌더링 처리 방식을 C# 스크립트로 제어할 수 있는 기능인 SRP(Scriptable Render Pipeline) 기능을 제공했다.
이를 통해 전반적인 렌더링 루프를 직접 구성할 수 있으며 직접 렌더링 루프를 커스터마이징해 원하는 방식으로 렌더링을 구성할 수 있게 되었다.
또한 SRP의 등장과 함께 유니티에 기본적으로 구현되어 있는 기본 렌더링 파이프라인을 빌트인(내장) 파이프라인이라고 부르게 되었다.
1. HDRP (High Definition Render Pipeline)
하이엔드나 PC 콘솔 등을 고려해서 고품질의 비주얼 구현에 적합한 파이프라인이다.
포워드 렌더링, 디퍼드 렌더링을 모두 지원하며 컴퓨터 쉐이더 기술과 GPU 하드웨어를 사용한다.
하지만 기본적으로 요구되는 하드웨어 스펙이 높아서 모바일 게임용으로는 적합하지 않다.
2. URP (Universal Render Pipeline)
Unity 2019.3 버전부터 LWRP(Lightweight Render Pipeline)이 유니버설 렌더 파이프라인으로 변경되었다.
LWRP는 모든 모바일 디바이스에서 고품질 그래픽스를 구현하는 빠르고 확장 가능한 파이프라인이다.
URP는 기본 빌트인 렌더 파이프라인보다 유연하고 확장성이 좋으며 다양한 플랫폼에 최적화된 그래픽을 제공한다.
싱글 패스 포워드 렌더링과 셰이더 그래프, VFX 그래프를 지원한다.
https://blog.unity.com/kr/technology/how-the-lightweight-render-pipeline-is-evolving
참고 자료;
유니티 그래픽스 최적화 스타트업 (저; 오지현(오즈라엘), 출판사; 비엘북스, 감수; 정종필)
'Engine > UNITY' 카테고리의 다른 글
[유니티 그래픽스 최적화 스타트업] 렌더링 파이프라인 (0) | 2021.09.13 |
---|---|
[Unity] 애니메이션 2 <스테이트 머신> (0) | 2021.09.07 |
[Unity] 애니메이션 1 <애니메이터 컨트롤러> (0) | 2021.04.25 |
[Unity] Timer 만들기 (2) - 버튼 이미지 (0) | 2021.03.14 |
[Unity] Timer 만들기 (1) - Text로 시간 표현 / Button (0) | 2020.07.02 |