✍️ 개요
UPR(Universal Renderer Pipeline)은 현재 Unity에서 기본적으로 사용하는 렌더 파이프라인입니다. 최근에는 뛰어난 성능과 최적화로 모바일과 VR 플랫폼에서도 많이 사용하고 있습니다. 오늘은 URP의 개념과 동작 원리, 성능과 관련하여 내용을 정리하도록 하겠습니다.
📌 Unity Render Pipeline 의 역사
렌더 파이프라인(RP): 모델(데이터)를 화면에 출력하는 일련의 과정
과거 Unity는 Built-in이라는 RP를 사용했습니다.
하지만 Built-in RP는 한계가 명확했습니다.
첫번째 한계는 ① 최적화 기술 및 설계 부족 입니다.
위 사진처럼 광원(L)과 광원에 영향을 받는 오브젝트(N)이 있다면, 드로우콜(Draw Call)이 L * M이 발생합니다.
정리하면, Built-in은 L개의 광원에 대해 N개의 Pass를 거친다고 볼 수 있습니다.
그 외에도 GPU를 효율적으로 활용하지 못하거나, 병럴 처리를 미지원하는 등 기술이 부족했습니다.
두번째 한계는 ② 고정된 파이프라인 구조로 인한 제한된 확장성입니다.
개발자가 커스텀으로 RP을 수정할 수 없어 플랫폼에 맞게 최적화를 할 수 없는 불편함이 있었습니다.
물론 Command Buffer와 Callback으로 간접적으로 수정이 가능했지만 한계가 있습니다.
그래서 등장한 것이 SRP입니다.
SRP (Scriptable RP): 스크립팅이 가능한 RP로, 개발자가 렌더링 과정을 설계할 수 있는 RP입니다.
C#으로 직접 RP를 코딩할 수 있습니다.
하지만 많은 인력과 시간, 돈이 필요합니다.
그래서 Unity에서는 SRP의 템플릿인 LWRP와 HDRP을 제작하였습니다.
LWRP: Light Weight RP (경량 렌더 파이프라인, URP 옛이름)
HERP: High-Definition RP (고해상도 렌더 파이프라인)
LWRP는 모바일과 PC, HDRP는 고사양 PC 또는 콘솔에서 주로 사용합니다.
(그 외에는 개발자가 직접 Custom RP를 제작할 수도 있습니다)
2019년, Unity는 2019.3 버전에서 LWRP를 URP(Universal Render Pipeline)로 개명하였습니다.
※ TMI. LWRP라는 이름이 싸구려 느낌이 나서 개명했다는 소문이 들림
이후 URP는 계속 발전하면서, 더 이상 Built-in RP은 업데이트되지 않고 있습니다.
그래서 현재는 URP가 주력 렌더 파이프라인으로 자리를 잡고 있습니다.
📌 URP 장점
URP(Universal Render Pipeline)은 기존 렌더 파이프라인(Built-in) 방식에 비해 많은 장점을 가지고 있습니다.
첫번째로, ① 비약적인 성능 향상이 있습니다.
Built-in 방식은 L 개의 광원에 대해 N 개의 Pass를 거쳤다면,
URP 방식은 L 개의 광원에 대해 단 하나의 Pass를 거칩니다.
즉, URP는 다수의 광원에 대해 단일 Pass로 렌더링을 처리하기에 훨씬 성능이 좋아졌습니다.
그 외에도 SRP Batcher, 포스트 프로세싱, 업스케일 샘플링 등이 있는데 추후에 자세히 다루도록 하겠습니다.
두번째로, ② 쉐이더 그래프 기능 추가가 있습니다.
Built-in에서는 HLSL로 쉐이더를 코딩했지만, UPR에서는 비주얼 스크립팅으로 쉽게 쉐이더를 제작합니다.
세번째로, ③ 지속적인 업데이트(Built-in은 지원 종료)로 최신 기능이 탑재되고 있으며,
유니티에서도 공식 문서와 튜토리얼을 많이 제공하고 있어 학습하기 좋습니다.
📝 정리
URP에 대해 모두 설명하려면 너무 길어질 것 같아 오늘은 간단히 소개하고 마치도록 하겠습니다. Unity의 렌더 파이프라인의 역사와 URP의 등장, 장점에 정리해봤으며, 다음 포스트에서는 URP와 관련한 그래픽스 기술과 이론에 대해 정리해보도록 하겠습니다.
💡 참고 자료
[Unity URP에 대한 설명 영상]
'유니티(Unity) > 이론 정리' 카테고리의 다른 글
[Unity] 카메라와 컬링 (0) | 2024.12.13 |
---|---|
[Unity] Model이 렌더링(Rendering)되는 과정 (1편) (0) | 2024.11.21 |
[Unity] 직렬화(Serialization)란 무엇인가? (1) | 2024.11.19 |
[Unity] Mono & IL2CPP 컴파일 방식의 차이 (0) | 2024.11.18 |
[Unity] .NET이란? (4) | 2024.11.17 |